nginxなどで複数のコンテナをURLパスで振り分けたい時ってありますよね?そうした時に、redmineをdockerで起動すると大体パスが / になってて他のアプリと被っちゃうので /redmine とかにしたいわけです。以下に実際にやってみたのでご参考まで。
ポイントは以下、
- /usr/src/redmine/config.ru に設定追加
- /usr/src/redmine/config/environment.rb に設定追加
- docker-compose.yml の環境設定にROOTのパスを追加
- 「管理」ー「設定」ー「一般」のホスト名とパスの編集
では、以下の環境で設定していきます。
$ mkdir -p ~/work/redmine/redmine
$ cd ~/work/redmine/redmine/
$ mkdir config files log plugins themes
$ mkdir -p ~/work/redmine/postgres/
$ vi docker-compose.yml
---
services:
# Redmine本体
redmine:
image: redmine:latest
container_name: redmine
ports:
- '8004:3000'
expose:
- '3000'
volumes:
- ./redmine/config.ru:/usr/src/redmine/config.ru
- ./redmine/config:/usr/src/redmine/config
- ./redmine/files:/usr/src/redmine/files
- ./redmine/log:/usr/src/redmine/log
- ./redmine/plugins:/usr/src/redmine/plugins
- ./redmine/public/themes:/usr/src/redmine/public/themes
restart: always
environment:
REDMINE_DB_POSTGRES: postgres
REDMINE_DB_DATABASE: redmine
REDMINE_DB_USERNAME: redmine
REDMINE_DB_PASSWORD: redmine
RAILS_RELATIVE_URL_ROOT: '/redmine'
TZ: Asia/Tokyo
links:
- postgres
# DBサーバ
postgres:
image: postgres:latest
container_name: postgres_redmine
volumes:
- ./postgres/db-data:/var/lib/postgresql/data
- ./postgres/initdb:/docker-entrypoint-initdb.d
restart: always
environment:
POSTGRES_ROOT_PASSWORD: postgres
POSTGRES_USER: redmine
POSTGRES_PASSWORD: redmine
POSTGRES_DATABASE: redmine
TZ: Asia/Tokyo
volumes:
redmine:
postgres:
---
$ docker-compose up -d
$ cd ~/work/redmine/redmine/
$ docker cp redmine:/usr/src/redmine/config.ru ./
$ docker cp redmine:/usr/src/redmine/config/environment.rb ./config/
$ vi ./config.ru
---add
map ActionController::Base.config.relative_url_root||"/redmine" do
run Rails.application
end
---
$
$ vi ./config/environment.rb
---add
# Set the relative URL root
Rails.application.config.action_controller.relative_url_root="/redmine"
---
$ cd ~/work/redmine/
$ docker-compose stop
$ docker-compose rm
$ docker-compose up -d
proxyとしてnginxを被せておきます。私はnginxはdockerではなくOS(buntu 24.04.2 LTS)側にインストールしたものを使ってますが、結局設定するのは、sites-enabledに以下のような設定をするだけなのでdockerでも大丈夫です。
$ cd /etc/nginx/sites-enabled
$ sudo vi default
---
server {
listen 80;
server_name localhost;
location /redmine/ {
proxy_set_header Host $http_host;
proxy_pass http://localhost:8004/redmine/;
}
location / {
root /usr/share/ngix/html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/ngixn/html;
}
}
---
$
$ sudo service nginx restart
上記の設定が終わりログインできるようになったら、以下の変更をしておきます。

