Обзор развертывания Restyaboard на сервере¶
Предпосылки и предварительные требования¶
Для успешного развертывания приложения необходимо наличие сервера с операционной системой Ubuntu. Требуется наличие прав суперпользователя (root) для выполнения команд установки и управления контейнерами.
Система должна иметь доступ к интернету для загрузки образов Docker и обновления пакетов. Приложение использует следующие порты: - Порт 8080 для локального доступа к приложению Restyaboard (связь только с 127.0.0.1). - Порты 80 и 443 для внешнего доступа через прокси-сервер Nginx.
Структура файлов и каталогов¶
Данные и конфигурационные файлы приложения размещаются в следующих директориях: - /opt/restyaboard/postgres — хранилище данных базы данных PostgreSQL. - /opt/restyaboard/uploads — хранилище загруженных пользователем файлов. - /root/nginx — каталог с конфигурацией прокси-сервера и файлом compose.yml. - /data/nginx/user_conf.d — каталог с пользовательскими конфигурациями Nginx. - /data/nginx/nginx-certbot.env — файл переменных окружения для Nginx и Certbot. - /etc/letsencrypt — точка монтирования для сертификатов SSL.
Процесс установки приложения¶
Установка выполняется через Docker. Сначала необходимо установить пакетный менеджер Docker CE, CLI, containerd.io и плагин compose. После установки сервис Docker должен быть запущен и настроен на автоматический запуск.
Версии используемых образов: - База данных: postgres:15. - Приложение: restyaplatform/restyaboard:v1.7.1. - Прокси-сервер: jonasal/nginx-certbot:latest.
Базы данных¶
Приложение использует базу данных PostgreSQL, развернутую в отдельном контейнере restya_db. - Имя базы данных: restyaboard. - Пользователь для подключения приложения: restya. - Пароль для подключения: задается переменной окружения restya_db_password. - Сеть: контейнер базы данных работает в выделенной сети Docker restya_net.
При первом запуске скрипт проверяет наличие таблиц oauth_clients и settings. Если они отсутствуют, схема базы данных импортируется из SQL-файла, найденного внутри контейнера приложения (предпочтительно restyaboard_with_empty_data.sql, иначе restyaboard.sql или postgresql.sql).
Контейнеры Docker и их запуск¶
Развертывание включает создание выделенной сети Docker и запуск двух основных контейнеров.
Создание сети:
Запуск контейнера базы данных:
docker run -d \
--name restya_db \
--network restya_net \
-e POSTGRES_USER=postgres \
-e POSTGRES_PASSWORD=<пароль> \
-e POSTGRES_DB=restyaboard \
-v /opt/restyaboard/postgres:/var/lib/postgresql/data \
--restart unless-stopped \
postgres:15
Запуск контейнера приложения:
docker run -d \
--name restya_app \
--network restya_net \
-e POSTGRES_HOST=restya_db \
-e POSTGRES_PORT=5432 \
-e POSTGRES_ADMIN_USER=postgres \
-e POSTGRES_ADMIN_PASS=<пароль> \
-e RESTYA_DB_USERNAME=restya \
-e RESTYA_DB_USERPASS=<пароль> \
-e RESTYA_DB=restyaboard \
-p 127.0.0.1:8080:80 \
--restart unless-stopped \
restyaplatform/restyaboard:v1.7.1
Прокси серверы¶
Для внешнего доступа используется прокси-сервер Nginx с поддержкой автоматического получения SSL-сертификатов через Certbot. Контейнер запускается через Docker Compose в проекте certproxy.
Конфигурация прокси находится в файле /root/nginx/compose.yml. Сервис nginx использует образ jonasal/nginx-certbot:latest и работает в режиме network_mode: host.
Настройка маршрутизации трафика осуществляется путем добавления директивы proxy_pass в конфигурационный файл хоста:
location / добавляется строка: Запуск прокси-сервера:
Команда выполняется из директории/root/nginx. Права доступа и безопасность¶
Все каталоги данных создаются с правами владельца root и группы root с режимом доступа 0755. - /opt/restyaboard/postgres - /opt/restyaboard/uploads - /root/nginx
Конфигурационный файл compose.yml имеет права 0644.
Приложение доступно только локально на порту 8080 (127.0.0.1), внешний доступ осуществляется исключительно через прокси-сервер Nginx, который обрабатывает SSL-шифрование.
Запуск, остановка и обновление¶
Управление контейнерами осуществляется через стандартные команды Docker.
Проверка статуса контейнера базы данных:
Проверка статуса контейнера приложения:
Перезапуск приложения (например, после импорта схемы):
Удаление старых контейнеров перед развертыванием:
Обновление образов Docker: