部署Django+Nginx+uwsgi
ssh登录远程服务器,如果觉得实例名太长了可以改hostname。hostname yourname 然后su
这是可选项。
*prce*, zlib*
安装完之后whereis nginx查看一下安装位置。默认安装在/etc/nginx下
nginx默认监听80端口,访问服务器外网ip如果能出现如下界面说明安装并启动成功。
如果不能,则需要进行下面操作:
/usr/sbin/nginx -c /etc/nginx/nginx.conf #指定nginx配置文件,如果不指定,会启动失败 /usr/sbin/nginx -s reload #这条命令不管nginx之前是否启动成功都将重启
AI 代码解读
再打开看应该就会出现上面的画面了。
设置开机自动启动:vi /etc/init.d/nginx 内容是:https://www.nginx.com/resources/wiki/start/topics/examples/redhatnginxinit/
然后进行权限修改:chmod a+x /etc/init.d/nginx,
使用chkconfig进行管理:
chkconfig --add /etc/init.d/nginx chkconfig nginx on
AI 代码解读
可使用service nginx start 和 service nginx stop进行启动和关闭。
安装数据库,yum install sqlite-devel (目前已经更新到sqlite3版本了)
安装完后使用sqlite3 --version查看版本号。
wget https://www.python.org/ftp/python/3.6.5/ python版本,我下的是Python-3.6.5.tgz
安装python3, 系统默认安装了python2.7。下载完成后进行一下操作
解压 tar -zxvf Python-3.6.5.tgz 配置环境 ./configure --prefix=/usr/local/python3 安装 make & make install 进行软链 ln -s /usr/local/python3/bin/python /usr/bin/python
AI 代码解读
注意:如果升级了python3,yum会出问题,因为yum是使用python做解析器的
vi /usr/bin/yum vi /usr/libexec/urlgrabber-ext-down 将第一行"#!/usr/bin/python" 改为 "#!/usr/bin/python2"即可
AI 代码解读
真实环境中安装uwsgi
pip install uwsgi
(2)安装完之后软链一下ln -s /usr/local/python3/bin/virtualenv /usr/bin/virtualenv
然后执行virtualenv env35(虚拟环境名,自己随意取),软链的目的就是为了让virtualenv这个命令能简化执行,不软连的话可以执行/usr/local/python3/bin/virtualenv env35
(3)进入虚拟环境source env35/bin/activate
(4)退出虚拟环境deactivate
(2)创建mezzanine项目:mezzanine-project libpath
(4)收集静态文件,python manage.py collectstatic
(5)配置setting, vi libpath/settings.py,找到allow_host 添加外网ip
(6)测试是否安装成功,python manage.py runserver 0.0.0.0:8000(阿里服务器实例添加到安全组,并添加规则允许8000端口被外网访问)
如果能出现下面的画面则安装成功。
(1)虚拟环境中安装uwsgi, pip install uwsgi
安装后进行测试uwsgi --http :8000 --module libpath.wsgi
最主要的三个文件:
nginx.conf
error_log /etc/nginx/logs/error.log; pid /etc/nginx/logs/nginx.pid; events { worker_connections 4096; } http{ # nginx需要连接的上游 upstream django { #server unix:///path/to/your/mysite/mysite.sock; # 使用unix套接字 server 127.0.0.1:8001; # 使用TCP端口请注释上一行,并取消本行注释,这里的端口指的是跑uwsgi的端口 } include /etc/nginx/mime.types; # nginx服务器配置 server { # 监听端口 listen 80; # 域名 server_name .yoursite.com; # 编码 charset utf-8; # 最大上传大小 client_max_body_size 75M; # Django 的media路径 location /media { alias /app/librepath/media; } # 静态文件路径 location /static { alias /app/librepath/static; } # 将动态请求转发到uwsgi跑的django程序 location / { uwsgi_pass django; include /app/uwsgi_params; # 从github上下载的uwsgi_params 文件路径 } } }
AI 代码解读
uwsgi_params (nginx安装目录下就有现成的):mv /etc/nginx/uwsgi_params /app/uwsgi_params
uwsgi.ini
创建webapp用户和组,如果不使用uid =webapp,默认使用root,会提示多行您使用root的警告。
groupadd webapp useradd -g webapp webapp
AI 代码解读
[uwsgi] uid =webapp gid =webapp chdir =/app/librepath module =librepath.wsgi home =/app/env35 master =true processes =10 socket = :8001 chmod-socket = 666 vacuum =true enable-threads =true thunder-lock =true
AI 代码解读
文中使用的是socket端口通信,也可使用socket文件进行通信。
设置nginx自启或者 /usr/sbin/nginx -c /etc/nginx/nginx.conf,/usr/sbin/nginx -s reload
启动uwsgi /usr/local/python/bin/uwsgi --ini /app/uwsgi.ini