Skip to content

Подготовка Ubuntu 24.04 LTS к развертыванию Docker‑приложения

Примерный чеклист настроек безопасности и инфраструктуры перед прод‑деплоем Nimbus.

Источник: ранее файл Инструкции/DOCKER_PROD_SETUP_UBUNTU.md (перенесён и стандартизирован).

1. Обновление системы

bash
sudo apt update
sudo apt upgrade -y
sudo reboot

2. Создание пользователя и настройка SSH

bash
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo mkdir -p /home/deploy/.ssh
sudo chown -R deploy:deploy /home/deploy/.ssh
sudo chmod 700 /home/deploy/.ssh
  • Скопируйте публичный ключ на сервер, например через ssh-copy-id deploy@server (обязательно с локального компьютера, где находится ваш ключ).
  • Если ssh-copy-id недоступен, выполните вручную:
bash
cat ~/.ssh/id_rsa.pub | ssh deploy@server 'mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys'
ssh deploy@server "chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys && chown -R deploy:deploy ~/.ssh"
  • Убедитесь, что директория и файл принадлежат deploy, а права соответствуют (700/600), иначе SSH откажет в доступе.
bash
sudo chown -R deploy:deploy /home/deploy/.ssh
sudo chmod 700 /home/deploy/.ssh
sudo chmod 600 /home/deploy/.ssh/authorized_keys
  • Отключите парольный вход в /etc/ssh/sshd_config (PasswordAuthentication no, PermitRootLogin no), затем перезапустите SSH:
bash
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo sed -i 's/^#\?PasswordAuthentication .*/PasswordAuthentication no/' /etc/ssh/sshd_config
sudo sed -i 's/^#\?PermitRootLogin .*/PermitRootLogin no/' /etc/ssh/sshd_config
sudo systemctl reload ssh

3. Установка Docker и Docker Compose

bash
sudo apt install -y ca-certificates curl gnupg lsb-release
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] \
  https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin
sudo usermod -aG docker deploy
  • Проверка: docker run hello-world.

4. Настройка firewall

bash
sudo apt install -y ufw
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
  • Управление: sudo ufw status.

5. Настройка лимитов и безопасности Docker

bash
sudo tee /etc/docker/daemon.json <<'EOF'
{
  "log-driver": "json-file",
  "log-opts": {
    "max-size": "10m",
    "max-file": "3"
  }
}
EOF
sudo systemctl restart docker
  • Включите автоматический запуск контейнеров через systemd или docker compose (restart‑policy).

6. Мониторинг и логирование

  • Установите fail2ban для SSH.
  • Подключите logrotate для логов Docker (можно использовать log-driver настройки выше).
  • Настройте prometheus/node_exporter или аналог для метрик.

7. Пример deploy‑скрипта

bash
#!/bin/bash
set -euo pipefail

sudo systemctl stop nimbus && sudo systemctl disable nimbus || true
cd /opt/nimbus
sudo git pull origin main
sudo docker compose -f docker-compose.prod.yml pull
sudo docker compose -f docker-compose.prod.yml up -d --remove-orphans
  • Сохраните как /usr/local/bin/deploy-nimbus.sh, сделайте chmod +x.
  • Настройте systemd unit (пример в deploy/nimbus.service) для автоматики.

8. Резервное копирование

  • Настройте cron / systemd‑таймер для бэкапа базы данных и .env.

9. Документация и секреты

  • Запишите переменные окружения, используемые контейнерами, и их источник.
  • Убедитесь, что секреты хранятся вне репозитория (Vault, AWS Secrets, .env в .gitignore).