Репозиторий для экспериментов с IaC Timeweb
Цель:
Подготовить и запустить сервер с сервисами в docker-compose, используя простые подходы IaC для автоматизации
- Заказать VPS
- Установить docker, docker compose
- Загрузить docker-compose.yaml и файлы конфигураций сервисов
- Запустить
В качестве примера сервиса в docker-compose
буду использовать Gatus
Дополнительно рядом добавлю сервисы Prometheus + Grafana
Для автотизации буду использовать:
Можно установить локально или использовать готовый container image образ: docker pull ghcr.io/akmalovaa/iac-tools
, где уже подготовил и собрал все необходимые компоненты
На локальной машине можно даже ничего не устанавливать кроме docker
Далее в примерах буду использовать именно данный способ
Войти или зарегистрироваться реф.ссылка
В качестве названия проекта используется homelab
нужно создать такой же или
поменять на свой проект в настройках terraform/main.tf
data "twc_projects" "terraform-project" {
name = "homelab"
}
Создать новые или использовать уже сгенерированные ранее ключи
- private_key: Используется для удобства подключения и работы Ansible
- public_key: Добавляется на сервер при его создании
Необходимо свой public_key добавить в панель управления назвал monitoring
Используется в terraform/main.tf
data "twc_ssh_keys" "ssh-key" {
name = "monitoring"
}
private_key - для ansible использовать в > ansible/ssh/id_rsa
Создать здесь https://timeweb.cloud/my/api-keys
Использовать в переменных окружения TF_VAR_TWC_TOKEN
или создать файл terraform/env.auto.tfvars
TWC_TOKEN = "eyJhbGcsaohjdshoaohgasgashod..."
Основные настройки в файле terraform/main.tf
Пример фиксированной настройки сервера по цене
data "twc_presets" "main-preset" {
location = "ru-1"
price_filter {
from = 150
to = 200
}
Note
Если по заданным критериям не обнаружит нужного тарифа, сервер создаваться не будет
Все доступные варианты, удобнее смотреть в интерфейсе Timeweb Cloud, на первых шагах создания сервера, в разделе выбор тарифа
Фильтровать можно не только по стоимости, но и по требуемым ресурсам (CPU, RAM, disk) и гео-расположению
Конфигурационные файлы и docker-compose.yaml
вынес в отдельную директорию
./services/
Данную директорию сделал полностью независимым. Есть возможность даже без IaC автоматизаций вручную скопировать данную директорию и запустить локально или на сервере.
Для удобства настройки и конфигурирования основные переменные вынесены в файл:
- .gitab-variables.yaml
Переменные подготовлены для запуска в gitlab ci/cd
Скрипт variables-to-local.py
создает файл .env
для локального запуска docker c нужными переменными окружения
python variables-to-local.py
Запуск контейнера в интерактивном режиме:
docker run --rm -it -v .:/srv --env-file .env ghcr.io/akmalovaa/iac-tools bash
task terraform:all
task ansible:play
Warning
При запуске terraform возможны проблемы из-за ограничений доступа из РФ
В результате выполнения, должны получить готовый VPS сервер по выбранному тарифу и запущенные сервисы:
- {YOUR_IP}:8080 - Gatus
- {YOUR_IP}:9090 - Prometheus
- {YOUR_IP}:3000 - Grafana
- Добавить domain name через DNS Cloudflare и привязать к новому IP - SSL cert и proxy (nginx, traefik или caddy)
- Ansible sync files вместо copy
- Изучить terragrount
- Оповещение в telegram при завершении, что сервер поднялся и готов к работе (domain-name)