4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

RedmineをDocker+NGINX+WSL2上で動かす

Posted at

はじめに

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作成

./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/

./docker/local/ruby/Dockerfile
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ファイル作成

./docker/local/ruby/Gemfile.lock

DB設定ファイル作成

./docker/local/ruby/database.yml
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

初期立ち上げ時シェルファイル作成

./docker/local/ruby/entrypoint.sh
#!/bin/bash
set -e

rm -f /var/www/html/tmp/pids/server.pid

exec "$@"

アプリサーバー設定ファイル作成

./docker/local/ruby/puma.rb
# UNIXドメインソケット
bind "unix://#{Rails.root}/tmp/sockets/puma.sock"

秘密鍵ファイル作成

  • 長い文字列は適当に
./docker/local/ruby/secrets.yml
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

./docker/local/nginx/default.conf
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作成

./docker/local/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の設定ファイル作成

./docker/local/mysql/etc-mysql.cnf
[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 差分に現れてしまうのが残念ですが、とりあえず本体の動きが見られてよかったです
この記事が他のエンジニアの助けになれば幸いです

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?