mirror of
https://github.com/luzifer-docker/factorio.git
synced 2024-11-08 14:50:03 +00:00
Initial version
This commit is contained in:
parent
49f66eab7c
commit
d8b6a3c4d3
5 changed files with 154 additions and 0 deletions
22
Dockerfile
Normal file
22
Dockerfile
Normal file
|
@ -0,0 +1,22 @@
|
|||
FROM debian
|
||||
|
||||
ENV FACTORIO_SERVER_VERSION 0.14.21
|
||||
|
||||
ENTRYPOINT ["/opt/defaults/start.sh"]
|
||||
EXPOSE 34197/udp
|
||||
CMD ["--help"]
|
||||
|
||||
ADD https://www.factorio.com/get-download/${FACTORIO_SERVER_VERSION}/headless/linux64 /tmp/factorio.tgz
|
||||
ADD . /opt/defaults
|
||||
|
||||
RUN set -ex \
|
||||
&& mkdir -p /opt \
|
||||
&& useradd -d /opt/factorio -M -u 10000 factorio \
|
||||
&& tar -C /opt -x -z -f /tmp/factorio.tgz \
|
||||
&& chown -R factorio:factorio /opt/factorio \
|
||||
&& rm /tmp/factorio.tgz
|
||||
|
||||
USER factorio
|
||||
|
||||
VOLUME /data
|
||||
WORKDIR /data
|
17
README.md
Normal file
17
README.md
Normal file
|
@ -0,0 +1,17 @@
|
|||
# Luzifer / factorio
|
||||
|
||||
This repository contains a Docker setup for a headless [Factorio](https://www.factorio.com/) server.
|
||||
|
||||
## Usage
|
||||
|
||||
You need to have a directory to mount into your container which will afterwards contain your map, saves and also the configuration. In this example I will use `/data/factorio` as storage directory.
|
||||
|
||||
1. At first you maybe want to initialize the configuration files:
|
||||
`docker run --rm -v /data/factorio:/data quay.io/luzifer/factorio init`
|
||||
2. Afterwards you can edit the two settings files create in `/data/factorio` and adjust your settings.
|
||||
3. If you are okay with your `map-gen-settings.json` you can generate a map file:
|
||||
`docker run --rm -v /data/factorio:/data quay.io/luzifer/factorio create`
|
||||
4. After the map has been generated (and for every future start) you can start the server:
|
||||
`docker run --rm -v /data/factorio:/data -e 34197:34197 quay.io/luzifer/factorio start`
|
||||
|
||||
The server will expose the port `34197/udp` for the game. The above command already exposes that port to the host machine.
|
20
map-gen-settings.json
Normal file
20
map-gen-settings.json
Normal file
|
@ -0,0 +1,20 @@
|
|||
{
|
||||
"_comment": "Sizes can be specified as none, very-low, low, normal, high, very-high",
|
||||
|
||||
"terrain_segmentation": "normal",
|
||||
"water": "normal",
|
||||
"width": 0,
|
||||
"height": 0,
|
||||
"starting_area": "normal",
|
||||
"peaceful_mode": false,
|
||||
"autoplace_controls":
|
||||
{
|
||||
"coal": {"frequency": "normal", "size": "normal", "richness": "normal"},
|
||||
"copper-ore": {"frequency": "normal", "size": "normal", "richness": "normal"},
|
||||
"crude-oil": {"frequency": "normal", "size": "normal", "richness": "normal"},
|
||||
"enemy-base": {"frequency": "normal", "size": "normal", "richness": "normal"},
|
||||
"iron-ore": {"frequency": "normal", "size": "normal", "richness": "normal"},
|
||||
"stone": {"frequency": "normal", "size": "normal", "richness": "normal"}
|
||||
}
|
||||
}
|
||||
|
61
server-settings.json
Normal file
61
server-settings.json
Normal file
|
@ -0,0 +1,61 @@
|
|||
{
|
||||
"name": "Name of the game as it will appear in the game listing",
|
||||
"description": "Description of the game that will appear in the listing",
|
||||
"tags": ["game", "tags"],
|
||||
|
||||
"_comment_max_players": "Maximum number of players allowed, admins can join even a full server. 0 means unlimited.",
|
||||
"max_players": 0,
|
||||
|
||||
"_comment_visibility": ["public: Game will be published on the official Factorio matching server",
|
||||
"lan: Game will be broadcast on LAN"],
|
||||
"visibility":
|
||||
{
|
||||
"public": false,
|
||||
"lan": true
|
||||
},
|
||||
|
||||
"_comment_credentials": "Your factorio.com login credentials. Required for games with visibility public",
|
||||
"username": "",
|
||||
"password": "",
|
||||
|
||||
"_comment_token": "Authentication token. May be used instead of 'password' above.",
|
||||
"token": "",
|
||||
|
||||
"game_password": "",
|
||||
|
||||
"_comment_require_user_verification": "When set to true, the server will only allow clients that have a valid Factorio.com account",
|
||||
"require_user_verification": true,
|
||||
|
||||
"_comment_max_upload_in_kilobytes_per_second" : "optional, default value is 0. 0 means unlimited.",
|
||||
"max_upload_in_kilobytes_per_second": 0,
|
||||
|
||||
"_comment_minimum_latency_in_ticks": "optional one tick is 16ms in default speed, default value is 0. 0 means no minimum.",
|
||||
"minimum_latency_in_ticks": 0,
|
||||
|
||||
"_comment_ignore_player_limit_for_returning_players": "Players that played on this map already can join even when the max player limit was reached.",
|
||||
"ignore_player_limit_for_returning_players": false,
|
||||
|
||||
"_comment_allow_commands": "possible values are, true, false and admins-only",
|
||||
"allow_commands": "admins-only",
|
||||
|
||||
"_comment_autosave_interval": "Autosave interval in minutes",
|
||||
"autosave_interval": 10,
|
||||
|
||||
"_comment_autosave_slots": "server autosave slots, it is cycled through when the server autosaves.",
|
||||
"autosave_slots": 5,
|
||||
|
||||
"_comment_afk_autokick_interval": "How many minutes until someone is kicked when doing nothing, 0 for never.",
|
||||
"afk_autokick_interval": 0,
|
||||
|
||||
"_comment_auto_pause": "Whether should the server be paused when no players are present.",
|
||||
"auto_pause": true,
|
||||
|
||||
"only_admins_can_pause_the_game": true,
|
||||
|
||||
"_comment_autosave_only_on_server": "Whether autosaves should be saved only on server or also on all connected clients. Default is true.",
|
||||
"autosave_only_on_server": true,
|
||||
|
||||
"_comment_admins": "List of case insensitive usernames, that will be promoted immediately",
|
||||
"admins": []
|
||||
}
|
||||
|
34
start.sh
Executable file
34
start.sh
Executable file
|
@ -0,0 +1,34 @@
|
|||
#!/bin/bash -e
|
||||
|
||||
set -o pipefail
|
||||
|
||||
ACTION=$1
|
||||
BINARY="/opt/factorio/bin/x64/factorio"
|
||||
MAP_FILE="mapfile.zip"
|
||||
|
||||
case ${ACTION} in
|
||||
"init")
|
||||
echo "Initializing files in case they do not exist: map-gen-settings.json / server-settings.json"
|
||||
[ -e map-gen-settings.json ] || cp /opt/defaults/map-gen-settings.json map-gen-settings.json
|
||||
[ -e server-settings.json ] || cp /opt/defaults/server-settings.json server-settings.json
|
||||
;;
|
||||
"create")
|
||||
echo "Creating map at ${MAP_FILE} with settings from map-gen-settings.json"
|
||||
[ -e map-gen-settings.json ] || cp /opt/defaults/map-gen-settings.json map-gen-settings.json
|
||||
exec ${BINARY} --map-gen-settings map-gen-settings.json --create ${MAP_FILE}
|
||||
;;
|
||||
"start")
|
||||
echo "Starting game from map file ${MAP_FILE} with settings from server-settings.json"
|
||||
|
||||
if ! [ -e ${MAP_FILE} ]; then
|
||||
echo "Error: There is no map file at ${MAP_FILE}. Use 'create' or put a map file at that location."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
[ -e server-settings.json ] || cp /opt/defaults/server-settings.json server-settings.json
|
||||
exec ${BINARY} --server-settings server-settings.json --start-server ${MAP_FILE}
|
||||
;;
|
||||
*)
|
||||
exec ${BINARY} "$@"
|
||||
;;
|
||||
esac
|
Loading…
Reference in a new issue