|
| 1 | +## 快速开始 |
| 2 | + |
| 3 | +使用一句命令开启 Syncplay 服务,是的,就这么简单。 |
| 4 | + |
| 5 | +```bash |
| 6 | +> docker run --rm --net=host dnomd343/syncplay |
| 7 | +Welcome to Syncplay server, ver. 1.7.0 |
| 8 | +``` |
| 9 | + |
| 10 | +> 按下 `Ctrl+C` 将退出服务 |
| 11 | +
|
| 12 | +如果没有意外,您可以在客户端填入服务器 IP 或域名进行验证,默认端口是 `tcp/8999`。若无法连上,请检查您的防火墙设置。 |
| 13 | + |
| 14 | +为了更好地运行服务,我们应当使用以下命令让 Syncplay 在后台运行,并保持启动。 |
| 15 | + |
| 16 | +```bash |
| 17 | +docker run -d --net=host --restart=always --name=syncplay dnomd343/syncplay |
| 18 | +``` |
| 19 | + |
| 20 | +> 您可以使用 `docker ps -a` 看到正在运行的服务,还可以使用 `docker rm -f syncplay` 停止服务。 |
| 21 | +
|
| 22 | +您可以加入更多的参数来实现定制化,例如我们让服务器连接时需要输入密码、禁止聊天、并在进入房间后显示一句欢迎语,使用以下命令。 |
| 23 | + |
| 24 | +> 注意在按下回车前,您必须执行 `docker rm -f syncplay` 移除掉原有的服务,否则它们会发生冲突。 |
| 25 | +
|
| 26 | +```bash |
| 27 | +docker run -d --net=host \ |
| 28 | + --restart=always --name=syncplay \ |
| 29 | + dnomd343/syncplay --disable-chat \ |
| 30 | + --password=PASSWD --motd='HELLO WORLD' |
| 31 | +``` |
| 32 | + |
| 33 | +服务器在必要的时候会被重启,也可能是 Docker 服务或 Syncplay 需要更新,无论是不是预期中的,这个时候将 Syncplay 持久化是很有必要的,这意味着房间数据将会被保存到磁盘上。您需要选择一个工作目录来保存他们,例如 `/etc/syncplay/`,执行以下命令,数据会被保存到 `rooms.db` 文件中。 |
| 34 | + |
| 35 | +```bash |
| 36 | +docker run -d --net=host \ |
| 37 | + --restart=always --name=syncplay \ |
| 38 | + --volume /etc/syncplay/:/data/ \ |
| 39 | + dnomd343/syncplay --persistent |
| 40 | +``` |
| 41 | + |
| 42 | +这个目录还有更多的用途,例如添加 `--enable-stats` 选项将开启统计功能,数据将被保存到目录下 `stats.db` 这个文件中。您还可以在目录下创建 `config.yml` 文件,将配置参数写在里面,Syncplay 启动时将会自动读取,避免在命令行中键入大量参数。 |
| 43 | + |
| 44 | +```yaml |
| 45 | +# /etc/syncplay/config.yml |
| 46 | +password: 'My Password' |
| 47 | +persistent: true |
| 48 | +enable-stats: true |
| 49 | +disable-chat: false |
| 50 | +motd: | |
| 51 | + Hello, here is a syncplay server. |
| 52 | + More information... |
| 53 | +``` |
| 54 | +
|
| 55 | +在实际部署时,开启 TLS 总会是一个好主意(当然它不是必要的,这一步可以跳过),幸运的是,Syncplay 可以很简单地做到这一点。在开始前,您需要准备一个域名,并把它的 DNS 解析到当前服务器上,同时,我们必须拥有它的证书文件。 |
| 56 | +
|
| 57 | +证书的申请可以通过 [`acme.sh`](https://acme.sh/) 、[`certbot`](https://certbot.eff.org/) 或者其他合理的方式进行。总之,您最终会得到一把私钥和一张证书,Syncplay 需要您提供以下三个文件。 |
| 58 | + |
| 59 | ++ `cert.pem` :CA 机构签发的证书 |
| 60 | ++ `chain.pem` :CA 机构的证书链 |
| 61 | ++ `privkey.pem` :证书的私钥文件 |
| 62 | + |
| 63 | +例如在 `acme.sh` 中,可以这样子执行命令,将 `343.re` 这个域名的证书配置保存到 `/etc/ssl/certs/343.re/` 目录下。 |
| 64 | + |
| 65 | +```bash |
| 66 | +acme.sh --install-cert -d 343.re \ |
| 67 | + --cert-file /etc/ssl/certs/343.re/cert.pem \ |
| 68 | + --ca-file /etc/ssl/certs/343.re/chain.pem \ |
| 69 | + --key-file /etc/ssl/certs/343.re/privkey.pem |
| 70 | +``` |
| 71 | + |
| 72 | +现在我们已经准备好了,只需要执行下面的命令,一个更安全更隐私的 Syncplay 服务将会启动。 |
| 73 | + |
| 74 | +```bash |
| 75 | +docker run -d --net=host \ |
| 76 | + --restart=always --name=syncplay \ |
| 77 | + --volume /etc/syncplay/:/data/ \ |
| 78 | + --volume /etc/ssl/certs/343.re/:/certs/ \ |
| 79 | + dnomd343/syncplay --persistent --enable-tls |
| 80 | +``` |
| 81 | + |
| 82 | +> 注意客户端的服务器地址必须与证书匹配,否则连接将会失败。 |
| 83 | + |
| 84 | +需要说明的是,与有些服务不同,Syncplay 在证书发生更新时不需要手动重启,它会自动检测证书的变化,并使用最新的版本。此外,Syncplay 服务端的 TLS 是自适应的,这意味着,即使是不支持 TLS 的旧版本客户端,它们仍然可以正常通讯,但是注意此时安全加密将不再生效。 |
| 85 | + |
| 86 | +## 命令行参数 |
| 87 | + |
| 88 | +您可以通过指定以下命令行参数来定制 Syncplay 服务器。 |
| 89 | + |
| 90 | +> 以下参数是针对 docker 调整过的,与[官方文档](https://man.archlinux.org/man/extra/syncplay/syncplay-server.1)不完全相同,使用时请以此为准。 |
| 91 | + |
| 92 | ++ `--port [PORT]` :Syncplay 服务器监听端口, 默认为 `8999` |
| 93 | + |
| 94 | ++ `--password [PASSWD]` :用户登录服务器的密码,默认不启用 |
| 95 | + |
| 96 | ++ `--motd [MESSAGE]` :用户进入房间的欢迎内容,默认不启用 |
| 97 | + |
| 98 | ++ `--salt [SALT]` :密码加盐,指定随机字符串,用于抵抗哈希攻击(例如彩虹表),默认为空字符串 |
| 99 | + |
| 100 | ++ `--random-salt` :使用随机生成的盐,仅当 `--salt` 未指定时生效,默认不启用 |
| 101 | + |
| 102 | ++ `--isolate-rooms` :开启独立房间,用户将看不到其他房间的用户信息,默认不启用 |
| 103 | + |
| 104 | ++ `--disable-chat` :禁止聊天功能,默认不启用 |
| 105 | + |
| 106 | ++ `--disable-ready` :禁止就绪指示器功能,默认不启用 |
| 107 | + |
| 108 | ++ `--enable-stats` :开启服务器统计功能,数据将被保存到 `stats.db` 文件中,默认不启用 |
| 109 | + |
| 110 | ++ `--enable-tls` :开启 TLS 支持, 证书文件需要挂载到 `/certs/` 目录下,包括 `cert.pem` 、`chain.pem` 、`privkey.pem` 三个文件,默认不启用 |
| 111 | + |
| 112 | ++ `--persistent` :开启房间数据持久化,信息将被保存到 `rooms.db` 文件中,仅当 `--isolate-rooms` 未指定时有效,默认不启用 |
| 113 | + |
| 114 | ++ `--max-username [N]` :用户名最大长度,默认为 `150` |
| 115 | + |
| 116 | ++ `--max-chat-message [N]` :聊天消息最大长度,默认为 `150` |
| 117 | + |
| 118 | ++ `--permanent-rooms [ROOM ...]` :即使播放列表为空时仍会列出的房间,仅当 `--persistent` 指定时有效,默认为空 |
| 119 | + |
| 120 | +您也可以使用以下命令输出帮助信息。 |
| 121 | + |
| 122 | +```bash |
| 123 | +> docker run --rm syncplay --help |
| 124 | +usage: syncplay [-h] [-p PORT] [--password PASSWORD] [--motd MOTD] |
| 125 | + [--salt SALT] [--random-salt] [--isolate-rooms] |
| 126 | + [--disable-chat] [--disable-ready] [--enable-stats] |
| 127 | + [--enable-tls] [--persistent] [--max-username MAX_USERNAME] |
| 128 | + [--max-chat-message MAX_CHAT_MESSAGE] |
| 129 | + [--permanent-rooms [PERMANENT_ROOMS ...]] |
| 130 | +
|
| 131 | +Syncplay Docker Bootstrap |
| 132 | +
|
| 133 | +optional arguments: |
| 134 | + -h, --help show this help message and exit |
| 135 | + -p PORT, --port PORT listen port of syncplay server |
| 136 | + --password PASSWORD authentication of syncplay server |
| 137 | + --motd MOTD welcome text after the user enters the room |
| 138 | + --salt SALT string used to secure passwords |
| 139 | + --random-salt use a randomly generated salt value |
| 140 | + --isolate-rooms room isolation enabled |
| 141 | + --disable-chat disables the chat feature |
| 142 | + --disable-ready disables the readiness indicator feature |
| 143 | + --enable-stats enable syncplay server statistics |
| 144 | + --enable-tls enable tls support of syncplay server |
| 145 | + --persistent enables room persistence |
| 146 | + --max-username MAX_USERNAME |
| 147 | + maximum length of usernames |
| 148 | + --max-chat-message MAX_CHAT_MESSAGE |
| 149 | + maximum length of chat messages |
| 150 | + --permanent-rooms [PERMANENT_ROOMS ...] |
| 151 | + permanent rooms of syncplay server |
| 152 | +``` |
| 153 | + |
| 154 | +## 配置文件 |
| 155 | + |
| 156 | +如果您配置了较多的选项,每次启动时输入大量命令行参数会是相当麻烦且易出错的事情,这个时候可以将它们写到配置文件中。在工作目录中创建 `config.yml` 文件,它使用 YAML 格式,支持命令行中的所有参数,Syncplay 在启动时会自动读取并加载,但需要注意的是,如果命令行指定了同样的参数,将会覆盖配置文件的选项。 |
| 157 | + |
| 158 | +```yaml |
| 159 | +port: 7999 |
| 160 | +salt: 'SALT' |
| 161 | +random-salt: true |
| 162 | +password: 'My Password' |
| 163 | +persistent: true |
| 164 | +enable-tls: true |
| 165 | +enable-stats: true |
| 166 | +isolate-rooms: true |
| 167 | +disable-chat: true |
| 168 | +disable-ready: true |
| 169 | +max-username: 256 |
| 170 | +max-chat-message: 2048 |
| 171 | +permanent-rooms: |
| 172 | + - ROOM_1 |
| 173 | + - ROOM_2 |
| 174 | + - ROOM_3 |
| 175 | +motd: | |
| 176 | + Hello, here is a syncplay server. |
| 177 | + More information... |
| 178 | +``` |
| 179 | + |
| 180 | +## Docker Compose |
| 181 | + |
| 182 | +使用 `docker-compose` 来部署 Syncplay 是一种更优雅的方式,你需要创建一个 `docker-compose.yml` 配置文件,写入以下的示例。 |
| 183 | + |
| 184 | +```yaml |
| 185 | +# /etc/syncplay/docker-compose.yml |
| 186 | +version: '3' |
| 187 | +services: |
| 188 | + syncplay: |
| 189 | + container_name: syncplay |
| 190 | + image: dnomd343/syncplay |
| 191 | + network_mode: host |
| 192 | + restart: always |
| 193 | + volumes: |
| 194 | + - ./:/data/ |
| 195 | +``` |
| 196 | + |
| 197 | +我们将这个文件保存在 `/etc/syncplay/` 目录下,由于使用了相对路径,因此它也同样处于工作目录中,在该目录下执行命令启动 Syncplay 服务。 |
| 198 | + |
| 199 | +```bash |
| 200 | +> docker-compose up |
| 201 | +Recreating syncplay ... done |
| 202 | +Attaching to syncplay |
| 203 | +syncplay | Welcome to Syncplay server, ver. 1.7.0 |
| 204 | +``` |
| 205 | + |
| 206 | +> 添加 `-d` 选项可以让服务在后台运行。 |
| 207 | + |
| 208 | +类似的,您可以映射证书目录来开启 TLS 功能,以及编辑 `config.yml` 文件来配置更多选项。 |
| 209 | + |
| 210 | +## 错误排查 |
| 211 | + |
| 212 | +如果您遇到了任何错误,请先使用 `docker logs syncplay` 命令打印进程输出内容,它可能包含有用的错误信息,您还可以通过指定环境变量 `DEBUG=ON` 来输出更详细的日志。 |
| 213 | + |
| 214 | +```bash |
| 215 | +> docker run --rm --env DEBUG=ON dnomd343/syncplay |
| 216 | +Command line arguments -> Namespace(port=None, password=None, motd=None, salt=None, random_salt=False, isolate_rooms=False, disable_chat=False, disable_ready=False, enable_stats=False, enable_tls=False, persistent=False, max_username=None, max_chat_message=None, permanent_rooms=None) |
| 217 | +Parsed arguments -> {} |
| 218 | +Syncplay startup arguments -> ['--port', '8999', '--salt', ''] |
| 219 | +Welcome to Syncplay server, ver. 1.7.0 |
| 220 | +``` |
| 221 | + |
| 222 | +## 容器构建 |
| 223 | + |
| 224 | +您可以直接从源码中构架出镜像,使用以下命令。 |
| 225 | + |
| 226 | +```bash |
| 227 | +docker build -t syncplay https://github.com/dnomd343/syncplay-docker.git |
| 228 | +``` |
| 229 | + |
| 230 | +您也可以更改源代码来实现自己的定制。 |
| 231 | + |
| 232 | +```bash |
| 233 | +> git clone https://github.com/dnomd343/syncplay-docker.git |
| 234 | +> cd syncplay-docker/ |
| 235 | +# some edit... |
| 236 | +> docker build -t syncplay . |
| 237 | +``` |
| 238 | + |
| 239 | +如果您需要多种架构的镜像,请使用 `buildx` 命令构建。 |
| 240 | + |
| 241 | +```bash |
| 242 | +docker buildx build -t dnomd343/syncplay \ |
| 243 | + --platform=linux/amd64,linux/386,linux/arm64,linux/arm/v7 \ |
| 244 | + https://github.com/dnomd343/syncplay-docker.git --push |
| 245 | +``` |
| 246 | + |
| 247 | +## 许可证 |
| 248 | + |
| 249 | +MIT ©2022 [@dnomd343](https://github.com/dnomd343) |
0 commit comments