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
# 重启配置文件修改过的程序
django+nginx+gunicorn+pipenv微信小程序实践笔记的更多相关文章
- 微信小程序练习笔记(更新中。。。)
微信小程序练习笔记 微信小程序的练习笔记,用来整理思路的,文档持续更新中... 案例一:实现行的删除和增加操作 test.js // 当我们在特定方法中创建对象或者定义变量给与初始值的时候,它是局部 ...
- 【微信小程序学习笔记】入门与了解
[微信小程序学习笔记(一)] IDE 下载安装 下载地址 官方工具:https://mp.weixin.qq.com/debug/w … tml?t=1476434678461 下载可执行文件后,可按 ...
- 微信小程序学习笔记二 数据绑定 + 事件绑定
微信小程序学习笔记二 1. 小程序特点概述 没有DOM 组件化开发: 具备特定功能效果的代码集合 体积小, 单个压缩包体积不能大于2M, 否则无法上线 小程序的四个重要的文件 *js *.wxml - ...
- 微信小程序学习笔记一 小程序介绍 & 前置知识
微信小程序学习笔记一 1. 什么是小程序? 2017年度百度百科十大热词之一 微信小程序, 简称小程序, 英文名 Mini Program, 是一种不需要下载安装即可使用的应用 ( 张小龙对其的定义是 ...
- Django基于JWT实现微信小程序的登录和鉴权
什么是JWT? JWT,全称Json Web Token,用于作为JSON对象在各方之间安全地传输信息.该信息可以被验证和信任,因为它是数字签名的. 与Session的区别 一.Session是在服务 ...
- 微信小程序实战笔记
前言: 微信小程序最近刚从鹅厂生产出来,我有幸参与了一次小程序的实战,有必要记录我的开发过程.看上去小程序很简单,但是在深入开发的时候才能具体体会里面的变化,接下来记录我的第一个微信小程序的点点滴滴! ...
- 微信小程序学习笔记(阶段一)
一阶段学习过程: (一)看官方文档的简易教程:https://mp.weixin.qq.com/debug/wxadoc/dev/ (二)看小码哥视频:https://chuanke.baidu.co ...
- 一个C#程序员学习微信小程序的笔记
客户端打开小程序的时候,就将代码包下载到本地进行解析,首先找到了根目录的 app.json ,知道了小程序的所有页面. 在这个Index页面就是我们的首页,客户端在启动的时候,将首页的代码装载进来,通 ...
- 微信小程序开发笔记
前言: 因为前段时间一直在做关于微信小程序方面的项目,作为一名后端的攻城狮而言做一些简单的前端页面数据操作和管理还是比较容易快上手的,当然前提是要理解微信小程序的基本语法和请求原理.该篇博客主要记录的 ...
随机推荐
- ORACLE 数据库管理
[故障处理]ORA-12162: TNS:net service name is incorrectly specified 本文将给大家阐述一个因未设置系统环境变量ORACLE_SID导致ORA-1 ...
- 工厂方法 Factory Method
背景:有一个应用框架,它可以向用户显示多个文档.在这个框架中,两个主要的抽象是类Application和Document.这两个类都是抽象的.客户必须通过它们的子类来做与举替应用相关的实现. 分析:因 ...
- redis 哈希(hash)函数
哈希(hash)函数 hSet 命令/方法/函数 Adds a value to the hash stored at key. If this value is already in the has ...
- Linux基础篇
Linux入门 2.1 Linux介绍 1)Linux是一款操作系统,特点:免费.开源.安全.高效.稳定.处理高并发非常强悍,半年至一年重启一次机即可,比Windows强悍,现在很多企业级项目都部署到 ...
- C++ STL标准容器插入删除算法的复杂度
1 vector内部实现: 数组 // 就是没有固定大小的数组,vector直接翻译是向量的意思支持操作:begin(), //取首个元素,返回一个iteratorend(), //取末尾(最后一个元 ...
- Java 新建excle文件并填充模版内容
Java 新建excle文件并填充模版内容 一.JAR import java.io.BufferedReader; import java.io.File; import java.io.FileI ...
- h5完美实现无刷新上传并附带上传效果
附带上传源码如下: <!DOCTYPE html> <html> <head> <title>测试上传功能</title> <meta ...
- CEF C++调用前端js方法展示传递过来的图片数据
转载:https://blog.csdn.net/lengyuezuixue/article/details/79769103 在项目开发过程中遇到一个需求,通过C++调用js方法传参给前端显示图片, ...
- 2018年-2019年第二学期第二周C#学习个人总结
在本学期的第二周,我们又开始了C#的学习.在星期一的C#课上时,我们学了this关键字的用法其中包括1.this访问属性2.this访问成员方法3.this访问构造方法.在this访问属性中通过thi ...
- python面试问题集锦
GIL(全局解释器锁) 描述Python GIL的概念, 以及它对python多线程的影响?编写一个多线程抓取网页的程序,并阐明多线程抓取程序是否可比单线程性能有提升,并解释原因. 1.python语 ...