欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

ubuntu django+uwsgi+nginx服务器部署

程序员文章站 2022-05-09 13:26:30
...

django配置

  • 项目settings中要修改以下内容:
DEBUG = False  # 上线必须是False,此时静态文件全部失效
ALLOWED_HOSTS = ['*']  # 允许任意ip访问
# 静态文件交给nginx处理,配置静态文件的路径
STATCI_ROOT = '/var/www/项目名/static'
STATIC_URL = '/static/'
# 静态文件的目录配置保留
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 在项目的根目录(和manage.py同级目录内),新建uwsgi.ini文件,具体内容如下:
[uwsgi]
# 使用nginx连接时使用
socket = 127.0.0.1:8080  
# 项目目录,服务器上的所在路径
chdir = /home/hy/Desktop/ganji_webserver
# 项目中wsgi.py文件的目录,相对于项目目录
wsgi-file = ganji_web/wsgi.py
processes = 4  # 四个工作进程
threads = 2  # 每个进程两个线程 
master = True  # 1个主进程
pidfile=uwsgi.pid  # 进程id存放文件
daemonize=uwsgi.log  # 进程守护日志
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

uwsgi的配置

  • 安装
    pip install uwsgi

  • 启动测试,要在uwsgi.ini所在的目录下运行
    uwsgi --ini uwsgi.ini
    然后通过ps aux|grep uwsgi 查看是否有进程,应当一共5个。

  • 访问127.0.0.1:8080
    有可能出现服务器错误的提示,是因为如果使用的虚拟环境,wsgi找不到虚拟环境的路径,要单独配置。
    打开wsgi.py,在django.core.wsgi导入之前,将路径添加到sys.path中。注意找对自己的django所在位置
import sys

sys.path.append('~/.virtualenvs/ganji_web_dj/lib/python3.5/site-packages/django')
from django.core.wsgi import get_wsgi_application
  • 1
  • 2
  • 3
  • 4
  • 配置上述完成后,需要重启服务器
  • ps -e 查看进程对应的pid
    uwsgi --stop uwsgi.pid 关闭
    uwsgi --ini uwsgi.ini 启动

nginx

  • 官方下载,拷贝至服务器解压缩
  • ubuntu安装时如果提示 error: the HTTP rewrite module requires the PCRE library,需要安装需要安装 pcre 包。
sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev
# 你可能还需要安装
sudo apt-get install openssl libssl-dev
  • 1
  • 2
  • 3
  • 4
  • 进入解压的nginx目录内执行以下命令安装
./configure
make
sudo make install
  • 1
  • 2
  • 3
  • 默认安装到了/usr/local/nginx目录
  • 进入上述目录启动:sudo sbin/nginx默认80端口
  • 打开浏览器,输入地址127.0.0.1/访问看到nginx的欢迎页面
  • 修改配置文件nginx/conf/nginx.conf
    在server节点下添加新的location,指向uwsgi的ip和端口
# 将原有的location / 注释掉
location / {
    # 将所有的参数转到uwsgi下
    include uwsgi_params;
    # uwsgi的ip和端口
    uwsgi_pass 127.0.0.1:8080;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 静态文件处理。所有的静态文件交由nginx处理,不会将请求转到uwsgi
    还是上边的nginx.conf文件,sudo vim conf/nginx.conf
location /static{
    alias /var/www/项目名/static;
}
  • 1
  • 2
  • 3
  • 在服务器创建以上的项目目录
    `sudo mkdir -vp /var/www/项目名/static
  • 修改目录权限
    sudo chmod 777 /var/www/项目名/static
  • 收集所有静态文件到static_root 指定目录
    python manage.py collectstatic
    查看 ‘/var/www/项目名/static’ 下已经保存的静态文件是否完整
  • 重启nginx
sudo sbin/nginx -s stop  # 关闭
sudo sbin/nginx  # 启动
  • 1
  • 2
  • 以上针对非root用户情况的设置

配置多个web应用

  • 修改nginx.conf文件,直接添加多个server,以不同的端口对应不同的web服务,每个server中的uwsgi对应不同的端口
  • 每个项目中的uwsgi.ini文件设置不同的端口号,同一个ip地址,启动了多个uwsgi服务进程(还有只启动一个进程,运行多个web应用的方法)

静态文件处理

  • static_root 的设置是为了在运行collectstatic时,知道将静态文件收集到何处
  • 如果直接在服务器上执行git pull 更新代码,静态文件直接使用python manage.py collectstatic即可,将静态文件更新至对应目录,浏览器访问时,所有静态文件都可获取到

指定nginx的配置文件

  • 如果需要为某个应用单独创建一个配置文件,在/user/local/nginx/conf内单独创建一个文件夹vhost,在其内创建单位的conf文件,如:mao.conf,其中单独写server,如下所示:
server {

        listen 8002;
        server_name 192.168.5.199;
    location /static {
        autoindex on;
        alias /data/tdsd/static/;

}
        location / {
                uwsgi_send_timeout 300;
                uwsgi_connect_timeout 300;
                uwsgi_read_timeout 1800;
                proxy_pass http://127.0.0.1:8101;
                proxy_set_header Host $http_host;
                proxy_set_header X-Real-IP $remote_addr;
                proxy_set_header X-Forwarded-For $remote_addr;
                proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                proxy_read_timeout 35s;
                include uwsgi_params;
                access_log /var/logs/tdsd_server.log;

        }

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 然后在/user/local/nginx/conf内的nginx.conf中的http**最后一行**加上需要的配置的路径:include /usr/local/nginx/conf/v_host/*.conf;

root用户

  • 此时,需要有python和对应python版本的uwsgi存在,很可能会出现找不到python解释器的情况
  • 安装uwsgi时,注意使用pip3,否则安装的是对应python2版本的
  • uwsgi --python-version查看python版本