{"id":37787690,"url":"https://github.com/casteloig/cuack","last_synced_at":"2026-01-16T15:13:53.711Z","repository":{"id":152801676,"uuid":"396099033","full_name":"casteloig/cuack","owner":"casteloig","description":"Fast and easy tool to deploy gameservers.","archived":false,"fork":false,"pushed_at":"2025-05-04T22:47:20.000Z","size":3214,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-04T23:34:26.374Z","etag":null,"topics":["deployment","digitalocean","factorio-server","gameserver","minecraft-server"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/casteloig.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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,"zenodo":null}},"created_at":"2021-08-14T18:48:58.000Z","updated_at":"2025-05-04T22:47:24.000Z","dependencies_parsed_at":null,"dependency_job_id":"cd60204a-9f15-4637-b47b-c69dc99d0986","html_url":"https://github.com/casteloig/cuack","commit_stats":null,"previous_names":[],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/casteloig/cuack","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casteloig%2Fcuack","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casteloig%2Fcuack/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casteloig%2Fcuack/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casteloig%2Fcuack/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/casteloig","download_url":"https://codeload.github.com/casteloig/cuack/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/casteloig%2Fcuack/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28479406,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-16T11:59:17.896Z","status":"ssl_error","status_checked_at":"2026-01-16T11:55:55.838Z","response_time":107,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"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":["deployment","digitalocean","factorio-server","gameserver","minecraft-server"],"created_at":"2026-01-16T15:13:52.784Z","updated_at":"2026-01-16T15:13:53.697Z","avatar_url":"https://github.com/casteloig.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e\n  Cuack\n\u003c/h1\u003e\n\u003cp align=\"center\"\u003eDeploy automatically your gameservers on cloud providers (only DigitalOcean is supported so far) in a easy and fast way\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n\u003ca href=\"https://hub.docker.com/repository/docker/casteloig/cuack\" alt=\"DockerHub\"\u003e\n        \u003cimg src=\"https://img.shields.io/docker/pulls/casteloig/cuack\" /\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n\u003cdiv align=\"center\"\u003e\n  \u003cimg src=\"assets/images/cuack.png\" width=\"260\" alt=\"Cuack Logo\" /\u003e\n\u003c/div\u003e\n\n## Quick start\n1. Create the **initialization file** and introduce the Personal Access Token (DigitalOcean's can be found [here](https://docs.digitalocean.com/reference/api/create-personal-access-token/)) and the prefered region slug (these are displayed on screen.)\n\n```bash\ncuack-ctl init\n```\n\n2. **Create your gameserver** with default options (minecraft and factorio supported so far)\n\n```bash\n# Create a default minecraft server\ncuack-ctl create -f https://github.com/casteloig/cuack/tree/main/games/minecraft/default.yaml\n\n# Create a default factorio server\ncuack-ctl create -f https://github.com/casteloig/cuack/tree/main/games/factorio/default.yaml\n```\n\u003c!-- \n**List** all of your _cuack servers_:\n\n```bash\ncuack-ctl list\n```\n\n**Delete** a running server:\n\n```bash\n# Delete a DigitalOcean droplet named \"minecraft-foo-bar\"\ncuack-ctl delete minecraft-foo-bar\n``` --\u003e\n## Commands and options\n### `init`\nThe **init** command is used to create the init file with the basic configuration of Cuack. It is stored by default on `~/.config/cuack.config`.\n\nThis file is composed by two parts:\n\n| Parts  | Description                                              | Type   | Default |\n| ------ | -------------------------------------------------------- | ------ | ------- |\n| token   | Where the server provider's personal token is stored (**it should never be shared!**). | `string` |         |\n| region   | It is the slug that represents the prefered region where all droplets will be created on. | `string` | lon1 |\n\n\u003e This file **must** exist and contain all the information above to perform the rest of the commands.\n\n### `create`\nThe **create** command is used to create a droplet and, then, create a gameserver in that droplet. It does not have any arguments, but it has two flags:\n\n| Flags      | Flags (short) | Description                                              | Type   | Required | Default |\n| ---------- | ------------- |--------------------------------------------------------- | ------ | -------- | ------- |\n| `--file`   | `-f` | It is the configuration file of the droplet and server | `string` | Yes |  |\n| `--select` | `-s` | Select one of the existing configurations in the config file passed on `-f` | `string` | No | Selects always the first configuration from the file |\n\nA configuration file is a `.yaml`/`.yml` file that can either a local file or a remote file (with a URL that starts with _https://_ or _http://_). One example of the file would be this one (as an example of minecraft file):\n\n```yaml\nname: minecraft\nimage: casteloig/mine-server:latest\nprovider:\n  name_prov: digitalocean\n  ssh_name: asus-laptop-linux\n  cpu: 2\n  ram: 2GB\nports:\n  main: 25565\n  additional: \n    - 25575\nparams:   \n  world_name: world # not used yet\n  players: 5\n  difficulty: easy\n---\nname: minecraft-big\nimage: casteloig/mine-server:latest\nprovider:\n  name_prov: digitalocean\n  ssh_name: asus-laptop-linux\n  cpu: 2\n  ram: 2GB\nports:\n  main: 25565\n  additional: \n    - 25575\nparams:   \n  world_name: world # not used yet\n  players: 10\n  difficulty: medium\n```\n\nAs you can see, there are two different configurations, you can select which one you want by passing the `name` of the configuration on the `-s` flag (in this case `minecraft` or `minecraft-big`).\n\n```bash\n# If we want to create a droplet with the 'minecraft-big' configuration we would do\ncuack-ctl -f \u003cpath_to_yaml_file\u003e -s minecraft-big\n```\n\nBy default, in this repository, exist some basic configs you can use directly or download and modify to your own belong.\n\nEvery config file must be composed by two parts:\n\n#### First part\n\nThis part must be **static**, that means that the variable names and indentation cannot be modified, only the values.\n\n| Variables  | Description                                              |\n| ------ | -------------------------------------------------------- |\n| name | The name that will use the `-s` flag and also will be used to create the droplet name |\n| image | The Docker image that will be used to create the server in the droplet. [(more info about how it works)](#how-cuack-uses-the-docker-images-to-start-his-servers) |\n| provider | All the information that the server provider needs to create the droplet. [(see the sub-table here)](#provider-sub-table) |\n| ports | The ports that the server needs (so docker may use). There must be always one main port, and may be any number of additional ports. |\n\n\n##### Provider sub-table\n| Variables  | Description                                              | Type   |\n| ------ | -------------------------------------------------------- | ------ |\n| name_prov | So far we only work with DigitalOcean | `string` |\n| ssh_name | The name of the ssh key that you must have created in your server provider | `string` |\n| cpu | Number of CPUs that the droplet will have | `integer` |\n| ram | RAM size that the droplet will have | `string` composed by '_number of GB_' + 'GB' |\n\n\n#### Second part\n\nThis second part it is represented by the **upper node called `params`**, and it can be dynamic. Why...? All this second part represent environment variables that Cuack will pass to the docker container. So all Cuack is going to do is to read all the final nodes and treat them as strings that will pass as environment variables. That's why you can create the yaml structure that you prefer as long as every final node represents a environment variable.\n\n\u003e Keep in mind that all values will be strings when passed as environment variables\n\n\n\n### `list`\nThe **list** command is used to list all droplets created on the server providers by cuack.\n\nIt shows the droplet's name and the IP where it is deployed on.\n\n```bash\ncuack-ctl list\n```\n\n### `inspect`\nThe **inspect** command is used to see the configuration file (the yaml file) and some other details of the droplet, like CPU and RAM usage.\n\nYou must know the name of the droplet, which can be obtained via the `list` command.\n\n```bash\ncuack-ctl inspect \u003cname_of_droplet\u003e\n```\n\nIt prints in command line the URL where is served a tiny website where it's displayed all this information. By detault it's `localhost:8080/`\n\n![ie inspect](https://github.com/casteloig/cuack/blob/main/src/images/inspect.png?raw=true)\n\n### `delete`\nThe **delete** command is used to delete a server and the droplet that it is deployed on.\n\nIt only accepts one argument:\n\n| Argument | Description                                              | Type   |\n| -------- | -------------------------------------------------------- | ------ |\n| `name_of_droplet` | It represents the name of the droplet | `string` |\n\n```bash\ncuack-ctl delete \u003cname_of_droplet\u003e\n```\n\nKeep in mind that **the name of the droplet is not the same as the name represented in the yaml file** when you created the server. That's because cuack will always take the name in the yaml file and add some extra strings to distinguish two servers created with the same file. So you should check the name with the `list` command before.\n\n\n## How Cuack uses docker images to start his servers?\n\nCuack has his own images to deploy his servers because cuack abstracts himself from the way the images are created.\n\nWe explained a little bit of this [here](#second-part).\n\nIn a nutshell, Cuack just creates the droplet where the server will be deployed and runs the container within the droplet passing all the params as environment variables. This provides a lot of freedom to the way Cuack can be used, because you actually can build your own image of another game/service and run inside of it the application that you want as long as you keep in mind that all the params of the `yaml` file will be passed as environment variables to the running image.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcasteloig%2Fcuack","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcasteloig%2Fcuack","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcasteloig%2Fcuack/lists"}