From c88e79fd5b6304263b59a40586a451519b6272f8 Mon Sep 17 00:00:00 2001 From: Siyuan Wang Date: Thu, 18 Feb 2021 22:39:50 +0800 Subject: [PATCH] doc: finish translation --- README.md | 2 + README_zh_CN.md | 243 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 245 insertions(+) diff --git a/README.md b/README.md index 1add0d0..2b15bb8 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,7 @@ # Factorio [![Build Status](https://travis-ci.org/factoriotools/factorio-docker.svg?branch=master)](https://travis-ci.org/factoriotools/factorio-docker) ![Updater status](https://img.shields.io/endpoint?label=Updater%20status&logo=a&url=https%3A%2F%2Fhealthchecks.supersandro.de%2Fbadge%2F1a0a7698-445d-4e54-9e4b-f61a1544e01f%2FBO8VukOA%2Fmaintainer.shields) [![Docker Version](https://images.microbadger.com/badges/version/factoriotools/factorio.svg)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Pulls](https://img.shields.io/docker/pulls/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/) [![Docker Stars](https://img.shields.io/docker/stars/factoriotools/factorio.svg?maxAge=600)](https://hub.docker.com/r/factoriotools/factorio/) [![Microbadger Layers](https://images.microbadger.com/badges/image/factoriotools/factorio.svg)](https://microbadger.com/images/factoriotools/factorio "Get your own image badge on microbadger.com") +[中文](./README_zh_CN.md) + * `1.1.26`, `1.1`, `latest`, `stable` [(1.1/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/1.1/Dockerfile) * `1.0.0`, `1.0` [(1.0/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/1.0/Dockerfile) * `0.18.47`, `0.18` [(0.18/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.18/Dockerfile) diff --git a/README_zh_CN.md b/README_zh_CN.md index f782849..e3e48bd 100644 --- a/README_zh_CN.md +++ b/README_zh_CN.md @@ -156,3 +156,246 @@ sudo docker run -d \ ### Mods-模组 +将模组拷贝至 `mods` 目录下,然后重启服务端即可。 + +对于 `0.17` 及以上版本,新增 `UPDATE_MODES_ON_START` 环境变量,如果将其设置为 `true`,在服务端启动时将会更新所有的模组。请注意,应用此设置时,必须通过 docker secrets、环境变量或者在 `server-settings.json` 中填写相应字段来提供一个合法的 [Facotrio 用户名以及 Token](https://www.factorio.com/profile),否则服务端就不会启动。 + +### Scenarios-场景 + +如果你希望新启动一个场景(而不是从某一个存档中启动),你需要通过另一个备选 `entrypoint` 来启动我们的 factorio-docker 镜像:通过运行以下命令,使用 `/factorio/entrypoints` 目录中的示例 entrypoint 文件来启动服务端。仔细观察后就能发现这只是在之前的命令基础上增加了 `--entrypoint` 设置并在最后新增了一个参数用来指示 `scenarios` 目录中想要启动的场景的文件名。 + + +```shell +docker run -d \ + -p 34197:34197/udp \ + -p 27015:27015/tcp \ + -v /opt/factorio:/factorio \ + --name factorio \ + --restart=always \ + --entrypoint "/scenario.sh" \ + factoriotools/factorio \ + MyScenarioName +``` + +### 将场景转换为常规地图 + +如果你想把你的场景导出为一个常规的地图存档,类似启动一个新的场景,我们可以通过一个备选 `entrypoint` 文件来达到这个效果:服务端在运行后会将场景转换成一个常规地图存档放置在你的 `saves` 目录中,然后你就可以像平常那样启动服务端了。 + +```shell +docker run -d \ + -p 34197:34197/udp \ + -p 27015:27015/tcp \ + -v /opt/factorio:/factorio \ + --name factorio \ + --restart=always \ + --entrypoint "/scenario2map.sh" \ + factoriotools/factorio + MyScenarioName +``` + +### RCON + +在 config/rconpw 文件中设置RCON密码。 如果 rconpw 文件不存在,将会自动生成含有随机密码的该文件。 + +如果想要更改密码,请停止服务端,编辑rconpw文件并重启服务端。 + +如果想要禁用RCON,请不要在启动命令中加入 -p 27015:27015/tcp 参数,在宿主机(服务器)中停止暴露rcon端口,这时,RCON将继续在docker容器中运行,但不可达。 + + +### 白名单 (0.15.3+) + +创建文件 `config/server-whitelist.json` 然后将用户名加入到该json中。 + +```json +[ + "you", + "friend" +] +``` + +### 黑名单 (0.17.1+) + +创建文件 `config/server-banlist.json` 然后将用户名加入到该json中。 + +```json +[ + "bad_person", + "other_bad_person" +] +``` + +### 管理员列表 (0.17.1+) + +创建文件 `config/server-adminlist.json` 然后将用户名加入到该json中。 + +```json +[ + "you", + "friend" +] +``` + +### 自定义配置文件 (0.17.x+) + +原始的 factorio 服务端并不支持在配置文件中添加环境变量,这里提供一个变通办法:通过在 docker-compose 中使用 `envsubst` 命令,在服务端启动时根据环境变量来动态生成配置文件: + +下面的例子将用相应的环境变量来填充 `server-settings.json` 中的字段。 + +```yaml +factorio_1: + image: factoriotools/factorio + ports: + - "34197:34197/udp" + volumes: + - /opt/factorio:/factorio + - ./server-settings.json:/server-settings.json + environment: + - INSTANCE_NAME=Your Instance's Name + - INSTANCE_DESC=Your Instance's Description + entrypoint: /bin/sh -c "mkdir -p /factorio/config && envsubst < /server-settings.json > /factorio/config/server-settings.json && exec /docker-entrypoint.sh" +``` + +`server-settings.json` 中可能提供一些供环境变量来替换的字段: + +```json +"name": "${INSTANCE_NAME}", +"description": "${INSTANCE_DESC}", +``` + +### 容器相关的细节 + +[保持简单](http://wiki.c2.com/?KeepItSimple)的哲学。 + ++ 服务端应当可以自启动 ++ 在环境变量和配置文件中倾向于配置文件 ++ 只使用一个数据卷(挂载目录) + +### 数据卷 + +为了保持简单,我们的 docker 服务端只使用一个数据卷挂载到容器中的 `/factorio` 目录。其中包含了所有的配置,模组和存档。 + +在这个数据卷中所有的文件应当被 uid 为 845 的 factorio 专有用户所拥有(为了安全) + +```text + factorio + |-- config + | |-- map-gen-settings.json + | |-- map-settings.json + | |-- rconpw + | |-- server-adminlist.json + | |-- server-banlist.json + | |-- server-settings.json + | `-- server-whitelist.json + |-- mods + | `-- fancymod.zip + `-- saves + `-- _autosave1.zip +``` + +### Docker Compose + +[Docker Compose](https://docs.docker.com/compose/install/) 提供了一种便捷的容器运行方式。 + +首先获取一个 [docker-compose.yml](https://github.com/factoriotools/factorio-docker/blob/master/0.17/docker-compose.yml) 文件。假设你准备使用我们提供的: + +```shell +git clone https://github.com/factoriotools/factorio-docker.git +cd docker_factorio_server/0.17 +``` + +或者假设你想自己编写一个: + +```shell +version: '2' +services: + factorio: + image: factoriotools/factorio + ports: + - "34197:34197/udp" + - "27015:27015/tcp" + volumes: + - /opt/factorio:/factorio +``` + +现在通过 cd 命令进入到 `docker-compose.yml` 所在的目录然后运行下面的命令: + +```shell +sudo mkdir -p /opt/factorio +sudo chown 845:845 /opt/factorio +sudo docker-compose up -d +``` + +### 端口 + +- `34197/udp` - 游戏服务端(必要)。可以通过改变 `PORT` 环境变量来改变。 +- `27015/tcp` - RCON(可选)。 + +## 局域网游戏 + +确保 `server-settings.json` 中的 `lan` 字段被设置为 `true`。 + +```shell + "visibility": + { + "public": false, + "lan": true + }, +``` + +在启动服务端时假如 `--network=host` 参数,从而客户端可以自动找到局域网游戏,参考 快速入门 章节。 + +```shell +sudo docker run -d \ + --network=host \ + -p 34197:34197/udp \ + -p 27015:27015/tcp \ + -v /opt/factorio:/factorio \ + --name factorio \ + --restart=always \ + factoriotools/factorio +``` + +## 在其他平台上部署 + +### Vagrant + +[Vagrant](https://www.vagrantup.com/) 是一种通过虚拟机来运行 Docker 的便捷方式。 在 [Factorio Vagrant box repository](https://github.com/dtandersen/factorio-lan-vagrant) 中有一个示例的 Vagrantfile。 + +对于局域网游戏,Vagrant 虚拟机需要一个内部 IP 从而使游戏可达。一种方式是通过在一个空开网络中部署。虚拟机使用 DHCP 方式来获取一个 IP 地址。同时必须转发到 34197 端口。 + +```ruby + config.vm.network "public_network" + config.vm.network "forwarded_port", guest: 34197, host: 34197 +``` + +### AWS 部署 + +如果你想找一个傻瓜教程,请看这个[仓库](https://github.com/m-chandler/factorio-spot-pricing)。这个仓库中包含一个可以让你在几分钟内在 AWS 上搭建服务端的 CloudFormation 模板。同时它支持 Spot Pricing 因此费用会非常便宜,而且你可以在不用的时候把服务器关掉。 + +## 疑难杂症 + +### 我可以在服务器列表中看到我的服务器但就是无法连接 + +查看 log,如果有一行说 `Own address is RIGHT IP:WRONG PORT`,那么这个问题就有可能是 Docker Proxy 导致的。 如果 IP 和端口都是正确的,那么有可能是端口转发或者防火墙出了问题。 + +在默认情况下,Docker 通过一个代理来转发网络请求。这个代理会改变 UDP 端口,因此会监测到上面的端口错误。更多细节请移步 *[Incorrect port detected for docker hosted server](https://forums.factorio.com/viewtopic.php?f=49&t=35255)*。 + +为了修复错误端口问题,在启动 Docker 服务时加上 `--userland-proxy=false`。这样一来 Docker 就会通过 iptables 来转发请求从而不走代理。可以通过设置 `DOCKER_OPTS` 环境变量或者改变 Docker systemd service 中的 `ExecStart` 字段来添加这一参数。不同的操作系统可能有不同的配置方式。 + +### 我不用 34197 端口就没人可以连我的服务器 + +如果一定要改端口,请使用 `PORT` 环境变量更改。例如 `docker run -e PORT=34198`。这样会更改端口监测中的目标端口。通过 `-p 34198:34197` 方式更改端口对于私人服务器来说是可行的,但这样一来服务器浏览器就没有办法检测到正确的端口了。 + +## 贡献者 + +* [dtandersen](https://github.com/dtandersen) - Maintainer +* [Fank](https://github.com/Fankserver) - Programmer of the Factorio watchdog that keeps the version up-to-date. +* [SuperSandro2000](https://github.com/supersandro2000) - CI Guy, Maintainer and runner of the Factorio watchdog. Contributed version updates and wrote the Travis scripts. +* [DBendit](https://github.com/DBendit/docker_factorio_server) - Coded admin list, ban list support and contributed version updates +* [Zopanix](https://github.com/zopanix/docker_factorio_server) - Original Author +* [Rfvgyhn](https://github.com/Rfvgyhn/docker-factorio) - Coded randomly generated RCON password +* [gnomus](https://github.com/gnomus/docker_factorio_server) - Coded wite listing support +* [bplein](https://github.com/bplein/docker_factorio_server) - Coded scenario support +* [jaredledvina](https://github.com/jaredledvina/docker_factorio_server) - Contributed version updates +* [carlbennett](https://github.com/carlbennett) - Contributed version updates and bugfixes +* [Thrimbda](https://github.com/Thrimbda) - 中文翻译