django2.2+Ubuntu+nginx+uwsgi部署心得
随笔记录django在阿里云服务器部署
环境
前提准备:
①django2.2的一个本地项目,本地部署没有问题
②阿里云的Ubuntu18的轻量级应用服务器
③了解linux都有什么目录(/usr,/root...),会使用vim和ls、rm、mkdir等常见文件操作命令
方便对比自己环境 ,这里详细写一下用到的工具,部分的标注了版本:
django=2.2
python3.6(虚拟环境)
nginx(linux命令直装即可)
流程简介
- 配置python3的虚拟环境
- 安装nginx
- 安装uwsgi
- 项目以及其他参数文件配置
- 没有数据库(我用没有用到...)
四步骤详细(最好在root用户下)
1. python3虚拟环境
首先看一下有没有pip3,没有的
sudo apt-get install python3-pip
!如果你也是Ubuntu,注意了Ubuntu没有yum
切换到目录【即/root】,然后安装virtualenv。
成功后,建立一个虚拟环境名字vir_name,名字可以自定义。
cd ~
sudo pip3 install virtualenv
virtualenv vir_name
此时在~【/root】中建立一个文件夹,名字vir_name,也就是你的虚拟环境创建在这里了。
然后以后使用环境的时候
cd ~
cd vir_name
source ./bin/activate
便会发现命令行前面有个括号,里面标注着你的环境,表示你已经激活了python3

可以查看python版本,查看python包列表
python -V
pip list
2. nginx
网上很多都是yum,但是如果你是Ubuntu,使用下面命令
sudo apt-get install nginx
配置文件在第四步再改。
3. uwsgi
这里采用python的Uwsgi模块,通过建立软连接到/usr/bin/中
pip install uwsgi
ln -s 你的虚拟环境根目录/bin/uwsgi /usr/bin/
然后可以在命令行使用uwsgi了
4. 项目以及其他参数文件配置
首先将整个项目文件夹传到服务器的/home目录下,这里我是用的filezilla。
比如项目文件/项目名字为kkk
那么kkk路径为/home/kkk/(app啊manage.py啊等等文件在这里面)
使用vim修改/home/kkk/kkk/settings.py

将debug从Ture改为False,27行[]本来是空的,现在加入你的服务器地址(上图debug没改,懒得换图了)
在/home/kkk下vim新建两个文件run.pid,run.log
分别记录进程id和日志,里面都是空白既可,不用写东西
然后继续新建uwsgi.ini,里面加入以下内容
[uwsgi]
chdir = /home/kkk
module = kkk.wsgi:application
socket = 127.0.0.1:8000
master = true
daemonize = run.log
pidfile=run.pid
disable-logging = true
virtualenv = /root/vir_name
chdir是项目目录,
modole后的kkk改成你的项目名(其实是/home/kkk/kkk的kkk)
socket就这个就行,不用改
master不用改
daemonize是日志文件名称
pidfile是进程id存储的文件名
disable-logging不用改
virtualenv是你的python3虚拟环境目录
现在uwsgi和django接口连上了
再把nginx和uwsgi接口连上,分别启动nginx和uwsgi就ok了
开始最后的战斗
进入/etc/nginx
vim修改nginx.conf
找到以下位置:

添加server板块来连接uwsgi
server {
server_name 1.1.1.1;
charset UTF-8;
client_max_body_size 75M;
location / {
include uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
uwsgi_read_timeout 20;
}
location /static {
expires 30d;
autoindex on;
add_header Cache-Control private;
alias /home/kkk/static;
}
}
server_name后面是你的服务器地址(例如1.1.1.1)
127.0.0.1:8000要和uwsgi.ini中统一
alisa后面目录是你的项目的静态资源目录,你的js、css文件根目录。
开启uwsgi和nginx
切换路径,打开uwsgi
cd /root/kkk
uwsgi --ini uwsgi.ini
直接输入nginx即可打开nginx服务
也可以重启服务
sudo service nginx restart
完毕!此时正常的话可以在电脑访问服务器网页了。
可能遇到错误,一些可能出错方向:
- 登陆阿里云是不是安全组中80端口向外开放了
- 查看127.0.0.1:8000是不是正在被占用到是uwsgi启动不了(查看端口命令:netstat -ntlp)
- 如果是uwsgi和django连接出了问题,可以通过查看日志run.log度娘解决
- 查看nginx进程是否启动:ps -ef | grep nginx(杀死进程命令:kill -QUIT id号)
- 查看uwsgi进程是否启动:ps -ef | grep uwsgi(杀死进程命令:kill -QUIT id号)
- 关闭防火墙命令:sudo ufw allow 'Nginx Full'
一点心得:
我自己实际真正遇到的1一开始不知道要打开,部署了访问没有反馈,就各种瞎改,只有一个网页反馈403或者500啥的,这是第一次遇到错,后面开始翻各种帖子开始对比自己的步骤,然后重装了nginx(第一次装还是下的压缩包 然后解压什么的 头大,直接命令不香吗)后面改到最后都要放弃了,因为这时候查看uwsgi和nginx进程都在启动着,也蒙了,(当时还调访问地址来着,以为我访问有问题,笑死)后面脑子一抽想到,我为什么有日志不看呢,直接打开run.log看看,果然发现是uwsgi和sjango连接出了问题,于是对着报错日志开始度娘,才发现之前用一个py文件测试uwsgi来着,用的就是127.0.0.1的8000端口,查看端口使用情况,果然正在占用,于是用命令关闭了端口,发现可以访问了,好耶!!

浙公网安备 33010602011771号