zoukankan      html  css  js  c++  java
  • 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       # 重启配置文件修改过的程序
  • 相关阅读:
    《牛客IOI周赛17提高组A》
    《Codeforces Round #645 (Div. 2)》
    《AtCoder Beginner Contest 168 E》思路详解
    《东华大学2020年程序设计竞赛题解》
    《牛客直播课习题1》
    《Codeforces Round #643 (Div. 2)》
    《TOJ5945》区间覆盖问题。
    解决方案、项目、程序集、命名空间
    SQL存储过程前面后面的几句代码是什么意思?
    无法将类型为“IList”的对象强制转换为类型“System.Data.DataRowView” 。的解决方法
  • 原文地址:https://www.cnblogs.com/ameile/p/10101192.html
Copyright © 2011-2022 走看看