django部署到Ubuntu服务器

django部署到Ubuntu服务器

环境:

python  :3.6.5

django  : 1.11

mysql    :  Ver 14.14 Distrib 5.7.26, for Linux (x86_64) using  EditLine wrapper

Ubuntu  : 18.04.1 LTS

uwsgi  nginx 为下载默认版本

原文地址:  http://www.ofus.ink/articles/article/49/​​​​​​​

安装虚拟环境(可选)

请参考:http://www.ofus.ink/articles/article/9/

 

一:上传项目到服务器

 

# 上传之前检查静态文件存放位置的setting.py(可省略)
STATIC_ROOT=’ /home/works/mysite/static_file’

通过ftp等工具把项目上传到服务器上面。

xshell plus + Xftp 下载链接 : https://www.zzcjxy.com/detail/120.html

二.安装并配置数据库

请参考:第二次更新:Ubuntu安装、配置、远程连接MySql的正确方式: http://www.ofus.ink/articles/article/43/

请参考:Ubuntu下安装MySQL:http://www.ofus.ink/articles/article/6

 

三.安装python和所需库

安装python和项目所需要的依赖库。

安装python(一般默认安装):

sudo apt-get install python3

安装所需库

# 如有导出依赖库

pip install -r requ....t.txt


# 否则: 一个一个安装

pip install some-package

可借助清华源下载:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package

可参考:Ubuntu更新软件源 | pip安装临时使用国内源 --->  http://www.ofus.ink/articles/article/41/  

四.收集静态资源 和 同步数据库

收集静态资源

1.在项目的主目录中创建 static_file文件夹

2. 执行收集静态资源命令:

python manage.py collectstatic

收集静态资源默认到static_file 文件夹下

 

同步数据库

1.配置setting.py设置SQL连接信息

2.执行同步命令

python manage.py makemigrations
python manage.py migrate

基本准备工作基本弄完!


五.安装和配置UWSGI

在上面的准备工作做完后,我们来下载项目运行所依赖的uwsgi服务器。

pip3 install uwsgi

我们先来用uwsgi命令行方式启动一下我们的项目测试一下:

#cd 项目主目录下

 uwsgi --http=123.207.10.46:8000 --file=mysite/wsgi.py --static-map=/static=static_file

选项参数:

 --http:部署地址参数,指定项目访问地址,

 --http:192.168.1.100:8000

 --file:指定项目中实现 WSGI 协议的模块文件位置

 --static-map:指定项目中静态文件配置选项操作

这个时候我们应该就可以访问我们的项目了。但是这样命令行启动方式不是我们要的,我们不可能一直开着命令行窗口和每次手动启动、关闭。

来,我们来创建个配置文件初始化uwsgi服务器。

配置uwsgi部署启动项目:

切换到项目的根目录下(和setting.py同一文件夹下),创建uwsgi配置文件uwsgi.ini,配置参数如下:

步骤:

cd /home/mysite/mysite/
vim uwsgi.ini
# 指定 uwsgi 配置
[uwsgi]
# http 选项指定 ip 地址和端口
# http=192.168.10.125:8000
# 因后续nginx配置,需要更换为:
socket=127.0.0.1:8000

# 如果项目所用环境为虚拟环境, 需要指定虚拟环境位置
home = /root/.virtualenvs/fy1

# 指定项目的绝对路径
chdir=/home/mysite

# 指定 wsgi 文件
wsgi-file=mysite/wsgi.py 

# 指定启动的进程数据量 
processes=4 

# 每个进程需要的线程数 
threads=2

# 指定是否由主进程管理
master=true

# 指定存放进程编号的 id 文件
pidfile=uwsig.pid

# 指定进程停止时清楚垃圾数据
vacuum=true 

# 指定启用日志记录于守护进程 
daemonize=true

# 指定静态文件映射
# 因后续的nginx替代了静态文件的管理,这里的静态文件配置注释
# static-map=/static=static_file

开启uwsgi

uwsgi --ini uwsgi.ini

关闭uwsgi

uwsgi --stop uwsgi.pid

uswgi服务器配置可参考:Django部署:Uwsgi和Nginx配置和使用,服务器部署的相关错误 --> http://www.ofus.ink/articles/article/14/

 

六.安装nginx

Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。

安装:

sudo apt-get install nginx

配置nginx+uwsgi项目部署:

代理

正向代理:代理的是客户端,隐藏了具体访问客户端的信息。

反向代理:代理的是服务器,隐藏了具体提供服务器的信息。

当前配置中,安装 nginx 完成之后,进行反向代理的配置和静态文件服务器的配置如下: 修改/etc/nginx/nginx.conf 配置文件。

注意:配置项结束都要用分号结束。

 

http {
     .. 
     server {    # 配置一个虚拟服务器
         listen 80;    # 服务监听端口
         server_name  manbanzhen.top ; # 配置监听服务(你的域名或IP) 
 
     location / {  # 配置请求反向代理
         include uwsgi_params; # 指定代理数据类型
         uwsgi_pass 127.0.0.1:8000; # 指定代理 IP 和端口(刚才我们在uwsgi里的socket配置)
     }
     location /static { # 配置静态文件服务器
         alias /home/mysite/static_file;
     }
 } 
     .. 
}

配置完成之后,执行如下命令重新加载 nginx 配置项信息:

nginx –s reload

打开浏览器,访问 www.manbanzhen.top 或 manbanzhen.top ,即可直接访问到项目资源。

