1.困った
世界は加速度的に進化しているのに、私の身の回りは20年前とあまり変わっていません。
コンテナ使えたら簡単なのにと思ったけれど、仮想サーバの設定を変えないといけなくて、その権限が自分にないのでしかたない。地道にやっていくことにします。
2.前提
セキュリティに関してはあまり考慮していません。それぞれ設定が必要かと思います。
あと、基本的にコマンド入力は管理者権限でお願いします。
3.何をするの?
CentOS7上に、Redmine5とGitbucketをインストールします。メインはRedmine。ポートがバラバラなので、Apacheにプロキシを担ってもらって、80番ポートでやり取りできるようにします。データベースはPostgreSQLにします。
4.謝辞
こちらのサイトには本当にお世話になりました。ありがとうございます。
5.設定
5.1.SELinux無効化
安全性のために頑張ってくれている姿勢は理解したいが、うまくいかないときはだいたい君のせいなのだよ、ということで無効化します。
vi /etc/selinux/config
コンフィグのSELINUXのenforcingをdisabledに変更します。
#SELINUX=enforcing
SELINUX=disabled
そして再起動
shutdown -r now
再起動後SELinuxが無効化されていることを確認してください。
getenforce
あと、firewallも切っておいたほうがいいと思います。実運用ではちゃんと設定する必要がありますが、ここではとりあえず無効化しておきます。
systemctl stop firewalld
systemctl disable firewalld
5.2.PostgreSQL設定
5.2.1.インストール
#ツール群のインストール
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
su - postgres -c '/usr/pgsql-14/bin/initdb -E UTF8 --locale=C -A trust -W'
パスワード設定を聞かれるので入力してください。
5.2.3.listenの設定
vi /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.サービス開始
systemctl start postgresql-14
systemctl enable postgresql-14
#ちゃんと起動してるか確認
systemctl status postgresql-14
5.2.5.パスを通す
プロファイル設定を編集します。
vi ~/.bash_profile
# PATH=...
# export PATH
# の記述を下記のとおり一行で書き替え
export PATH=$PATH:$HOME/bin:/usr/pgsql-14/bin
設定を反映させます。
source ~/.bash_profile
5.3.Redmine
5.3.1.PostgreSQL設定
Redmine用のユーザを作ります。
sudo -u postgres createuser -P redmine
パスワード入力を求められるので、ここではredmineとしておきます。
続けてデータベースの作成です。
sudo -u postgres createdb -E UTF-8 -l ja_JP.UTF-8 -O redmine -T template0 redmine
5.3.2.Rubyインストール
# 必要なライブラリをインストール
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.配備
#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.データベース設定
vi /var/lib/redmine/config/database.yml
以下のように書きます。ユーザ、パスワードは5.3.1.で設定したものです。
production:
adapter: postgresql
database: redmine
host: localhost
username: redmine
password: "redmine"
encoding: utf8
5.3.3.3.メール設定
vi /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.インストール
cd /var/lib/redmine
#インストール
bundle install --without development test
#トークン生成
bundle exec rake generate_secret_token
5.3.3.5.unicornインストール
vi Gemfile.local
gem "unicorn"
bundle update
5.3.3.6.データベース設定
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.サービス化
まずはこちらのファイルを作成します。
vi /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にしてみた。
vi /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
サービス登録
systemctl start redmine-unicorn
systemctl enable redmine-unicorn
# ちゃんと起動しているか確認
systemctl status redmine-unicorn
5.3.3.8.プラグイン設定
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
注意
プラグインは1つ入れる都度、サービスを再起動して確認したほうがいいです。まとめて作業すると、どれが原因でうまくいかないのかわからなくなって、ほんとにひどい目に合うから。
5.3.4.Gitbucketインストール
5.3.4.1.基本設定
# 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サービス化
vi /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
ちゃんと起動しているか確認してください。
chmod 755 /etc/systemd/system/tomcat.service
systemctl start tomcat
systemctl enable tomcat
5.3.4.3.DB登録
H2が内蔵されているけど、外部DBを使うことが推奨されています。
まずはそれ用のユーザとデータベース作成
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をデプロイし…
cd /var/lib/tomcat/webapps
wget https://github.com/gitbucket/gitbucket/releases/download/4.39.0/gitbucket.war
データベース設定を変更
vi /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
}
ついでにプラグインも入れておこう
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
サービス再起動をして状況確認
systemctl restart tomcat
systemctl status tomcat
5.3.5.Apache設定
プロキシになってもらいます。
#インストール(多分もともと入ってる?)
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
<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>
サービスを登録します。
systemctl start httpd
systemctl enable httpd
systemctl status httpd
6.これで一応
http://localhost/redmine/ -> Redmine
http://localhost/gitbucket/ -> Gitbucket
が起動します。メインがRedmineだったので、localhostだけでもRedmineに行けるようにはしてあります。
お疲れさまでした。