Ubuntu部署Django(顺道踩nginx监听中文域名的坑)

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.clubwww.憨憨.clubwww.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中监听的域名,可以正常访问项目

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值