{"id":25319801,"url":"https://github.com/jlucktay/factorio-server-kit","last_synced_at":"2026-02-07T01:04:31.693Z","repository":{"id":62865712,"uuid":"213695703","full_name":"jlucktay/factorio-server-kit","owner":"jlucktay","description":"Running your own Factorio server on Google Cloud","archived":false,"fork":false,"pushed_at":"2025-01-01T10:38:40.000Z","size":701,"stargazers_count":3,"open_issues_count":2,"forks_count":0,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-02-08T12:09:12.297Z","etag":null,"topics":["docker","factorio","factorio-server","google-cloud","unlicense","vms"],"latest_commit_sha":null,"homepage":"","language":"Shell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"unlicense","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jlucktay.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"patreon":"jlucktay","ko_fi":"jlucktay","issuehunt":"jlucktay"}},"created_at":"2019-10-08T16:30:00.000Z","updated_at":"2025-01-01T10:38:43.000Z","dependencies_parsed_at":"2024-01-14T13:46:53.101Z","dependency_job_id":"5bb46503-d4c0-47ec-8f04-89f569729be8","html_url":"https://github.com/jlucktay/factorio-server-kit","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlucktay%2Ffactorio-server-kit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlucktay%2Ffactorio-server-kit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlucktay%2Ffactorio-server-kit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jlucktay%2Ffactorio-server-kit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jlucktay","download_url":"https://codeload.github.com/jlucktay/factorio-server-kit/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238734067,"owners_count":19521557,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["docker","factorio","factorio-server","google-cloud","unlicense","vms"],"created_at":"2025-02-13T20:55:10.010Z","updated_at":"2025-10-28T22:31:13.603Z","avatar_url":"https://github.com/jlucktay.png","language":"Shell","funding_links":["https://patreon.com/jlucktay","https://ko-fi.com/jlucktay","https://issuehunt.io/r/jlucktay"],"categories":[],"sub_categories":[],"readme":"# Welcome to the Factorio Server Kit 👋\n\n[![License: The Unlicense](https://img.shields.io/badge/License-The%20Unlicense-yellow.svg)][1]\n[![Twitter: jlucktay](https://img.shields.io/twitter/follow/jlucktay.svg?style=social)][2]\n[![Wakatime tracker](https://wakatime.com/badge/github/jlucktay/factorio-server-kit.svg)][3]\n\n\u003e Running your own Factorio server on Google Cloud\n\nMuch like [the game] itself, this project aims to automate as much as possible, when it comes to running your own\nFactorio server.\n\nThe scripts are based around the use of [preemptible VMs] which keeps running costs low.\n\n## Installation\n\n### Initial setup\n\n1. Make sure the following tools are installed, available in your `$PATH`, and (where necessary) authorised:\n    1. [Google Cloud SDK] - [quickstarts][gc-quick]\n        1. [Installation][gc-inst]\n        1. [Authorisation][gc-auth]\n    1. [jq]\n        1. [Installation][jq-inst]\n    1. [Terraform]\n        1. [Installation][tf-inst]\n1. Get started on the [GCP Free Tier] and [create a new Google Cloud project][gc-project]\n    - **Note: you are responsible for the running costs incurred by this project** beyond the limits of the Free Tier.\n      Every effort has been made to optimise and minimise the costs of resource usage, and as of this writing running a\n      server for ~50 hours a month cost less than £5 in total, but this is an isolated example from a sample size of 1.\n1. Set the `CLOUDSDK_CORE_PROJECT` environment variable to the Google Cloud project ID\n    1. For example: `export CLOUDSDK_CORE_PROJECT=my-factorio-server-kit`\n1. Run up the Terraform stack to provision infrastructure in GCP (implemented? -\u003e ❌/✅)\n    1. Cloud Pub/Sub topic `cleanup-instances` ✅\n    1. Cloud Scheduler job `cleanup-instances` to publish to topic ✅\n    1. Cloud Function `cleanup-instances` to clean up terminated instances, triggered by topic ✅\n    1. Cloud Storage buckets\n        1. `\u003cproject\u003e-backup-saves` ❌\n        1. `\u003cproject\u003e-saves-\u003clocation\u003e` ✅\n        1. `\u003cproject\u003e-storage` ❌\n    1. Cloud DNS (optional)\n        1. Managed zone ❌\n        1. Record set ❌\n1. Run the Cloud Build pipelines in order\n    1. [Packer builder Docker image]\n    1. [Factorio server VM image]\n\n### As desired\n\n1. Fire off the `roll-vm.sh` Bash script described below\n\n## Usage\n\nThe project is primarily driven by Bash scripts, supported by Cloud Build pipelines and Terraform\ninfrastructure-as-code.\n\n### Cloud Build pipelines\n\n### Terraform IaC\n\n### Bash scripts\n\n- [roll-vm.sh] - the main point of execution; will run up a GCE VM hosting Docker containers for\n    the Factorio server itself, as well as additional containers with Grafana and Prometheus that tie into [Graftorio]\n  - the location/region that the VM will deploy to follows a default based on the [`locations.json` file], and can be\n        overridden with a `--\u003clocation\u003e` flag; see `roll-vm.sh --help` for more information\n  - the [machine type] of the VM can be specified with the `--machine-type=...` flag\n- [delete-vm.sh] - deletes any VMs currently running in the project, optionally filtering by name\n\n#### Library\n\nEach of the above scripts taps into a common library of functionality under the [lib](lib/) directory.\n\n### Other notes\n\n### Map (re)generation settings\n\nThe two settings files `map-settings.json` and `map-gen-settings.json` can be created from a map exchange string in the\ngame [as outlined here][map-settings].\n\n## Upstream issues outstanding\n\n- [Graftorio support for Factorio 0.18.x](https://github.com/afex/graftorio/pull/15)\n\n## Related projects\n\n### goppuku\n\n[`goppuku`] is a small Go binary/service I built to have a server shut itself down if the player count stays at zero\nfor fifteen consecutive minutes.\n\nThe latest release of `goppuku` is installed in the Factorio server image by [Packer's provisioner script].\n\n## Author\n\n👤 **James Lucktaylor**\n\n- Website: jameslucktaylor.info\n- GitHub: [@jlucktay][4]\n- Twitter: [@jlucktay][2]\n- LinkedIn: [@jlucktay][linkedin]\n\n## Contributing\n\nPull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.\n\nPlease make sure to update documentation and tests as appropriate.\n\n## Show your support\n\nGive a ⭐️ if this project helped you!\n\n## 📝 License\n\nCopyright © 2020 [James Lucktaylor][4].\n\nThis project is licensed with [the Unlicense].\n\n***\n_This README was generated with ❤️ by [readme-md-generator](https://github.com/kefranabg/readme-md-generator)_\n\n[`goppuku`]: https://github.com/jlucktay/goppuku\n[`locations.json` file]: lib/locations.json\n[1]: https://choosealicense.com/licenses/unlicense/\n[2]: https://twitter.com/jlucktay\n[3]: https://wakatime.com/badge/github/jlucktay/factorio-server-kit\n[4]: https://github.com/jlucktay\n[delete-vm.sh]: scripts/delete-vm.sh\n[Factorio server VM image]: cloud-build/1-factorio-server/README.md\n[gc-auth]: https://cloud.google.com/sdk/docs/authorizing\n[gc-inst]: https://cloud.google.com/sdk/install\n[gc-project]: https://cloud.google.com/resource-manager/docs/creating-managing-projects\n[gc-quick]: https://cloud.google.com/sdk/docs/quickstarts\n[GCP Free Tier]: https://cloud.google.com/free/\n[Google Cloud SDK]: https://cloud.google.com/sdk\n[Graftorio]: https://github.com/afex/graftorio\n[jq-inst]: https://github.com/stedolan/jq/wiki/Installation\n[jq]: http://stedolan.github.io/jq/\n[linkedin]: https://linkedin.com/in/jlucktay\n[machine type]: https://cloud.google.com/compute/docs/machine-types\n[map-settings]: https://wiki.factorio.com/Command_line_parameters#Creating_the_JSON_files_from_a_map_exchange_string\n[Packer builder Docker image]: cloud-build/0-packer/README.md\n[Packer's provisioner script]: cloud-build/1-factorio-server/provisioner.sh\n[preemptible VMs]: https://cloud.google.com/compute/docs/instances/preemptible\n[roll-vm.sh]: scripts/roll-vm.sh\n[Terraform]: https://www.terraform.io\n[tf-inst]: https://learn.hashicorp.com/terraform/getting-started/install.html\n[the game]: https://factorio.com\n[the Unlicense]: https://unlicense.org\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlucktay%2Ffactorio-server-kit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjlucktay%2Ffactorio-server-kit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjlucktay%2Ffactorio-server-kit/lists"}