CentOS7上に、Redmine5とGitbucketをインストールしてPostgreSQL連携し、Apacheで繋げておく

# 1.困った
世界は加速度的に進化しているのに、私の身の回りは20年前とあまり変わっていません。
コンテナ使えたら簡単なのにと思ったけれど、仮想サーバの設定を変えないといけなくて、その権限が自分にないのでしかたない。地道にやっていくことにします。
# 2.前提
セキュリティに関してはあまり考慮していません。それぞれ設定が必要かと思います。
あと、基本的にコマンド入力は**管理者権限**でお願いします。
# 3.何をするの？
CentOS7上に、Redmine5とGitbucketをインストールします。メインはRedmine。ポートがバラバラなので、Apacheにプロキシを担ってもらって、80番ポートでやり取りできるようにします。データベースはPostgreSQLにします。
# 4.謝辞
こちらのサイトには本当にお世話になりました。ありがとうございます。

https://qiita.com/y-araki-qiita/items/ac7ad4b1f3844e0c494f

http://guide.redmine.jp/RedmineInstall/

https://www.torutk.com/projects/swe/wiki/Redmine%E3%82%92CentOS_6%E4%B8%8A%E3%81%A7%E5%8B%95%E3%81%8B%E3%81%99%E3%83%BCUnicorn%E3%81%A8Nginx%E7%B7%A8

https://rin-ka.net/redmine-install-centos/

https://qiita.com/Nunocky/items/6b15a4e9e91d6c6ccdbb

https://programming-style.com/blog/gitbucket-install-win/

# 5.設定
## 5.1.SELinux無効化
安全性のために頑張ってくれている姿勢は理解したいが、うまくいかないときはだいたい君のせいなのだよ、ということで無効化します。
```bash
vi /etc/selinux/config
```
コンフィグのSELINUXのenforcingをdisabledに変更します。
```vim:/etc/selinux/config
#SELINUX=enforcing
SELINUX=disabled
```
そして再起動
```bash
shutdown -r now
```
再起動後SELinuxが無効化されていることを確認してください。
```bash
getenforce
```
あと、firewallも切っておいたほうがいいと思います。実運用ではちゃんと設定する必要がありますが、ここではとりあえず無効化しておきます。
```bash
systemctl stop firewalld
systemctl disable firewalld
```
## 5.2.PostgreSQL設定
### 5.2.1.インストール
```bash
#ツール群のインストール
yum -y groupinstall "Development Tools"
yum -y install openssl-devel readline-devel zlib-devel curl-devel libyaml-devel libffi-devel
yum -y install epel-release centos-release-scl
yum -y install llvm-toolset-7 llvm5.0

#レポジトリ更新
yum -y install https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm 

#PostgreSQL最新（Apr.2023 現在）インストール
yum -y install postgresql14
yum -y install postgresql14-server
yum -y install postgresql14-devel
```
### 5.2.2.init
```bash
su - postgres -c '/usr/pgsql-14/bin/initdb -E UTF8 --locale=C -A trust -W'
```
パスワード設定を聞かれるので入力してください。
### 5.2.3.listenの設定

```bash
vi /var/lib/pgsql/14/data/pg_hba.conf
```
ファイルの末尾に書き足します。
```vim:/var/lib/pgsql/14/data/pg_hba.conf
host    redmine         redmine         127.0.0.1/32            md5
host    redmine         redmine         ::1/128                 md5
```
### 5.2.4.サービス開始

```shell
systemctl start  postgresql-14
systemctl enable postgresql-14

#ちゃんと起動してるか確認
systemctl status postgresql-14
```
### 5.2.5.パスを通す
プロファイル設定を編集します。
```shell
vi ~/.bash_profile
```
```vim:~/.bash_profile
# PATH=...
# export PATH
#　の記述を下記のとおり一行で書き替え

export PATH=$PATH:$HOME/bin:/usr/pgsql-14/bin
```
設定を反映させます。

