手动部署

手动部署 - 图1注意

我们推荐你使用 Docker安装 来确保体验的一致性。

准备环境

  • Python 3.6及以上
  • Mysql 5.6及以上
  • 现代浏览器
  • v2.3.9 开始 Git 版本需要 2.17.0+ (影响新建常规发布申请单)

安装步骤

以下安装步骤假设项目部署在一台 Centos7 系统的 /data/spug 目录下。

1. Clone项目代码

  1. git clone https://github.com/openspug/spug /data/spug
  2. cd /data/spug
  3. git checkout x.x.x # x.x.x 为指定的发行版本,例如 git checkout v2.2.2

2. 下载 已编译打包后的前端项目

将下载好的前端压缩包解压到指定目录,假设web_x.y.z.tar.gz 是的你下载好的压缩包

手动部署 - 图2提示

访问 Github 比较慢的情况下,可以在尝试在 Gitee 下载。

  1. tar xf web_x.y.z.tar.gz -C /data/spug/spug_web/;

3. 创建运行环境

如需要使用常规发布功能,则需要安装 git v2.17.0+。

  1. # 安装依赖
  2. yum install mariadb-devel python3-devel gcc openldap-devel redis nginx supervisor rsync sshfs
  3. # 创建虚拟环境
  4. cd /data/spug/spug_api
  5. python3 -m venv venv
  6. source venv/bin/activate
  7. # 安装python包
  8. pip install -U pip setuptools -i https://pypi.tuna.tsinghua.edu.cn/simple/
  9. pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
  10. pip install gunicorn mysqlclient -i https://pypi.tuna.tsinghua.edu.cn/simple/

4. 修改后端配置

后端默认使用的 Sqlite 数据库,通过修改配置使用 MYSQL 作为后端数据库,如何使用SqlServer数据库?

手动部署 - 图3注意

spug_api/spug/ 目录下创建 overrides.py 文件,启动后端服务后会自动覆盖默认的配置,避免直接修改 settings.py 以便于后期获取新版本。

spug_api/spug/overrides.py

  1. DEBUG = False
  2. DATABASES = {
  3. 'default': {
  4. 'ATOMIC_REQUESTS': True,
  5. 'ENGINE': 'django.db.backends.mysql',
  6. 'NAME': 'spug', # 替换为自己的数据库名,请预先创建好编码为utf8mb4的数据库
  7. 'USER': 'spug_user', # 数据库用户名
  8. 'PASSWORD': 'spug_passwd', # 数据库密码
  9. 'HOST': '127.0.0.1', # 数据库地址
  10. 'OPTIONS': {
  11. 'charset': 'utf8mb4',
  12. 'sql_mode': 'STRICT_TRANS_TABLES',
  13. #'unix_socket': '/opt/mysql/mysql.sock' # 如果是本机数据库,且不是默认安装的Mysql,需要指定Mysql的socket文件路径
  14. }
  15. }
  16. }

5. 初始化数据库

  1. cd /data/spug/spug_api
  2. python manage.py updatedb

6. 创建默认管理员账户

  1. python manage.py user add -u admin -p spug.cc -s -n 管理员
  2. # -u 用户名
  3. # -p 密码
  4. # -s 超级管理员
  5. # -n 用户昵称

7. 创建启动服务脚本

/etc/supervisord.d/spug.ini

  1. [program:spug-api]
  2. command = bash /data/spug/spug_api/tools/start-api.sh
  3. autostart = true
  4. stdout_logfile = /data/spug/spug_api/logs/api.log
  5. redirect_stderr = true
  6. [program:spug-ws]
  7. command = bash /data/spug/spug_api/tools/start-ws.sh
  8. autostart = true
  9. stdout_logfile = /data/spug/spug_api/logs/ws.log
  10. redirect_stderr = true
  11. [program:spug-worker]
  12. command = bash /data/spug/spug_api/tools/start-worker.sh
  13. autostart = true
  14. stdout_logfile = /data/spug/spug_api/logs/worker.log
  15. redirect_stderr = true
  16. [program:spug-monitor]
  17. command = bash /data/spug/spug_api/tools/start-monitor.sh
  18. autostart = true
  19. stdout_logfile = /data/spug/spug_api/logs/monitor.log
  20. redirect_stderr = true
  21. [program:spug-scheduler]
  22. command = bash /data/spug/spug_api/tools/start-scheduler.sh
  23. autostart = true
  24. stdout_logfile = /data/spug/spug_api/logs/scheduler.log
  25. redirect_stderr = true

8. 创建前端nginx配置文件

/etc/nginx/conf.d/spug.conf

  1. server {
  2. listen 80;
  3. server_name _; # 修改为自定义的访问域名
  4. root /data/spug/spug_web/build/;
  5. client_max_body_size 20m; # 该值会影响文件管理器可上传文件的大小限制,请合理调整
  6. gzip on;
  7. gzip_min_length 1k;
  8. gzip_buffers 4 16k;
  9. gzip_http_version 1.1;
  10. gzip_comp_level 7;
  11. gzip_types text/plain text/css text/javascript application/javascript application/json;
  12. gzip_vary on;
  13. location ^~ /api/ {
  14. rewrite ^/api(.*) $1 break;
  15. proxy_pass http://127.0.0.1:9001;
  16. proxy_read_timeout 180s;
  17. proxy_redirect off;
  18. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  19. }
  20. location ^~ /api/ws/ {
  21. rewrite ^/api(.*) $1 break;
  22. proxy_pass http://127.0.0.1:9002;
  23. proxy_http_version 1.1;
  24. proxy_set_header Upgrade $http_upgrade;
  25. proxy_set_header Connection "Upgrade";
  26. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  27. }
  28. location / {
  29. try_files $uri /index.html;
  30. }
  31. }

手动部署 - 图4注意

注意:如果你没有在 spug.conf 中指定 server_name 则需要把 /etc/nginx/nginx.conf 中默认的 server 块注释或删除后才能正常访问, 否则会打开 Nginx 默认页面。

9. 启动服务

  1. # 设置开机启动
  2. systemctl enable nginx
  3. systemctl enable redis
  4. systemctl enable supervisord
  5. # 启动服务
  6. systemctl restart nginx
  7. systemctl restart redis
  8. systemctl restart supervisord

10. 访问测试

通过浏览器访问测试(默认账户密码在第 6 步设置)。

11. 安全建议

  • 请确保安装的 Redis 仅监听在 127.0.0.1。如果需要使用密码认证的 Redis 请参考 如何配置使用带密码的 Redis 服务?
  • 如添加外层代理服务,请正确配置 HTTP HeaderX-Forwarded-ForSpug 会使用该请求头提高安全性(当登用户的 IP 发生变化时 Token 自动失效),参考文档