{"id":21285329,"url":"https://github.com/izenynn/cloud-1","last_synced_at":"2026-04-10T07:16:34.099Z","repository":{"id":216179846,"uuid":"739463682","full_name":"izenynn/cloud-1","owner":"izenynn","description":"Automated deployment of Inception on a remote server using Ansible.","archived":false,"fork":false,"pushed_at":"2024-01-11T12:39:18.000Z","size":75,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-22T05:15:30.260Z","etag":null,"topics":["ansible","ansible-playbook","automation","cloud","docker","docker-compose","linode","linux","mariadb","nginx","php-fpm","wordpress"],"latest_commit_sha":null,"homepage":"https://github.com/izenynn/inception","language":"Jinja","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/izenynn.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}},"created_at":"2024-01-05T16:19:25.000Z","updated_at":"2024-01-11T19:21:37.000Z","dependencies_parsed_at":"2024-01-12T02:44:20.637Z","dependency_job_id":null,"html_url":"https://github.com/izenynn/cloud-1","commit_stats":{"total_commits":78,"total_committers":2,"mean_commits":39.0,"dds":"0.012820512820512775","last_synced_commit":"a5392392ddc0f468e5782fbef65a68a45b10f5f9"},"previous_names":["izenynn/cloud-1"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izenynn%2Fcloud-1","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izenynn%2Fcloud-1/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izenynn%2Fcloud-1/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izenynn%2Fcloud-1/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/izenynn","download_url":"https://codeload.github.com/izenynn/cloud-1/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243746200,"owners_count":20341203,"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":["ansible","ansible-playbook","automation","cloud","docker","docker-compose","linode","linux","mariadb","nginx","php-fpm","wordpress"],"created_at":"2024-11-21T11:19:43.129Z","updated_at":"2026-04-10T07:16:34.061Z","avatar_url":"https://github.com/izenynn.png","language":"Jinja","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cloud-1\n\n## Info\n\nAutomated deployment of Inception on a remote server using Ansible.\n\nThis project inventory is dynamic and designed to deploy on `Linode`,\nif you want to deploy on another cloud provider, or on on-premise servers,\nyou can skip all the linode-related dependencies and just create your own\ninventory file.\n\nSupported systems:\n\n- Ubuntu.\n\nThe docker deployed services/utilities include:\n\n- Nginx.\n- Php-FPM.\n- MariaDB.\n- FTP.\n- Redis.\n- Adminer.\n- PhpMyAdmin.\n- (A static website main page).\n\nIs recommended to take a look at the playbook to fully understand features and how\nto use them.\n\nA user `ansible` is created for future playbooks runs, and a user `admin` is\ncreated for servers administrators to use, since `root` ssh login is prohibited.\n\n## Dependencies\n\n- `python3`.\n- `ansible`.\n- `linode_api4`.\n- `passlib`\n- `community.general` collection for `ansible`.\n\n### Python3\n\n```bash\nsudo apt install python3\n```\n\n### Ansible \u0026 Linode API\n\n`ansible` (`passlib` is a dependency) and `linode_api4` can be installed via `pip` once `python3` is installed:\n```bash\npython3 -m pip install --user ansible passlib linode_api4\n```\n\n### Ansible plugin collection: community.general\n\nThis project uses the [linode inventory community plugin](https://docs.ansible.com/ansible/latest/collections/community/general/linode_inventory.html),\nso we need to install the `community.general` collection.\n\nCheck if its installed by running:\n```bash\nansible-galaxy collection list\n```\n\nIf not in the list, install `community.general` collection by running:\n```bash\nansible-galaxy collection install community.general\n```\n\nIf it's in the list but version is below `8.1.0`, upgrade it by running:\n```bash\nansible-galaxy collection install community.general --upgrade\n```\n\n*Collection is not included in the repo because it's heavy (26M aprox.).*\n\n## Log\n\nThis project uses `/var/log/ansible` as log file, change it on `ansible.cfg` or\ncreate it along with an `ansible` group (recommended):\n```bash\nsudo touch /var/log/ansible.log\n\nsudo groupadd ansible\nsudo chown root:ansible /var/log/ansible.log\nsudo chmod 775 /var/log/ansible.log\nsudo usermod \"$USER\" -aG ansible\n```\n\n## Vars\n\nSince the `./vars/vault.yml` is encrypted, for the sake of you knowing what should\nbe there, here's a list of required variables, that must be preset in the vault,\nso you can create this file easily:\n\n- `vault_admin_user_password`: password for the `admin` user.\n\n- `vault_ansible_user_authorized_key`: public key to add to `ansible` authorized keys.\n- `vault_admin_user_authorized_key`: public key to add to `admin` authorized keys.\n- All the docker secrets, look in `./roles/docker_deploy/defaults/main.yml` for the variable names.\n\n\u003e If you create additonal users, make sure to place those new passwords in the\n\u003e vault too!\n\n## Deploy\n\nAdjust the inventory to your needs, if deploying on `Linode` add the `ansible-cloud1`\ntag to the target machines, and export your API token:\n```bash\nexport LINODE_API_TOKEN='your_token_here'\n```\n\nAnd run the playbook:\n```bash\nansible-playbook --ask-vault-pass site.yml\n```\n\nA `run_playbook.sh` script is also provided for convenience:\n```bash\n./run_playbook.sh\n```\n\nYou can provide the `Linode` token and vault password via environment, or you\ncan create a `.env` following the provided `.env.sample`, so you don't have to\nexport the token and vault password for every new shell session:\n```bash\ncp .env.sample .env\nvim .env # Edit the values\n```\n\n## Deploy options\n\nAs you may expect, by default, password is only set on user creation (`update_password: on_create`).\nIf you want to update users password, explicitely specify `update_passwords=true`,\nto run a specific tasks for this (with `update_password: always`):\n```\n./run_playbook.sh -e update_passwords=true\n```\n\n\u003e The reasons behind this decision is to avoid false `changed` reports and most\n\u003e important, so it doesn't mesh around with passwords if this script is executed\n\u003e in multiple machines (that should have different passwords for security).\n\nUFW by default does not clean previous rules, if you want to force a reset of\nthe current rules, do it with `reset_ufw=true`:\n```bash\n./run_playbook.sh -e reset_ufw=true\n```\n\nDocker compose by default does not restart if at least one container is running\non the compose project, you can force a restart with `restart_compose=true`:\n```bash\n./run_playbook.sh -e restart_compose=true\n```\n\n\u003e You can always of course run the full ansible command instead of using the\n\u003e script since these flags are for ansible, and not for the script:\n\u003e `ansible-playbook --ask-vault-pass site.yml -e update_passwords=true`\n\n## Common issues\n\n### Connection time out after defaults modification\n\nIf you changed the ssh port or the default users array in the defaults,\nmake sure to change the remote user and port on `ansible.cfg`,\nby default it works with the `ansible` user and the port `4242`.\n\n\u003e If the ssh custom port is closed it will attempt connection with `root` or port 22,\n\u003e assuming ssh config is not yet changed.\n\n### Unexpected keyword argument 'allowed_methods'\n\nIf you get this error when parsing the linode inventory file:\n```\n[WARNING]:  * Failed to parse /.../inventory.linode.yml with ansible_collections.community.general.plugins.inventory.linode plugin: __init__() got an unexpected keyword argument 'allowed_methods'\n```\n\nThere's an incompatibility issue due to the `allowed_methods` argument in the\n`urllib3.util.retry` module, which was added in `urllib3` version `1.26.0`.\n\nTo resolve this issue, you need to upgrade `urllib3` to a version `1.26.0` or higher:\n```bash\npython3 -m pip install --upgrade urllib3\n```\n\nAnd `request` in case you get a warning about not supported `urllib3` version:\n```bash\npython3 -m pip install --upgrade requests\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fizenynn%2Fcloud-1","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fizenynn%2Fcloud-1","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fizenynn%2Fcloud-1/lists"}