「CentOS7.8 + MySQL + NginX」でRedmine4.1構築チャレンジ

IT

Redmine構築メモ

どうも、合同会社Celalinkの代表をやっているヤナイ( @yusuke_celalink )です。
前回はConohaでRedmineを爆速で構築する記事を書きましたが、今回はサーバーの初期状態からインストールする手順について書いていこうと思います。

※Conohaでアカウントをすでに取得していることを前提に書いていきます。

前回同様、今回も俺の中のLittleヤナイに構築してもらうという程で茶番にお付き合いいただきながら書いていきます。

レンタルサーバーならConoHa|登録者数20万アカウント突破
ConoHaではレンタルサーバー、VPS(仮想専用サーバー)、Windows Serverなどのホスティングサービスを提供しております。充実のラインナップからご利用用途に合わせてお好きなサービスをお選びいただけます。
スポンサーリンク

参考

まず最初に、非常に参考にさせていただいたサイトを紹介させていただきます。
めちゃくちゃ助かりました!!

CentOS7にRedmine4.1をインストールする - Qiita
この記事の4.1版です。 前提条件 ruby 2.6.5 redmine 4.1 PostgreSQL 12 下準備 DeveloperToolのインストール yum -y groupinstall "Develo...
CentOS7にRedmineをインストールする | SaintSouth.NET
はじめに 今回、WebサーバーにNginxを、アプリケーションサーバーにunicorn(+ Ruby on Rails + Redmine)を、データベースサーバーにMariaDBをそれぞれ採用して、CentOS7のインストールイメージminimalを使って構築したいと思います。
CentOS7にRedmineをインストールする | SaintSouth.NET
はじめに 今回、WebサーバーにNginxを、アプリケーションサーバーにunicorn(+ Ruby on Rails + Redmine)を、データベースサーバーにMariaDBをそれぞれ採用して、CentOS7のインストールイメージminimalを使って構築したいと思います。

いざ、Redmine構築!

俺「くそ、せっかくRedmine作ってやったのにあの社長ときたら・・・・」
俺「実はインフラ全然わかんないんだよなぁ、、、、まぁやるしかない!」

(さっそくConohaポチッ)

俺「よし、まずはサーバーを作ってと。」

俺「よし、ここからIPアドレスを確認してSSHで接続すればオッケーだな」

# ssh root@ConohaのIPアドレス

俺「とりあえずyumのアップデートをして、、、、」

# yum update

俺「よし、これでスタート位置に立った感じかな」

※ここからはrootを使ったことを想定して書いていきます。他のユーザーの場合はsudoつければいけるはず

MySQLインストール

MariaDBを削除

俺「ふむふむ、デフォルトでMariaDBがインストールされているけど競合する可能性があるのか。まずは消してみよう」

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

リポジトリの取得

俺「なるほど、リポジトリを追加すれば良いのか」

// yum リポジトリの追加
# yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm

// 追加されたことを確認する
# yum info mysql-community-server

インストール

俺「よし、インストールだ!!」

# yum -y install mysql-community-server

サービスの開始と自動起動

俺「これでMySQLの開始と自動起動ができるのか、なるほど」

# systemctl start mysqld.service
# systemctl enable mysqld.service

初期設定

俺「ふむ、初期設定が必要なのか」
俺「まずはRootパスワードの確認をして、、、」

# cat /var/log/mysqld.log | grep "localhost"

[Note] A temporary password is generated for root@localhost: FeiAL.oQU4pE
赤字部分が初期パスワードとして設定されている

俺「設定のコマンドを叩くと・・・」

# mysql_secure_installation

「Enter password for user root:」が表示されたら初期パスワードを入力

画面の指示にそって設定していく

