Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
68 changes: 68 additions & 0 deletions ct/factorio.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
#!/usr/bin/env bash
_CS_DEFAULT_URL="https://raw.githubusercontent.com/community-scripts/DevScripts/main"
_cs_boot="${COMMUNITY_SCRIPTS_CORE_DIR:-$(dirname "${BASH_SOURCE[0]}")/../../core}/core/build.func"
source "$_cs_boot" 2>/dev/null || source <(curl -fsSL "${COMMUNITY_SCRIPTS_CORE_URL:-https://raw.githubusercontent.com/community-scripts/core/main}/core/build.func")
# Copyright (c) 2021-2026 community-scripts ORG
# Author: William Lindholm (LindholmLabs)
# License: MIT | https://github.com/community-scripts/DevScripts/raw/main/LICENSE
# Source: https://www.factorio.com/

APP="Factorio"
var_tags="${var_tags:-gaming}"
var_cpu="${var_cpu:-1}"
var_ram="${var_ram:-2048}"
var_disk="${var_disk:-8}"
var_os="${var_os:-debian}"
var_version="${var_version:-13}"
var_unprivileged="${var_unprivileged:-1}"
var_arm64="${var_arm64:-no}" # Factorio headless is only published for Linux x64.

header_info "$APP"
variables
color
catch_errors

function update_script() {
header_info
check_container_storage
check_container_resources

if [[ ! -x /opt/factorio/bin/x64/factorio ]]; then
msg_error "No Factorio Installation Found!"
exit 1
fi

ensure_dependencies file xz-utils

msg_info "Stopping Factorio"
systemctl stop factorio
msg_ok "Stopped Factorio"

create_backup /opt/factorio/config /opt/factorio/config-path.cfg \
/opt/factorio/server-settings.json /opt/factorio/saves /opt/factorio/mods \
/opt/factorio/player-data.json /opt/factorio/server-adminlist.json \
/opt/factorio/server-banlist.json /opt/factorio/server-whitelist.json

# Overlay the release without deleting user files; restore any shipped defaults.
if ! fetch_and_deploy_from_url "https://factorio.com/get-download/stable/headless/linux64" "/opt/factorio"; then
restore_backup
msg_error "Factorio update failed. User data was restored; Factorio remains stopped."
exit 1
fi
restore_backup

msg_info "Starting Factorio"
systemctl start factorio
msg_ok "Started Factorio"
msg_ok "Updated Factorio successfully!"

exit
}

start
build_container
description

msg_ok "Completed Factorio setup successfully!\n"
echo -e "${INFO}${YW}Connect in Factorio using the following address (UDP):${CL}"
echo -e "${GATEWAY}${BGN}${IP}:34197${CL}"
57 changes: 57 additions & 0 deletions install/factorio-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
#!/usr/bin/env bash

# Copyright (c) 2021-2026 community-scripts ORG
# Author: William Lindholm (LindholmLabs)
# License: MIT | https://github.com/community-scripts/DevScripts/raw/main/LICENSE
# Source: https://www.factorio.com/

source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
color
verb_ip6
catch_errors
setting_up_container
network_check
update_os

ensure_dependencies file xz-utils
fetch_and_deploy_from_url "https://factorio.com/get-download/stable/headless/linux64" "/opt/factorio"

msg_info "Configuring Factorio"
sed 's/"public":[[:space:]]*true/"public": false/' /opt/factorio/data/server-settings.example.json >/opt/factorio/server-settings.json
cat <<EOF >/opt/factorio/server-adminlist.json
[]
EOF
msg_ok "Configured Factorio"

msg_info "Creating Factorio Save"
mkdir -p /opt/factorio/saves
$STD /opt/factorio/bin/x64/factorio --create /opt/factorio/saves/save.zip
msg_ok "Created Factorio Save"

msg_info "Creating Factorio Service"
cat <<EOF >/etc/systemd/system/factorio.service
[Unit]
Description=Factorio Headless Server
Wants=network-online.target
After=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/opt/factorio
ExecStart=/opt/factorio/bin/x64/factorio --start-server-load-latest --server-settings /opt/factorio/server-settings.json --server-adminlist /opt/factorio/server-adminlist.json
KillSignal=SIGINT
TimeoutStopSec=120
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl enable -q --now factorio

msg_ok "Created Factorio Service"

motd_ssh
customize
cleanup_lxc
36 changes: 36 additions & 0 deletions json/factorio.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
{
"name": "Factorio",
"slug": "factorio",
"categories": [24],
"date_created": "2026-10-13",
"type": "ct",
"updateable": true,
"privileged": false,
"interface_port": null,
"documentation": "https://wiki.factorio.com/Multiplayer",
"website": "https://factorio.com/",
"repository": "",
"architectures": ["amd64"],
"platforms": ["pve"],
"logo": "",
"description": "Factorio headless multiplayer server using the current stable Linux x64 release.",
"install_methods": [
{
"type": "default",
"script": "ct/factorio.sh",
"config_path": "/opt/factorio/server-settings.json",
"resources": {
"cpu": 1,
"ram": 2048,
"hdd": 8,
"os": "Debian",
"version": "13"
}
}
],
"default_credentials": {"username": null, "password": null},
"notes": [
{"text": "Connect using the Factorio client to <container IP>:34197 over UDP. There is no web interface. Clients need the same Factorio version and mods as the server.", "type": "info"},
{"text": "Saves are stored in /opt/factorio/saves. The service loads the most recent save on restart. Run update inside the container to install the current stable release while preserving settings and saves.", "type": "info"}
]
}
Loading