1
0
mirror of https://github.com/bplein/factorio-docker.git synced 2025-01-10 03:16:41 +02:00

Remove very out of date env section, format

This commit is contained in:
Sandro 2019-11-25 08:43:10 +01:00 committed by GitHub
parent 7ec79a6e1b
commit 4bf909979a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

205
README.md
View File

@ -5,7 +5,7 @@
* `0.15.40`, `0.15` [(0.15/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.15/Dockerfile)
* `0.14.23`, `0.14` [(0.14/Dockerfile)](https://github.com/factoriotools/factorio-docker/blob/master/0.14/Dockerfile)
*Tag descriptions*
## Tag descriptions
* `latest` - most up-to-date version (may be experimental).
* `stable` - version declared stable on [factorio.com](https://www.factorio.com).
@ -13,8 +13,7 @@
* `0.x.y` - a specific version.
* `0.x-z` - incremental fix for that version.
# What is Factorio?
## What is Factorio?
[Factorio](https://www.factorio.com) is a game in which you build and maintain factories.
@ -24,14 +23,13 @@ The game is very stable and optimized for building massive factories. You can cr
NOTE: This is only the server. The full game is available at [Factorio.com](https://www.factorio.com), [Steam](https://store.steampowered.com/app/427520/), [GOG.com](https://www.gog.com/game/factorio) and [Humble Bundle](https://www.humblebundle.com/store/factorio).
## Usage
# Usage
## Quick Start
### Quick Start
Run the server to create the necessary folder structure and configuration files. For this example data is stored in `/opt/factorio`.
```
```shell
sudo mkdir -p /opt/factorio
sudo chown 845:845 /opt/factorio
sudo docker run -d \
@ -55,36 +53,36 @@ The `chown` command is needed because in 0.16+, we no longer run the game server
Check the logs to see what happened:
```
```shell
docker logs factorio
```
Stop the server:
```
```shell
docker stop factorio
```
Now there's a `server-settings.json` file in the folder `/opt/factorio/config`. Modify this to your liking and restart the server:
```
```shell
docker start factorio
```
Try to connect to the server. Check the logs if it isn't working.
## Console
### Console
To issue console commands to the server, start the server in interactive mode with `-it`. Open the console with `docker attach` and then type commands.
docker run -d -it \
--name factorio \
factoriotools/factorio
docker attach factorio
```shell
docker run -d -it \
--name factorio \
factoriotools/factorio
docker attach factorio
```
## Upgrading
### Upgrading
Before upgrading backup the save. It's easy to make a save in the client.
@ -92,14 +90,15 @@ Ensure `-v` was used to run the server so the save is outside of the Docker cont
Delete the container and refresh the image:
docker stop factorio
docker rm factorio
docker pull factoriotools/factorio
```shell
docker stop factorio
docker rm factorio
docker pull factoriotools/factorio
```
Now run the server as before. In about a minute the new version of Factorio should be up and running, complete with saves and config!
## Saves
### Saves
A new map named `_autosave1.zip` is generated the first time the server is started. The `map-gen-settings.json` and `map-settings.json` files in `/opt/factorio/config` are used for the map settings. On subsequent runs the newest save is used.
@ -107,15 +106,13 @@ To load an old save stop the server and run the command `touch oldsave.zip`. Thi
To generate a new map stop the server, delete all of the saves and restart the server.
## Specify a save directly
> New in 0.17.79-2 or later
#### Specify a save directly (0.17.79-2+)
You can specify a specific save to load by configuring the server through a set of environment variables:
To load an existing save set `SAVE_NAME` to the name of your existing save file located within the `saves` directory, without the `.zip` extension:
```
```shell
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
@ -129,7 +126,7 @@ sudo docker run -d \
To generate a new map set `ENABLE_GENERATE_NEW_MAP_SAVE=true` and specify `SAVE_NAME`:
```
```shell
sudo docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
@ -142,18 +139,17 @@ sudo docker run -d \
factoriotools/factorio
```
## Mods
### Mods
Copy mods into the mods folder and restart the server.
As of 0.17 a new environment variable was added ``UPDATE_MODS_ON_START`` which if set to ``true`` will cause the mods get to updated on server start. If set a valid [Factorio Username and Token](https://www.factorio.com/profile) must be supplied or else the server will not start. They can either be set as docker secrets, environment variables, or pulled from the server-settings.json file.
## Scenarios
### Scenarios
If you want to launch a scenario from a clean start (not from a saved map) you'll need to start the docker image from an alternate entrypoint. To do this, use the example entrypoint file stored in the /factorio/entrypoints directory in the volume, and launch the image with the following syntax. Note that this is the normal syntax with the addition of the --entrypoint setting AND the additional argument at the end, which is the name of the Scenario in the Scenarios folder.
```
```shell
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
@ -165,11 +161,11 @@ docker run -d \
MyScenarioName
```
## Converting Scenarios to Regular Maps
### Converting Scenarios to Regular Maps
If you would like to export your scenario to a saved map, you can use the example entrypoint similar to the Scenario usage above. Factorio will run once, converting the Scenario to a saved Map in your saves directory. A restart of the docker image using the standard options will then load that map, just as if the scenario were just started by the Scenarios example noted above.
```
```shell
docker run -d \
-p 34197:34197/udp \
-p 27015:27015/tcp \
@ -181,7 +177,7 @@ docker run -d \
MyScenarioName
```
## RCON
### RCON
Set the RCON password in the `rconpw` file. A random password is generated if `rconpw` doesn't exist.
@ -189,60 +185,67 @@ To change the password, stop the server, modify `rconpw`, and restart the server
To "disable" RCON don't expose port 27015, i.e. start the server without `-p 27015:27015/tcp`. RCON is still running, but nobody can to connect to it.
## Whitelisting (0.15.3+)
### Whitelisting (0.15.3+)
Create file `config/server-whitelist.json` and add the whitelisted users.
[
"you",
"friend"
]
```json
[
"you",
"friend"
]
```
## Banlisting (0.17.1+)
### Banlisting (0.17.1+)
Create file `config/server-banlist.json` and add the banlisted users.
[
"bad_person",
"other_bad_person"
]
```json
[
"bad_person",
"other_bad_person"
]
```
## Adminlisting (0.17.1+)
### Adminlisting (0.17.1+)
Create file `config/server-adminlist.json` and add the adminlisted users.
[
"you",
"friend"
]
```json
[
"you",
"friend"
]
```
## Customize configuration files (0.17.x+)
### Customize configuration files (0.17.x+)
Out-of-the box, factorio does not support environment variables inside the configuration files. A workaround is the usage of `envsubst` which generates the configuration files dynamically during startup from environment variables set in docker-compose:
Example which replaces the server-settings.json:
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"
```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"
```
The `server-settings.json` file may then contain the variable references like this:
"name": "${INSTANCE_NAME}",
"description": "${INSTANCE_DESC}",
```json
"name": "${INSTANCE_NAME}",
"description": "${INSTANCE_DESC}",
```
# Container Details
## Container Details
The philosophy is to [keep it simple](http://wiki.c2.com/?KeepItSimple).
@ -250,26 +253,27 @@ The philosophy is to [keep it simple](http://wiki.c2.com/?KeepItSimple).
* Prefer configuration files over environment variables.
* Use one volume for data.
## Volumes
### Volumes
To keep things simple, the container uses a single volume mounted at `/factorio`. This volume stores configuration, mods, and saves.
The files in this volume should be owned by the factorio user, uid 845.
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
```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
@ -277,14 +281,14 @@ The files in this volume should be owned by the factorio user, uid 845.
First get a [docker-compose.yml](https://github.com/factoriotools/factorio-docker/blob/master/0.17/docker-compose.yml) file. To get it from this repository:
```
```shell
git clone https://github.com/factoriotools/factorio-docker.git
cd docker_factorio_server/0.17
```
Or make your own:
```
```shell
version: '2'
services:
factorio:
@ -298,30 +302,22 @@ services:
Now cd to the directory with docker-compose.yml and run:
```
```shell
sudo mkdir -p /opt/factorio
sudo chown 845:845 /opt/factorio
sudo docker-compose up -d
```
## Ports
### Ports
* `34197/udp` - Game server (required).
* `27015/tcp` - RCON (optional).
## Environment Variables
* `PORT` (0.15+) - Start the server on an alternate port, .e.g. `docker run -e "PORT=34198"`.
* `RCON_PORT` (0.16+) - Start the RCON on an alternate port, .e.g. `docker run -e "RCON_PORT=34198"`.
## LAN Games
Ensure the `lan` setting in server-settings.json is `true`.
```
```shell
"visibility":
{
"public": false,
@ -331,7 +327,7 @@ Ensure the `lan` setting in server-settings.json is `true`.
Start the container with the `--network=host` option so clients can automatically find LAN games. Refer to the Quick Start to create the `/opt/factorio` directory.
```
```shell
sudo docker run -d \
--network=host \
-p 34197:34197/udp \
@ -342,24 +338,26 @@ sudo docker run -d \
factoriotools/factorio
```
## Vagrant
## Deploy to other plaforms
### Vagrant
[Vagrant](https://www.vagrantup.com/) is a easy way to setup a virtual machine (VM) to run Docker. The [Factorio Vagrant box repository](https://github.com/dtandersen/factorio-lan-vagrant) contains a sample Vagrantfile.
For LAN games the VM needs an internal IP in order for clients to connect. One way to do this is with a public network. The VM uses DHCP to acquire an IP address. The VM must also forward port 34197.
```
```ruby
config.vm.network "public_network"
config.vm.network "forwarded_port", guest: 34197, host: 34197
```
## Amazon Web Services (AWS) Deployment
### Amazon Web Services (AWS) Deployment
If you're looking for a simple way to deploy this to the Amazon Web Services Cloud, check out the [Factorio Server Deployment (CloudFormation) repository](https://github.com/m-chandler/factorio-spot-pricing). This repository contains a CloudFormation template that will get you up and running in AWS in a matter of minutes. Optionally it uses Spot Pricing so the server is very cheap, and you can easily turn it off when not in use.
## Troubleshooting
**My server is listed in the server browser, but nobody can connect**
### My server is listed in the server browser, but nobody can connect
Check the logs. If there is the line `Own address is RIGHT IP:WRONG PORT`, then this could be caused by the Docker proxy. If the the IP and port is correct it's probably a port forwarding or firewall issue instead.
@ -367,12 +365,11 @@ By default, Docker routes traffic through a proxy. The proxy changes the source
To fix the incorrect port, start the Docker service with the `--userland-proxy=false` switch. Docker will route traffic with iptables rules instead of a proxy. Add the switch to the `DOCKER_OPTS` environment variable or `ExecStart` in the Docker systemd service definition. The specifics vary by operating system.
**When I run a server on a port besides 34197 nobody can connect from the server browser**
### When I run a server on a port besides 34197 nobody can connect from the server browser
Use the `PORT` environment variable to start the server on the a different port, .e.g. `docker run -e "PORT=34198"`. This changes the source port on the packets used for port detection. `-p 34198:34197` works fine for private servers, but the server browser detects the wrong port.
# Contributors
## Contributors
* [dtandersen](https://github.com/dtandersen) - Maintainer
* [Fank](https://github.com/Fankserver) - Programmer of the Factorio watchdog that keeps the version up-to-date.