All Projects → clusterio → Factorioclusterio

clusterio / Factorioclusterio

Licence: other
internet communication for factorio mods

Programming Languages

javascript
184084 projects - #8 most used programming language

Labels

Projects that are alternatives of or similar to Factorioclusterio

Iw4x Client
🎮 Official IW4x source code
Stars: ✭ 218 (+48.3%)
Mutual labels:  game, mod
Wolfhud
Payday 2 HUD
Stars: ✭ 371 (+152.38%)
Mutual labels:  game, mod
Dst Dedicated Server
Don't Starve Together dedicated server guide for all platforms (Linux, Mac, Windows) with Docker. Extensive documentation covering mods installation, server config and performance, world generation and setting up admins.
Stars: ✭ 187 (+27.21%)
Mutual labels:  game, mod
Gdlauncher
GDLauncher is a simple, yet powerful Minecraft custom launcher with a strong focus on the user experience
Stars: ✭ 386 (+162.59%)
Mutual labels:  game, mod
Linkermod
Enhancements for Black Ops' modtools
Stars: ✭ 63 (-57.14%)
Mutual labels:  game, mod
F4mp
Stars: ✭ 130 (-11.56%)
Mutual labels:  game, mod
Game
Momentum Mod - Standalone Source Movement Speedrunning (READ README PLEASE)
Stars: ✭ 315 (+114.29%)
Mutual labels:  game, mod
Hsplugins
Various Honey Select plugins
Stars: ✭ 21 (-85.71%)
Mutual labels:  game, mod
Halomd
New demo version of Halo for the Mac.
Stars: ✭ 36 (-75.51%)
Mutual labels:  game, mod
Paradoxgameconverters
Various converters between different grand strategy games
Stars: ✭ 126 (-14.29%)
Mutual labels:  game, mod
Wog
In the Wake of Gods 3.59 alpha
Stars: ✭ 139 (-5.44%)
Mutual labels:  game, mod
Crafttweaker
Tweak your minecraft experience
Stars: ✭ 146 (-0.68%)
Mutual labels:  mod
Opensourcegames
Infos and build tips for open source games.
Stars: ✭ 144 (-2.04%)
Mutual labels:  game
Zetawar
Zetawar is a turn based tactical strategy game implemented in 100% ClojureScript.
Stars: ✭ 144 (-2.04%)
Mutual labels:  game
Openhow
Open-source reimplementation of Gremlin's Hogs of War (PC/PSX).
Stars: ✭ 144 (-2.04%)
Mutual labels:  game
15puzzle
The Game of Fifteen written with Flutter
Stars: ✭ 148 (+0.68%)
Mutual labels:  game
Lexica
Word Game for Android - A fork of lexic (https://code.google.com/p/lexic)
Stars: ✭ 146 (-0.68%)
Mutual labels:  game
Chronoshift
An open source re-implementation of Red Alert written in C++.
Stars: ✭ 144 (-2.04%)
Mutual labels:  game
Baubles
A mod api that adds 7 bauble slots to the players inventory.
Stars: ✭ 143 (-2.72%)
Mutual labels:  mod
Dieloli
Stars: ✭ 143 (-2.72%)
Mutual labels:  game



factorioClusterio

Discord for development/support/play: https://discord.gg/5XuDkje

Important notice

This is the development branch for factorioClusterio 2.0 which is currently undergoing heavy restructuring and refactoring. Expect plugins and existing installations to frequently break when using this branch. If you don't want to be an alpha tester for 2.0 please use the stable 1.2.x branch or latest stable release.

Installation instructions below are for the unstable master branch. Go to the page for the 1.2.x branch for instructions on how to install the stable version.

Ways to support me/the project:

  • Contribute with code/documentation. See Contributing for how to make pull requests. Always nice to move the project forward.

  • Support me monetarily on patreon or paypal: [email protected]

Table of contents

Introduction

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.

By 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

  • Clustered Factorio server management allowing you manage the running of Factorio servers across a fleet of physical servers from both a web interface and a command line interface.

  • User list management for synchronizing in-game admins, whitelisted users, and bans to all the servers in the cluster.

  • Integrated support for exporting statistics for the whole cluster to Prometheus via a single metrics endpoint.

  • Extensive plugin support for adding your own cross server features to Factorio using Clusterio's communication backbone.

Plugins

The heart of Clusterio is its plugin system. Plugins add functionality to Factorio servers, Clusterio itself or both. These are the plugins supported and maintained by the Clusterio developers:

  • Global Chat: share the in-game chat between servers.
  • Research Sync: synchronize research progress and technologies unlocked between servers.
  • Statistics Exporter: collect in-game statistics from all the servers and makes it available to the Prometheus endpoint on the master server.
  • Subspace Storage: Provide shared storage that can transport items between servers via teleport chests.
  • Player Auth: Provides authentication to the cluster via logging into a Factorio server.

There's also plugins developed and maintained by the community:

  • Discord Bridge: Bridges chat between instances and Discord. By Hornwitser.
  • Server Select: In-game GUI for connecting to other server in the cluster. Originally by Godmave, ported to 2.0 by Hornwitser.

Want to make your own plugin? Check out the documentation on Writing Plugins for where to start.

Ubuntu setup

Warning: These instructions are for the unstable master version and is not recommended for use, see the 1.2.x branch for how to install the stable version.

Clusterio runs on Node.js v12 and up, and v10.16.0+. Node.js itself is not supported on EOL Ubuntu releases so make sure you're on a recent release of Ubuntu.

Master and all slaves:

wget -qO - https://deb.nodesource.com/setup_12.x | sudo -E bash -
sudo apt install -y nodejs
mkdir clusterio
cd clusterio
npm init -y
npm install @clusterio/master @clusterio/slave @clusterio/ctl
wget -O factorio.tar.gz https://www.factorio.com/get-download/latest/headless/linux64
tar -xf factorio.tar.gz

downloads and installs nodejs, git and clusterio. To specify a version, change "latest" in the link to a version number like 0.14.21.

Ubuntu with Docker

The Docker support for Clusterio is curently broken. If you need it open an issue about it.

Windows setup

Warning: These instructions are for the unstable master version and is not recommended for use, see the 1.2.x branch for how to install the stable version.

Requirements

download and install nodeJS 12 from http://nodejs.org. Clusterio runs on Node.js v12 and up, and v10.16.0+.

Master

  1. Open PowerShell or Command prompt in the directory you want to install to and run the following commands.

     mkdir clusterio
     cd clusterio
     npm init -y
     npm install @clusterio/master @clusterio/slave @clusterio/ctl
    
  2. Obtain Factorio by either of these two methods:

    • Via the stand alone version on from their website

      1. Create a new folder named "factorio" in the the factorioClusterio folder.

      2. Download the MS Windows (64-bit zip package) from https://www.factorio.com/download .

      3. Open the zip file and drag the folder called "Factorio_x.y.z" into the factorio folder created in step 1.

    • Via steam installation

      1. Create a new folder named "factorio" in the the factorioClusterio folder.

      2. Locate the game files by right clicking the game in steam, selecting properties, then Local Files, then Browse local files.

      3. Go to the parent folder of the folder that Steam opened and copy the Factorio folder into the factorio folder created in step 1.

Installing Plugins

Installing plugins to make them work with Clusterio consists of two steps. First install the package via npm, for example

npm install @clusterio/plugin-subspace_storage

Then tell clusterio that this plugin exists by adding it as a plugin.

npx clusteriomaster plugin add @clusterio/plugin-subspace_storage

This adds it to the default plugin-list.json file which in the shared folder setup is loaded by master, slave and ctl. If you have slaves or ctl installed on separate computers (or directories) then you need to repeat the plugin install process for all of them. The clusteriomaster, clusterioslave and clusterioctl commands has the plugin sub-command so you do not need to install clusteriomaster to add plugins.

For development purposes the plugin add command supports adding plugins by the absolute path to them, or a relative path that must start with either . or .. (which will then be resolved to an absolute path).

Configure Master Server

By default the master server will listen for HTTP on port 8080. You can change the port used with the command

npx clusteriomaster config set master.http_port 1234

If you plan to make your cluster available externally set the address that it will be accessible under with, for example

npx clusteriomaster config set master.external_address http://203.0.113.4:1234/

Change the url to reflect the IP, protocol, and port the master server is accessible under, dns names are also supported. If you're planning on making the master server accessible on the internet it's recommended to set up TLS, see the Setting Up TLS document for more details.

You can list the config of the master server with the npx clusteriomaster config list command. See the readme for @clusterio/master for more information.

Setting up an admin account

Before you can manage the cluster you need to bootstrap an admin account for it. Replace <username> with your Factorio username (do not make up a new username here).

npx clusteriomaster bootstrap create-admin <username>
npx clusteriomaster bootstrap create-ctl-config <username>

The first command creates a user account with the given name and promotes it to a cluster admin. The second one sets up a config-control.json config for clusterioctl to connect to the master server under the given user account.

Running Clusterio

After following the installation and master configuration instructions you can use the following commands to run Clusterio.

Master Server

It's necessary to run the master server in order for anything to work. Once you've completed the setup run the following command to start it up:

npx clusteriomaster run

Slaves

Slaves connect to the master server and are managed remotely from the master server. In order for slaves to connect to the master server they need a valid authentication token, you can create a slave config with a valid token with the following command.

npx clusterioctl slave create-config --name Local --generate-token

This will write a new config-slave.json file in the current directory (you can change the location with the --output option) with the name, token and url to connect to the master server with. If you are making the config for a remote slave you will need to have set the master.external_address option to the URL the master server can be reached on.

You can list the config of a slave on the slave itself with the npx clusterioslave config list command. See the readme for @clusterio/slave for more information.

Once the config is set up run the slave with

npx clusterioslave run

Instances

Instances are created, managed and started from the master server. For now the only interface available is the clusterioctl command line tool included in Clusterio. You can run this tool from any slave, or the master server without having to set up a config, if you want to manage the cluster from somewhere else you will need to set the control.master_url and control.master_token options with the node clusterioctl control-config set command:

The basic operations to start a new instance is the following

npx clusterioctl instance create "My instance"
npx clusterioctl instance assign "My instance" "Local"
npx clusterioctl instance start "My instance"

The first line creates the instance configuration on the master server. The second assigns the instance to a slave which creates the instance directory and files needed to run the instance on the given slave. The third line starts the instance, which creates a new save if there are no save games present.

There are many more commands available with clusterioctl. See the Managing a Cluster document or npx clusterioctl --help for a full list of them.

Common problems

EACCESS [...] LISTEN 443

Some systems don't let non root processes listen to ports below 1000. Either run with sudo or change config.json to use higher port numbers.

According to this link if you manually installed node.js following the above instructions, you may need to run the following command to fix this issue:

sudo setcap 'cap_net_bind_service=+ep' $(readlink -f $(which node))

Portforwarding doesn't work on the master server when running under WSL

If you follow the ubuntu guide on WSL (Windows Subsystem for Linux, Bash on Ubuntu on Windows specifically), you will find that the website works on localhost and on your local ip, but not on the global ip. This is also true when you correctly port-forwarded the correct ports. Even when routing this server through nginx in WSL, the issue persists. Then, on a hunch, I tried to run nginx from windows itself and found that this DID work. It came to me that the only usage difference between the 2 versions of nginx is that I got a Windows Firewall popup.

TLDR: the tested fix is:

  • open your windows firewall and go to advanced settings

  • click on inbound rules and click on new rule...

  • select port and click next >

  • select TCP and select specific local ports and type in the ports that you want to open (comma separated) and click next > 3 times

  • give the rule a name (like 'web server' or something), give it a description (optionally) and click finish

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].