- Notifications
You must be signed in to change notification settings - Fork0
akmalovaa/iac-timeweb
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
Репозиторий для экспериментов с 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 через DNSCloudflare и привязать к новому IP - SSL cert и proxy (nginx, traefik или caddy)
- Ansiblesync files вместоcopy
- Изучитьterragrount
- Оповещение вtelegram при завершении, что сервер поднялся и готов к работе (domain-name)