准备工作
需要准备的内容有:
- 托管到git服务器的Django工程;
- 购买腾讯、阿里或其他品牌的云服务器;
- 如果需要部署https服务,另外购买一个域名。
本文档测试环境:
腾讯云轻量服务器,Ubuntu22.04操作系统,系统自带Python 3.10版
Django工程使用MySQL数据库,redis缓存
服务器软件环境
云服务器建议使用密钥登陆,可在网页端或电脑上使用MobaXterm等ssh终端登陆。
服务器软件环境主要包括 Django的运行环境 和 Nginx服务。
首先安装Django的运行环境软件
echo y | sudo apt update
echo y | sudo apt upgrade
echo y | sudo apt install nginx mysql-server redis python3-dev default-libmysqlclient-dev build-essential
# git 配置
git config --global user.name "xxx"
git config --global user.email "xxx@xx.com"
git config --global credential.helper store
# 切换用户工作目录
cd /home/ubuntu/
# 创建Python 虚拟环境
echo y | sudo apt install python3.10-venv
python3 -m venv django32
source ./django32/bin/activate
# 创建源代代码工作目录, 并同步源代码,需要输入git的账号密码
mkdir webapp
cd webapp
git clone https://gitee.com/xxx/django_project.git
cd django_project
pip install -r requirements.txt
然后准备完成数据库迁移。
需要先为Django项目创建数据库和数据库访问用户,与Django代码中的数据库配置一致
这里需要先在服务器上做好数据库的设置。可参考以下操作命令:
# 初次登陆mysql不需要密码
mysql -u root
# 修改root密码
ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Xpassword';
# 为Django项目创建数据库 和 数据库用户
CREATE DATABASE django_db ;
CREATE USER 'django_user'@'localhost' IDENTIFIED BY 'password';
GRANT ALL ON `django_db`.* TO 'django_user'@'localhost';
GRANT SYSTEM_USER ON *.* TO 'django_user'@'localhost';
# 退出MySQL
exit;
# Django数据迁移
python manage.py makemigrations
python manage.py migrate
# Django静态文件迁移
python manage.py collectstatic
这里也可以使用云数据库,修改数据库配置的账号密码,主机地址与云端一一对应即可。
Nginx配置
运行Nginx服务前,需要为Django项目写一个配置文件:
touch /etc/nginx/sites-available/django.conf
ln -s /etc/nginx/sites-available/django.conf /etc/nginx/sites-enabled/django
django.conf 参考配置内容如下:
server{
listen 80;
server_name 127.0.0.1; #访问django项目的网站
client_max_body_size 8m; #上传数据的大小限制
access_log /var/www/log/nginx.access.log; #访问日志,需要事先生成这个文件
error_log /var/www/log/nginx.error.log; #错误日志,需要事先生成这个文件
location /static/ {
root /home/ubuntu/webapp/django_project/;
expires 30d;
}
location /uploads/ { # 对应Django设置文件中的 MEDIA_ROOT
alias /home/ubuntu/webapp/django_project/;
expires 30d;
}
location / {
#动态请求交给gunicorn ,这里的端口号与下文 gunicorn 执行命令中的端口号必须一致
proxy_pass http://127.0.0.1:8899;
proxy_connect_timeout 500s; # 超时时间设置
proxy_read_timeout 500s;
proxy_send_timeout 500s;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
执行以下命令检查Nginx配置是否正确,并重启Nginx
nginx -t
ningx -s reload
运行Django项目:gunicorn -k gevent -t 120 -w 2 -b 127.0.0.1:8899 django_project.wsgi
. 这里的端口号必须与Nginx配置项一致。
至此已经可以通过IP地址访问Django网站了。
https访问配置
https配置需要事先买一个域名,并配置好域名解析。
https配置参考certbot网站的方案:
在certbot网页界面上选择web服务软件和服务器操作系统,按提示命令一步步操作。
然后在打开文件 /etc/nginx/sites-available/default ,将其中SSL配置项复制到Django项目的Nginx配置文件中:
server{
listen 443 ssl; # managed by Certbot
server_name you_domain.com; # 域名
ssl_certificate /etc/letsencrypt/live/clzw.tech/fullchain.pem; # managed by Certbot
ssl_certificate_key /etc/letsencrypt/live/clzw.tech/privkey.pem; # managed by Certbot
include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # managed by Certbot
# listen 80;
# server_name ; #访问django项目的网站
client_max_body_size 8m; #上传数据的大小限制
access_log /var/www/log/nginx.access.log; #访问日志,需要事先生成这个文件
error_log /var/www/log/nginx.error.log; #错误日志,需要事先生成这个文件
...
}
重启nginx服务。
如果出现静态资源目录下面文件无法访问,浏览器访问提示403 forbidden,可以修改 /etc/nginx/nginx.conf 配置文件头部的user设置。参考链接
终端管理工具 screen
使用screen 可以让linux命令行( 比如 gunicorn 命令行 )在退出MobaXTeam或网页终端界面后继续执行 ,下次登陆时可以回到先前的中断界面 查看程序输出。
常用的命令参数如下:
screen -S yourname -> 新建一个叫yourname的session
screen -ls -> 列出当前所有的session
screen -r yourname -> 回到yourname这个session
screen -d yourname -> 远程detach某个session
screen -d -r yourname -> 结束当前session并回到yourname这个session