```bash
source ~/.bash_profile
```
## 5.3.Redmine
### 5.3.1.PostgreSQL設定
Redmine用のユーザを作ります。
```bash
sudo -u postgres createuser -P redmine
```
パスワード入力を求められるので、ここでは**redmine**としておきます。
続けてデータベースの作成です。
```bash
sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
```
### 5.3.2.Rubyインストール
```bash
# 必要なライブラリをインストール
yum -y install ImageMagick ImageMagick-devel ipa-pgothic-fonts
yum -y install devtoolset-11

#ディレクトリはここにしておきます
cd /var/lib

wget https://cache.ruby-lang.org/pub/ruby/3.1/ruby-3.1.4.tar.gz
tar xvf ruby-3.1.4.tar.gz
rm -f ruby-3.1.4.tar.gz

cd ruby-3.1.4

./configure --disable-install-doc

#makeするのに必要らしい
scl enable devtoolset-11 bash

# インストール
make
make install

# 正常にインストールされたか確認
ruby -v
```
### 5.3.3.Redmineインストール
#### 5.3.3.1.配備 
```shell
#bundlerをセットアップしておく
gem install bundler

#Redmineを配備
cd /var/lib
wget https://www.redmine.org/releases/redmine-5.0.5.tar.gz
tar xzf redmine-5.0.5.tar.gz
rm -f redmine-5.0.5.tar.gz
ln -s redmine-5.0.5 redmine
```
#### 5.3.3.2.データベース設定
```shell
vi /var/lib/redmine/config/database.yml
```
以下のように書きます。ユーザ、パスワードは5.3.1.で設定したものです。
```vim:/var/lib/redmine/config/database.yml
production:
  adapter: postgresql
  database: redmine
  host: localhost
  username: redmine
  password: "redmine"
  encoding: utf8
```
#### 5.3.3.3.メール設定
```bash
vi /var/lib/redmine/config/configuration.yml
```
それぞれの環境に合わせて編集してください。
```vim: /var/lib/redmine/config/configuration.yml
production:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      address: "localhost"
      port: 25
      domain: "example.com"

  rmagick_font_path: /usr/share/fonts/ipa-pgothic/ipagp.ttf

```
#### 5.3.3.4.インストール
```bash
cd /var/lib/redmine

#インストール
bundle install --without development test

#トークン生成
bundle exec rake generate_secret_token
```
#### 5.3.3.5.unicornインストール
```bash
vi Gemfile.local
```
```vim:/var/lib/redmine/Gemfile.local
gem "unicorn"
```
```bash
bundle update
```
#### 5.3.3.6.データベース設定
```bash
RAILS_ENV=production bundle exec rake db:migrate
RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
```
#### 5.3.3.7.サービス化
まずはこちらのファイルを作成します。
```bash
vi /usr/lib/systemd/system/redmine-unicorn.service
```
```vim:/usr/lib/systemd/system/redmine-unicorn.service
[Unit]
Description=Redmine Unicorn Server
After=postgresql-14.service

[Service]
WorkingDirectory=/var/lib/redmine
Environment=RAILS_ENV=production
SyslogIdentifier=redmine-unicorn
PIDFile=/var/lib/redmine/tmp/pids/unicorn.pid

ExecStart= /usr/local/bin/bundle exec "unicorn_rails -c config/unicorn.rb -E production"
ExecStop=/usr/bin/kill -QUIT $MAINPID
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
```
続けてこちら。 ポートはおそらく他とかぶらないであろう54321にしてみた。 
```bash
vi /var/lib/redmine/config/unicorn.rb
```
```vim:/var/lib/redmine/config/unicorn.rb
worker_processes 2

app_path = "/var/lib/redmine"

listen 54321
pid File.expand_path('tmp/unicorn.pid', app_path)
stderr_path File.expand_path('log/unicorn.stderr.log', app_path)
stdout_path File.expand_path('log/unicorn.stdout.log', app_path)

preload_app true


timeout 30

if GC.respond_to?(:copy_on_write_friendly=)
  GC.copy_on_write_friendly = true
end

before_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.connection.disconnect!

  old_pid = "#{server.config[:pid]}.oldbin"
  if old_pid != server.pid
    begin
      sig = (worker.nr + 1) >= server.worker_processes ? :QUIT : :TTOU
      Process.kill(sig, File.read(old_pid).to_i)
    rescue Errno::ENOENT, Errno::ESRCH
    end
  end
end

after_fork do |server, worker|
  defined?(ActiveRecord::Base) and ActiveRecord::Base.establish_connection
end
```
サービス登録
```bash
systemctl start  redmine-unicorn
systemctl enable redmine-unicorn
# ちゃんと起動しているか確認
systemctl status redmine-unicorn
```
#### 5.3.3.8.プラグイン設定
```bash
cd /var/lib/redmine/plugins

git clone https://github.com/suer/redmine_absolute_dates.git
git clone https://github.com/tkusukawa/redmine_work_time.git

#DB登録
bundle exec rake redmine:plugins:migrate RAILS_ENV=production

#サービス再起動し、ステータス確認
systemctl restart redmine-unicorn
systemctl status  redmine-unicorn
```
:::note warn
注意
プラグインは１つ入れる都度、サービスを再起動して確認したほうがいいです。まとめて作業すると、どれが原因でうまくいかないのかわからなくなって、ほんとにひどい目に合うから。
:::

