/home/useradmin/ ├── applications ---应用代码部署目录 │ ├── DEV ---开发环境 │ └── STG ---测试环境 ├── applogs --日志文件目录 │ ├── DEV ---开发环境 │ └── STG ---测试环境 ├── appvenv ---python环境目录 │ ├── DEV ---开发环境 │ └── STG ---测试环境 ├── installpackage ---下载包或者安装包文件 ├── scripts ---启动脚本或者自动更新脚本 └── tmp --临时文件 端口规划: 开发环境 DEV 38000 测试环境 STG 38001
工程使用环境变量VIRTUAL_ENV来识别当前的环境是在local, dev, stg仍是prd下, 而后根据所处的环境自动使用不一样的配置文件启动(见conf/settings/__init\__.py).
因此,html
2.工程部署:前端
部署结构: nginx托管全部静态文件 + uwsgi托管后端工程 python
其中全部静态文件包含两部分:后端框架所须要的基本静态文件和前端工程nginx
配置pip源web
vim ~/.pip/pip.conf
数据库
[global] timeout = 6000 index-url = { 内网pip源 }
cd到工程目录, 安装工程依赖,确保当前处于虚拟环境,不然依赖会被安装到全局环境:django
pip3 install -r requirements.txt
数据库初始化:vim
python manage.py migrate
若是提示db error, 参考工程conf/settings下对应环境的配置文件中的DB配置确认数据库配置是否正确后端
安装uwsgiapi
pip3 install uwsgi
若是提示编译中断: plugins/python/uwsgi_python.h:2:20: 致命错误:Python.h:没有那个文件或目录, 那么deactivate, 回到全局环境sudo yum install python3-devel.x86_64而后, 再回到虚拟环境下 pip3 install uwsgi
须要的日志文件
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
使用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 # 有时父级文件也须要
配置nginx
nginx主要配置与uwsgi的对接,和工程静态文件的托管
先把静态文件收集指定的静态根目录,到工程目录下
python manager.py collectstatic
而后编辑nginx.conf, 因为前端默认使用前端所在的ip和port来请求后端资源, 致使先后端使用同一个nginx.conf的server(使用同一个server的另外一个缘由是避免跨域问题), 因此:
- 先后端资源须要在URL上进行区分(后端使用/api来标记后端资源)
- 从/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 { } }