Ответ
Я настраиваю сервисы с нуля, используя принципы Infrastructure as Code (IaC) и идемпотентности. Пример — развертывание веб-приложения с Nginx, Docker и мониторингом.
1. Инфраструктура как код (Terraform): Сначала описываю виртуальную машину, группы безопасности и DNS-запись.
# main.tf - Создание инстанса в Yandex Cloud
resource "yandex_compute_instance" "web" {
name = "web-app"
platform_id = "standard-v3"
resources {
cores = 2
memory = 2
}
boot_disk {
initialize_params {
image_id = "fd8vmcue7aajpmeo39kk" # Ubuntu 22.04
}
}
network_interface {
subnet_id = yandex_vpc_subnet.subnet-a.id
nat = true
}
metadata = {
ssh-keys = "ubuntu:${file("~/.ssh/id_rsa.pub")}"
}
}
2. Конфигурация через Ansible: Создаю плейбук для идемпотентной настройки сервера.
# playbook.yml
- hosts: web_servers
become: yes
tasks:
- name: Install Docker and dependencies
apt:
name:
- docker.io
- docker-compose
state: present
update_cache: yes
- name: Create directory for app
file:
path: /opt/myapp
state: directory
mode: '0755'
- name: Copy docker-compose and nginx config
copy:
src: "{{ item }}"
dest: /opt/myapp/
loop:
- docker-compose.yml
- nginx.conf
- name: Start services with Docker Compose
community.docker.docker_compose:
project_src: /opt/myapp
state: present
3. Docker Compose & Nginx Config:
# docker-compose.yml
version: '3.8'
services:
app:
image: my-registry/app:latest
restart: unless-stopped
nginx:
image: nginx:alpine
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- app
4. Мониторинг: Добавляю в тот же плейбук установку Node Exporter для сбора метрик в Prometheus.
Итог: Сервис развертывается одной командой terraform apply && ansible-playbook playbook.yml, конфигурация версионируется в Git, а состояние инфраструктуры предсказуемо.