Change the password for root ? ((Press y|Y for Yes, any other key for No) : ←rootのパスワードを変更しないので「No」を入力
-- 略 --

Remove anonymous users? [Y/n] ←匿名ユーザーを削除するので「Y」を選択
 Success. ←これが表示されれば成功!※以降すべてのcommandの結果はこれで確認する。
-- 略 --

Disallow root login remotely? [Y/n]←リモートからrootをログインさせないため「Y」を選択
-- 略 --

Remove test database and access to it? [Y/n]←テスト用データベースを削除するため「Y」を選択
-- 略 --

Reload privilege tables now? [Y/n] ←権限テーブルの再読み込みを行うため「Y」を選択
-- 略 --

All done! ←これがでたら設定完了

接続確認

# mysql -u root -p

接続できればOK
『exit;』を入力して画面を抜ける

俺「ふぅ、、、、とりあえずMySQLはこれで(๑˃̵ᴗ˂̵)و ヨシ!」

Rubyのインストール

俺「次にredmineを動かすためにRubyをインストールするのか」

※こちらの記事を参考にRubyをインストールしました。
Redmineに必要なバージョンはRuby2.6の最新版を選択すればOKです。
記事の最後にあるbundlerも必要になるのでインストールを忘れずに!

CentOS7にRubyをインストール - Qiita
いつも忘れがちなので、自分用のメモも兼ねてインストール方法を投稿します。 前準備 CentOS7はMinimal ISOでインストール済みであること 必要なパッケージのインストール $ sudo yum -y instal...

俺「よし、これでRubyのインストールも完了だ!」

svn インストール

俺「ふぅ、、、、結構やること多いな、、、、、SVNもインストールしなきゃいけないのか」

SVNがインストールされているか確認する

  • インストールの確認
# yum list installed | grep subversion
  • インストールされていなければインストールする
# yum install subversion
  • バージョン確認
# svn --version

俺「よーし、これでRedmineインストールの準備ができたぞー!」

redmineのインストール

俺「よし、公式ドキュメントを・・・・」

https://www.redmine.org/projects/redmine/wiki/RedmineInstall

俺「英語/(^o^)\ナンテコッタイ」(グーグル翻訳ぽちー)

※ここからは必ずしも公式ドキュメントと同じ手順じゃありません。インストールするパスとかは自由に決めて適宜読み替えてください

インストール場所の作成

# mkdir /var/lib/redmine
# cd /var/lib/redmine

ダウンロード

# svn co https://svn.redmine.org/redmine/branches/4.1-stable redmine-4.1

(R)eject or accept (t)emporarily? ←「t」を選択(証明書を一時的に許可)

ダウンロードできたか確認

# ls
redmine-4.1

MySQLにredmineのテーブルを準備

MySQLにログインをしてデータベースとユーザーを作成する。

CREATE DATABASE redmine CHARACTER SET utf8mb4;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'my_password'; ←パスワードを「Celalink2017!」
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

設定ファイルの作成

作業ディレクトリの変更

# cd redmine-4.1

サンプルファイルをコピーして設定ファイルを作成する

# cp config/database.yml.example config/database.yml

設定ファイルの編集

# vi config/database.yml
production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "my_password" 

usernameとpasswordを変更すればおk

セッションストアシークレットの生成

railsがセッションデータを格納するCookieをエンコードするために使用するランダムキーを生成し、改ざんを防止します。

# yum install mysql-devel
# bundle install
# bundle exec rake generate_secret_token

初期設定

# RAILS_ENV=production bundle exec rake db:migrate

DBにデフォルトデータを登録する

# RAILS_ENV=production bundle exec rake redmine:load_default_data

// 言語の選択 「ja」を入力する
Select language: ar, az, bg, bs, ca, cs, da, de, el, en, en-GB, es, es-PA, et, eu, fa, fi, fr, gl, he, hr, hu, id, it, ja, ko, lt, lv, mk, mn, nl, no, pl, pt, pt-BR, ro, ru, sk, sl, sq, sr, sr-YU, sv, th, tr, uk, vi, zh, zh-TW [en] 

ポート開放

# firewall-cmd --add-port=3000/tcp --zone=public

サーバー起動

# bundle exec rails server webrick -e production

※Ctrl + cで停止
※ポートは後で閉じるのでこのまま進んでおkです。

「http://ipアップデート:3000」で画面が開けばOK!

俺「いやー、長かった!!とりあえず起動できた!」

Unicornのインストール

俺「なるほど、webrickで起動はあまりよろしくないのか。ふむふむ、Unicorn、、、なんかかっけぇ」
俺「JavaでいうところのTomcatみたいなアプリケーションサーバーって感じかな。多分」
俺「さっそく入れてみるか」

インストール

# vim Gemfile // gem “unicorn”を追加
# bundle update

動作確認

# bundle exec unicorn_rails -l 3000 -E production

※Ctrl + cで停止
※ここでもう一度画面が開くことを確認!

ポート閉じる

# firewall-cmd --reload

Service登録用のファイルを作成

# vi config/unicorn.rb

※コピペしてOKですがパスだけ適宜置き換えてください

# -*- coding: utf-8 -*-
# Unicorn設定ファイル
worker_processes 2

listen "/var/lib/redmine/redmine-4.1/tmp/sockets/redmine.sock", :backlog => 32
timeout 30
pid "/var/lib/redmine/redmine-4.1/tmp/pids/redmine.pid"

stderr_path '/var/lib/redmine/redmine-4.1/log/unicorn.stderr.log'
stdout_path '/var/lib/redmine/redmine-4.1/log/unicorn.stdout.log'

preload_app true
check_client_connection false

before_fork do |server, worker|
  # Railsでpreload_appをtrueにしているときは強く推奨
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.connection.disconnect!
end

after_fork do |server, worker|
  # Railsでpreload_appをtrueにしているときは必須
  defined?(ActiveRecord::Base) and
    ActiveRecord::Base.establish_connection

  begin
    uid, gid = Process.euid, Process.egid
    # user, group = "redmine", "redmine"
    # ENV["HOME"] = "/home/redmine"
    target_uid = Etc.getpwnam(user).uid
    target_gid = Etc.getgrnam(group).gid
    worker.tmp.chown(target_uid, target_gid)
    if uid != target_uid or gid != target.gid
      Process.initgroups(user, target_gid)
      Process::GID.change_privilege(target_gid)
      Process::UID.change_privilege(target_uid)
    end
  rescue
    if RAILS_ENV = "development"
      STDERR.puts "could not change user, oh well"
    else
      STDERR.puts "could not change user, oh well"
      raise e
    end
  end
end

サービス起動用ファイル作成

# vi /usr/lib/systemd/system/redmine.service

※こちらもパスにご注意ください

[Unit]
Description=Redmine Unicorn Server

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

# /usr/localのrbenvにパスを通す
ExecStart=/usr/local/rbenv/shims/bundle exec "unicorn_rails -c /var/lib/redmine/redmine-4.1/config/unicorn.rb -E production" 
ExecStop=/usr/bin/kill -QUIT $MAINPID
ExecReload=/bin/kill -USR2 $MAINPID

[Install]
WantedBy=multi-user.target
// 起動確認
# systemctl start redmine

// 動作確認
# systemctl status redmine

// activeになっていることを確認
● redmine.service - Redmine Unicorn Server
   Loaded: loaded (/usr/lib/systemd/system/redmine.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-06-16 10:31:16 JST; 11s ago
 Main PID: 3700 (ruby)
   CGroup: /system.slice/redmine.service
           ├─3700 unicorn_rails master -c /var/lib/redmine/redmine-4.1/config/unicorn.rb -E production
           ├─3733 unicorn_rails worker[0] -c /var/lib/redmine/redmine-4.1/config/unicorn.rb -E production
           └─3734 unicorn_rails worker[1] -c /var/lib/redmine/redmine-4.1/config/unicorn.rb -E production

Jun 16 10:31:16 118-27-39-108 systemd[1]: Started Redmine Unicorn Server.

// 自動起動の設定
# systemctl enable redmine

俺「よーし、これでUnicornのインストールも完了だ!今ならデストロイモードが使えそうだぜ!」(※ガンダムユニコーンで検索)

NginXインストール

俺「最後にWebサーバーを入れれば完璧かな」

// リポジトリの追加と設定
# yum install -y yum-utils
# vi /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
  • インストール
// インストール
# yum install -y nginx

// NginXの設定
# vi /etc/nginx/conf.d/redmine.conf

※こちらもパスにご注意してコピペしてください
※server_name はConohaのIPアドレスを設定してください。ドメインがある方はドメイン名でも大丈夫です。

upstream unicorn-redmine {
  server unix:/var/lib/redmine/redmine-4.1/tmp/sockets/redmine.sock;
}

server {
  listen 80;
  server_name 118.27.39.108;

  root /opt/redmine/public;
  client_max_body_size 1G;
    
  location / {
    try_files $uri/index.html $uri.html $uri @app;
  }

  location /redmine/ {
    try_files $uri/index.html $uri.html $uri @app;
  }

  location @app {
    proxy_redirect off;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_connect_timeout 60;
    proxy_read_timeout 60;
    proxy_send_timeout 600;
    proxy_pass http://unicorn-redmine;
  }
  
  error_page 500 502 503 504 /500.html; 
}

NginX起動

// 起動
# service nginx start
// 確認
# service nginx status

// Activeになっていることを確認
Redirecting to /bin/systemctl status nginx.service
● nginx.service - nginx - high performance web server
   Loaded: loaded (/usr/lib/systemd/system/nginx.service; disabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-06-16 10:49:19 JST; 31s ago
     Docs: http://nginx.org/en/docs/
  Process: 4077 ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf (code=exited, status=0/SUCCESS)
 Main PID: 4078 (nginx)
   CGroup: /system.slice/nginx.service
           ├─4078 nginx: master process /usr/sbin/nginx -c /etc/nginx/nginx.conf
           └─4079 nginx: worker process

Jun 16 10:49:19 118-27-39-108 systemd[1]: Starting nginx - high performance web server...
Jun 16 10:49:19 118-27-39-108 systemd[1]: Started nginx - high performance web server.

NginX自動起動

# systemctl enable status

ポート開放

// http
# firewall-cmd --zone=public --add-service=http --permanent
// https
# firewall-cmd --zone=public --add-service=https --permanent
// 再読み込み
# firewall-cmd --reload

俺「やっと終わったー!!!」

良いRedmineライフを!!

俺「社長、サーバーの立ち上げからRedmineインストールしてやりましたよ」
社長「えっ、すごくない?やばっ、、、、」
俺「まぁ俺がちょちょいと本気出せば余裕っすよ(画面みせながら)」
社長「おぉ、本当だ!すごい!」
社長「あっ、でも、、、、」
俺「え?」
社長「なんか便利なプラグイン探して入れといてよ(にっこり)」
俺「はぁぁぁぁぁぁ!!自分で入れろや!!!」
社長「ひぇ、、、、だってできないもん、、、、、」
俺「・・・・はぁ(くそデカため息」

そんな感じで次はカスタマイズの沼にハマっていくのであった。

最後に

非常に長くなりましたが無事にインストールできたでしょうか?
正直はまりまくって何回もサーバー消して作ってを繰り返してようやくできました。
これからRedmineを構築する人は是非!
ちなみに最初CentOS8でやってみたんですけど、どうしても解決できずにCentOS7を使いました。
時間がある時にもう一度CentOS8も再挑戦したいと思います。

この記事が気に入ったらいいねをよろしくお願いします
IT 独立開業のノウハウ
スポンサーリンク
yusukeをフォローする
とりあえず社長でもやってみますか

コメント

タイトルとURLをコピーしました