把最近django的学习再汇总一下。
生产环境部署nginx+uwsgi+python3.6:
1、先编译安装python3.6.8
因为是内网,到外网不通,所以配置全局代理
配置 /etc/profile 增加http和https的配置:
export http_proxy=10.187.185.65:8080
export https_proxy=10.187.185.65:8080
然后用命令下载 python包:
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
编译安装:
先yum安装一下openssl,因为编译安装时候可能会报错
yum install openssl
yum install openssl-devel -y
注意加 --with-ssl
./configure --prefix=/usr/local/python3 --with-ssl
编译安装完之后,会造成yum不可用
修改yum文件 vi /usr/bin/yum 在开头加上 #!/usr/bin/python2 (根据自己的机器情况定 which python)
最后,把 python3的bin目录加入到环境变量,同时把pip3创建个连接到/usr/bin目录里
如 ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
2、安装django
pip install django 会报错,因为是内网环境,我们需要加上代理参数,pip --proxy 地址:端口
配置一下整体的pip.conf ,可以放到 ~/.pip/pip.conf 里,没有的话,新建
[global]
index-url = http://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com
然后安装django,配置环境变量 ,在profile文件里 export PATH=$PATH:/usr/local/python3/bin
然后就可以运行 django-admin命令创建项目和应用了。
3、安装uwsgi
这块以前没用过,现学现装的。
pip install uwsgi
ln -s /usr/local/python3/bin/uwsgi /usr/local/bin/uwsgi
关于uwsgi的一些配置说明:
[uwsgi]
socket = 127.0.0.1:9090
chdir = /djproject/mysite
module = mysite.wsgi #这里填的是相对路径
master = true
processes = 2
threads = 2
max-requests = 2000
vacuum = true
daemonize = /djproject/mysite/uwsgi.log
stats = 127.0.0.1:9001
post-buffering = 65535
buffer-size = 65535
harakiri-verbose = true
harakiri = 300
uid = nginx
pidfile = /djproject/mysite/uwsgi.pid
参数说明:
socket:使用套接字链接
http:通过http加端口的方式
wsgi-file:指定加载的wsgi文件
chdir:指定工程的绝对路径,如Django的项目路径
module:指定web应用的入口模块,如Django项目下的wsgi.py接口文件
master:启动主进程
processes:启动进程数
threads:启动线程数
max-requests:最大请求数
daemonize:指定uWSGI日志文件路径
stats:指定状态查询端口,如:127.0.0.1:9001
wsgi-file:指定启动的文件
post-buffering:设置缓冲区
buffer-size:设置缓冲区文件大小
harakiri-verbose:设置超时true为开启
harakiri:设置超时时间
uid、gid:设置用户和组
pidfile:指定启动时的pid文件路径
vacuum = true #当服务器退出的时候自动删除unix socket文件和pid文件
然后执行: uwsgi --ini uwsgi.ini 即可启动,可以查看一下端口,是否服务起来了。
#### 启动:
uwsgi --ini xxx.ini
#### 重启:
uwsgi --reload xxx.pid
#### 停止:
uwsgi --stop xxx.pid
测试uwsgi是否成功,可以用以下方法:
# 在项目目录下新建个文件,比如我的是在 /www/yxpython/yxpython里的test.py
# vim test.py
def application(env,start_response):
start_response('200 ok',[('Content-Type','text/html')])
return ["Hello World"]
# 在项目目录里执行 uwsgi --http :9000 --wsgi-file test.py
#通过浏览器访问http://ip:9000能看到hello world说明成功
#然后停止服务
开发过程中,发现如果修改了py代码,需要重新启动uwsgi才会生效
uwsgi这样做的目的相信是为了效率
如果有需要py代码改动时立即生效,可以在启动uwsgi的时候加入参数
py-autoreload=1 (如果写在ini配置文件中,记得一定要=1,否则不生效)
3、安装nginx,见以前的文章。这里只写配置
# Django 2.0 项目部署
server {
listen 80;
server_name test.cn
charset UTF-8;
access_log myweb_access.log;
error_log myweb_error.log;
client_max_body_size 75M;
location / {
include uwsgi_params; 必须要
uwsgi_pass 127.0.0.1:9000;
uwsgi_read_timeout 5;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /www/yxpython/static/;
}
}