部署需要提供以下环境
- 操作系统:Ubuntu 20.04.4 LTS
- Nginx:nginx 1.18.0 (Ubuntu)
- 数据库:MySQL 8.0 版本及以上
- Anaconda:conda 4.10.3
- Python:Python 3.8.1
此项目依赖 LibCity 运行,所以事先还需要安装配置 LibCity 环境,推荐 LibCity 的依赖和此项目的依赖放同一个虚拟环境进行管理。
LibCity 安装文档:https://bigscity-libcity-docs.readthedocs.io/zh_CN/latest/get_started/install.html
推荐使用 Conda 创建虚拟环境并配置使用。
确认自己的IP
如果项目放到自己本机启动运行,下面的 [机器IP],都配置为 127.0.0.1
如果项目放到了虚拟机或者服务器运行,下面的 [机器IP],要修改为你的虚拟机IP地址或者服务器IP地址
例如你的服务器IP地址为:10.21.1.97
假设下方配置文件内容是:http://[机器IP]:8080
就需要替换为 http://10.21.1.97:8080
-
将虚拟环境切换为运行 LibCity 的虚拟环境
conda activate admin
-
将后端代码上传至服务器,进入项目目录,并安装依赖
pip install -r requirements.txt
-
安装验证 Uwsgi
pip install uwsgi # 验证 出现版本号代表已安装完成 uwsgi --version
-
在项目文件夹同级目录下创建 uwsgi 工作目录
mkdir uwsgi
-
创建 uwsgi.ini 配置文件
vim uwsgi.ini
写入以下内容;其中 chdir、virtualenv、pidfile、daemonize 四项需要根据实际情况配置相应路径
[uwsgi] # [需要修改] chdir 是后端项目路径 chdir = /home/houge/Bigscity-LibCity-WebTool/smartcityms_backend # [需要修改] 你的 conda 虚拟环境路径 virtualenv = /home/houge/anaconda3/envs/admin module = backend.wsgi:application master = True processes = 1 harakiri = 60 max-requests = 5000 socket = 127.0.0.1:8090 plugin = python3 # [需要修改] 你的 uwsgi 进程 pid 文件存放路径 pidfile = /home/houge/Bigscity-LibCity-WebTool/uwsgi/master.pid # [需要修改] uwsgi 后台启动后日志存放路径 daemonize = /home/houge/Bigscity-LibCity-WebTool/uwsgi/backend.log vacuum = True # 启用多线程 enable-threads = true
-
对项目配置文件进行配置
vim smartcityms_backend/backend/settings.py
需要修改的项有:
- 邮件相关配置:
# ================== 邮件相关配置 ================== # 邮件发送相关 # 邮件发送者邮箱地址 SENDER_ADDRESS = '' # 邮箱授权码 SENDER_AUTHORIZATION_CODE = '' # SMTP 服务器地址 例如:smtp.163.com SMTP_SERVER_ADDRESS = '' # SMTP 服务器端口 SMTP_SERVER_PORT = 0 # ================== 数据库配置 ================== # 数据库 注意修改数据库的 USER PASSWORD HOST PORT 四项 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django', # 指定的数据库名 'USER': 'root', # 数据库登录的用户名 'PASSWORD': '123456', # 登录数据库的密码 'HOST': '[机器IP]', 'PORT': '3306', } } # ================== 服务器安全配置 ================== # 下方的 ? 处应该配置 IP 地址 # 场景一:本机启动部署,填写本机 IP 或者 127.0.0.1 均可 # 场景二:服务器启动部署,填写服务器 IP,内网就填写服务器内网 IP,公网部署就填写公网 IP # 建议修改为服务器 IP = ? ALLOWED_HOSTS = ['[机器IP]'] # 跨域设置 这里配置的是前端的请求地址 修改为前端项目的 IP 和端口 CORS_ORIGIN_WHITELIST = ( 'http://[机器IP]:8000', ) # ================== libcity 库程序相关配置 ================== # libcity 程序目录 LIBCITY_PATH = '/home/houge/Bigscity-LibCity-WebTool/Bigscity-LibCity' # 激活 libcity 库虚拟环境命令 配置为 None 代表就是当前环境(启动 uwsgi 时的虚拟环境) ACTIVE_VENV = None # 样例文件相关 分别是 数据集样例文件 和 参数配置样例文件 DATASET_EXAMPLE_PATH = '/home/houge/Bigscity-LibCity-WebTool/smartcityms_backend/sample/T_DRIVE_SMALL.zip' TASK_PARAM_EXAMPLE_PATH = '/home/houge/Bigscity-LibCity-WebTool/smartcityms_backend/sample/config.json' # 前端项目路径 配置为前端打包后项目的存储路径 ADMIN_FRONT_HTML_PATH = "/home/houge/Bigscity-LibCity-WebTool/dist/"
-
导入基本数据表
验证 MySQL 是否启动
# 终端输入 sudo service mysql status # 出现以下字样代表 MySQL 已经正常启动 SUCCESS! MySQL running (18650) # 没有启动的话,使用以下命令启动 sudo service mysql start
登录mysql数据库,创建名为django的数据库,将
django.sql
输入导入。命令如下:
create database django; use django; source django.sql;
前端项目可以自己编译打包再部署,也可以直接使用打包好的部署包,如果直接使用打包好的部署包,可以直接看 2.2 的内容。
-
所需环境
- node:v16.5.0
- yarn:1.22.17
-
node 安装
下载地址:https://nodejs.org/download/release/v16.5.0/
下载文件:node-v16.5.0-linux-x64.tar.gz
解压并配置环境变量:
# 解压 tar -zxvf node-v16.5.0-linux-x64.tar.gz # 配置环境变量 cd /etc/profile.d vim my_env.sh # 写入以下内容 NODE_HOME 要配置成你的解压路径 export NODE_HOME=/home/houge/node-v16.5.0 export PATH=$PATH:$NODE_HOME/bin # 保存后 使环境变量生效 source /etc/profile # 验证 node -v
-
yarn 安装
npm install --global yarn # 验证 yarn -v
-
进入前端项目代码目录
# 安装依赖 npm install # 打包 yarn build:prod
打包后会在项目代码目录下多出一个 dist 文件夹,这就是部署包
建议将打包好的 dist 部署包放入和后端项目同级的目录下,方便项目查找及管理。
-
验证 Nginx 服务是否正常启动
# 输入命令出现下列 nginx 进程代表 nginx 正常启动 [root@localhost ~]# ps -ef | grep nginx nobody 8707 17593 0 2023 ? 00:04:59 nginx: worker process nobody 8708 17593 0 2023 ? 00:06:02 nginx: worker process root 17593 1 0 2023 ? 00:00:00 nginx: master process ./nginx root 30207 28291 0 14:42 pts/0 00:00:00 grep --color=auto nginx # 没有启动的话,使用以下命令启动 sudo nginx # 或者用下面命令也可以启动 sudo systemctl start nginx
或者访问 http://[机器IP]/
,出现 Welcome to nginx!
等内容,也代表 Nginx 已经正常启动
-
配置 Nginx
进入 Nginx 的站点配置目录,并创建站点配置文件
cd /etc/nginx/sites-enabled # 创建站点配置文件 vim mysite.conf
写入以下内容,需要修改的地方只有 libcity 管理平台的 server 下的 root 配置,修改为前端项目的部署包 dist 文件夹路径。
client_max_body_size 20000m; server { listen 8080; server_name 127.0.0.1; #charset koi8-r; #access_log logs/host.access.log main; location / { # 配置 uwsgi 转发 include /etc/nginx/uwsgi_params; uwsgi_pass 127.0.0.1:8090; # root html; # index index.html index.htm; } } # libcity 管理平台 server { listen 8000; server_name 127.0.0.1; charset utf-8; proxy_buffer_size 8192k; proxy_buffers 32 8192k; proxy_busy_buffers_size 8192k; gzip on; gzip_buffers 32 4k; gzip_comp_level 6; gzip_min_length 200; gzip_types text/css text/xml application/javascript; gzip_vary on; location ~* \.(asp|aspx|php|jsp|cgi|7z)$ { return 404; } location ~* \.map$ { return 404; } # [这里需要修改] 需要修改为前端项目的部署包 dist 路径 root /home/houge/Bigscity-LibCity-WebTool/dist; index index.html; location ^~ / { add_header Access-Control-Allow-Origin '*'; add_header Access-Control-Allow-Methods 'GET, POST, OPTIONS'; add_header Access-Control-Allow-Headers 'Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type'; if ($request_method = 'OPTIONS') { return 204; } try_files $uri $uri/ /index.html?/$request_uri; } }
-
进入 dist 目录,需要修改后端请求地址
此处服务器 IP 也分为两个场景:
- 场景一:本机部署,填写本机 IP 或者 127.0.0.1 均可
- 场景二:服务器部署,内网部署就填写服务器的内网 IP,公网部署就填写服务器的公网 IP
cd /home/houge/Bigscity-LibCity-WebTool/dist vim static/serverconfig.js # 只需要把 IP 修改为服务器 IP 即可 window.global_url = { Base_url: 'http://[机器IP]:8080/api' }
-
Nginx 重启
sudo nginx -s reload
-
进入 uwsgi 的目录,启动后端项目
uwsgi uwsgi.ini
-
验证后端是否正常启动:访问
http://[机器IP]:8080
,可以正常打开页面代表后端已经正常启动,不用关心页面内容 -
验证前端是否正常启动:访问
http://[机器IP]:8000
,可以正常打开登录页面代表前端可以正常访问 -
登录平台进行验证:
管理员用户
账号:admin
密码:123456
-
如果出现pip安装uwsgi失败的情况
首先卸载通过pip安装的uwsgi,然后使用apt安装uwsgi
sudo apt update sudo apt install uwsgi sudo apt install uwsgi-plugin-python3