Обзор развертывания Redmine на сервере¶
Предпосылки и предварительные требования¶
- На сервере должна быть установлена Docker и Docker Compose.
- Для работы с Let's Encrypt понадобится интернет‑связь, а также валидный домен, у которого можно получить сертификаты.
- Папки
/opt/redmineи/data/nginxдолжны быть доступны для записи процессу установки.
Структура файлов и каталогов¶
После установки на сервере появятся следующие каталоги и файлы:
/opt/redmine
├── docker-compose.yml # Конфигурация Docker Compose
└── (другие файлы, создаваемые в процессе установки)
/data/nginx
├── user_conf.d
│ └── <prefix><server_id>.<zone>.conf # Конфигурация Nginx для Redmine
├── nginx-certbot.env # Переменные окружения для certbot
└── (другие файлы, связанные с сертификатами и конфигурацией Nginx)
Кроме того, существует внешний Docker‑volume nginx_secrets, который хранит сертификаты Let’s Encrypt и ключи, созданные контейнером jonasal/nginx-certbot.
Права доступа и безопасность¶
- Папка
/opt/redmineи её содержимое принадлежат пользователюrootс правами0644. - Конфигурационные файлы, такие как
docker-compose.ymlи конфигурация Nginx, также находятся под владельцемrootи имеют права0644. - Контейнеры запускаются под собственным пользователем внутри контейнера, а не как
rootна хосте, благодаря настройкам Docker Compose. - Внутри контейнера MySQL хранит пароль в переменной окружения
MYSQL_ROOT_PASSWORD. Он передаётся в контейнерredmineчерез переменнуюREDMINE_DB_PASSWORD.
Базы данных¶
Контейнер redmine-mysql использует образ mysql:8.0:
| Параметр | Значение |
|---|---|
MYSQL_ROOT_PASSWORD | {{ REDMINE_MYSQL_PASSWORD }} |
MYSQL_DATABASE | redmine |
healthcheck | Проверка доступности MySQL через mysqladmin ping |
Контейнер redmine подключается к базе по имени сервиса db и использует переменную REDMINE_DB_PASSWORD для аутентификации.
Контейнеры Docker и их запуск¶
Список контейнеров¶
| Сервис | Образ | Контейнер | Перезапуск | Зависимости |
|---|---|---|---|---|
| db | mysql:8.0 | redmine-mysql | always | — |
| redmine | redmine | redmine | always | db |
| nginx | jonasal/nginx-certbot:latest | redmine-nginx | unless-stopped | redmine |
Как запустить¶
- Перейти в каталог
/opt/redmine:
- Запустить контейнеры в фоновом режиме:
При первом запуске контейнер redmine-nginx автоматически запросит сертификаты Let’s Encrypt, используя переменную CERTBOT_EMAIL=hkadm@hostkey.com.
Как остановить¶
Как обновить¶
Прокси‑серверы¶
Контейнер redmine-nginx основан на образе jonasal/nginx-certbot, который сочетает в себе Nginx и Certbot.
Конфигурация Nginx¶
Файл конфигурации размещается в /data/nginx/user_conf.d/<prefix><server_id>.<zone>.conf и содержит:
- Прослушивание портов
80и443. - Использование сертификатов Let’s Encrypt, расположенных в
/etc/letsencrypt/live/<prefix><server_id>.<zone>/. - Прокси‑переадресацию запросов, приходящих по пути
{{ external_path }}, на контейнерredmineпо адресуhttp://redmine:3000. - Поддержку WebSocket через заголовки
UpgradeиConnection.
Сетевые настройки¶
- Внутренний Docker‑сеть позволяет контейнерам
redmineиnginxобращаться друг к другу по именам сервисов. - На хосте открыты порты
80и443, которые перенаправляются в контейнерredmine-nginx.
Настройки прав, запуск, остановка и обновление¶
| Действие | Команда | Описание |
|---|---|---|
| Запустить сервисы | docker compose up -d | Поднимает все контейнеры в фоновом режиме. |
| Остановить сервисы | docker compose down | Останавливает и удаляет контейнеры, но сохраняет данные. |
| Обновить образы | docker compose pull | Загружает последние версии образов. |
| Переустановить сервисы | docker compose up -d после pull | Перезапускает контейнеры с новыми образами. |
После выполнения команд docker compose up -d сервисы будут доступны по адресу, указанному в конфигурации Nginx ({{ prefix }}{{ server_id }}.{{ zone }}).
Заключение¶
Установка Redmine через Docker Compose обеспечивает изоляцию компонентов, автоматическое обновление и простую настройку HTTPS с Let’s Encrypt. Управление сервисами осуществляется простыми командами Docker Compose, а конфигурационные файлы находятся в удобных для правки местах на хосте.