1. 项目的上传
1.1. 生成密钥(第一次需要)
1.1.1. 本地密钥
①生成ssh key
ssh-keygen -t ed25519 -C ''邮箱'
②查看公钥
type $env:USERPROFILE\.ssh\id_ed25519.pub
③测试ssh
ssh -T git@gitee.com
1.1.2. 服务器密钥
ssh-keygen -t ed25519 -C "服务器"
cat ~/.ssh/id_ed25519.pub 查看密钥,把密钥粘贴在gitee
ssh -T git@gitee.com 测试
1.2. 本地化项目并上传
①进入项目目录
②如果还没初始化git
git init
③添加远程仓库
git remote add origin git@gitee.com:你的用户名/仓库名.git
④上传
git add .git commit -m "首次上传"git push -u origin master
⑤本地修改代码并更新
git add .git commit -m "修改说明"git push
1.3. 拉取项目
1.3.1. 第一次获取项目
①克隆项目
git clone git@gitee.com:你的用户名/仓库名.git
cd 仓库名
②创建虚拟环境
python3 -m venv venv
source venv/bin/activate
③下载依赖
pip install -r requirements.txt
④数据库迁移
python manage.py migrate
⑤收集静态文件
python manage.py collectstatic
1.3.2. 修改项目代码
cd /home/debian/myblog #切换到工作目录
git pull origin master #拉取代码
python manage.py migrate # 如果改了模型
python manage.py collectstatic # 如果改了静态文件1.4. 安装开发环境
sudo apt install build-essential -y
sudo apt install python3-dev -y
sudo apt install python3-venv -y
sudo apt install python3-pip -y
1.5. 安装nginx
sudo apt update更新系统
sudo apt install nginx -y安装nginx
sudo systemctl start nginx启动nginx
sudo systemctl enable nginx开机自启
sudo systemctl restart nginx重启nginx
sudo systemctl status nginx查看状态
1.6. 安装uwsgi
source venv/bin/activate 进入虚拟环境
pip install uwsgi安装uwsgi
1.7. 配置文件
1.7.1. 配置nginx
# 配置文件内容:
# 转发给哪个服务器,可以通过upstream配置项让nginx实现负载均衡
upstream django {
server 127.0.0.1:8001;
}
# 设定虚拟主机配置,一个http中可以有多个server。
server {
# 启动的nginx进程监听请求的端口
listen 80;
#定义使用域名访问
server_name 49.235.175.169;
charset utf-8;
client_max_body_size 75M;
# location 配置请求静态文件多媒体文件。
location /media {
alias /home/debian/myblog/media/;
}
# 静态文件访问的url
location /static {
# 指定静态文件存放的目录
alias /home/debian/myblog/staticfiles/;
}
# 将所有非媒体请求转到Django服务器上
location / {
# 包含uwsgi的请求参数,路径为qmblog_uwsgi_params绝对路径
include /etc/nginx/uwsgi_params;
# 转交请求给uwsgi
uwsgi_pass django; #这个django对应开头出的,对于动态请求,转发到本机的端口,也就是uwsgi监听的端口,uwsgi运行的主机和ip,后面我们会在本机的该端口上运行uwsgi进程
}1.7.2. 配置uWSGI
[uwsgi]
# 项目目录
chdir = /home/debian/myblog
# Django 的 wsgi 文件
module = mysite.wsgi
# 使用虚拟环境
home = /home/debian/myblog/venv
# master 主进程
master = true
# 进程数量
processes = 10
threads = 2
# 使用 socket(和 nginx 通信)
socket = 127.0.0.1:8001
# 权限
chmod-socket = 666
# 清理环境
vacuum = true
# 退出时清理
die-on-term = true
#日志路径
daemonize = /home/debian/myblog/uwsgi.log
touch-reload = /home/debian/myblog/reload.txt1.7.3. 运行流程
浏览器访问网站
↓
Nginx(监听80端口)
↓
upstream django { 127.0.0.1:8001 }
↓
uWSGI(监听8001端口)
↓
Django处理请求
↓
返回结果1.8. 重启uwsgi服务
1.8.1. reload
该方案不会杀死进程,不中断服务
在uwsgi.ini配置
touch-reload = /home/debian/myblog/reload.txt
只需要
touch reload.txt
就可以重启
1.8.2. 杀死进程
pkill -f uwsgi 杀死进程
uwsgi --ini uwsgi.ini 重启服务
该方案不建议频繁使用
1.8.3. 使用systemctl管理uWSGI
①创建服务文件
/etc/systemd/system/myblog.service
②配置文件
[Unit]
Description=myblog uwsgi service
After=network.target
[Service]
User=debian
WorkingDirectory=/home/debian/myblog
ExecStart=/home/debian/myblog/venv/bin/uwsgi --ini /home/debian/myblog/config/uwsgi.ini
Restart=always
[Install]
WantedBy=multi-user.target③执行命令
systemctl daemon-reload
systemctl enable myblog
systemctl start myblog然后就可以通过
systemctl restart myblog 重启项目
⭐注意!!!
在使用systemctl管理文件的时候,uwsgi配置文件的
daemonize = /home/debian/myblog/uwsgi.log要删去,日志让systemctl管理
1.9. 本地文件管理
1.9.1. requirements.txt(依赖管理)
例如本项目:
asgiref==3.11.0
cffi==2.0.0
cryptography==46.0.5
Django==5.2.10
pillow==12.1.1
pycparser==3.0
PyMySQL==1.1.2
sqlparse==0.5.5
tzdata==2025.3
①进入虚拟环境然后执行pip freeze > requirements.txt
(所有依赖包都会自动进入文件,注意每一次新增都要执行)
②在部署的时候执行pip install -r requirements.txt
就可以下载好所有依赖包
1.9.2. .gitignore(防止上传垃圾文件)
该文件可以告诉哪些文件不要上传到库
例如虚拟环境,数据库文件,日志文件,编译缓存等等