HEX
Server: Apache/2.4.54 (Win64) OpenSSL/1.1.1p PHP/7.4.30
System: Windows NT website-api 10.0 build 20348 (Windows Server 2016) AMD64
User: SYSTEM (0)
PHP: 7.4.30
Disabled: NONE
Upload Files
File: C:/github_repos/ho-xsj-website/docs/prod.md
目前,xsj主站部署于阿里云

ip地址116.62.16.4,通过命令```ssh root@116.62.16.4```登录

服务器上同时部署了cdn站点,托管了xsj所有的静态资源,比如图片。还有后端api服务也部署于此

本文给出的部署指南适用于xsj-website和xsj-api两个项目

首先安装nginx和docker,然后去阿里云下载购买的HTTPS证书文件上传至服务器

## 部署环境软件需求:

nginx docker

## nginx重启命令

当需要重启nginx或者重启了服务器执行这个命令:

```service nginx restart```

## docker damon 重启命令

当需要重启docker或者重启了服务器需要执行该命令:

```sudo service docker restart``` 或者```systemctl start docker```

## api服务启动脚本:

首先请确保docker正常的运行

接下来写一份api_production_config.py放置于root主目录下,参考如下:

```python
# import os
# basedir = os.path.abspath(os.path.dirname(__file__))
class ProductionConfig:
    SECRET_KEY = 'u6NHtQ9KataElcC8k'
    PASSWOED_SALT = '@>U?>5HI>@I&9D<>HU&'
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://cjapi:v%2WG##uHmvA@rm-bp1l42uu535r13gcd0o.mysql.rds.aliyuncs.com/chiji'
    # SQLALCHEMY_DATABASE_URI = 'sqlite:///' + os.path.join(basedir, 'data-dev.sqlite')
    # SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_POOL_SIZE = 20
    JSON_AS_ASCII = False
    # 设置上传文件最大为20M
    MAX_CONTENT_LENGTH = 20 * 1024 * 1024
    MAIL_SERVER = 'smtp.hexiaoxiang.com'
    MAIL_PORT = '465'
    MAIL_USERNAME = 'sospartan@hexiaoxiang.com'
    MAIL_PASSWORD = 'Hxx123456'

    @staticmethod
    def init_app(app):
        pass
```

根据需要设置相关字段即可

```bash
#!/bin/sh -eu

NAME="api"
INST=$NAME"inst"
IMAGE=registry-vpc.cn-hangzhou.aliyuncs.com/fmjs/$NAME:latest
# pull
docker pull $IMAGE

#stop
docker stop $INST

docker rm $INST

#start
docker run --name=$INST \
        -d \
    --restart=always \
    -v /root/cjapi/$NAME:/app/logs \
    -v /etc/localtime:/etc/localtime \
    -v /root/api_production_config.py:/app/production_config.py \
    --network=host \
    $IMAGE
```

保存并执行该脚本即可。


## 主站启动脚本

同上,也需要写一份web_production_config.py文件用于生产环境相关配置,放置于/root/下面,示范如下:

```python
class ProductionConfig:
    SECRET_KEY = 'u6NHtQ9KataElcC9k'
    PASSWOED_SALT = '7>?>5HI>@UI&9D<>HU&'
    SQLALCHEMY_DATABASE_URI = 'mysql+pymysql://hqapi:sHVW64gsjYZH@rm-bp18ft943743his05.mysql.rds.aliyuncs.com/xsjcore?charset=utf8mb4'
    SQLALCHEMY_COMMIT_ON_TEARDOWN = True
    SQLALCHEMY_TRACK_MODIFICATIONS = False
    SQLALCHEMY_RECORD_QUERIES = True
    JSON_AS_ASCII = False
    # 设置上传文件最大为20M
    MAX_CONTENT_LENGTH = 20 * 1024 * 1024

    @staticmethod
    def init_app(app):
        pass
```

```bash
NAME="website1"
INST=$NAME"inst"
IMAGE=registry.cn-hangzhou.aliyuncs.com/xsjmath/$NAME:latest

# pull
docker pull $IMAGE

#stop
docker stop $INST
docker rm $INST

#start
docker run --name=$INST \
        -d \
    --restart=always \
    -v /home/xsjweb/dv/website:/app/logs \
    -v /etc/localtime:/etc/localtime \
    -v /root/web_production_config.py:/app/production_config.py \
    --network=host \
    $IMAGE

# log
docker logs $INST
```