### 5.3.4.Gitbucketインストール
#### 5.3.4.1.基本設定
```bash
# Javaのインストール
yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel-1.8.0-devel

# tomcatのインストール
cd /usr/local/src
wget http://ftp.tsukuba.wide.ad.jp/software/apache/tomcat/tomcat-9/v9.0.59/bin/apache-tomcat-9.0.59.tar.gz
tar -xvzf apache-tomcat-9.0.59.tar.gz
rm -f apache-tomcat-9.0.59.tar.gz
mv apache-tomcat-9.0.59 /var/lib/tomcat

useradd -s /sbin/nologin tomcat
chown -R tomcat:tomcat  /var/lib/tomcat
```
#### 5.3.4.2.tomcatサービス化
```bash
vi /etc/systemd/system/tomcat.service
```

```vim:/etc/systemd/system/tomcat.service
[Unit]
Description=Apache Tomcat 9
After=redmine-unicorn

[Service]
User=tomcat
Group=tomcat
Type=oneshot
PIDFile=/var/lib/tomcat/tomcat.pid
RemainAfterExit=yes

ExecStart=/var/lib/tomcat/bin/startup.sh
ExecStop=/var/lib/tomcat/bin/shutdown.sh
ExecReStart=/var/lib/tomcat/bin/shutdown.sh;/var/lib/tomcat/bin/startup.sh

[Install]
WantedBy=multi-user.target
```
ちゃんと起動しているか確認してください。
```bash
chmod 755 /etc/systemd/system/tomcat.service
systemctl start tomcat
systemctl enable tomcat
```
#### 5.3.4.3.DB登録
H2が内蔵されているけど、外部DBを使うことが推奨されています。
まずはそれ用のユーザとデータベース作成
```bash
sudo -u postgres createuser -P gitbucket
sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O gitbucket -T template0 gitbucket
```
tomcatにgitbucketをデプロイし…
```bash
cd /var/lib/tomcat/webapps
wget https://github.com/gitbucket/gitbucket/releases/download/4.39.0/gitbucket.war
```
データベース設定を変更
```bash
vi /home/tomcat/.gitbucket/database.conf
```
```vim:/home/tomcat/.gitbucket/database.conf
db {
  url = "jdbc:postgresql://localhost/gitbucket"
  user = "gitbucket"
  password = "gitbucket"
#  url = "jdbc:h2:${DatabaseHome};MVCC=true"
#  user = "sa"
#  password = "sa"
#  connectionTimeout = 30000
#  idleTimeout = 600000
#  maxLifetime = 1800000
#  minimumIdle = 10
#  maximumPoolSize = 10
}
```
ついでにプラグインも入れておこう
```bash
cd /home/tomcat/.gitbucket/plugins
wget https://github.com/mrkm4ntr/gitbucket-network-plugin/releases/download/1.9.2/gitbucket-network-plugin_2.13-1.9.2.jar
wget https://github.com/yoshinorin/gitbucket-monitoring-plugin/releases/download/v5.1.0/gitbucket-monitorting-plugin-5.1.0.jar
wget https://github.com/yoshinorin/gitbucket-application-logs-plugin/releases/download/v3.2.0/gitbucket-application-logs-plugin-3.2.0.jar
```
サービス再起動をして状況確認
```bash
systemctl restart tomcat
systemctl status  tomcat
```
### 5.3.5.Apache設定
プロキシになってもらいます。
```bash
#インストール（多分もともと入ってる？）
yum -y install httpd httpd-devel

#プロキシ設定が有効化されているか確認
# mod_proxy.soとmod_proxy_ajp.soが記載されており、コメント行になっていないことを確認します。
cat /etc/httpd/conf.modules.d/00-proxy.conf

vi /etc/httpd/conf.d/virtualhost.conf
```
```vim:/etc/httpd/conf.d/virtualhost.conf
<VirtualHost *:80>
    ProxyPreserveHost On

    ProxyPass /gitbucket http://localhost:8080/gitbucket/
    ProxyPassReverse /gitbucket http://localhost:8080/gitbucket/

    ProxyPass /redmine http://localhost:54321/
    ProxyPassReverse /redmine http://localhost:54321/

    ProxyPass / http://localhost:54321/
    ProxyPassReverse / http://localhost:54321/
</VirtualHost>
```
サービスを登録します。
```bash
systemctl start httpd
systemctl enable httpd
systemctl status httpd
```
# 6.これで一応
http://localhost/redmine/　 ->　Redmine
http://localhost/gitbucket/ ->  Gitbucket
が起動します。メインがRedmineだったので、localhostだけでもRedmineに行けるようにはしてあります。
お疲れさまでした。