Ubuntu部署django项目
官方文档:https://docs.djangoproject.com/zh-hans/
参考链接:https://www.cnblogs.com/erhangboke/p/11678486.html
相对于参考链接,这里只是第一次的简单部署,省去了好多东西,也有些参考链接里边出错的地方改正了
如果部署的时候遇到问题,建议先去看官方文档,然后看上边的参考链接
0. 准备工作
0.1 Ubuntu换源
参考清华大学的源:https://mirror.tuna.tsinghua.edu.cn/help/ubuntu/
0.2 更新服务器的软件
sudo apt-get update
sudo apt-get upgrade
0.3 关闭Debug
上线的话把debug设置成False
1. 环境
1.1 开发环境
- Windows 10 专业版
- Pycharm 2019.3.4
- Python 3.6.8
- MySQL 8.0.18
- MobaXterm Personal 20.1 (连接服务器用,可上传下载文件)
1.2 服务器环境
- Ubuntu 16.04.6 LTS
- Python 3.5.2
- MySQL 5.7.29
2. 本地项目打包
2.1 requirements.txt
pip freeze > requirements.txt
额外多说几句话,除了freeze(pip的参数),还有个是pipreqs(python包)
- freeze 是导出当前环境所以包
- pipreqs 是扫描整个项目导出用到的包(但也有遗漏
本地开发的时候建议就开始使用虚拟环境,这样在打包的时候容易导出包,不会有太多问题
2.2 打包项目
没啥说的,直接压缩,然后传到服务器上(建议MobaXterm,真的好用(还好看))
3. 服务器配置虚拟环境
参考链接:https://docs.python.org/zh-cn/3.6/tutorial/venv.html
3.1 创建虚拟环境
python3 -m venv <虚拟环境创建位置>
这里先不用考虑python版本的问题,比如我本地用的3.6.8,服务器是3.5.7,版本不同先试一遍,万一成了呢?
然后就是我试过在虚拟机中创建3.6.8的虚拟环境,直接拷贝到服务器上,运行不了,原因待查(其实是不想查了
3.2 激活虚拟环境
source <虚拟环境位置>/bin/activate
取消激活是
deactivate
3.2 安装requirements.txt
激活之后直接执行
pip install -r requirements.txt
这里因为已经在虚拟环境中了,所以直接pip就好,不用pip3
3.3 配置数据库
在MySQL中创建django要用的数据库
删除项目所以App的migrations
目录下的文件0001_initial.py
那些
然后虚拟环境中执行:
manage.py makemigrations
manage.py migrate
数据库配置完成
3.4 测试项目
在虚拟环境中跳转到项目目录,执行
python manage.py runserver 0.0.0.0:8000
访问***:8000,访问成功就OK,不成功慢慢检查
(测试之后就可以关掉了,防止后边端口占用)
4. 放到后台运行项目
到上一步,项目相当于运行在命令行中,关闭会话的话,项目也无法访问了,这里使用uwsgi托管项目
4.1 安装uwsgi
在服务器的环境和虚拟环境中都安装uwsgi(好像虚拟环境不用装?但我查的教程是要装)
pip3 install uwsgi # 服务器
pip install uwsgi # 虚拟环境
4.2 编写uwsgi配置文件
在项目下创建一个***.ini文件(随意命名,位置也是随意的,但推荐放项目下边)
内容如下:
# lazy.ini 文件内容(这里创建的是lazy.ini)
[uwsgi]
#使用nginx连接时使用
socket=127.0.0.1:8000
#直接做web服务器使用
# http=127.0.0.1:8000
#项目目录
chdir=/home/error-404/project/LazyRepresentativeProject
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=LazyRepresentativeProject/wsgi.py
# 指定启动的工作进程数
# processes=4
# 指定工作进程中的线程数
# threads=2
master=True
# 保存启动之后主进程的pid
pidfile=uwsgi.pid
# 设置uwsgi后台运行,用uwsgi.log保存日志信息
daemonize=uwsgi.log
# 设置虚拟环境的路径
virtualenv=/home/error-404/project/LazyRepresentativeProject/venv/
注释都写在里边了我就不多说了,然后注意下这个地方
#项目中wsgi.py文件的目录,相对于项目目录
wsgi-file=LazyRepresentativeProject/wsgi.py
有教程说写成wsgi-file=LazyRepresentativeProject.wsgi
这种形式的,但我这里没法运行,注意下就好
4.3 运行刚刚的配置文件
uwsgi有三个常用命令:
uwsgi --ini ***.ini # 启动配置文件,启动后会在相同目录下生成一个***.pid文件
uwsgi --reload ***.pid # 重启
uwsgi --stop ***.pid # 停止
我们要用的就是uwsgi --ini ***.ini
了,启动服务,然后关闭命令行,访问****:8000可以成功访问就OK
无法访问的话,注释掉socket=127.0.0.1:8000
,取消注释http=127.0.0.1:8000
比较佛的是,我不管用哪个都可以访问(可能是因为我没关Debug?)
5. 配置nginx
nginx主要是代理请求
5.1 安装nginx
sudo apt-get install nginx
查看nginx版本验证安装成功:
nginx -v
5.2 编写配置文件
默认安装位置是/etc/nginx/
在这个位置下边有个conf.d/
文件夹,我们要写的配置文件就是要放在这里
在这个文件夹下创建一个***.conf文件(名字随意,位置必须在这里),然后写入下边的代码:
server {
listen 80;
server_name www.hhh.club www.憨憨.club www.xn--wkua.club;
charset utf-8;
access_log /var/log/nginx/lazy_access.log;
error_log /var/log/nginx/lazy_error.log;
client_max_body_size 75M;
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass 127.0.0.1:8000;
}
}
代码的意义就是监听80端口的三个域名www.hhh.club
,www.憨憨.club
,www.xn--wkua.club
,然后将服务转发到本地的127.0.0.1:8000
就是刚刚的项目了
还有静态文件的转换,这里还用不到,就没配置
这里呢,在Windows的host文件里边我是把这几个域名指向了服务器的地址
值得注意的是nginx监听中文域名,其实中文域名都要转成英文域名的,转换算法不知道,方法很简单,直接在命令行ping这个域名就好
> ping www.憨憨.club
正在 Ping www.xn--wkua.club [119.23.17.2] 具有 32 字节的数据:
来自 119.23.17.2 的回复: 字节=32 时间=47ms TTL=51
来自 119.23.17.2 的回复: 字节=32 时间=46ms TTL=51
来自 119.23.17.2 的回复: 字节=32 时间=46ms TTL=51
来自 119.23.17.2 的回复: 字节=32 时间=46ms TTL=51
119.23.17.2 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 46ms,最长 = 47ms,平均 = 46ms
可以得到www.xn--wkua.club
,这个就是www.憨憨.club
对应的英文域名了,在nginx中监听这个域名,然后浏览器访问www.憨憨.club
就可以了(要等nginx运行之后)
5.3 运行nginx
首先执行nginx -t
检查有没有错误
nginx -t
没有错误的话直接,service nginx start
还有其他命令
service nginx start # 启动nginx
service nginx stop # 停止nginx
service nginx restart # 重启nginx可能会失败?用下边的
nginx -s reload # 重启nginx
6. 浏览器访问项目
输入nginx中监听的域名,可以正常访问项目