はじめに
Redmine をローカル環境で動かしたいと思い、せっかくなので Docker で構築することにします
また、公式 Redmine を git pull
するだけで最新にしたかったので、Redmine のひとつ上のディレクトリに docker-compose.yml
等を配置することにします
バージョン
- docker desktop
- 4.1.1
- Windows 11 Pro
- 21H2
- Ubuntu
- 20.04.2 LTS
- Redmine
- 4.2.3.devel
- Ruby
- 2.7.4-p191 (2021-07-07) [x86_64-linux]
- Rails
- 6.1.4.1
前提
- Docker で WSL2 の設定が済んでいること
環境は Docker + NGINX + WSL2 とします
今回紹介するソースは、以下のリポジトリにあります
https://github.com/q23isline/redmine
手順
1../docker-compose.yml
作成
version: '3.5'
networks:
frontend:
driver: bridge
backend:
driver: bridge
volumes:
db-data:
driver: local
services:
web:
image: nginx:1.17-alpine
container_name: web
ports:
- 80:80
volumes:
- ./docker/local/nginx/default.conf:/etc/nginx/conf.d/default.conf
- ./redmine/:/var/www/html
networks:
- frontend
- backend
depends_on:
- db
app:
build: ./docker/local/ruby
container_name: app
volumes:
- ./redmine/:/var/www/html
- ./docker/local/ruby/database.yml:/var/www/html/config/database.yml
- ./docker/local/ruby/secrets.yml:/var/www/html/config/secrets.yml
- ./docker/local/ruby/puma.rb:/var/www/html/config/puma.rb
networks:
- backend
# bundle install : mysql の gem をインストールするために実行する
command: bash -c "bundle install && rm -f tmp/pids/server.pid && bundle exec rails s"
depends_on:
- db
db:
build: ./docker/local/mysql
container_name: db
ports:
- 3306:3306
environment:
- MYSQL_DATABASE=redmine
- MYSQL_USER=default
- MYSQL_PASSWORD=secret
- MYSQL_ROOT_PASSWORD=root
volumes:
- ./docker/local/mysql/init:/docker-entrypoint-initdb.d
- db-data:/var/lib/mysql
networks:
- backend
2.RubyのDockerfile作成
- docker 公式のクイックスタート参考
https://docs.docker.com/samples/rails/
FROM ruby:2.7
RUN apt-get update -qq && apt-get install -y nodejs
WORKDIR /var/www/html
COPY Gemfile /var/www/html/Gemfile
COPY Gemfile.lock /var/www/html/Gemfile.lock
RUN bundle install
COPY entrypoint.sh /usr/bin/
RUN chmod +x /usr/bin/entrypoint.sh
ENTRYPOINT ["entrypoint.sh"]
EXPOSE 3000
3.Rails実行に必要な設定ファイル作成
空のGemfile.lock
ファイル作成
DB設定ファイル作成
production:
adapter: mysql2
database: redmine
host: db
username: root
password: root
encoding: utf8mb4
development:
adapter: mysql2
database: redmine_development
host: db
username: root
password: root
encoding: utf8mb4
test:
adapter: mysql2
database: redmine_test
host: db
username: root
password: root
encoding: utf8mb4
初期立ち上げ時シェルファイル作成
#!/bin/bash
set -e
rm -f /var/www/html/tmp/pids/server.pid
exec "$@"
アプリサーバー設定ファイル作成
# UNIXドメインソケット
bind "unix://#{Rails.root}/tmp/sockets/puma.sock"
秘密鍵ファイル作成
- 長い文字列は適当に
development:
secret_key_base: 0b772af09f824443b06146e3a22a5c228607455bade52d149b07d3056cef815c55ab253bf49aae60b112f7978c1e92c7bd641bab4a2ea109458715bf196a8484
test:
secret_key_base: a1a112fbbe19864b2ffc1eaa961b0bbcca873a46b0e12c7e0d2a724af3d75ef1c44211deedeea1f7a778692600c8c76592402b170f6eaf9b4a48c2a990290ea2
production:
secret_key_base: <%= ENV["SECRET_KEY_BASE"] %>
4.NGINXの設定ファイル作成
- こちらの記事に助けられました
https://qiita.com/NaokiIshimura/items/7cb2390243939a34754f
upstream backend {
server unix:/var/www/html/tmp/sockets/puma.sock;
}
server {
listen 80;
listen [::]:80;
server_name _;
root /var/www/html/public;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
location / {
try_files $uri @app;
}
location @app {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://backend;
}
}
5.MySQLのDockerfile作成
FROM mysql:5.7
ADD ./etc-mysql.cnf /etc/mysql/conf.d/etc-mysql.cnf
RUN apt-get update
RUN apt-get install -y tzdata && \
cp /usr/share/zoneinfo/Asia/Tokyo /etc/localtime && \
chmod 644 /etc/mysql/conf.d/etc-mysql.cnf
6.MySQLの設定ファイル作成
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci
[client]
default-character-set=utf8mb4
7.Redmine本体取得&Dockerコンテナ立ち上げ
git clone 'https://github.com/redmine/redmine.git'
# Dockerfile 内で `bundle install` するために、Redmine 本体から Gemfile をコピーする
cp redmine/Gemfile docker/local/ruby/Gemfile
docker-compose build
docker-compose up -d
8.Redmine初期設定
- Redmine 公式のインストールガイド参考
http://guide.redmine.jp/RedmineInstall/#_3
docker exec -it app bundle exec rake db:migrate
docker exec -it app env REDMINE_LANG=ja
docker exec -it app bundle exec rake redmine:load_default_data
# 入力を求められたら ja を入力
9.画面にアクセスし初期設定
1.画面にアクセス
2.ログインID、パスワード入力
項目名 | 入力値 |
---|---|
ログインID | admin |
パスワード | admin |
3.その後の初期設定は画面に従って よしなに入力し、完了
おわりに
Dockerfile の COPY キー、COPY ../../yyy/xxxx /xxxx
のように、コピー元の指定で上階層を設定できないことを初めて知りました
また、公式 Redmine のリポジトリに、puma.rb
が Git 差分に現れてしまうのが残念ですが、とりあえず本体の動きが見られてよかったです
この記事が他のエンジニアの助けになれば幸いです