四次元科技

科技、动漫、生活、学习以及一切

部署一个Django的项目

准备

首先准备好最新版本的Python

rm -rf /usr/local/python3
./configure --prefix=/usr/local/python3/
make && make install
rm -rf /usr/local/bin/python3
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
rm -rf /usr/local/bin/pip3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3

因为我用的是宝塔环境,宝塔自带了Nginx和Supervisor,所以不用单独安装了

然后把代码上传到opt目录,我的上传到了YojigenAPI目录下

这里我是使用了PyCharm的自带Deployment功能进行代码上传

首先打开PyCharm的菜单栏的Tools –> Deployment –> Configure

在里面添加一个新的服务器,我添加的服务器命名为AliyunHK,输入好服务器的登陆信息

然后到Mappings页面,添加一下文件夹对应的路径配置,我这里是将代码放到了服务器的/opt/YojigenAPI目录下

最后到Excluded Paths页面,添加一个Local Path,忽略掉本地的venv虚拟环境文件夹

最后点击PyCharm的菜单栏的Tools –> Deployment –> Upload to AliyunHK,就可以将代码推送到服务器上了

环境配置

ssh登陆到服务器,来到项目目录下,先创建一个虚拟环境

virtualenv -p /usr/local/bin/python3 --no-site-packages venv

然后进入到虚拟环境里

source venv/bin/activate

之后恢复pip的包

pip install -r requirements.txt

注意这里安装了gunicorn,默认的Django项目是不会安装的

包都装完了,就可以退出虚拟环境了

deactivate

服务配置

先测试一下服务启动命令,10000是监听端口

venv/bin/gunicorn YojigenAPI.wsgi -b 0.0.0.0:10000

结果发现报错了,The SECRET_KEY setting must not be empty.,这个错误是项目配置文件找不到了,实际上是因为需要设置一下配置文件的环境变量才行,所以只要运行

venv/bin/gunicorn YojigenAPI.wsgi -b 0.0.0.0:10000 -e DJANGO_SETTINGS_MODULE="YojigenAPI.settings.prod"

之后再启动,如果没错那就没问题了

然而我又报错了,SQLite 3.8.3 or later is required (found 3.7.17).,这个问题是因为我用的是CentOS,系统自带的sqlite3版本太老,升级一下就可以了

./configure --prefix=/usr/local
make & make install

编译好了之后,执行一下这个,把/usr/local/lib添加到系统的链接库中

echo "/usr/local/lib" >> /etc/ld.so.conf
/sbin/ldconfig

之后再运行应该就可以正常启动了,然后配置更新一下数据库,以及转存一下静态文件

venv/bin/python manage.py migrate --settings=YojigenAPI.settings.prod
venv/bin/python manage.py createsuperuser --settings=YojigenAPI.settings.prod
venv/bin/python manage.py collectstatic --settings=YojigenAPI.settings.prod

接下来就是配置Supervisor守护进程了,因为我用了宝塔,宝塔里面有现成的Supervisor管理器,这里就直接使用宝塔的管理器了

填写进去启动信息,保存即可

最后就是大家都熟悉的Nginx配置反向代理了,反向代理到对应的域名上就可以了,不过这里有个坑,是关于静态文件的,宝塔默认的配置里包含了css和js的相关配置,要去给他删了才行

location /
{
	proxy_pass http://127.0.0.1:10000;
	proxy_set_header Host api.yojigen.tech;
	proxy_set_header X-Real-IP $remote_addr;
	proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
	proxy_set_header REMOTE-HOST $remote_addr;
	add_header X-Cache $upstream_cache_status;
}

location /static/ 
{
	alias /opt/YojigenAPI/static/;
}

到此配置全部完成,代码成功上线啦。