部署流程如下:
- 在服务器上建立git仓库
- 将项目利用Git推送到服务器上
- 安装虚拟环境
- 编写
systemctl
的service - 配置NGINX反向代理
- 用systmectl启动NGINX和gunicorn
1.配置Git仓库
一下示例使用git
用户, 在home目录下创建git仓库
# 创建git仓库
git init --bare your-project-name.git
cd your-project-name.git/hooks
# 创建文件用于将git上传的项目重定向到指定目录
touch post-receive
chmod 775 post-receive
post-receive
文件中写入一下内容:
git --work-tree=/Your/Project/path/ --git-dir=/home/git/your-project-name.git checkout -f
到此, 一个Git仓库就创建好了, 用户git了项目后, 会自动推送到服务器中的/Your/Project/path/
中
2.将项目利用Git推送到服务器上
一下命令可以创建一个git仓库, 并将项目推送到git服务器上
# 在项目目录中执行一下操作
git init
git add *
git commit -m 'initial commit'
# git是用户, ip是服务器地址或hostname
git remote add origin git@ip:your-project-name.git
# 第一次要这样指定, 以后用git push就可以了
git push -u origin master
3.安装虚拟环境
不同的项目有不同的环境依赖, 这使得创建一个虚拟环境变得十分重要.Python3中提供了方便的创建虚拟环境的命令, 这里使用python3 为例创建一个虚拟环境:
python3 -m venv /Your/Project/venv/path/
这样就可以在/Your/Project/venv/path/
目录下创建一个虚拟环境了.
使用以下命令激活虚拟环境:
source /Your/Project/path/bin/activate
使用deactivate
命令退出虚拟环境
在虚拟环境下安装项目依赖, 一般使用pip
. 本例中使用gunicorn启动Django项目, 故这个必装:
pip install gunicorn
写好requirements.txt文件的, 可以使用如下命令安装:
pip install -r requirements.txt
4.编写systemctl
的service
Nginx 在安装完后就有service, 这里主要配置gunicorn
# 一般配置在下面这个目录
cd /etc/systemd/system/
vim your-project-name.service
your-project-name.service
内容如下:
[Unit]
Description=gunicorn website app daemon
After=network.target
[Service]
User=git
Group=git
WorkingDirectory=/Your/Project/path/your-project-name
ExecStart=/Your/Project/venv/path/bin/your-project-name -b 127.0.0.1:8000 your-project-name.wsgi:application
[Install]
WantedBy=multi-user.target
5.配置NGINX反向代理
# nginx 配置配置
cd /etc/nginx/conf.d
vim name.conf
在name.conf
中配置反向代理, 如下
server{
listen 80;
server_name your-hostname;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://127.0.0.1:8000;
}
}
6.用systmectl启动NGINX和gunicorn
systemctl start nginx
systemctl start your-project-name.service
总结
至此, 服务器部署完成, 可以自己检查一下是否部署成功. 这里有很多知识点, 如git, nginx, gunicorn的配置等. 此文只是简略的介绍部署过程, 更多详细的内容可以查看各个部分的官方文档进行了解.