Перейти к содержанию

Обзор развертывания 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 в следующей последовательности:

  1. Создается каталог /opt/redmine с правами доступа 0644 и владельцем root.

  2. Генерируется файл docker-compose.yml в директории /opt/redmine.

  3. Генерируется конфигурационный файл Nginx в директории /data/nginx/user_conf.d/.

  4. Запускаются контейнеры с помощью команды 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:

  • Запуск всех сервисов в фоновом режиме:

    docker compose up -d
    
    Команда выполняется с аргументом chdir: "/opt/redmine".

  • Остановка сервисов:

    docker compose down
    

  • Перезапуск сервисов:

    docker compose restart
    

  • Просмотр логов:

    docker compose logs -f
    

question_mark
Я могу вам чем-то помочь?
question_mark
ИИ Помощник ×