Подготовка сервера к продакшну
Пошаговый чеклист настройки Ubuntu VPS для production: безопасность, Docker, Nginx, SSL, бэкапы, мониторинг.
Вы арендовали VPS, получили доступ по SSH. Просто залить код и запустить Docker? Нет. Production-сервер — это экосистема из безопасности, мониторинга, резервных копий и оптимизации. Этот чеклист проведёт вас через каждый шаг.
Требования к серверу
Убедитесь, что ваш VPS соответствует минимальным требованиям.
LTS = 5 лет поддержки и обновлений безопасности. Большинство гайдов и инструкций написаны для Ubuntu.
Для стека NestJS + React + PostgreSQL + Redis нужно минимум 4 GB.
Первый вход и обновление системы
Подключение к серверу и установка базовых утилит.
ssh root@YOUR_SERVER_IPapt update && apt upgrade -yapt install -y curl wget git vim htop ufwНастройка Firewall (UFW)
Настраивать firewall нужно ДО того, как вы его включите. Иначе рискуете заблокировать себе доступ.
sudo ufw default deny incoming
sudo ufw default allow outgoingЕсли включить UFW без этого правила — вы потеряете доступ к серверу.
sudo ufw allow 22/tcp comment 'SSH'sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'sudo ufw enablesudo ufw status numberedНЕ открывайте PostgreSQL (5432), Redis (6379), pgAdmin (8082) для внешнего доступа. Используйте SSH-туннель.
Безопасный доступ по SSH
Создание пользователя, настройка SSH-ключей и отключение root.
Работать от root — плохая практика. Создайте отдельного пользователя.
adduser username
usermod -aG sudo usernameSSH-ключи безопаснее паролей. Скопируйте публичный ключ с локальной машины.
ssh-copy-id username@YOUR_SERVER_IPВ НОВОМ терминале проверьте: ssh username@YOUR_SERVER_IP. Не закрывайте текущую сессию!
# /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication nosudo systemctl restart sshdУстановка Docker
sudo apt remove docker docker-engine docker.io containerd runcsudo apt install -y ca-certificates curl gnupg lsb-releasesudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgsudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-pluginsudo usermod -aG docker $USER
newgrp dockerdocker --version
docker compose versionУстановка и настройка Nginx
sudo apt install -y nginxsudo systemctl status nginxsudo mkdir -p /etc/nginx/sites-available /etc/nginx/sites-enabled /etc/nginx/conf.dsudo nginx -t
sudo systemctl restart nginxSSL-сертификаты (Let's Encrypt)
Перед получением SSL убедитесь, что DNS записи настроены и домен указывает на сервер.
Let's Encrypt проверяет DNS при выдаче сертификата.
sudo apt install -y certbot python3-certbot-nginxsudo certbot --nginx -d yourdomain.com -d www.yourdomain.comsudo systemctl status certbot.timersudo certbot renew --dry-runМониторинг и логирование
sudo apt install -y htopsudo tail -f /var/log/nginx/access.log
sudo tail -f /var/log/nginx/error.logdocker logs -f container_namesudo journalctl -u nginx -f
sudo journalctl -u docker -fРезервное копирование
#!/bin/bash
BACKUP_DIR="/backups/postgres"
DATE=$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR
docker exec postgres pg_dump -U your_user your_db | gzip > $BACKUP_DIR/backup_$DATE.sql.gz
# Удалить бэкапы старше 7 дней
find $BACKUP_DIR -name "backup_*.sql.gz" -mtime +7 -deletesudo chmod +x /usr/local/bin/backup-db.shsudo crontab -e
# Добавить: 0 3 * * * /usr/local/bin/backup-db.shФинальная проверка
Убедитесь, что всё работает перед запуском приложения.
sudo ufw statusdocker --versionПодробный гайд по этой теме:
Читать полную статью →