Подготовка сервера
В этом разделе настроим сервер Ubuntu 22.04 для запуска продакшн-сервиса с Docker и NGINX.
Для выполнения данного задания вам понадобится:
- Сервер с Ubuntu 22.04 LTS или 24.04 LTS
- SSH-ключ для доступа к серверу
- Публичный IP сервера
- Domain для привязке его к серверу
1. Установка Docker и Docker Compose
# 🔄 Обновляем список пакетов и сразу устанавливаем последние версии всех установленных пакетов
sudo apt update && sudo apt upgrade -y
# 📦 Устанавливаем необходимые пакеты:
# - apt-transport-https: поддержка репозиториев по HTTPS
# - ca-certificates: для проверки SSL-сертификатов
# - curl: для загрузки файлов
# - software-properties-common: утилиты для управления репозиториями
sudo apt install -y apt-transport-https ca-certificates curl software-properties-common
# 📁 Создаем директорию для хранения ключей GPG Docker
sudo mkdir -p /etc/apt/keyrings
# 🔑 Загружаем и сохраняем официальный GPG-ключ Docker в бинарном формате
# Нужен для проверки подлинности пакетов из внешних репозиториев
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
# ➕ Добавляем официальный репозиторий Docker в список источников APT
# Используем:
# - архитектуру (например amd64)
# - ключ GPG из /etc/apt/keyrings/docker.gpg
# - имя релиза Ubuntu (например focal, jammy)
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
# 🔄 Обновляем список пакетов, чтобы включить новый Docker-репозиторий
sudo apt update
# 📥 Устанавливаем сам Docker и связанные компоненты:
# - docker-ce: Docker Community Edition
# - docker-ce-cli: командная строка Docker
# - containerd.io: контейнерный runtime
# - docker-buildx-plugin: расширенная сборка образов
# - docker-compose-plugin: плагин новой версии docker compose (v2)
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo systemctl enable docker
# ⚙️ Включаем автозапуск Docker при загрузке системы
# ✅ Проверка установки Docker: выводит версию клиента и демона
docker version
# ✅ Проверка установки Docker Compose (v2): запускается как подкоманда `docker compose`
docker compose version3. Установка и настройка NGINX
sudo apt install -y nginx
sudo systemctl enable nginx
sudo systemctl start nginx
⚙️ Настройка прокси
Создайте конфиг:
sudo nano /etc/nginx/sites-available/devops-intensive.it-incubator.ioПример конфигурации
nginx.conf
server {
listen 80; # Слушаем HTTP-запросы на 80 порту
server_name devops-intensive.it-incubator.io; # Указываем домен или публичный IP сервера
location /api {
proxy_pass http://localhost:4545; # Проксируем запросы на локальный Node.js-сервер (в контейнере)
proxy_http_version 1.1; # Используем HTTP/1.1 для поддержки веб-сокетов и keep-alive
proxy_set_header Host $host; # Передаём оригинальный Host-заголовок
}
location / {
proxy_pass http://localhost:4546; # Проксируем запросы на локальный Node.js-сервер (в контейнере)
proxy_http_version 1.1; # Используем HTTP/1.1 для поддержки веб-сокетов и keep-alive
proxy_set_header Host $host; # Передаём оригинальный Host-заголовок
}
}Сохраните файл и примените:
# Создаём символическую ссылку из файла конфигурации в sites-available в папку sites-enabled,
# чтобы NGINX начал использовать этот конфиг (активируем сайт)
sudo ln -s /etc/nginx/sites-available/devops-intensive.it-incubator.io /etc/nginx/sites-enabled/
# Проверяем синтаксис конфигурации NGINX и ищем ошибки
sudo nginx -t
# Перезагружаем NGINX, чтобы применить новые настройки (без остановки сервера)
sudo systemctl reload nginx4. Привязка домена к серверу через Cloudflare
Чтобы ваш домен (например, devops-intensive.it-incubator.io) указывал на ваш сервер:-
Шаг 2: Зайдите в Cloudflare
- Перейдите на https://dash.cloudflare.com
- Выберите нужный домен
- Перейдите во вкладку DNS
Шаг 3: Добавьте A-запись
| Тип | Имя | Значение | TTL | Прокси |
|---|---|---|---|---|
| A | @ | 45.12.34.56 | Auto | 🔒 Вкл. |
Примечание:
@означает основной домен (devops-intensive.it-incubator.io). Если хотите настроитьwww.example.com, добавьте вторую A-запись с именемwww.
Шаг 4: Проверьте привязку
Откройте терминал и выполните:
ping devops-intensive.it-incubator.ioЕсли возвращается ваш IP — всё работает.
Теперь можно использовать devops-intensive.it-incubator.io в настройке NGINX и получить SSL через Certbot.
5. Настройка домена и HTTPS через Let’s Encrypt
sudo apt install -y certbot python3-certbot-nginx
sudo certbot --nginx -d devops-intensive.it-incubator.io🟢 Готово! Теперь у вас настроен продакшн-сервер с Docker, NGINX и SSL.
Теперь настроим рабочую директорию на сервере для наших приложений
1. Создайте рабочую директорию
sudo mkdir /var/www/devops-intensive.it-incubator.io
sudo chown -R $USER:$USER /var/www/devops-intensive.it-incubator.io2 Создадим там файл .env для наших приложений
sudo nano /var/www/devops-intensive.it-incubator.io/.envDB_USER=
DB_PASSWORD=
DB_NAME=
BACKEND_IMAGE=
FRONTEND_IMAGE=3. Создадим docker-compose.yml для наших приложений
sudo nano /var/www/devops-intensive.it-incubator.io/docker-compose.ymlservices:
db:
image: postgres:16
environment:
POSTGRES_USER: ${DB_USER}
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_DB: ${DB_NAME}
volumes:
- pgdata:/var/lib/postgresql/data
healthcheck:
test: ["CMD", "pg_isready", "-U", "${DB_USER}"]
interval: 10s
timeout: 5s
retries: 5
backend:
image: ${BACKEND_IMAGE}
depends_on:
db:
condition: service_healthy
environment:
DB_HOST: db
DB_PORT: 5432
DB_NAME: ${DB_NAME}
DB_USER: ${DB_USER}
DB_PASSWORD: ${DB_PASSWORD}
ports:
- "8090:3001"
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3001/api/health"]
interval: 10s
timeout: 5s
retries: 3
start_period: 5s
frontend:
image: ${FRONTEND_IMAGE}
ports:
- "8080:80"
depends_on:
backend:
condition: service_healthy
volumes:
pgdata:Last updated on