在宝塔下使用uwsgi上线Django项目

部署准备

  1. 购买服务器和备案域名(这里以Cent OS 8.x为例)
  2. 在服务器上安装宝塔以及Nginx等必要软件
  3. 准备要上线的Django项目

添加站点

  1. 添加站点

    添加站点

  2. 上传项目

    上传项目-1
    上传项目-2

部署项目

  1. 安装你需要的Python和pip版本

    • 参考链接
  2. 修改 settings.py 文件

    1
    2
    3
    4
    # SECURITY WARNING: don't run with debug turned on in production!
    DEBUG = False

    ALLOWED_HOSTS = ['*']
  3. 放行相应端口

    • 放行你需要的端口,如:Django的8000端口、MySQL的3306端口、Redis的27017端口等

      放行端口

    • 放行完毕后可以在项目目录运行(需要提前安装所需依赖包) python manage.py runserver 0:8000 ,然后在本地使用ip:8000 来访问网站,如果可以访问,则端口开放正常,如果不能访问则需要去服务器服务商(如:腾讯、阿里、华为)后台检查防火墙或者安全组等配置

  4. 添加uwsgi.ini配置文件

    • 在项目目录项新建 uwsgi.ini 文件,并在其中写入以下内容

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      [uwsgi]
      socket=0.0.0.0:8000
      # http=0.0.0.0:8000
      chdir=/www/wwwroot/你的域名/你的项目/
      wsgi-file=shop/wsgi.py
      processes=4
      threads=2
      master=True
      pidfile=uwsgi.pid
      deamonize=uwsgi.log
    • 参数说明

      • socket:线上使用nginx连接时使用
      • http:直接作为web服务器使用
      • chdir:项目目录
      • wsgi-file:项目中wsgi.py文件的目录,相对于项目目录
      • processes:启用的进程数目
      • threads:启用的线程数目
      • master:是否启用一个管理者
      • pidfile:uwsgi运行后其pid的存储目录
      • deamonize:以守护进程运行时,日志存放的目录
  5. 添加uwsgi控制命令

    • 添加启动命令:项目目录下新建 start.sh 文件,并写入以下内容

      1
      uwsgi -d --ini uwsgi.ini
    • 添加停止命令:项目目录下新建 stop.sh 文件,并写入以下内容

      1
      uwsgi --stop uwsgi.pid
  6. 添加依赖文件

    • 项目目录下新建 requiremens.txt 文件,并写入项目运行中你需要的依赖,如:Django
    • 也可以在本地使用命令 pip freeze > requirements.txt 生成依赖文件
  7. 迁移静态文件

    • settings.py中做如下修改

      1
      2
      3
      4
      5
      6
      STATIC_URL = '/static/'
      # 添加STATIC_ROOT
      STATIC_ROOT = '/www/wwwroot/你的域名/static/'
      STATICFILES_DIRS = [
      os.path.join(BASE_DIR, 'static'),
      ]
    • 添加迁移命令脚本:项目目录中新建 collectstatic.sh,内容如下

      1
      python manage.py collectstatic
    • 更改脚本权限

      1
      chmod 777 collectstatic.sh
    • 生成迁移静态文件:项目目录中运行以下命令

      1
      ./collectstatic.sh
  8. 配置Nginx

    • 进入站点配置界面

      进入站点配置界面

    • 配置Nginx图示

      配置Nginx

    • 在最上边添加负载均衡模块

      1
      2
      3
      4
      5
      upstream project {
      server 10.11.0.1:8000 down;
      server 10.11.0.2:8000 backup;
      server 你服务器外网ip:8000 weight=1 max_fails=1 fail_timeout=300s;
      }
      • project:指定负载均衡器的名称,这个名称可以任意指定,在后面需要的地方直接调用即可
      • 负载均衡调度算法
        • weight:轮询
        • ip_hash
        • fair
        • url_hash
      • down:表示当前的server暂时不参与负载均衡
      • backup:预留的备份机器。当其他所有的非backup机器出现故障或者忙的时候,才会请求backup机器,因此这台机器的压力最轻
      • max_fails:允许请求失败的次数,默认为1。当超过最大次数时,返回proxy_next_upstream 模块定义的错误
      • fail_timeout:在经历了max_fails次失败后,暂停服务的时间。max_fails可以和fail_timeout一起使用
      • 注意:当负载调度算法为ip_hash时,后端服务器在负载均衡调度中的状态不能是weight和backup
      • 说明:nginx的worker_rlimit_nofile达到上限时,再有客户端链接报502错误。用了log_format指令设置了日志格式之后,需要用access_log指令指定日志文件的存放路径
    • 配置location

      1
      2
      3
      4
      5
      6
      7
      location / {
      # proxy_pass http://域名:8000;
      # proxy_set_header X-real-ip $remote_addr;
      # proxy_set_header Host $http_host;
      include uwsgi_params;
      uwsgi_pass project;
      }
      • project:跟上前指定的负载均衡器名称一致
    • 配置静态目录

      1
      2
      3
      4
      location /static {
      # 该目录为生成的静态文件目录
      alias /www/wwwroot/你的域名/static/;
      }
    • 注释宝塔Nginx配置

      注释宝塔Nginx配置

      注意:修改完记得保存

    • 重载Nginx配置

      重载Nginx配置

  9. 添加SSL

    添加SSL证书

  10. 启动项目

    • 安装依赖包

      1
      pip install -r requiremens.txt
    • 安装uwsgi

      1
      pip install uwsgi
    • 给启动和停止uwsgi文件添加权限

      1
      2
      chmod 777 start.sh
      chmod 777 stop.sh
    • 启动uwsgi

      1
      ./start.sh
    • 查看uwsgi是否启动

      1
      ps -aux | grep uwsgi
  11. 测试项目

    • 在本地访问你的域名即可