Skip to content
62 changes: 62 additions & 0 deletions ct/factorio.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
#!/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}"

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

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

fetch_and_deploy_from_url "https://factorio.com/get-download/stable/headless/linux64" "/opt/factorio"

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}"
56 changes: 56 additions & 0 deletions install/factorio-install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
#!/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

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. 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.", "type": "info"}
]
}
Loading