Redmine + AWS(EC2)

AWS(EC2)の無料枠で、Redmineが動かす手順を残します。
できるだけ最新のアプリケーションで動かしたいので、bitnamiやAMIを使ったRedmineを利用するのではなく、1からインストールします。
(Redmine5.0.3にしたかったのですが、実用性を考えるとまだ4.2.8でしょうか。

SoftwareVersion
httpd2.4.57
MySQL8.0.34
Ruby3.1.4
Ruby on Rails7.0.6
passenger6.0.18
Redmine5.0.5

rootユーザーに切り替えてインストールしていきます。

$ sudo -s

必要となるモジュールのインストールします。

# yum -y update
# yum -y install selinux-policy-targeted policycoreutils-python
# yum -y install gcc kernel-devel kernel-headers gcc-c++ glibc-headers openssl-devel
# yum -y install git
# yum -y install readline-devel libxml2 libxslt libxml2-devel libxslt-devel
# yum -y install curl-devel
# yum -y install ImageMagick ImageMagick-devel

/etc/sysconfig/selinuxはデフォルトでSELINUX=disabledになってるけど一応確認します。
下記のDisabledが表示されたら大丈夫です。

# getenforce
Disabled

もし、Disabledになっていなければ、下記に変更します。

# vim /etc/sysconfig/selinux
SELINUX=disabled

httpdをインストールします。

# yum install -y httpd httpd-tools httpd-devel httpd-manual

httpdが正常にインストールできているか確認します。

# httpd -v

所有者の変更と自動起動を設定しておきます。

# chown -R apache. /var/log/httpd/
# chkconfig httpd on

MySQLのインストール前に、作成初期からインストールされているMariaDB用パッケージを削除します。

# yum remove mariadb-*
上記の処理を行います。よろしいでしょうか? [y/N]y
Is this ok [y/d/N]: y

最新のMySQLをインストールします。

# rpm -ihv https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
# yum install --enablerepo=mysql80-community mysql-community-server
上記の処理を行います。よろしいでしょうか? [y/N]y
上記の処理を行います。よろしいでしょうか? [y/N]y

MySQLに関係のあるパッケージを出力確認します。

# yum list installed | grep mysql

ログファイルを作ります。

# touch /var/log/mysqld.log

MySQLの自動起動をオンにします。
次にmysqldを起動して状況確認します。

# chkconfig mysqld on
情報:'systemctl enable mysqld.service'へ転送しています。
# systemctl start mysqld
# systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2022-11-22 02:52:03 UTC; 1s ago
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html
  Process: 24493 ExecStartPre=/usr/bin/mysqld_pre_systemd (code=exited, status=0/SUCCESS)
 Main PID: 24570 (mysqld)
   Status: "Server is operational"
   CGroup: /system.slice/mysqld.service
           └─24570 /usr/sbin/mysqld

11月 22 02:51:55 ip-172-31-33-200.ap-northeast-1.compute.internal systemd[1]: Starting ...
11月 22 02:52:03 ip-172-31-33-200.ap-northeast-1.compute.internal systemd[1]: Started M...
Hint: Some lines were ellipsized, use -l to show in full.

rootパスワードを調べておきましょう。(後ろの gRn%Tzk#U2k2 がパスワードになります)

# less /var/log/mysqld.log
2022-11-22T02:51:58.928762Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: gRn%Tzk#U2k2
q で離脱

パッケージをインストールします。

# yum -y install mysql-server mysql-devel

MySQLが正常にインストールできているかバージョンチェックします。

# mysql --version
mysql  Ver 8.0.34 for Linux on x86_64 (MySQL Community Server - GPL)

rootパスワードを変更して、データベースを作ります。
(難しいパスワードではないとエラーで弾かれます)

# mysql -uroot -p
Enter password: ←さっき見つけたパスワードを入れる(コピペでもOK)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'redMine,616'; ← パスワード変更(忘れないように)
mysql> create database redmine default character set utf8;

データベースを確認してみます。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| redmine            |
| sys                |
+--------------------+
5 rows in set (0.01 sec)

Redmineで使う、GRANT権限のユーザを作ります。

mysql> CREATE USER 'redmine'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Redmine616,r';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT ALL ON redmine.* TO 'redmine'@'localhost';

mysql> exit;
Bye

Rubyのバージョンを複数管理出来るように、rbenvをインストールします。

# exit
$ sudo git clone https://github.com/sstephenson/rbenv.git /usr/local/src/.rbenv/
$ sudo -s

# echo 'export RBENV_ROOT="/usr/local/src/.rbenv"' >> /etc/profile.d/rbenv.sh
# echo 'export PATH="${RBENV_ROOT}/bin:${PATH}"' >> /etc/profile.d/rbenv.sh
# echo 'eval "$(rbenv init -)"' >> /etc/profile.d/rbenv.sh

# cat /etc/profile.d/rbenv.sh
export RBENV_ROOT="/usr/local/src/.rbenv"
export PATH="${RBENV_ROOT}/bin:${PATH}"
eval "$(rbenv init -)"

# source .bash_profile

一旦再起動します。

# reboot

もう一度サーバに接続してrootユーザにします。

% ssh -i "~/.ssh/artjunkie.pem" ec2-user@123.456.789.012
$ sudo -s

rbenvはちゃんと機能しているか確認をして、バージョンもチェックします。

# env | grep RBENV
RBENV_ROOT=/usr/local/src/.rbenv
RBENV_SHELL=bash
# rbenv --version
rbenv 1.2.0-70-g4fec76f

既存のリポジトリを複製しておきます。

# git clone https://github.com/sstephenson/ruby-build.git /usr/local/src/.rbenv/plugins/ruby-build

rbenv経由でRubyをインストールします。
2023/07/24 UPDATE
(バージョンは2.8.0 3.2.0以下じゃないとすすみません)
2.7.6 3.1.4があるのでそれにしましょう。

# rbenv install --list
3.0.6
3.1.4
3.2.2
jruby-9.4.3.0
mruby-3.2.0
picoruby-3.0.0
truffleruby-23.0.0
truffleruby+graalvm-23.0.0

# rbenv install -v 3.1.4
NOTE: to activate this Ruby version as the new default, run: rbenv global 2.7.6
# rbenv global 3.1.4
# rbenv rehash
# ruby -v
ruby 3.1.4p223 (2023-03-30 revision 957bb7cb81) [x86_64-linux]

Railsをインストールします。

# gem update --system
# gem install nokogiri -- --use-system-libraries
# gem install bundler -N
# gem install rails -N
# rbenv rehash
# rails -v
Rails 7.0.6

Redmineをインストールするフォルダを用意します。

# mkdir -p /opt/local/redmine/src

Passengerをインストールしたいけどメモリ不足で死ぬからスワップ領域展開します。
t2.micro は実メモリが 1 GBなので2 GBにします。

# dd if=/dev/zero of=/tmp/swap.img bs=1M count=2048
2048+0 レコード入力
2048+0 レコード出力
2147483648 バイト (2.1 GB) コピーされました、 31.4867 秒、 68.2 MB/秒
# chmod 600 /tmp/swap.img
# mkswap /tmp/swap.img
スワップ空間バージョン 1 を設定します。サイズ = 2 GiB (2147479552 バイト)
ラベルはありません, UUID=3f9a835a-b4c3-46eb-a96f-a0178d214127
# swapon /tmp/swap.img
# free
              total        used        free      shared  buff/cache   available
Mem:         988916      435104       61572         544      492240      414224
Swap:       2097148           0     2097148

Passengerをインストールします。
(時間がかかります)

# gem install passenger -N
# rbenv rehash
# passenger-install-apache2-module (すごい時間かかる)
Press Enter to continue, or Ctrl-C to abort. ←ENTER
 ‣ ⬢  Ruby
   ⬢  Python
   ⬢  Node.js ←一応これもスペースボタンでチェックしてENTER(全角だと反応しないよ)
   ⬡  Meteor

Press ENTER when you are done editing.  ←ENTER(約10分後に出るよ)
Press ENTER to continue. ←ENTER
Passenger® is a registered trademark of Phusion Holding B.V.
# passenger-install-apache2-module --snippet > /etc/httpd/conf.d/passenger.conf

スワップ領域収束しておきます。

# swapoff /tmp/swap.img
# rm -rf /tmp/swap.img

Passengerの既存設定に3行追記します。

$ vim /etc/httpd/conf.d/passenger.conf
<Directory "/opt/local/redmine/src/redmine-5.0.5/public">
  Require all granted
</Directory>
LoadModule passenger_module /usr/local/src/.rbenv/versions/3.1.4/lib/ruby/gems/3.1.0/gems/passenger-6.0.18/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
  PassengerRoot /usr/local/src/.rbenv/versions/3.1.4/lib/ruby/gems/3.1.0/gems/passenger-6.0.18
  PassengerDefaultRuby /usr/local/src/.rbenv/versions/3.1.4/bin/ruby
</IfModule>

# passenger-config --version
Phusion Passenger(R) 6.0.18

Redmineをダウンロードして展開します。

# cd /opt/local/redmine/src
# wget http://www.redmine.org/releases/redmine-5.0.5.tar.gz
# tar zxf redmine-5.0.5.tar.gz

database.ymlを修正してDB設定をします。

# cd redmine-5.0.5/
# cp config/database.yml.example config/database.yml
# vim config/database.yml

production:
  adapter: mysql2
  database: redmine
  host: localhost
  username: redmine
  password: "Redmine616,r"
  # Use "utf8" instead of "utfmb4" for MySQL prior to 5.7.7
  encoding: utf8mb4

マニフェストファイルに下記を記載します。

# mkdir -p app/assets/config
# touch app/assets/config/manifest.js
# vim app/assets/config/manifest.js
  //= link_tree ../images
  //= link_directory ../javascripts .js
  //= link_directory ../stylesheets .css

多分、手動でmysql.sockを作成する必要があります。
(不要みたいなので飛ばしてね)

# touch /var/lib/mysql/mysql.sock
# chown mysql:mysql /var/lib/mysql/mysql.sock

bundleをインストールします。

# bundle install --without development test
# bundle exec rake generate_secret_token
# RAILS_ENV=production bundle exec rake db:migrate
# RAILS_ENV=production REDMINE_LANG=ja bundle exec rake redmine:load_default_data
Default configuration data loaded.

httpdの設定をします。
(DocumentRootの部分を書き換えます)

# vim /etc/httpd/conf/httpd.conf
DocumentRoot "/opt/local/redmine/src/redmine-5.0.5/public"

redmineのディレクトリをapacheユーザが使えるようにします。

# cd /opt/local/redmine/src/
# chown -R apache. redmine-5.0.5
# service httpd restart
Redirecting to /bin/systemctl restart httpd.service

apacheの動作確認します。

# service httpd status
Redirecting to /bin/systemctl status httpd.service
● httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled; vendor preset: disabled)
   Active: active (running) since 火 2022-11-22 04:30:19 UTC; 11s ago
     Docs: man:httpd.service(8)
 Main PID: 3320 (httpd)
   Status: "Total requests: 0; Idle/Busy workers 100/0;Requests/sec: 0; Bytes served/sec:   0 B/sec"
   CGroup: /system.slice/httpd.service
           ├─3320 /usr/sbin/httpd -DFOREGROUND
           ├─3343 Passenger watchdog
           ├─3346 Passenger core
           ├─3356 /usr/sbin/httpd -DFOREGROUND
           ├─3357 /usr/sbin/httpd -DFOREGROUND
           ├─3358 /usr/sbin/httpd -DFOREGROUND
           ├─3359 /usr/sbin/httpd -DFOREGROUND
           └─3360 /usr/sbin/httpd -DFOREGROUND

11月 22 04:30:19 ip-172-31-33-200.ap-northeast-1.compute.internal systemd[1]: Starting ...
11月 22 04:30:19 ip-172-31-33-200.ap-northeast-1.compute.internal systemd[1]: Started T...
Hint: Some lines were ellipsized, use -l to show in full.

一応再起動してからIPにアクセスします。

# reboot

ブラウザを立ち上げて、IPを叩きます。
無事にredmineが立ち上がりましたか?

ログインID/パスワードは共に、adminなので、早く変更しましょう。

今後の予定

  • https:// で利用できるようにする

<編集中>Gmail のアカウントでメール配信設定

アプリパスワードを生成します。

https://myaccount.google.com/apppasswords

ここに生成の仕方を載せる予定。

その後、下記のように設定でGmailを使ってRedmineからメールが届くようになります。

$ ssh -i "~/.ssh/WebServer.pem" ec2-user@52.198.21.72
$ sudo -s

# cd /opt/local/redmine/src/redmine-5.0.5/config/
# cp configuration.yml.example configuration.yml
# vim configuration.yml

default:
  email_delivery:
    delivery_method: :smtp
    smtp_settings:
      enable_starttls_auto: true
      address: "smtp.gmail.com"
      port: 587
      authentication: :plain
      domain: 'smtp.gmail.com'
      user_name: 'examp@gmail.com'
      password: 'App-PassWord'

# service httpd restart

おすすめ