{ "_comment": "DO NOT EDIT: FILE GENERATED AUTOMATICALLY BY PANEL", "meta": { "version": "PTDL_v2", "update_url": null }, "exported_at": "2024-06-01T00:17:31+00:00", "name": "Clusterio", "author": "psychoalex@thevcbc.com", "uuid": "935a6b24-0e36-45b4-9615-58c5aa153971", "description": "Clusterio is a clustered Factorio server manager that provides the tooling for implementing cross server interactions in Factorio. It was previously best known for implementing cross server transfer and cloud storage of items via teleporter chests. But this functionality has been pulled out of Clusterio into its own plugin for Clusterio named Subspace Storage.\r\n\r\nBy itself Clusterio doesn't change the gameplay in any way, you could even use Clusterio to manage completely vanilla Factorio servers. Plugins do the work of modding in the visible changes into the game, see the Plugins section for ready-made plugins you can install into a Clusterio cluster.", "features": null, "docker_images": { "ghcr.io\/parkervcp\/yolks:nodejs_21": "ghcr.io\/parkervcp\/yolks:nodejs_21", "ghcr.io\/parkervcp\/yolks:nodejs_20": "ghcr.io\/parkervcp\/yolks:nodejs_20", "ghcr.io\/parkervcp\/yolks:nodejs_19": "ghcr.io\/parkervcp\/yolks:nodejs_19", "ghcr.io\/parkervcp\/yolks:nodejs_18": "ghcr.io\/parkervcp\/yolks:nodejs_18" }, "file_denylist": [], "startup": "exec .\/node_modules\/.bin\/clusterio{{SERVER_MODE}} run", "config": { "files": "{\r\n \"config-controller.json\": {\r\n \"parser\": \"json\",\r\n \"find\": {\r\n \"controller~1http_port\": \"{{server.build.default.port}}\",\r\n \"controller~1name\": \"{{server.build.env.CLUSTER_NAME}}\"\r\n }\r\n },\r\n \"config-host.json\": {\r\n \"parser\": \"json\",\r\n \"find\": {\r\n \"host~1controller_url\": \"{{server.build.env.CONTROLLER_URL}}\",\r\n \"host~1controller_token\": \"{{server.build.env.CONTROLLER_TOKEN}}\",\r\n \"host~1public_address\": \"{{server.build.default.ip}}\"\r\n }\r\n }\r\n}", "startup": "{\r\n \"done\": \"Started\"\r\n}", "logs": "{}", "stop": "^C" }, "scripts": { "installation": { "script": "#!\/bin\/bash\r\n# Clusterio Installation Script\r\n#\r\n# Server Files: \/mnt\/server\r\napt update\r\napt install -y git curl jq file unzip make gcc g++ python3 python3-dev libtool\r\n\r\nmkdir -p \/mnt\/server\r\ncd \/mnt\/server\r\n\r\nif [ \"${USER_UPLOAD}\" == \"true\" ] || [ \"${USER_UPLOAD}\" == \"1\" ]; then\r\n echo -e \"assuming user knows what they are doing have a good day.\"\r\n exit 0\r\nfi\r\n\r\ncase \"${SERVER_MODE}\" in\r\n\r\n \"controller\")\r\n echo -e \"Initialising Clustorio In Controller mode\"\r\n npm init \"@clusterio\" -y -- --allow-install-as-root --mode \"${SERVER_MODE}\" --download-headless --log-level \"${LOG_LEVEL}\" --admin \"${ADMIN_STRING}\" --public-address \"${SERVER_IP}\":\"${SERVER_PORT}\" --plugins ${PLUGINS}\r\n\t;;\r\n\r\n \"host\")\r\n echo -e \"Initialising Clustorio In Host mode\"\r\n\tnpm init \"@clusterio\" -y -- --allow-install-as-root --mode \"${SERVER_MODE}\" --download-headless --log-level \"${LOG_LEVEL}\" --host-name \"${HOST_NAME}\" --public-address \"${SERVER_IP}\" --controller-url \"${CONTROLLER_URL}\" --controller-token \"${CONTROLLER_TOKEN}\" --plugins ${PLUGINS}\r\n ;;\r\n \r\nesac\r\n\r\necho -e \"install complete\"\r\nexit 0", "container": "node:21-bookworm-slim", "entrypoint": "bash" } }, "variables": [ { "name": "Server Mode", "description": "Set's the cluster operation mode of the server, can be either \"controller\" or \"host\". This is better thought of as Management or Gameserver nodes.\r\n\r\nRequired on:\r\nAll", "env_variable": "SERVER_MODE", "default_value": "controller", "user_viewable": true, "user_editable": true, "rules": "required|string|in:controller,host", "sort": null, "field_type": "text" }, { "name": "Log Level", "description": "Options: \"none\", \"fatal\", \"error\", \"warn\", \"audit\", \"info\", \"verbose\"\r\n\r\nRequired on:\r\nAll", "env_variable": "LOG_LEVEL", "default_value": "info", "user_viewable": true, "user_editable": true, "rules": "required|string|in:none,fatal,error,warn,audit,info,verbose", "sort": null, "field_type": "text" }, { "name": "Server Admin", "description": "Superadmin account name\r\n\r\nRequired on:\r\nController", "env_variable": "ADMIN_STRING", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "required|string|max:64", "sort": null, "field_type": "text" }, { "name": "Host Name", "description": "Host name in the Controller Web UI\r\n\r\nRequired on:\r\nHost", "env_variable": "HOST_NAME", "default_value": "Your Sub-Server", "user_viewable": true, "user_editable": true, "rules": "nullable|string|max:20", "sort": null, "field_type": "text" }, { "name": "Controller URL", "description": "Connection URL to the Controller server, can be an internal address if you have allocated an additional internal port to the Controller Server.\r\nExample: http:\/\/yourip:yourport\r\nRequired on:\r\nHost", "env_variable": "CONTROLLER_URL", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string|max:64", "sort": null, "field_type": "text" }, { "name": "Controller Token", "description": "Authentication token used to connect to the Controller server, generated through the Controller Web UI.\r\n\r\nRequired on:\r\nHost", "env_variable": "CONTROLLER_TOKEN", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string|max:256", "sort": null, "field_type": "text" }, { "name": "Plugins", "description": "Clusterio Plugins to install, space separate list.\r\n\r\nExample:\r\n@clusterio\/plugin-subspace_storage @clusterio\/plugin-global_chat @clusterio\/plugin-research_sync @clusterio\/plugin-inventory_sync\r\n\r\nRequired on:\r\nAll", "env_variable": "PLUGINS", "default_value": "", "user_viewable": true, "user_editable": true, "rules": "nullable|string|max:512", "sort": null, "field_type": "text" }, { "name": "Cluster Name", "description": "The Name of your Controller server cluster.\r\n\r\nRequired:\r\nController", "env_variable": "CLUSTER_NAME", "default_value": "Your Cluster", "user_viewable": true, "user_editable": true, "rules": "nullable|string|max:20", "sort": null, "field_type": "text" } ] }