Обзор развертывания Redmine на сервере¶
Предварительные требования¶
Для корректной работы приложения на сервере должны быть выполнены следующие условия:
-
Установлена операционная система Linux.
-
Установлен и запущен демон Docker.
-
Имеются права суперпользователя (root) для управления контейнерами и файловой системой.
-
Настроена сеть для доступа к портам 80 и 443.
-
Зарегистрирован домен, соответствующий шаблону
{{ prefix }}{{ server_id }}.{{ zone }}. -
На сервере присутствует внешний том
nginx_secretsдля хранения сертификатов Let's Encrypt.
Структура файлов и каталогов¶
Все файлы конфигурации и данные приложения размещаются в следующих директориях:
-
/opt/redmine— основной каталог развертывания приложения, содержащий файл оркестрации. -
/opt/redmine/docker-compose.yml— файл конфигурации Docker Compose. -
/data/nginx/user_conf.d/— каталог с конфигурационными файлами веб-сервера. -
/data/nginx/user_conf.d/{{ prefix }}{{ server_id }}.{{ zone }}.conf— файл конфигурации Nginx для конкретного домена. -
/data/nginx/nginx-certbot.env— файл переменных окружения для сервиса Nginx. -
/etc/letsencrypt— точка монтирования для хранения SSL-сертификатов (через томnginx_secrets).
Процесс установки приложения¶
Развертывание приложения осуществляется через Docker Compose в следующей последовательности:
-
Создается каталог
/opt/redmineс правами доступа0644и владельцемroot. -
Генерируется файл
docker-compose.ymlв директории/opt/redmine. -
Генерируется конфигурационный файл Nginx в директории
/data/nginx/user_conf.d/. -
Запускаются контейнеры с помощью команды
docker compose up -dв директории/opt/redmine.
Контейнеры Docker и их запуск¶
Приложение состоит из трех контейнеров, описанных в файле docker-compose.yml:
-
db
-
Образ:
mysql:8.0 -
Имя контейнера:
redmine-mysql -
Политика перезапуска:
always -
Переменные окружения:
MYSQL_ROOT_PASSWORD,MYSQL_DATABASE(значениеredmine) -
Проверка здоровья: команда
mysqladmin pingс интервалом 30 секунд. -
redmine
-
Образ:
redmine -
Имя контейнера:
redmine -
Политика перезапуска:
always -
Переменные окружения:
REDMINE_DB_MYSQL(значениеdb),REDMINE_DB_PASSWORD,REDMINE_SECRET_KEY_BASE -
Зависимость: ожидает успешной проверки здоровья контейнера
db. -
Проверка здоровья: команда
wget --spider http://localhost:3000с интервалом 30 секунд. -
nginx
-
Образ:
jonasal/nginx-certbot:latest -
Имя контейнера:
redmine-nginx -
Политика перезапуска:
unless-stopped -
Открытые порты: 80 и 443.
-
Переменные окружения:
CERTBOT_EMAIL(значениеhkadm@hostkey.com). -
Файл переменных окружения:
/data/nginx/nginx-certbot.env. -
Монтированные тома:
-
nginx_secretsв/etc/letsencrypt. -
/data/nginx/user_conf.dв/etc/nginx/user_conf.d.
-
-
Зависимость: ожидает успешной проверки здоровья контейнера
redmine.
Прокси серверы¶
Веб-сервер Nginx работает в контейнере redmine-nginx и выполняет следующие функции:
-
Принимает соединения на портах 80 и 443.
-
Использует SSL-сертификаты, расположенные в
/etc/letsencrypt/live/{{ prefix }}{{ server_id }}.{{ zone }}/. -
Перенаправляет запросы к локации
{{ external_path }}на внутренний адресhttp://redmine:3000. -
Поддерживает протокол WebSocket через заголовки
UpgradeиConnection. -
Передаёт реальный IP-адрес клиента через заголовок
X-Forwarded-For. -
Отключает буферизацию прокси (
proxy_buffering off).
Настройки прав¶
Права доступа к файлам и директориям настроены следующим образом:
-
Директория
/opt/redmineимеет владельцаrootи группуrootс правами0644. -
Файл
/opt/redmine/docker-compose.ymlимеет владельцаrootи группуrootс правами0644. -
Файл конфигурации Nginx в
/data/nginx/user_conf.d/имеет владельцаrootи группуrootс правами0644.
Запуск, остановка и обновление¶
Управление контейнерами осуществляется через Docker Compose в директории /opt/redmine:
-
Запуск всех сервисов в фоновом режиме:
Команда выполняется с аргументомchdir: "/opt/redmine". -
Остановка сервисов:
-
Перезапуск сервисов:
-
Просмотр логов: