{"id":24383060,"url":"https://github.com/akmalovaa/iac-timeweb","last_synced_at":"2025-07-06T23:39:45.673Z","repository":{"id":226993044,"uuid":"767730830","full_name":"akmalovaa/iac-timeweb","owner":"akmalovaa","description":"iac-timeweb","archived":false,"fork":false,"pushed_at":"2024-04-08T21:54:44.000Z","size":37,"stargazers_count":2,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-19T10:12:06.452Z","etag":null,"topics":["ansible","docker","iac","taskfile","terraform","timeweb","timeweb-cloud"],"latest_commit_sha":null,"homepage":"","language":"HCL","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/akmalovaa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"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}},"created_at":"2024-03-05T19:53:41.000Z","updated_at":"2024-12-04T09:29:53.000Z","dependencies_parsed_at":"2024-04-08T22:52:24.490Z","dependency_job_id":null,"html_url":"https://github.com/akmalovaa/iac-timeweb","commit_stats":null,"previous_names":["akmalovaa/iac-timeweb"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akmalovaa%2Fiac-timeweb","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akmalovaa%2Fiac-timeweb/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akmalovaa%2Fiac-timeweb/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/akmalovaa%2Fiac-timeweb/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/akmalovaa","download_url":"https://codeload.github.com/akmalovaa/iac-timeweb/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":243258505,"owners_count":20262301,"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","docker","iac","taskfile","terraform","timeweb","timeweb-cloud"],"created_at":"2025-01-19T10:12:10.702Z","updated_at":"2025-03-12T17:18:44.994Z","avatar_url":"https://github.com/akmalovaa.png","language":"HCL","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Example IaC timeweb\n\nРепозиторий для экспериментов с IaC Timeweb\n\n**Цель:** \n\nПодготовить и запустить сервер с сервисами в docker-compose, используя простые подходы IaC для автоматизации\n\n- Заказать VPS\n- Установить docker, docker compose\n- Загрузить docker-compose.yaml и файлы конфигураций сервисов\n- Запустить\n\n## Описание\n\n### Сервер для мониторинга\n\nВ качестве примера сервиса в `docker-compose` буду использовать [Gatus](https://github.com/TwiN/gatus)\n\nДополнительно рядом добавлю сервисы **Prometheus** + **Grafana**\n\n\n\n## Подготовка\n\n### Установка\n\nДля автотизации буду использовать:\n- [Terraform](https://developer.hashicorp.com/terraform/install)\n- [Ansible](https://docs.ansible.com/ansible/latest/installation_guide/intro_installation.html)\n- [Taskfile](https://taskfile.dev/)\n\nМожно установить локально или использовать готовый container image образ: `docker pull ghcr.io/akmalovaa/iac-tools`, где уже подготовил и собрал все необходимые компоненты\n\nНа локальной машине можно даже ничего не устанавливать кроме **docker**\n\nДалее в примерах буду использовать именно данный способ\n\n### Настройка\n\n#### Учетная запись **timeweb**\nВойти или зарегистрироваться [реф.ссылка](https://timeweb.cloud/r/cp14436)\n\n#### Настройка проекта\nВ качестве названия проекта используется `homelab` нужно [создать](https://timeweb.cloud/my/projects) такой же или\n\nпоменять на свой проект в настройках `terraform/main.tf`\n```\ndata \"twc_projects\" \"terraform-project\" {\n  name = \"homelab\"\n}\n```\n\n\n#### SSH key\nСоздать новые или использовать уже сгенерированные ранее ключи\n- **private_key:** Используется для удобства подключения и работы Ansible \n- **public_key:** Добавляется на сервер при его создании\n\nНеобходимо свой **public_key** добавить в [панель управления](https://timeweb.cloud/my/sshkeys) назвал `monitoring`\n\nИспользуется в `terraform/main.tf`\n```\ndata \"twc_ssh_keys\" \"ssh-key\" {\n  name = \"monitoring\"\n}\n```\n\n**private_key** - для ansible использовать в \u003e `ansible/ssh/id_rsa`\n\n\n#### API keys\n\nСоздать здесь https://timeweb.cloud/my/api-keys\n\nИспользовать в переменных окружения `TF_VAR_TWC_TOKEN` или создать файл `terraform/env.auto.tfvars`\n```toml\nTWC_TOKEN = \"eyJhbGcsaohjdshoaohgasgashod...\"\n```\n\n#### Настройка сервера\nОсновные настройки в файле `terraform/main.tf`\n\nПример фиксированной настройки сервера по цене\n```\ndata \"twc_presets\" \"main-preset\" {\n  location = \"ru-1\"\n  price_filter {\n    from = 150\n    to = 200\n  }\n```\n\n\u003e [!NOTE]\n\u003e Если по заданным критериям не обнаружит нужного тарифа, сервер создаваться не будет\n\nВсе доступные варианты, удобнее смотреть в интерфейсе Timeweb Cloud, на первых шагах создания сервера, в разделе выбор тарифа\n\nФильтровать можно не только по стоимости, но и по требуемым ресурсам (CPU, RAM, disk) и гео-расположению\n\n\n#### Настройка сервисов\n\nКонфигурационные файлы и `docker-compose.yaml` вынес в отдельную директорию\n\n`./services/` \n\nДанную директорию сделал полностью независимым. \nЕсть возможность даже без IaC автоматизаций вручную скопировать данную директорию и запустить локально или на сервере.\n\nДля удобства настройки и конфигурирования основные переменные вынесены в файл:\n\n- .gitab-variables.yaml\n\n\n### Запуск \n\nПеременные подготовлены для запуска в gitlab ci/cd\nСкрипт `variables-to-local.py` создает файл `.env` для локального запуска **docker** c нужными переменными окружения\n```bash\npython variables-to-local.py\n```\n\n\nЗапуск контейнера в интерактивном режиме:\n\n```bash\ndocker run --rm -it -v .:/srv --env-file .env ghcr.io/akmalovaa/iac-tools bash\n```\n\n\n#### Terraform \n```bash\ntask terraform:all\n```\n\n#### Ansible \n```bash\ntask ansible:play\n```\n\n\u003e [!WARNING]  \n\u003e При запуске terraform возможны проблемы из-за ограничений доступа из РФ\n\nВ результате выполнения, должны получить готовый VPS сервер по выбранному тарифу и запущенные сервисы:\n- {YOUR_IP}:8080 - Gatus\n- {YOUR_IP}:9090 - Prometheus\n- {YOUR_IP}:3000 - Grafana\n\n\n## TODO:\n- Добавить **domain name** через DNS **Cloudflare** и привязать к новому IP - SSL cert и proxy (nginx, traefik или caddy)\n- Ansible **sync files** вместо **copy**\n- Изучить **terragrount**\n- Оповещение в **telegram** при завершении, что сервер поднялся и готов к работе (domain-name)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakmalovaa%2Fiac-timeweb","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fakmalovaa%2Fiac-timeweb","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fakmalovaa%2Fiac-timeweb/lists"}