Развертывание приложения на VPS
Обзор
Данная документация описывает процесс развертывания приложения DevShip на виртуальном частном сервере (VPS) с использованием Docker. Наше приложение состоит из Laravel бэкенда и Next.js фронтенда, развертываемых в Docker-контейнерах.
Основные компоненты нашей системы развертывания:
- Docker и Docker Compose для контейнеризации
- Nginx в качестве обратного прокси-сервера
- PostgreSQL для хранения данных
- Скрипт автоматизации развертывания deploy-laravel-nextjs.sh
Автоматизированное развертывание с помощью скрипта
Общая информация о скрипте развертывания
Для упрощения процесса развертывания мы используем скрипт deploy-laravel-nextjs.sh
, который автоматизирует следующие задачи:
- Подключение к VPS по SSH
- Создание и настройка swap файла (при необходимости)
- Очистка сервера от старых контейнеров и освобождение места
- Резервное копирование базы данных (по желанию)
- Копирование файлов проекта на сервер
- Настройка Nginx
- Инициализация PostgreSQL
- Сборка и запуск Docker-контейнеров
- Проверка работоспособности развернутого приложения
Предварительные требования
Для использования скрипта развертывания вам потребуется:
- VPS с Ubuntu 20.04 или новее
- Правильно настроенный SSH-доступ к VPS
- Доменное имя, указывающее на IP-адрес вашего VPS
- Установленные локально: git, ssh, rsync
Использование скрипта развертывания
Процесс развертывания с использованием нашего скрипта выглядит следующим образом:
# Клонирование репозитория (если еще не клонирован)
git clone https://github.com/ваш-аккаунт/devship.git
cd devship
# Запуск скрипта развертывания
bash scripts/deploy-laravel-nextjs.sh
Скрипт запросит подтверждение для некоторых действий:
- Выполнить ли очистку сервера для освобождения места (y/n)
- Создать ли резервную копию базы данных перед развертыванием (y/n)
После завершения развертывания, скрипт выведет информацию о статусе и даст инструкции по проверке работоспособности и просмотру логов.
Адаптация скрипта для вашего VPS
Чтобы адаптировать скрипт для использования с вашим собственным VPS, необходимо внести некоторые изменения в начало скрипта:
#!/bin/bash
set -e
# Конфигурация - измените эти значения на свои
VPS_ALIAS="ваш-vps-alias" # Алиас в SSH-конфигурации
DOMAIN="ваш-домен.ru" # Ваш домен
PROJECT_DIR="/путь/к/проекту" # Путь на VPS, куда будет копироваться проект
Настройка SSH для удобного доступа
Скрипт использует SSH-алиас для подключения к серверу. Вам нужно создать запись в файле ~/.ssh/config для вашего VPS:
# Добавьте в файл ~/.ssh/config
Host ваш-vps-alias
HostName 123.456.789.10 # IP-адрес вашего VPS
User root # или другой пользователь с правами sudo
IdentityFile ~/.ssh/ваш_приватный_ключ
Также убедитесь, что ваш публичный ключ добавлен на сервер в файл ~/.ssh/authorized_keys.
Настройка переменных окружения
Создайте файл .env.production в корне проекта с необходимыми переменными окружения. Вот пример основных переменных, которые нужно настроить:
# PostgreSQL
POSTGRES_SERVER=postgres
POSTGRES_USER=postgres
POSTGRES_PASSWORD=ваш_надежный_пароль
POSTGRES_DB=devship
# Общие настройки
SERVER_NAME=ваш-домен.ru
SERVER_HOST=https://ваш-домен.ru
BACKEND_CORS_ORIGINS=["https://ваш-домен.ru"]
SECRET_KEY=ваш_секретный_ключ # Сгенерируйте с помощью: openssl rand -hex 32
# Email настройки
SMTP_TLS=True
SMTP_PORT=ваш_порт
SMTP_HOST=ваш_smtp_сервер
SMTP_USER=ваш_email
SMTP_PASSWORD=ваш_пароль
EMAILS_FROM_EMAIL=ваш_email
EMAILS_FROM_NAME="Ваше Имя"
# URL-адреса для API
NEXT_PUBLIC_API_URL=https://ваш-домен.ru/api
API_URL=http://laravel:8000/api
BACKEND_URL=http://laravel:8000
FRONTEND_URL=https://ваш-домен.ru
NODE_ENV=production
Структура Docker-контейнеров
Наше приложение разворачивается в виде следующих Docker-контейнеров:
- devship-postgres-prod: контейнер PostgreSQL для хранения данных
- devship-laravel-prod: бэкенд на Laravel
- devship-frontend-prod: фронтенд на Next.js
Все контейнеры объединены в сеть Docker, что позволяет им взаимодействовать друг с другом. Конфигурация контейнеров определена в docker-compose-fixed.yml, который генерируется скриптом на основе ваших настроек.
Обслуживание и устранение неполадок
Просмотр логов
Для просмотра логов контейнеров можно использовать следующие команды:
# Логи всех контейнеров
ssh ваш-vps-alias "cd /путь/к/проекту && docker compose -f docker-compose-fixed.yml logs -f"
# Логи Laravel бэкенда
ssh ваш-vps-alias "docker logs devship-laravel-prod"
# Логи Next.js фронтенда
ssh ваш-vps-alias "docker logs devship-frontend-prod"
Перезапуск контейнеров
Если необходимо перезапустить определенный контейнер:
# Перезапуск Laravel бэкенда
ssh ваш-vps-alias "docker restart devship-laravel-prod"
# Перезапуск Next.js фронтенда
ssh ваш-vps-alias "docker restart devship-frontend-prod"
Обновление приложения
Для обновления приложения до последней версии просто повторно запустите скрипт развертывания:
# Обновление локального репозитория
git pull
# Повторный запуск скрипта развертывания
bash scripts/deploy-laravel-nextjs.sh
Заключение
Благодаря нашему скрипту процесс развертывания значительно упрощается и становится более надежным. При возникновении вопросов или проблем обращайтесь к документации или создайте issue в репозитории проекта.
Скрипт разработан с учетом возможных проблем и имеет встроенные механизмы восстановления, что делает процесс развертывания более устойчивым к ошибкам.