django+nginx+gunicorn+pipenv微信小程序实践笔记

一、我采用pipenv来管理虚拟环境,在本地新建虚拟环境:

mkdir wxProject

#进入环境目录,创建虚拟环境

pipenv install

#激活虚拟环境

pipenv shell

#然后可以安装必须的工具

pipenv install django,django-simple-serializer(一个Model的序列化工具),requests,gunicorn  (WSGI服务器)

#创建django项目

django-admin startproject wxMINI

#进入项目根目录并使用管理工具manage.py创建django应用

python manage.py startapp wxAPP

#然后就可以用IDE工具开发项目

遇到的问题:

1、BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

BASE_DIR是项目的根目录,在其它地方使用是os.path.join(BASE_DIR,'media/photo/')这样的路径拼接中,后面的'media/photo/'前面不应该做“/”,

#这种写法会路径错误

os.path.join(BASE_DIR,'/media/photo/')

2、STATIC_ROOT是必须的,在部署时收集静态文件python manage.py collectstatic会根据该设置项进行自动处理(比如ADMIN用到的CSS,JS文件)

STATIC_URL是网络访问引用名,因为在实际的接口或程序中生成静态文件的相对路径,然后根据该引用名进行访问。

3、gunicorn启动服务:gunicorn -w 2 -b 127.0.0.1:8080 wxMINI:wsgi:application

-w:启动进程数

-b:绑定本地端口

wxMINI:项目目录下同名文件夹(项目配置文件目录)

wsgi:固定的文件名,django创建项目时自动创建的

application:固定名称,django自动创建的wsgi中的服务应用入口

4、nginx

server {
charset utf-8;
listen 80;
server_name elle.meme-info.com;
access_log /www/wwwroot/wxMini/MiniX/logs/nginx.access.log;
error_log /www/wwwroot/wxMini/MiniX/logs/nginx.error.log;

location /static {
alias /www/wwwroot/wxMini/MiniX/static;
}

location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}

5、微信小程序接口统一使用https,阿里云可开通免费SSL认证证书,同时开通CDN,解析域名设置回源路径等。

 6、进程管理supervisor

yum install supervisor

默认配置文件为/etc/supervisor.conf,它包含了默认配置项,具体项目的配置在/etc/supervisor.d/*.ini。可以根据项目或进程来新建配置文件,以项目或进程命名独立分开

[program:myapp] command=/home/root/myproject/.venv/bin/gunicorn -w4 -b0.0.0.0:2170 myapp:app ;supervisor启动命令

directory=/home/root/myproject ; 项目的文件夹路径

startsecs=0 ; 启动时间

stopwaitsecs=0 ; 终止等待时间

autostart=false ; 是否自动启动

autorestart=false ; 是否自动重启

redirect_stderr=true  ; 把 stderr 重定向到 stdout,默认 false

stdout_logfile=/home/root/myproject/log/gunicorn.log ; log 日志

stderr_logfile=/home/root/myproject/log/gunicorn.err ; 错误日志

#日常管理

supervisorctl status       # 查询进程状态

supervisorctl stop node       # 关闭 [program:node] 的进程
supervisorctl start node      # 启动 [program:node] 的进程
supervisorctl restart node     # 重启 [program:node] 的进程
supervisorctl stop all        # 关闭所有进程
supervisorctl start all       # 启动所有进程
supervisorctl reload       # 重新读取配置文件,读取有更新(增加)的配置文件,不会启动新添加的程序
supervisorctl update       # 重启配置文件修改过的程序
原文地址:https://www.cnblogs.com/ameile/p/10101192.html