未分类

Lljxww.Publisher说明文档

​ 此工具分为客户端与服务端, 使用命令通过WebApi的形式向目标服务器指定目录发布(覆盖前会自动备份源文件)文件.

服务器配置

Linux

在Linux上建议使用进程管理工具Supervisor统一管理服务. 有关Supervisor的详细信息请自行查阅.

服务默认使用6681端口, 请保证客户端可正常访问服务器的6681端口.

服务的supervisor配置文件参考:

1
2
3
4
5
6
7
8
9
10
11
12
[program:PublisherServer]
command=/bin/bash -c "dotnet Publisher.Server.dll"
# Publisher.Server在服务器上的路径
directory=/opt/publisher-server
stderr_logfile=/var/log/supervisor/ps.error.log
stdout_logfile=/var/log/supervisor/ps.stdout.log
environment=ASPNETCORE_ENVIRONMENT=Development,ASPNETCORE_URLS="http://*:6681"
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=3

Windows

确保Windows防火请开放了6681端口的入站规则, windows下可以直接运行服务端文件目录的Publisher.Server.exe启动服务. 但是应用窗口一旦关闭就会停止服务.

如需在IIS上托管服务, 请自行参考微软官方文档了解如何使用.

使用说明

  1. 修改配置文件 appsettings.json, 将服务名YOUR_SERVICE_NAME和对应的服务器ip及服务在服务器上的绝对路径填写完整:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    {
    "ServerConfig": {
    "Services": [
    {
    "ServiceName": "{YOUR_SERVICE_NAME1}",
    "Servers": [
    {
    "IP": "{SERVER_IP_1}",
    "ServicePath": "{APP_PATH_IN_SERVER_FILE_SYSTEM}"
    },
    {
    "IP": "{SERVER_IP_1}",
    "ServicePath": "{APP_PATH_IN_SERVER_FILE_SYSTEM}"
    },
    {
    "IP": "{SERVER_IP_1}",
    "ServicePath": "{APP_PATH_IN_SERVER_FILE_SYSTEM}"
    }
    ...
    ]
    },
    {
    "ServiceName": "{YOUR_SERVICE_NAME2}",
    "Servers": [
    {
    "IP": "{SERVER_IP_1}",
    "ServicePath": "{APP_PATH_IN_SERVER_FILE_SYSTEM}"
    },
    {
    "IP": "{SERVER_IP_1}",
    "ServicePath": "{APP_PATH_IN_SERVER_FILE_SYSTEM}"
    },
    {
    "IP": "{SERVER_IP_1}",
    "ServicePath": "{APP_PATH_IN_SERVER_FILE_SYSTEM}"
    }
    ...
    ]
    }
    ...
    ]
    }
    }
  2. 授予文件可执行权限(仅Linux)

    1
    chmod +x Publisher
  3. 确保上一步中目标服务器已经正确部署Publisher.Server服务, 并开通TCP/6681端口的入站防火墙规则. 切换cmd/shell到客户端目录, 运行对应架构的客户端:

    Linux

    1
    2
    3
    4
    5
    # 发布指定目录中的文件到指定的服务
    ./Publisher publish -p {PATH_TO_RELEASE_FILE_OR_DIRECTORY} -n {YOUR_SERVICE_NAME}

    # 回滚文件(文件名必须是已发布文件的备份文件名)
    ./Publisher revert -b {BACKUP_FILE_NAME} -n {YOUR_SERVICE_NAME}

    Windows

    1
    2
    3
    4
    5
    # 发布指定目录中的文件到指定的服务
    ./Publisher.exe publish -p {PATH_TO_RELEASE_FILE_OR_DIRECTORY} -n {YOUR_SERVICE_NAME}

    # 回滚文件(文件名必须是已发布文件的备份文件名)
    ./Publisher.exe revert -b {BACKUP_FILE_NAME} -n {YOUR_SERVICE_NAME}

    完整的参数信息如下:

    参数名 类型 含义
    -p string 必填. 要发布文件(文件夹)的路径
    -n string 必填. 目标服务器, 即客户端配置文件中配置的{YOUR_SERVICE_NAME}
    -d boolean 可选. 是否删除目标文件夹中的原始文件. 无论是否删除, 都会默认备份原文件到Publisher.Server目录的”files/backup_files”文件夹.
    -v string 可选. 要发布的服务的版本号, 将记录在清单文件manifest.json中
    -m string 可选. 要发布的服务的release note, 将记录在清单文件manifest.json中, 目前仅支持英文
    -s string 可选. 发布后执行的脚本名, 默认为”publish-script”,无扩展名. 服务在发布后如果探测到有此文件, 将会使用系统的shell程序来运行此段代码(Windows使用cmd.exe, Linux使用bash), 请务必保证此文件与目标架构兼容, 且不会造成灾难性后果

文件存储目录

  1. 客户端中, 用户上传的文件/文件夹将在发送前统一打包为zip格式, 存放目录为 {CLIENT_PATH}/files/archive_files, 文件名为 {原文件/文件夹名}-{当前时间yyyyMMddHHmmss}.zip

  2. 服务端中, 客户端发送的zip文件将存放在{SERVICE_PATH}/files/upload_files目录中

  3. 服务端在执行覆盖操作前, 会将原文件以文件名 {原文件/文件夹名}-{当前时间yyyyMMddHHmmss}.zip备份到{SERVICE_PATH}/files/backup_files目录下.

清单文件

使用此工具发布的文件中, 系统会在打包前生成一个清单文件(manifest.json), 共同打包到zip中. 清单文件记录了以下信息:

  • 文件名
  • 服务名
  • 目标服务器
  • 发布时间
  • 文件列表
  • 应用版本
  • 发布说明

同时, 此文件也会在执行回滚操作时作为回滚的信息依据.

清单文件实例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{
"GenerateTime": "2021-07-22T09:11:15.1300793+08:00",
"ClientVersion": "v0.1",
"ServerVersion": "v0.1",
"Servers": [
{
"IP": "localhost",
"Port": "6681",
"ServicePath": "d:\\Downloads\\test"
}
],
"AppName": "localhost",
"AppVersion": "0.1",
"ReleaseNote": "this is release note",
"FilesInfo": [
"ChromeSetup.exe"
]
}
分享到