django-uwsgi-vue部署记录

focus

部署文档

1.目录规划:

/home/useradmin/
                ├── applications  ---应用代码部署目录
                │   ├── DEV  ---开发环境
                │   └── STG   ---测试环境
                ├── applogs  --日志文件目录
                │   ├── DEV ---开发环境
                │   └── STG   ---测试环境
                ├── appvenv ---python环境目录
                │   ├── DEV ---开发环境
                │   └── STG   ---测试环境
                ├── installpackage ---下载包或者安装包文件
                ├── scripts   ---启动脚本或者自动更新脚本
                └── tmp  --临时文件

端口规划:
开发环境 DEV 38000
测试环境 STG 38001
2.部署前的准备:

工程使用环境变量VIRTUAL_ENV来识别当前的环境是在local, dev, stg还是prd下, 然后根据所处的环境自动使用不同的配置文件启动(见conf/settings/__init\__.py).
所以,

  1. 要使用虚拟环境启动工程, 并且, 虚拟环境所处的位置如上图所示(如果不使用虚拟环境启动, 要创建/home/useradmin/applogs/{DEV,STG,PRD}/目录, 且手动配置VIRTUAL_ENV环境为/home/useradmin/appvenv/{DEV,STG,PRD}/venv
  2. 工程使用/home/useradmin/applogs/{DEV,STG,PRD}来存储相关日志, 部署时确保目录权限
  3. 解释器版本: 3.6.5(3.6.x应该都没啥问题)

2.工程部署:

部署结构: nginx托管所有静态文件 + uwsgi托管后端工程

其中所有静态文件包含两部分:后端框架所需要的基本静态文件和前端工程

  1. 配置pip源

    vim ~/.pip/pip.conf

    [global]
    timeout = 6000
    index-url = { 内网pip源 }
  2. 进入当前环境的python虚拟环境
  3. cd到工程目录, 安装工程依赖,确保当前处于虚拟环境,否则依赖会被安装到全局环境:

    pip3 install -r requirements.txt
  4. 数据库初始化:

    python manage.py migrate

    如果提示db error, 参考工程conf/settings下对应环境的配置文件中的DB配置确认数据库配置是否正确

  5. 安装uwsgi

    pip3 install uwsgi

    如果提示编译中断: plugins/python/uwsgi_python.h:2:20: 致命错误:Python.h:没有那个文件或目录, 那么deactivate, 回到全局环境sudo yum install python3-devel.x86_64然后, 再回到虚拟环境下 pip3 install uwsgi

  6. 需要的日志文件

    nginx的日志默认位置:
    /var/log/nginx/access.log和error.log
    
    uwsgi的日志在工程的uwsgi.ini中指定: 
    # /var/log/uwsgi/uwsgi-deam.log
    /home/useradmin/applogs/DEV/uwsgi-deam.log
    
    django的日志在工程的conf下对应环境的配置文件指定:
    /home/useradmin/applogs/DEV/djnago-req.log
    /home/useradmin/applogs/DEV/djnago-db.log
  7. 使用uwsgi启动工程,cd到工程目录下, 为uwsgi指定环境启动

    uwsgi --ini uwsgi.ini:DEV
    uwsgi --ini uwsgi.ini:STG
    uwsgi --ini uwsgi.ini:PRD

    可能会遇到日志文件读写权限问题,需要把对应文件配给uwsgi中指定的用户useradmin,

    chown useradmin:useradmin xx.log  # 有时父级文件也需要
  8. 配置nginx

    nginx主要配置与uwsgi的对接,和工程静态文件的托管

    先把静态文件收集指定的静态根目录,到工程目录下

    python manager.py collectstatic

    然后编辑nginx.conf, 由于前端默认使用前端所在的ip和port来请求后端资源, 导致前后端使用同一个nginx.conf的server(使用同一个server的另一个原因是避免跨域问题), 所以:

    1. 前后端资源需要在URL上进行区分(后端使用/api来标记后端资源)
    2. 从/static/路径下过滤出后端框架使用的静态文件rest_framewor和admin
 server {
     listen       38000 default_server;
     # listen       [::]:80 default_server;
     server_name  _;
     root  /home/useradmin/applications/DEV/pauth_web/dist/;   # 前端工程目录

     # Load configuration files for the default server block.
     include /etc/nginx/default.d/*.conf;

     location /api/ {                                          # 后端api根目录
        include uwsgi_params;
        # uwsgi_pass unix:///run/DEV/pauth.sock;               # 弃用
        uwsgi_pass unix:///home/useradmin/applications/DEV/run/pauth.sock
     }

     location /static/rest_framework/ {                        # 后端Browseable API需要的静态文件
       alias /home/useradmin/applications/DEV/static/rest_framework/;
     }

     location /static/admin/ {                                 # 后端admin需要的静态文件
       alias /home/useradmin/applications/DEV/static/admin/;
     }

     error_page 404 /404.html;
         location = /40x.html {
     }

     error_page 500 502 503 504 /50x.html;
         location = /50x.html {
     }
 }
阅读 212

我一寸一寸地征服了与生俱来的精神领域, 我一点一点地开垦着将我困住的沼泽

0 声望
1 粉丝
0 条评论
你知道吗?

我一寸一寸地征服了与生俱来的精神领域, 我一点一点地开垦着将我困住的沼泽

0 声望
1 粉丝
宣传栏