{"id":34276013,"url":"https://github.com/gamocosm/gamocosm","last_synced_at":"2026-03-12T07:02:22.946Z","repository":{"id":16780467,"uuid":"19538758","full_name":"Gamocosm/Gamocosm","owner":"Gamocosm","description":"Honest Minecraft server hosting","archived":false,"fork":false,"pushed_at":"2025-09-23T08:22:40.000Z","size":4888,"stargazers_count":195,"open_issues_count":18,"forks_count":28,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-12-20T09:48:06.154Z","etag":null,"topics":["digital-ocean","minecraft","minecraft-server","open-source","ruby","ruby-on-rails"],"latest_commit_sha":null,"homepage":"https://gamocosm.com","language":"Ruby","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Gamocosm.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2014-05-07T14:59:15.000Z","updated_at":"2025-09-23T08:22:44.000Z","dependencies_parsed_at":"2023-02-10T19:31:19.285Z","dependency_job_id":"adc8225e-b222-4af0-9bdd-6b94ad6e274d","html_url":"https://github.com/Gamocosm/Gamocosm","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/Gamocosm/Gamocosm","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gamocosm%2FGamocosm","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gamocosm%2FGamocosm/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gamocosm%2FGamocosm/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gamocosm%2FGamocosm/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Gamocosm","download_url":"https://codeload.github.com/Gamocosm/Gamocosm/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Gamocosm%2FGamocosm/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30417685,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-12T06:40:58.731Z","status":"ssl_error","status_checked_at":"2026-03-12T06:40:40.296Z","response_time":114,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: 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":["digital-ocean","minecraft","minecraft-server","open-source","ruby","ruby-on-rails"],"created_at":"2025-12-16T21:24:43.783Z","updated_at":"2026-03-12T07:02:22.933Z","avatar_url":"https://github.com/Gamocosm.png","language":"Ruby","funding_links":[],"categories":[],"sub_categories":[],"readme":"Gamocosm [![Build Status](https://circleci.com/gh/Gamocosm/Gamocosm.svg?style=shield)][circleci] [![Coverage Status](https://coveralls.io/repos/github/Gamocosm/Gamocosm/badge.svg?branch=master)][coveralls] [![Gitter Chat](https://badges.gitter.im/gamocosm.png)][gitter]\n========\n\nGamocosm makes it easy to run cloud Minecraft servers.\nDigital Ocean is used as the backend/hosting service, due to cost, reliability, and accessibility.\nGamocosm works well for friends who play together, but not 24/7.\nRunning a server 14 hours a week (2 hours every day) may cost 40 cents a month, instead of \\$5.\n\n**This README is directed towards developers; if you are a user looking for more information, please check out the [wiki][wiki] or drop by [Gitter chat][gitter].**\n\n## Minecraft Server Wrapper\nThe [Minecraft Server Wrapper][mcsw] (for lack of a better name) is a light python webserver.\nIt provides an HTTP API for starting and stopping Minecraft servers, downloading the world, etc.\nPlease check it out and help improve it too!\n\n## Gamocosm Minecraft Flavours\nThe [gamocosm-minecraft-flavours][minecraft-flavours] repository includes the setup scripts used to install different flavours of Minecraft on a new server.\nRead this [wiki page][wiki-different-versions] for adding support for new flavours, or manually installing something yourself.\n\n## Contributing\nPull requests are welcome!\n\n### Setting Up Your Development Environment\nYou should have a Unix/Linux system.\nThe following instructions were made for Fedora 36 Server, but the steps should be similar on other distributions.\nThe instructions assume you are executing commands as an unprivileged user;\nthe sample commands include `sudo` if and only if `root` privileges are necessary.\n\nAs of 2022 August 28, deployment and CI have been changed to use containers.\nFor development, it is also recommended to use containers, but only for the PostgreSQL database and Redis store (as they are \"static services\").\nNote that it is still recommended to run the development Rails server and Sidekiq workers \"on the host\".\nI use [Podman][podman] instead of Docker, but,\nat least for these development instructions, they should work by simply replacing `podman` with `docker`.\n\nThe steps marked with \"directory sensitive\" should be run from inside the root of the Gamocosm repository.\n\n#### Configuration\n1. Create your environment file:\n\t`cp template.env gamocosm.env`.\n1. Make your environment file readable (and writable) by the file owner (you) only:\n\t`chown 600 gamocosm.env`.\n1. Update the config in `gamocosm.env`.\n\tSee \"[Environment File](#environment-file)\" below for documentation.\n1. Load environment variables:\n\t`source load_env.sh`.\n\n\tYou will need to do this in every new shell you run ruby/rails in.\n\n#### Container Setup\n1. Install Podman: `sudo dnf install podman`.\n1. Ensure that your environment variables have been loaded as above.\n1. Create the database container:\n\n\t```\n\tpodman create --name gamocosm-database --env \"POSTGRES_USER=$DATABASE_USER\" --env \"POSTGRES_PASSWORD=$DATABASE_PASSWORD\" --publish 127.0.0.1:5432:5432 docker.io/postgres:14.5\n\t```\n\n\tYou may wish to add the following flag: `--volume gamocosm-database-volume:/var/lib/postgresql/data`;\n\t[this will prevent Podman from using a randomly-generated name](https://docs.podman.io/en/latest/markdown/podman-create.1.html#volume-v-source-volume-host-dir-container-dir-options),\n\twhich can make debugging or moving things around later easier.\n\tSee [the Docker Hub page for Postgres](https://hub.docker.com/_/postgres/) (scroll down to `PGDATA`) for more information about persistent data with this Postgres image.\n\n1. Create the Redis container:\n\n\t```\n\tpodman create --name gamocosm-redis --publish 127.0.0.1:6379:6379 docker.io/redis:7.0.4\n\t```\n\n\tYou may wish to add the following flag: `--volume gamocosm-redis-volume:/data`, as above.\n\tSee [the Docker Hub page for Redis](https://hub.docker.com/_/redis/) (scroll down to \"start with persistent storage\") for more information about persistent data with this Redis image.\n\n1. Start the containers:\n\t`podman start gamocosm-database gamocosm-redis`.\n\nAs is, you'll have to start these containers manually each time you reboot your computer.\nYou can automate starting Podman containers as \"[quadlets](https://www.redhat.com/sysadmin/quadlet-podman)\" using systemd.\nExample `gamocosm-database.container` and `gamocosm-redis.container` files are provided in Gamocosm's `sysadmin` folder.\nUnless you changed the default `DATABASE_USER` from `template.env`, you shouldn't need to edit these files.\nIf you do need to edit them, systemd supports [drop-in configuration](https://www.freedesktop.org/software/systemd/man/latest/systemd.unit.html) (search for \"drop-in\").\n\n```\n# Store `DATABASE_PASSWORD` as a Podman secret.\n# Make sure you loaded your environment variables as above!\nprintf \"$DATABASE_SECRET\" | podman secret create gamocosm-database-password -\n\n# Copy the `.container` files to where systemd expects them.\ncp sysadmin/gamocosm-database.container sysadmin/gamocosm-redis.container ~/.config/containers/systemd/\n\n# Tell systemd to detect new files/changes.\nsystemctl --user daemon-reload\n\n# Start the containers.\nsystemctl --user start gamocosm-database gamocosm-redis\n```\n\n#### Ruby Setup\nI recommend using [rbenv][rbenv] to manage Ruby installations.\n\n1. Install dependencies to build Ruby - this depends on your system.\n\tFor a Fedora 36 Server image, the following was sufficient for me:\n\t`sudo dnf install openssl-devel perl zlib-devel`.\n1. Install [rbenv][rbenv] and [ruby-build][ruby-build].\n\tRead their docs for up to date instructions.\n\tBut, as of 2022 August 28:\n\t- Run `git clone https://github.com/rbenv/rbenv.git ~/.rbenv`.\n\t- Add `$HOME/.rbenv/bin` to your `$PATH`, usually done in `~/.bashrc`.\n\n\t\tOn recent versions of Fedora, `~/.bashrc` sources any files in the directory `~/.bashrc.d` (if it exists),\n\t\twhich is more modular than editing `.bashrc` directly.\n\t\tIt would look something like the following in your `~/.bashrc`.\n\n\t\t```\n\t\t# User specific aliases and functions\n\t\tif [ -d ~/.bashrc.d ]; then\n\t\t\tfor rc in ~/.bashrc.d/*; do\n\t\t\t\tif [ -f \"$rc\" ]; then\n\t\t\t\t\t. \"$rc\"\n\t\t\t\tfi\n\t\t\tdone\n\t\tfi\n\n\t\tunset rc\n\t\t```\n\n\t\tAssuming you have/use this setup, to proceed with the rbenv installation:\n\n\t\t- Create the directory (without failing if it already exists):\n\t\t\t`mkdir -p ~/.bashrc.d`.\n\t\t- Create a configuration/initialization file:\n\t\t\t`echo 'PATH=\"$HOME/.rbenv/bin:$PATH\"' \u003e\u003e ~/.bashrc.d/rbenv`.\n\t- Additionally, ensure that rbenv gets autoloaded into any new shells:\n\t\t`echo 'eval \"$(rbenv init - bash)\"' \u003e\u003e ~/.bashrc.d/rbenv` (assuming you're following the modular convention).\n\t- Restart (close and reopen) your shell for the changes to take effect.\n\t- Create the plugins directory for rbenv:\n\t\t`mkdir ~/.rbenv/plugins`.\n\t- Get ruby-build:\n\t\t`git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build`.\n\t- Check that ruby-build has been installed correctly:\n\t\t`rbenv install --list` (lists stable ruby versions).\n1. (directory sensitive) Install Ruby 3.1.2:\n\t`rbenv install` (it reads `.ruby-version`).\n1. (directory sensitive) Check that `ruby -v` gives you version 3.1.2.\n1. Install dependencies to build gems:\n\t`sudo dnf install libpq-devel`.\n1. (directory sensitive) Install gem dependencies:\n\t`bundle install`.\n\n#### Gamocosm Setup\nAll the commands in this section are \"directory sensitive\" (should be run in the project root).\n\n1. Generate SSH keys; Gamocosm expects a passphraseless `id_gamocosm` private key in the project root.\n\n\tTypically, a passphrase is used to encrypt private keys on the local filesystem, and you would be interactively prompted to provide the passphrase when using the key.\n\tHowever, since Gamocosm uses this SSH key \"automatically\", it can't prompt for a passphrase.\n\tGamocosm used to take a passphrase as a configuration option; however, this doesn't actually provide any additional security - the passphrase would be stored (in plain text) on the same filesystem with the same permissions as the private key itself.\n\tSo, now, Gamocosm just expects a passphraseless private key.\n\n\tGamocosm uses SSH to connect to and set up the servers it creates.\n\tGamocosm officially only supports `ed25519` keys; somewhere down the stack, `rsa` keys are not supported (`ed25519` keys are considered more secure).\n\tTo generate a new passphraseless key, run: `ssh-keygen -t ed25519 -f id_gamocosm -N ''`.\n\n\tYou can use this key directly with `ssh -i id_gamocosm` (e.g. if you need to connect to a server directly).\n\tThe files `id_gamocosm` and `id_gamocosm.pub` are ignored in Gamocosm's `.gitignore`,\n\tso you don't have to worry about accidentally committing them.\n1. Setup the database:\n\t`bundle exec rails db:setup`.\n1. Start the server:\n\t`bundle exec rails s` (defaults to `localhost` in development; use `--binding 0.0.0.0` to listen on all interfaces).\n1. Start the Sidekiq worker:\n\t`bundle exec sidekiq`.\n1. (Optional) Open the console:\n\t`bundle exec rails c`.\n\n_**Note**: most `bundle exec ...` commands will work without `bundle exec` (e.g. just `rails c` or `sidekiq`) -\nas long as you don't have other projects using `rbenv`,\nand the same version of Ruby (3.1.2),\nand the same gem(s),\nbut different versions of those gems._\n\n### Environment File\n- `DATABASE_HOST`:\n\tMay be an absolute path (for a Unix domain socket), or an IP/hostname (for a TCP connection) ([PostgreSQL docs][postgresql-docs-host]).\n\tWhen using containers as described above, the default value of `localhost` in `template.env` corresponds to the `127.0.0.1` passed to `--publish` in `podman create`.\n- `DATABASE_PORT`:\n\tRequired even for Unix domain sockets.\n\tThe default should work provided you didn't change the PostgreSQL settings.\n- `DATABASE_USER`:\n\tHmmmm.\n- `DATABASE_PASSWORD`:\n\tHmmmm.\n- `DIGITAL_OCEAN_API_KEY`:\n\tYour Digital Ocean API token.\n\tThis key is added to the dummy user in development (see [`db/seeds.rb`][db-seeds]) - it's probably convenient for it to have write access.\n\tFor the test environment, it can be anything (but still needs to be set) -\n\tGamocosm tests \"mock\" HTTP requests so it won't actually contact Digital Ocean.\n\tFor production, this key can be read only - it is (just) used to list regions and droplet sizes.\n- `REDIS_HOST`:\n\tWhen using containers as described above, the default value of `localhost` in `template.env` corresponds to the `127.0.0.1` passed to `--publish` in `podman create`.\n- `REDIS_PORT`:\n\tYou can leave this as the default.\n- `MAIL_SERVER_*`:\n\tSee [action mailer configuration][rails-action-mailer] in the Rails guide.\n- `SECRET_KEY_BASE`:\n\tOnly production.\n- `SIDEKIQ_USERNAME`:\n\tOnly production - HTTP basic auth for Sidekiq web interface.\n- `SIDEKIQ_PASSWORD`:\n\tSee previous.\n- `DEVELOPER_EMAILS`:\n\tComma separated list of emails to send exceptions to.\n- `BADNESS_SECRET`:\n\tSecret to test `/badness` endpoint.\n\n## Testing\n- `bundle exec rails test` runs the test suite.\n\t[The CI runs the tests just like this][circleci-config].\n\tFor more options, see [Rails documentation for the test runner][rails-test-runner].\n\t- Run a specific file: `bundle exec rails test path/to/file.rb`\n\t- Run a specific test (by line number): `bundle exec rails test path/to/file.rb:123`\n\t- Run a specific test (by name): `bundle exec rails test path/to/file.rb --name my_test`\n- In the test environment, Gamocosm doesn't actually make external HTTP requests; it mocks the requests and responses using [WebMock][webmock].\n\tSo, you don't need a Digital Ocean account or valid API key to run the tests.\n- Unfortunately, not all the tests are idempotent; one failing test may leave data in the database that causes subsequent tests to fail.\n\tYou can pass `--fail-fast` to the test runner to stop at the first failing test.\n- `RAILS_ENV=test bundle exec rails \u003cs|c\u003e` to run the server or console (respectively) to inspect the test environment.\n\t- _Note: in the test environment, unlike development, the server does not automatically reload source files when you change them._\n\n### Simulating a User Server with Containers\nIn the test environment, Gamocosm doesn't make external HTTP requests; it mocks the API responses from Digital Ocean.\nWithout a server to connect to, Gamocosm can't run `SetupServerWorker` or `AutoshutdownMinecraftWorker`.\n\nThe script `test_with_container.sh` runs a container (based on an image built from `tests.Containerfile`)\nthat simulates a newly created server on Digital Ocean.\nArguments to this script are passed along to `rails test`.\n\nThe script takes care of building the image, starting the container, running the tests, and cleaning up the container.\n\nThis script has only been tested with Podman on Fedora; I'm not sure if it works with Docker on Ubuntu systems.\n\n## Technical Details\nHmmmm.\n\n### Directory Hierarchy\n- [Documentation for Rails directories][rails-directory-hierarchy].\n- `sysadmin`: stuff for the Gamocosm server (you can run your own server! This is a true open source project).\n\n### Data\n- Gamocosm has a lot of infrastructure:\n\t- Digital Ocean API\n\t- Digital Ocean servers/droplets\n\t- Minecraft and the server wrapper\n\t- Gamocosm Rails server\n\t- Gamocosm Sidekiq background workers\n- Avoid state and duplicating data (less chance of corruption, logic easier to debug than data)\n- Idempotency is good\n\n### Error Handling\n- Methods that \"do things\" should return nil on success, or an object on error\n- Methods that \"return things\" should use `String#error!` to mark a return value is an error\n\t- This method takes 1 argument: a data object (can be `nil`)\n\t- e.g. `'API response code not 200'.error!(res)`\n\t- `String#error!` returns an `Error` object; `Error#to_s` is overridden so the error message can be shown to the user, or the error data (`Error#data`) can be further inspected for handling\n- You can use `.error?` to check if a return value is an error. `Error#error?` is overriden to return `true`\n- This class and these methods are defined in `config/monkey_patches.rb`\n- Throw exceptions in \"exceptional cases\", when something is unexpected (e.g. bad user input _is_ expected) or can't be handled without \"blowing up\"\n\n### Important Checks\n- `server.remote.exists?`: `!server.remote_id.nil?`\n- `server.remote.error?`: whether there was an error or not retrieving info about a droplet from Digital Ocean\n\t- true if the user is missing his Digital Ocean API token, or if it's invalid\n\t- false if `!server.remote.exists?`\n\t- don't need to check this before `server.remote` actions (e.g. `server.remote.create`)\n- `server.running?`: `server.remote.exists? \u0026\u0026 !server.remote.error? \u0026\u0026 server.remote.status == 'active'`\n- `user.digital_ocean.nil?`: Digital Ocean API token missing\n- `minecraft.node.error?`: error communicating with Minecraft wrapper on server\n- `minecraft.running?`: `server.running? \u0026\u0026 !node.error? \u0026\u0026 node.pid \u003e 0` (notice symmetry with `server.running?`)\n\n### Background Workers\n- Idempotent\n- Keep blocks inside timeouts as simple as possible, cleanup outside of timeout, try to stick to plain old datatypes\n\t- Use `ActiveRecord::Base.connection_pool.with_connection do |conn|` if threads (e.g. timeout) access the database\n- Run finite amount of times (keep track of how many times looped)\n- Reset the state of the server if anything goes wrong (any exit points)\n- Check that the remote exists and is not errored\n- Log errors to user minecraft server, include 'Aborting' when not finishing\n- 'Aborting' should always be followed by `server.reset_state` and `return`\n\n### Other Useful Stuff\n- Development user (created by [`db/seeds.rb`][db-seeds]) has the Digital Ocean api token from `env.sh`.\n- The Sidekiq web interface is mounted at `/sidekiq`.\n- Sidekiq doesn't automatically reload source files when you edit them. You must restart it for changes to take effect.\n- Run the console: `bundle exec rails c`.\n- Reset the database: `bundle exec rake db:reset`.\n- Reset Sidekiq jobs: `Sidekiq::Queue.new.each { |job| job.delete }` in the rails console.\n- Reset Sidekiq stats: `Sidekiq::Stats.new.reset` in the rails console.\n- Start `ScheduledTaskWorker`: `ScheduledTaskWorker.perform_in(0.seconds, 0)` - it will automatically reschedule itself for the next interval.\n- The deployment scripts and configuration are in the `sysadmin/` directory.\n- List of `rake db` commands: [Stack Overflow][rake-db-commands].\n- [Rails extensions to common classes][rails-active-support-extensions].\n- [Rails configuration][rails-configuration].\n\n## Credits\n- Special thanks to [geetfun][geetfun] who helped with the original development\n- Special thanks to [binary-koan][binary-koan] ([Jono Mingard][jono-mingard]) for designing the new theme! Looks awesome!\n- [SuperMarioBro][super-mario-bro] for helping iron out some initial bugs, adding support for more Minecraft flavours\n- [bearbin][bearbin] for helping iron out some initial bugs\n- [chiisana][chiisana] for feedback and other ideas, resources\n- [KayoticSully][kayotic-sully] for planning and development on the server wrapper API\n- [Jadorel][jadorel] for feedback and helping iron out some bugs\n- [Ajusa][ajusa] for helping with some bugs\n\n## Appendix\n### Notes\n- If `podman build` gets interrupted, you may be left with dangling images: [relevant GitHub issue][podman-dangling-images].\n\tThe solution is to run `buildah rm --all`\n\t(may need to be installed separately, e.g. `sudo dnf install buildah`)\n\t(followed by `podman image prune`).\n\n### Database Configuration\n**Database configuration is greatly simplified if you use a container image as described above.\nHowever, the following information remains for reference, if you want to run PostgreSQL directly on your system.**\n\nLocate your PostgreSQL data directory.\nOn Fedora this is `/var/lib/pgsql/data/`.\n\n#### Connection\nLocate `postgresql.conf` in your PostgreSQL data directory.\nThe convention is that commented out settings represent the default values.\nFor a Unix domain socket connection, `DATABASE_HOST` should be one of the values of `unix_socket_directories`.\nIn general, the default is `/tmp`.\nOn Fedora, the default includes both `/tmp` and `/var/run/postgresql`.\nFor a TCP connection, `DATABASE_HOST` should be one of the values of `listen_addresses` (default `localhost`).\nThe value `localhost` should work if you're running PostgreSQL locally.\nYour `DATABASE_PORT` should be the value of `port` in this file (default `5432`).\n\nYou can read more about connecting to PostgreSQL at [PostgreSQL's docs][postgresql-docs-connecting].\n\n#### Authentication\nLocate `pg_hba.conf` in your PostgreSQL data directory.\nThis file tells PostgreSQL how to authenticate users.\nRead about it on the [PostgreSQL docs][postgresql-docs-pg-hba].\nThe Rails config `config/database.yml` reads from the environment variables which you should have set in and loaded from `gamocosm.env` via `source load_env.sh`.\n\n_**Note**: in the past, the database user needed to be a [PostgreSQL superuser][postgresql-docs-roles] to enable the [uuid extension][postgresql-docs-uuid].\nHowever, as of PostgreSQL 13, it seems that it should nolonger be necessary?_\n\n\u003e This module is considered “trusted”, that is, it can be installed by non-superusers who have CREATE privilege on the current database.\n\nTo create a PostgreSQL user `gamocosm`:\n\n- Switch to the `postgres` user (on the OS): `sudo su --login postgres`.\n- Run `createuser --createdb --pwprompt --superuser gamocosm` (`createuser --help` for more info).\n\nDepending on what method you want to use, in `pg_hba.conf`,\nadd the following under the line that looks like `# TYPE DATABASE USER ADDRESS METHOD`.\n\n- Type\n\t- `local` (Unix domain socket) or `host` (TCP connection)\n- Database\n\t- Rails also needs to have access to the `postgres` database (to create new databases?)\n\t- `postgres,gamocosm_development,gamocosm_test,gamocosm_production`\n- User\n\t- `gamocosm`\n- Address\n\t- Leave blank for `local` type\n\t- `localhost` is `127.0.0.1/32` in ipv4 and `::1/128` in ipv6.\n\t\tMy system used ipv6 (PostgreSQL did not match the entry when I entered `localhost`).\n- Method\n\t- `trust`\n\t\t- Easiest, but least secure. Typically ok on development machines. Blindly trusts the user.\n\t- `peer`\n\t\t- Checks if the PostgreSQL user matches the operating system user.\n\t\t- Since `config/database.yml` specifies the database user to be `gamocosm`,\n\t\t\tit would only work if you developed on an OS account named `gamocosm` as well.\n\t- `ident`\n\t\t- Same as `peer` but for network connections, using the [Ident protocol][wikipedia-ident-protocol]\n\t\t\t(I once tried to get this protocol working and it made no sense to me).\n\t- md5\n\t\t- Client supplies an MD5-encrypted password.\n\t\t- This is the recommended method.\n\nExample: `local postgres,gamocosm_development,gamocosm_test,gamocosm_production gamocosm md5`.\nYou will have to restart PostgreSQL (`sudo systemctl restart postgresql`) for the changes to take effect.\n\n[circleci]: https://circleci.com/gh/Gamocosm/Gamocosm\n[coveralls]: https://coveralls.io/github/Gamocosm/Gamocosm?branch=master\n[gitter]: https://gitter.im/gamocosm/Lobby\n\n[wiki]: https://github.com/Gamocosm/Gamocosm/wiki\n[mcsw]: https://github.com/Gamocosm/minecraft-server_wrapper\n[minecraft-flavours]: https://github.com/Gamocosm/gamocosm-minecraft-flavours\n[wiki-different-versions]: https://github.com/Gamocosm/Gamocosm/wiki/Installing-Different-Versions-of-Minecraft\n[db-seeds]: https://github.com/Gamocosm/Gamocosm/blob/master/db/seeds.rb\n[circleci-config]: https://github.com/Gamocosm/Gamocosm/blob/master/.circleci/config.yml\n\n[rbenv]: https://github.com/rbenv/rbenv\n[ruby-build]: https://github.com/rbenv/ruby-build\n\n[podman]: https://podman.io/\n\n[postgresql-docs-host]: https://www.postgresql.org/docs/14/libpq-connect.html#LIBPQ-CONNECT-HOST\n[postgresql-docs-connecting]: https://www.postgresql.org/docs/14/runtime-config-connection.html\n[postgresql-docs-pg-hba]: https://www.postgresql.org/docs/14/auth-pg-hba-conf.html\n[postgresql-docs-roles]: https://www.postgresql.org/docs/14/role-attributes.html\n[postgresql-docs-uuid]: https://www.postgresql.org/docs/14/uuid-ossp.html\n[wikipedia-ident-protocol]: https://en.wikipedia.org/wiki/Ident_protocol\n\n[webmock]: https://github.com/bblimke/webmock\n\n[geetfun]: https://github.com/geetfun\n[binary-koan]: https://github.com/binary-koan\n[jono-mingard]: https://mingard.link\n[super-mario-bro]: http://www.reddit.com/user/SuperMarioBro\n[bearbin]: https://github.com/bearbin\n[chiisana]: http://www.reddit.com/user/chiisana\n[kayotic-sully]: https://github.com/KayoticSully\n[jadorel]: https://www.reddit.com/user/Jadorel\n[ajusa]: https://github.com/Ajusa\n\n[rake-db-commands]: http://stackoverflow.com/questions/10301794/\n[rails-action-mailer]: http://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration\n[podman-dangling-images]: https://github.com/containers/podman/issues/7889\n[rails-test-runner]: https://guides.rubyonrails.org/testing.html#the-rails-test-runner\n[rails-directory-hierarchy]: https://guides.rubyonrails.org/getting_started.html#creating-the-blog-application\n[rails-active-support-extensions]: https://guides.rubyonrails.org/active_support_core_extensions.html\n[rails-configuration]: https://guides.rubyonrails.org/configuring.html\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgamocosm%2Fgamocosm","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgamocosm%2Fgamocosm","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgamocosm%2Fgamocosm/lists"}