部署文档 - noenergysoftware/rateMyCourse GitHub Wiki
部署文档
本文档将简单介绍如何部署我们的网站。部署过程比较简单,并已在多个系统上经过测试。
系统,软件需求
项目对系统没有特殊需求,已知可以在以下系统上正常部署:
- Ubuntu 1604/1804
- Debian 9
- CentOs 7
本项目主要基于Django进行开发,需求服务器正常配置以下环境:
- Python >= 3.5
- Django >= 2.0
其中Python3需求安装以下包:
- Rankit
- Django-test
- gitpython
- Django-extensions
- Django-cors-headers
- pandas
数据库无使用限制,你可以利用Django的数据库接口适配适合的数据库。项目默认使用的是SQLite3,可以在配置后直接使用。参考我们的测试结果,我们推荐在数据量不大时使用SQLite3,而在数据量较大时使用PostgreSQL。
部署过程
我们以Debian 9 + Python 3.6 + SQLite3 的环境为例。在部署时,我们要使用一个Web Server对前后端流量进行转发,在这里我们选择了Nginx为例。为了使例子尽可能简单,我们暂时不使用uWSGI,仅仅使用端口转发功能。详细的部署例子如下:
首先更新系统环境与软件
sudo apt update
sudo apt upgrade
之后我们安装必须的软件
sudo apt install python3 python3-pip nginx sqlite3 git
pip3 install Django gitpython Django-test Django-extensions django-cors-headers pandas rankit
之后就可以进行部署了。在开发时,我们是前后端分离进行开发的,而我们release的版本将前后端进行了合并。你可以选择分别部署前后端分支到不同的地方,也可以选择直接部署release版本,再调整权限。这里我们以直接部署release的beta版本为例。
我们首先需要下载并解压我们的项目
wget https://github.com/noenergysoftware/rateMyCourse/archive/beta.tar.gz
tar -zxvf beta.tar.gz
cd ratemycourse-beta
之后我们需要配置一下Nginx的转发功能。在这里我们假设用户已经有了域名example.com,前端为www.example.com,后端为api.example.com,服务运行在本机的1234端口上。同时假设用户仅使用HTTP访问,但是我们推荐配置HTTPS以获得更好的安全性。
Nginx的两个配置文件样例如下,一般位于 /etc/nginx/sites-enabled/ 目录下:
server {
listen 80;
listen [::]:80;
server_name api.example.com;
location / {
proxy_pass http://127.0.0.1:1234;
proxy_redirect default;
}
}
server {
listen 80;
listen [::]:80;
charset utf-8;
root /PATH/TO/THE/TAR.GZ/FILE/ratemycourse-beta/front_end/;
server_name www.example.com;
location / {
try_files $uri $uri/ =404;
}
}
由于Nginx默认是由www-data用户执行的,因此我们需要修改一下文件夹的访问权限。你可以通过添加用户组实现,也可以修改文件夹的所有者,之后重启Nginx使配置生效即可。这里我们采取的是后者。
chown -R www-data front_end/
sudo nginx -t
sudo nginx -s reload
接下来我们进行后端与数据库的部署。在我们的项目中,部分关键信息是通过环境变量储存的,因此在部署后端之前我们需要先配置环境变量。目前我们在环境变量中共储存了3个变量,如下,正确配置完成后就可以进行下一步部署了。
变量名 | 作用 |
---|---|
DJANGOSK | Django的secret key,用于保护程序整体的安全性 |
DJANGOAID | 腾讯验证模块的用户ID |
DJANGOASK | 腾讯验证模块的用户密钥 |
接着我们进行数据库导入工作。我们内置了一个课程数据库以及其配套的导入脚本,如果期望导入自己的课程,可以自行修改对应的csv文件。
python3 manage.py makemigrations
python3 manage.py migrate
python3 toDatabase.py
python3 manage.py runserver 1234
到此为止,部署工作就正常完成了。如果有问题请先利用搜索引擎解决,不能解决的情况可以通过issue向开发者寻求协助。