Redmine バージョンアップにおける番外編

はじめに

- 概要　調査・検討 / 構築 / 移行 / 番外編 のうちの、番外編 です
- バージョンアップに伴う他作業も含めてシステム移行として扱います

## 記事の全体構成
- [その１ 概要・調査検討](https://qiita.com/ssugimoto/items/6fee7bbf0d7c07ef9321)
- [その２ 構築](https://qiita.com/ssugimoto/items/c2b90c0b745f15575a71)
- [その３ 移行](https://qiita.com/ssugimoto/items/c5e5a0e0085bad1062d2)
- その４ Redmine バージョンアップにおける番外編（このページ）

バージョンアップ・移行とは異なる視点の内容です

- 番外編　RedMicaの説明
- 番外編１）RedmineのDockerを`docker-compose up`で動かす例
- 番外編２）Redmine3.2を構築した事例
- 番外編３）VMWare仮想マシンへのディスク追加
- 番外編４）markdown用のプラグイン

---

# RedMica
- remica v1.3.0 を使うと、
Redmine5.0として取り込まれる機能が先行して使える、１ヶ月に１回くらいはリリースされる

https://github.com/redmica/redmica/releases/tag/v1.3.0

```
We are pleased to announce the release of RedMica 1.2.1 (2021-05).

RedMica 1.3.0 is based on Redmine 4.2.1. This version delivers all the features provided in Redmine 4.2.1 and some new features that will be included in Redmine 5.0.0.
```
---

# 番外編１）docker使ってみる
## windows dockerでの試し
- 事前に、docker, WSL2 , docker-compose を利用できるようにしておく
- PS :Power shell のことです
- 事前準備ができていれば、10分かからずにRedmineが起動できます

### docker-compose.yml ファイルのサンプル
redmine4.1のdockerイメージを使います

```
version: '3.8'

services:

  redmine:
    image: redmine:4.1
    networks:
      - frontend
    volumes:
      - ./data/volume:/usr/src/redmine/files
    restart: always
    ports:
      - 8080:3000
    environment:
      REDMINE_DB_MYSQL: db
      REDMINE_DB_PASSWORD: example
      REDMINE_SECRET_KEY_BASE: supersecretkey
    depends_on:

      - db

  db:
    image: mysql:5.7
    command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
    networks:
      - frontend
    volumes:
      - ./data/database:/var/lib/mysql
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: example
      MYSQL_DATABASE: redmine

networks:
  frontend:
```
### コンテナ起動

```
PS > cd xxxx ymlファイルのある場所へ移動
PS > docker-compose up
```

ホストの8080にアクセス、コンテナの3000をホストの8080へフォワードされているので、
http://127.0.0.1:8080/
でredmineにアクセスできる
（左にホストのポートを、右にコンテナのポートを指定している）

---

# 番外編２）昔のRedmine3.2の環境整備（Apache + MySQL）

## Redmine3.2を構築した時にインストールした時の情報
Redmine3.2の当時の情報のため情報が古いため注意してください
**5年以上古いです（2016年4,5月頃の情報です）**

参考にした
https://weblabo.oscasierra.net/install-redmine32-centos7-1/
とほぼ同じ手順で入れています

- Apacheをインストールする

```
# yum install httpd
# systemctl enable httpd.service
```

- MySQLをインストールする
    - CentOS7に入っているmariadbを消してmysqlを入れている

```
# yum remove mariadb-libs
# rm -rf /var/lib/mysql/

# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
# yum info mysql
# yum info mysql-community-server

起動
# systemctl start mysqld.service
停止
# systemctl stop mysqld.service

```
- Ruby 2.2.3をインストールする

```
# yum install git
# cd /opt
# git clone git://github.com/sstephenson/rbenv.git
# echo 'export RBENV_ROOT="/opt/rbenv"' >> /etc/profile
# echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile
# echo 'eval "$(rbenv init -)"' >> /etc/profile
# mkdir /opt/rbenv/plugins
# cd /opt/rbenv/plugins
# git clone git://github.com/sstephenson/ruby-build.git

一度ターミナルを閉じて開き直し、続けて次のコマンド実行します。

# yum install gcc make openssl-devel readline-devel
# rbenv install 2.2.3
# rbenv global 2.2.3
# ruby -v

```

- Phusion Passenger をインストールする

```
# gem list passenger
# gem install passenger
　２－３分くらいかかる
# gem list passenger
# yum install gcc gcc-c++ libcurl-devel openssl-devel zlib-devel httpd-devel apr-devel apr-util-devel ImageMagick ImageMagick-devel

５分くらいはかかる

```

- Redmine 3.2 をインストールする

```
# yum install ipa-pgothic-fonts
# gem install bundle

インストールが終わったら一度ターミナルを閉じて立ち上げなおしてください。

redmine3.2.1が最新なので、3.2.1にする。
# curl -O http://www.redmine.org/releases/redmine-3.2.1.tar.gz
# tar xzvf redmine-3.2.1.tar.gz
# mv redmine-3.2.1 /opt/

```

```
cd /opt/redmine-3.2.1/config
vi database.yml
```
Redmine に MySQL への接続設定を行います。 Redmine フォルダの下の config ディレクトリに database.yml というファイルを作成し、以下を記述します。
※ 新規構築 する場合は encoding: utf8mb4 にする

```
production:
  adapter: mysql2
  database: xxxx
  host: localhost
  username: yyyyy
  password: zzzz
  encoding: utf8
```

- Redmine yml 設定後 bundle コマンドにより、必要な GEM をインストールします。

```
# yum install mysql-devel

# cd /opt/redmine-3.2.1/
# bundle install --without development test

# bundle exec rake generate_secret_token
# RAILS_ENV=production bundle exec rake db:migrate

最後に、Apache が Redmine の実行者になるので Redmine のファイルの所有者を apache ユーザーに変更します。	
# chown -R apache:apache /opt/redmine-3.2.1
```

- Apacheの設定,passengerを使う設定

```
LoadModule passenger_module /opt/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/passenger-5.0.26/buildout/apache2/mod_passenger.so
PassengerRoot /opt/rbenv/versions/2.2.3/lib/ruby/gems/2.2.0/gems/passenger-5.0.26
PassengerDefaultRuby /opt/rbenv/versions/2.2.3/bin/ruby
<VirtualHost *:80>
    ServerName myhost.com
    DocumentRoot /opt/redmine-3.2.1/public
    <Directory /opt/redmine-3.2.1/public>
        AllowOverride all
        Options -MultiViews
    </Directory>
</VirtualHost>

```

apache、URLが  http://domain/redmine のように ドメインの後に `redmine` がある場合（もしくは複数Redmineを1ドメインでホストするような場合

```
cd  /var/www/html
sudo ln -s /opt/redmine-3.2.1/public redmine

```

- ssl

```
 yum install mod_ssl
```
firewalldでHTTPSを許可

---

# 番外編３）VMWare仮想マシンへのディスク追加

かなり古いvSphereで作業してて、新しいvCenterの方にもっていくその前段階の作業

参考
- https://qiita.com/a-killer-bee/items/564d51034c125d192df3
- https://qiita.com/kaihei777/items/082f1dce8840b333bf0b
- http://webos-goodies.jp/archives/50480376.html 
のパーティション設定を参考に

## 仮想マシンにディスクを追加する
- CentOS7.x
- 作業はGUI vsphere使う

```
vSphere
仮想マシン設定編集　→　タブ「ハードウェア」、ボタン「追加」を押す　→デバイスタイプで、ハードディスクを選択

→次へ

→新規仮想ディスクを作成→ディスクサイズ 50GB → ディスクプロビジョニングがThin Provisionで選択不可　→
場所は、「仮想マシンで保存」の選択のまま

→次へ→仮想デバイスノード　SCSI(0:1)で良い（１つしかないならば、0:1で、２つあるならば0:2になる）
→進めて　終了でディスク追加が動く、数分かからず完了する
```

## ディスク追加前

```
# df -k
ファイルシス            1K-ブロック     使用   使用可 使用% マウント位置
/dev/mapper/centos-root    40456908 37540036  2916872   93% /
devtmpfs                    1925652        0  1925652    0% /dev
tmpfs                       1941196       84  1941112    1% /dev/shm
tmpfs                       1941196     9040  1932156    1% /run
tmpfs                       1941196        0  1941196    0% /sys/fs/cgroup
/dev/sda1                    508588   160904   347684   32% /boot
/dev/mapper/centos-home    19748864   492600 19256264    3% /home
tmpfs                        388240       12   388228    1% /run/user/42
tmpfs                        388240        0   388240    0% /run/user/0

# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2

```

## ディスク追加
- 仮想マシンをシャットダウン
- 50GBをthinプロビジョニング（デフォルト）で追加
- 仮想マシンを電源オン

```
# df -h;
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    39G   36G  3.5G   91% /
devtmpfs                  1.9G     0  1.9G    0% /dev
tmpfs                     1.9G   84K  1.9G    1% /dev/shm
tmpfs                     1.9G  8.9M  1.9G    1% /run
tmpfs                     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1                 497M  158M  340M   32% /boot
/dev/mapper/centos-home    19G  482M   19G    3% /home
tmpfs                     380M   12K  380M    1% /run/user/42
tmpfs                     380M     0  380M    0% /run/user/0


# df -k;
ファイルシス            1K-ブロック     使用   使用可 使用% マウント位置
/dev/mapper/centos-root    40456908 36812604  3644304   91% /
devtmpfs                    1925652        0  1925652    0% /dev
tmpfs                       1941196       84  1941112    1% /dev/shm
tmpfs                       1941196     9044  1932152    1% /run
tmpfs                       1941196        0  1941196    0% /sys/fs/cgroup
/dev/sda1                    508588   160904   347684   32% /boot
/dev/mapper/centos-home    19748864   492600 19256264    3% /home
tmpfs                        388240       12   388228    1% /run/user/42
tmpfs                        388240        0   388240    0% /run/user/0

# ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0  3月 23 16:27 /dev/sda
brw-rw---- 1 root disk 8,  1  3月 23 16:27 /dev/sda1
brw-rw---- 1 root disk 8,  2  3月 23 16:27 /dev/sda2
brw-rw---- 1 root disk 8, 16  3月 23 16:27 /dev/sdb

```

- 追加されたのが、 `/dev/sdb`
- dev/sdb をファイルシステム作成、xfsで作成する、CentOS7のデフォルト

```
# df -k
ファイルシス            1K-ブロック     使用   使用可 使用% マウント位置
/dev/mapper/centos-root    40456908 37539028  2917880   93% /
devtmpfs                    1925652        0  1925652    0% /dev
tmpfs                       1941196       84  1941112    1% /dev/shm
tmpfs                       1941196     9044  1932152    1% /run
tmpfs                       1941196        0  1941196    0% /sys/fs/cgroup
/dev/sda1                    508588   160904   347684   32% /boot
/dev/mapper/centos-home    19748864   492600 19256264    3% /home
tmpfs                        388240       12   388228    1% /run/user/42
tmpfs                        388240        0   388240    0% /run/user/0


# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb

# shutdown -h now
```

## ここから fdisk

```
# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xc5f01c04.

コマンド (m でヘルプ): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p   ★pを選択する
パーティション番号 (1-4, default 1): 1     ★1を入力する
最初 sector (2048-104857599, 初期値 2048): 
初期値 2048 を使います
Last sector, +sectors or +size{K,M,G} (2048-104857599, 初期値 104857599): 
初期値 104857599 を使います
Partition 1 of type Linux and of size 50 GiB is set

コマンド (m でヘルプ): p       ★pを入力する

Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O サイズ (最小 / 推奨): 512 バイト / 512 バイト
Disk label type: dos
ディスク識別子: 0xc5f01c04

デバイス ブート      始点        終点     ブロック   Id  システム
/dev/sdb1            2048   104857599    52427776   83  Linux

コマンド (m でヘルプ): w      ★wを入力する
パーティションテーブルは変更されました！

ioctl() を呼び出してパーティションテーブルを再読込みします。
ディスクを同期しています。

終わり

まだ、この時点ではマウントしていないので見えない

# df -h;
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    39G   36G  3.5G   91% /
devtmpfs                  1.9G     0  1.9G    0% /dev
tmpfs                     1.9G   84K  1.9G    1% /dev/shm
tmpfs                     1.9G  8.9M  1.9G    1% /run
tmpfs                     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1                 497M  158M  340M   32% /boot
/dev/mapper/centos-home    19G  482M   19G    3% /home
tmpfs                     380M   16K  380M    1% /run/user/42
tmpfs                     380M     0  380M    0% /run/user/0


# ls /dev/sd*
/dev/sda  /dev/sda1  /dev/sda2  /dev/sdb  /dev/sdb1

```

- xfsでフォーマットする

```
mkfs -t xfs /dev/sdb1
```

```
# mkfs -t xfs /dev/sdb1
meta-data=/dev/sdb1              isize=256    agcount=4, agsize=3276736 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=0        finobt=0
data     =                       bsize=4096   blocks=13106944, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
log      =internal log           bsize=4096   blocks=6399, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
```

- マウントする

```
mkdir /mnt/disk2
mount /dev/sdb1 /mnt/disk2
```

```
# ls -l /dev/sd*
brw-rw---- 1 root disk 8,  0  3月 23 16:27 /dev/sda
brw-rw---- 1 root disk 8,  1  3月 23 16:27 /dev/sda1
brw-rw---- 1 root disk 8,  2  3月 23 16:27 /dev/sda2
brw-rw---- 1 root disk 8, 16  3月 23 16:38 /dev/sdb
brw-rw---- 1 root disk 8, 17  3月 23 16:41 /dev/sdb1

# mount /dev/sdb1 /mnt/disk2

# df -h;
ファイルシス            サイズ  使用  残り 使用% マウント位置
/dev/mapper/centos-root    39G   36G  3.5G   91% /
devtmpfs                  1.9G     0  1.9G    0% /dev
tmpfs                     1.9G   84K  1.9G    1% /dev/shm
tmpfs                     1.9G  8.9M  1.9G    1% /run
tmpfs                     1.9G     0  1.9G    0% /sys/fs/cgroup
/dev/sda1                 497M  158M  340M   32% /boot
/dev/mapper/centos-home    19G  482M   19G    3% /home
tmpfs                     380M   16K  380M    1% /run/user/42
tmpfs                     380M     0  380M    0% /run/user/0
/dev/sdb1                  50G   33M   50G    1% /mnt/disk2
```

- fstabを編集する

```
/dev/sdb1 /mnt/disk2 xfs defaults 1 2
```

```
# cat /etc/fstab 

#
# /etc/fstab
# Created by anaconda on Thu Apr 14 10:09:26 2016
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/dev/mapper/centos-root /                       xfs     defaults        0 0
UUID=XXXXXXXX-XXXX-XXXX-XXXX-2ac4b7f07fe8 /boot                   xfs     defaults        0 0
/dev/mapper/centos-home /home                   xfs     defaults        0 0
/dev/mapper/centos-swap swap                    swap    defaults        0 0
/dev/sdb1 /mnt/disk2 xfs defaults 1 2

```

## 追加したディスクでRedmineのfilesを使えるようにする
 
```
# cd /mnt/disk2
# mkdir redmine
# mkdir redmine/files
# chown -R apache:apache ./redmine
# ls -l -R
```
- configuration.yml の修正 `{path/to/redmine}/config/configuration.yml`
に 行追加、末尾のfilesの後に/スラッシュは不要

変更後例

```
# cat configuration.yml
production:
   email_delivery:


   attachments_storage_path: /mnt/disk2/redmine/files
```

- filesのファイルコピー

redmine3.2のfilesをマウントした、Redmine4でのconfig設定した場所へ

```
# pwd
/opt/redmine-3.2.0/files

# cp -ap * /mnt/disk2/redmine/files/ &
```

### filesの動作確認
- 画面からファイルアップロードして確認
- 画面からファイルをダウンロードして確認

---

# 番外編４）markdownを使えるプラグイン
- Redmine全体のを変えてしまうと、独自のコンバートが必要
- Redmineの利用者でチケットを主に使うのは設計者、テスターになり、プログラマーの利用率よりも多い
    - 利用者はRedmineの記法を使う人はまあまあ多く、プログラマーだとmarkdown使う、そのため、全体を変えると影響が大きい

### プラグイン２種類
- https://redmine.tokyo/issues/1036 を見ると
    - redmine_per_project_formatting ( https://github.com/a-ono/redmine_per_project_formatting)
  
        - PJ/Module単位でTextile/Markdownを選択できる。
        - 4.0対応なのでdemoサーバで試行したところ動作良好。お勧めします。
    - redmine_persist_wfmt( https://github.com/pinzolo/redmine_persist_wfmt)
        - wiki,コメント単位でTextile/Markdownを選択できる。

- プロジェクト単位で切替えできるプラグインではmarkdownで書きたい人には向かない
- 途中から導入できコメント単位でmarkdownと従来記法が選べるプラグインがあるのでそれが良いか（でも都度選択するのは手間か・・・）

### プラグインredmine_persist_wfmtを試してみた
- https://github.com/pinzolo/redmine_persist_wfmt がコメント単位でmarkdwonを使うことができるようになるプラグイン
- プラグインのマイグレーションで約30分かかった
- プラグインの導入 githubのreadme.mdの手順通り

```
cd /path/to/redmine/

Clone to your Redmine's plugins directory（Redmineのプラグインのディレクトリに git cloneする）

$ git clone https://github.com/pinzolo/redmine_persist_wfmt.git plugins/redmine_persist_wfmt
Install dependency gems

If you are already using Redmine, you probably only call bundle.（既にRedmineを使っているのであれば、bundleを使う）

$ bundle install --without test development

Execute migration（プラグインのマイグレーションを実行する）

$ bundle exec rake redmine:plugins:migrate NAME=redmine_persist_wfmt RAILS_ENV=production
Execute persist_all task

This task saves all wiki formats that already exist.（既にwiki記法の記載があるならばrakeコマンド実行する）

# FORMAT is required and must be 'textile' or 'markdown'
$ bundle exec rake pwfmt:persist_all FORMAT=textile RAILS_ENV=production


Restart your Redmine（Redmineを再起動）
```