至此,uwsgi+nginx 生 产环境配置完成。

nginx服务器配置可参考:Django部署:Uwsgi和Nginx配置和使用,服务器部署的相关错误 --> http://www.ofus.ink/articles/article/14/

 

原文地址:  http://www.ofus.ink/articles/article/49/

【补充】

nginx常用命令:

nginx [options]
 -v   查看 nginx 版本
 -V   查看 nginx 版本及配置信息
 -t   测试服务器是否可以正常运行
 -T   测试配置选项运行服务器
 -c   指定配置文件启动服务器
 -s   发送一个选项信号执行操作

########################操作如下############################## 

nginx             启动服务器
nginx –s stop       停止服务器;不论是否有数据未完成,直接退出
nginx –s quit       停止服务器;如果数据处理未完成,等待完成退出
nginx –s reload      重新加载
nginx –s reopen      重启

 

nginx 常见配置 

Nginx 服务器使用 apt 安装之后配置文件在/etc/nginx/nginx.conf

 

# 运行用户 user nobody;
# 启动进程,通常设置成和 cpu 的数量相等
 worker_processes  1;
# 全局错误日志及 PID 文件
 # error_log               logs/error.log;
 # error_log               logs/error.log  notice;
 # error_log               logs/error.log  info; 
# pid                         logs/nginx.pid; 
 
#工作模式及连接数上限
 events {
     # epoll 是多路复用 IO(I/O Multiplexing)中的一种方式,
     # 仅用于 linux2.6 以上内核,可以大大提高 nginx 的性能
     Use  epoll; 
     # 单个后台 worker process 进程的最大并发链接数
     worker_connections  1024; 
     # 并发总数是 worker_processes 和 worker_connections 的乘积
     # 即 max_clients = worker_processes * worker_connections
     # 在设置了反向代理的情况下,max_clients = worker_processes * worker_connections / 4
     # 为什么上面反向代理要除以 4,应该说是一个经验值
     # 根据以上条件,正常情况下的 Nginx Server 可以应付的最大连接数为:4 * 8000 = 32000
     # worker_connections 值的设置跟物理内存大小有关
     # 因为并发受 IO 约束,max_clients 的值须小于系统可以打开的最大文件数
     # 而系统可以打开的最大文件数和内存大小成正比,一般 1GB 内存的机器上可以打开的文件数大 约是 10 万左右
     # 我们来看看 360M 内存的 VPS 可以打开的文件句柄数是多少:     # $ cat /proc/sys/fs/file-max
     # 输出 34336     # 32000 < 34336,即并发连接总数小于系统可以打开的文件句柄总数,这样就在操作系统可以承受 的范围之内 
     # 所以,worker_connections 的值需根据 worker_processes 进程数目和系统可以打开的最大文件 总数进行适当地进行设置
     # 使得并发总数小于操作系统可以打开的最大文件数目     # 其实质也就是根据主机的物理 CPU 和内存进行配置
     # 当然,理论上的并发总数可能会和实际有所偏差,因为主机还有其他的工作进程需要消耗系统资 源。
     # ulimit -SHn 65535
 } 
    http {
     # 设定 mime 类型,类型由 mime.type 文件定义
     include    mime.types;
     default_type  application/octet-stream;
     # 设定日志格式 
    log_format  main   '$remote_addr - $remote_user [$time_local] "$request" '
                                   '$status $body_bytes_sent "$http_referer" '
                                   '"$http_user_agent" "$http_x_forwarded_for"'; 
    access_log  logs/access.log  main; 
    # sendfile 指令指定 nginx 是否调用 sendfile 函数(zero copy 方式)来输出文件,
    # 对于普通应用,必须设为 on,
    # 如果用来进行下载等应用磁盘 IO 重负载应用,可设置为 off,
    # 以平衡磁盘与网络 I/O 处理速度,降低系统的 uptime. 
    sendfile     on; 
    # tcp_nopush     on;
    # 连接超时时间
    # keepalive_timeout  0;
     keepalive_timeout  65; 
    tcp_nodelay     on;
     # 开启 gzip 压缩
     gzip  on;
     gzip_disable "MSIE [1-6].";
     # 设定请求缓冲
     client_header_buffer_size    128k;
     large_client_header_buffers  4 128k;
     # 设定虚拟主机配置
     server {
         #侦听 80 端口
         listen    80; 
        #定义使用 www.nginx.cn 访问
        server_name  www.nginx.cn;
        #定义服务器的默认网站根目录位置
         root html; 
        #设定本虚拟主机的访问日志
         access_log  logs/nginx.access.log  main; 
        #默认请求 
        location / {
                 include uwsgi_params;
                uwsgi_connect_timeout 30;
                uwsgi_pass unix:/opt/uwsgi.sock
          } 
        # 定义错误提示页面
        error_page   500 502 503 504 /50x.html;
         location = /50x.html { 
        }         
     #静态文件,nginx 自己处理
      location ~ ^/(images|javascript|js|css|flash|media|static)/ {
             #过期 30 天,静态文件不怎么更新,过期可以设大一点,
             #如果频繁更新,则可以设置得小一点。
             expires 30d;
         } 
        #禁止访问 .htxxx 文件 
         location ~ /.ht {
             deny all;
         }
    } 
} 


如有哪里不明白,请下方评论区指出,本文将一步步完善。

 

原文地址: http://www.ofus.ink/articles/article/49/

你可能感兴趣的:(django部署到Ubuntu服务器)