Redmineのプラグインを保守するにあたって、ノートPCへRedmineの環境を作成しました。今までbitnamiのWindows用インストーラーを使って開発環境を作成してきたのですが、正直しんどくなってきました。
何度かLinuxのサーバーをVM上で作成して環境作ってみたものの、失敗に失敗を重ねて挫折したままでしたが、コロナの影響もあり勤務時間が多少短くなったのを機に、開発用環境づくりに再チャレンジしています。
当記事は、その時の手順を記録した、個人的な備忘記事です。今後何度かチャレンジして修正していくつもり。
ちなみに、私はlinuxをほとんど触ったことがない初心者。色々webで調べてもすべてが呪文のように見えてしまうレベルです。
今後この記事を修正したい点
-
CentOSのインストール方法を詳細化
なんとなく上手くできただけっぽいので手順をちゃんと残しておきたい -
ファイアーウォールの設定とMySQLの設定
bitnamiのVMを使ってredmineをノートPCにインストールした際に、MySQLを外部アクセスできるようにできなかったため要勉強。
利用した環境、ツール
Windows10 home 64bit (AMD)
Oracle VM Virtualbox
CentOS8(CentOS-8.1.1911-x86_64-dvd1.iso)
Redmine4.1
Ruby2.7
参考にしたサイト
初期設定 : ファイアウォール
初期設定 : SELinux
https://www.server-world.info/query?os=CentOS_8&p=initial_conf&f=2
[CentOS] CentOS8.1を新規インストールしてRedmine4.1環境作成
https://vertys.net/centos-install-newly-and-create-redmine-environment/
CentOS8のインストール
サーバーはOracle VM VirtualBoxを使って作りました。
最小構成で作成しています。これは難なくクリア。
CentOS8の諸設定
上記のサイトを参考に、SELinuxの無効化、ファイアーウォールの無効化をしました。
開発目的で利用するため、かつ、MySQLをゲストからアクセスしていじりたかったので、設定が面倒そうなファイアーウォールを無効化しました。もう少し時間があったら、ちゃんと設定したい。
CentOS8の最新化
Teratermでサーバーにrootでログイン
cd ..
yum update
開発用ツールのインストール
ここからは参考にしたサイトと同じ手順で実施。
dnf -y install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm
dnf -y install https://rpms.remirepo.net/enterprise/remi-release-8.rpm
dnf -y groupinstall "Development Tools"
dnf -y install openssl-devel readline-devel zlib-devel curl-devel libffi-devel
Subversionのインストール
Redmineをインストールする際にSubversionを使うため。
dnf module -y install subversion
MySQLのインストール
dnf -y install @mysql:8.0 mysql-devel
Apacheのインストール
dnf -y install httpd httpd-devel
Rubyのインストール
このパートは結構時間がかかりました。
curl -O https://cache.ruby-lang.org/pub/ruby/2.7/ruby-2.7.0.tar.gz
tar xvf ruby-2.7.0.tar.gz
cd ruby-2.7.0
./configure --disable-install-doc
make
make install
インストール後の確認
ruby -v
ruby 2.7.0p0 (2019-12-25 revision 647ee6f091) [x86_64-linux]
と出ればOK
Bundllerのインストール
gem install bundler
MySQLの設定
systemctl enable mysqld
systemctl start mysqld
mysql_secure_installation
聞かれた質問には以下のように回答していく
Press y|Y for Yes, any other key for No: y
※VALIDATE PASSWORDを変更するのでy
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 0
※開発で使いたいだけなのでLOW
New password:(設定したいパスワードを入力)
Re-enter new password:(設定したいパスワードを再入力)
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
※設定したパスワードで続行するのでy
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
※匿名ユーザーは不要なのでy
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
※rootでリモートログインはしないのでy
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
※テスト用のデータベースは不要なのでy
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
※ここまでの設定を反映させたいのでy
Redmine用MySQLのユーザー作成と権限付与
MySQLにログインしてみます。上記で設定したPASSWORDを入力になります
mysql -u root -p
redmineが利用するユーザーを作成します。ここで設定したパスワードは後のどRedmineの設定で使います。
CREATE USER 'redmine'@'localhost' IDENTIFIED BY 'DBのパスワード';
権限を付けます。このユーザーがアクセスするのは仮想サーバー内からだけ。外部からアクセスするためのユーザーは後で作成します。
GRANT ALL ON *.* TO 'redmine'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
CREATE DATABASE redmine CHARACTER SET utf8mb4;
exit
Redmineのインストール
SubversionのレポジトリからRedmineを取得する。
cd /var/lib
mkdir redmine
svn co https://svn.redmine.org/redmine/branches/4.1-stable /var/lib/redmine
RedmineのDBアクセスの設定ファイルを作成する
vi /var/lib/redmine/config/database.yml
以下の内容を追記
production:
adapter: mysql2
database: redmine
host: localhost
username: redmine
password: "DBのパスワード"
encoding: utf8mb4
依存パッケージのインストール
cd /var/lib/redmine
bundle install --without development test --path vendor/bundle
Redmine関連の初期設定
bundle exec rake generate_secret_token
RAILS_ENV=production bundle exec rake db:migrate
MigrationしたときにWarningが結構な数出たが先に進む。
Passengerのインストール
gem install passenger -v 5.1.12
passenger-install-apache2-module --auto --languages ruby
Apacheの設定
Redmine用のApche設定に必要な情報を以下のコマンドで表示させる
passenger-install-apache2-module --snippet
設定ファイルの作成
vi /etc/httpd/conf.d/redmine.conf
スニペットでの内容とともに以下の記述を追記
Alias /redmine /var/lib/redmine/public
<Location /redmine>
PassengerBaseURI /redmine
PassengerAppRoot /var/lib/redmine
</Location>
<Directory "/var/lib/redmine/public">
Require all granted
</Directory>
LoadModule passenger_module /usr/local/lib/ruby/gems/2.7.0/gems/passenger-5.1.12/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/lib/ruby/gems/2.7.0/gems/passenger-5.1.12
PassengerDefaultRuby /usr/local/bin/ruby
</IfModule>
systemctl enable httpd
systemctl start httpd
所有者apacheへ変えておく
chown -R apache:apache /var/lib/redmine
Redmineの確認
http://(サーバのIPアドレス)/redmine
で画面が表示されるか確認。
ユーザー:admin
pass:admin
ログイン後は好きなように設定変更
開発しているプラグインの導入
開発しているプラグインを導入する。migrationをする際にwarningがいっぱい出る。
cd /var/lib/redmine/plugins
git clone https://github.com/momibun926/redmine_issue_evm /var/lib/redmine/plugins/redmine_issue_evm
bundle install
rake redmine:plugins:migrate NAME=redmine_issue_evm RAILS_ENV=production
chown -R apache:apache /var/lib/redmine
Gitの設定
コミットした時のユーザーが、OSのログインユーザーになってしまうため、Gitの設定をしておく。
git config --global user.email e-mailアドレス
git config --global user.name "ユーザー名"
MySQLを外部からアクセスできるようにする
プラグイン作成時にDBの値をいじりながら挙動を確認したいことがあるので、MySQLにホスト側(Window10)から接続したい。使っているツールはA5MK2です。
MYSQLにrootで入ります。
mysql -u root -p
外部アクセス用のユーザーを作成。本来は%のところをノートPCのIPで指定したほうが良いのだと思う。
CREATE USER 外部接続ユーザー IDENTIFIED BY '外部接続ユーザーのためのパスワード';
grant all privileges on *.* to 外部接続ユーザー@'%';
これで、ホスト側から外部接続のユーザー、パスワード使ってアクセスが可能になる。
ファイアーウォールを使っている場合は、別途ファイアーウォールの設定も必要。
Visual studio codeでリモート接続
ssh接続用の設定に以下のようなエントリを追加して接続
Host Redmine4.1-CentOS8(MySql)
HostName CentOSのIP
Port 22
User アクセスするユーザー
Redmineの再起動
開発しているときは度々Redmineを再起動する必要が出てくるので以下コマンドをVisualStudioCodeのターミナルで入力してブラウザをリロードすると再起動する。
touch /var/lib/redmine/tmp/restart.txt
これで、コーディング、確認を繰り返しながら開発できる。
本来ならば、テストコード書きながらテスト実行が良いのですが、Redmineのプラグインならこの繰り返しで何とかなりそう。
ただし、テストコードがないとリファクタリングや機能の改善後のデグレテストが非常に大変。railsのチューとリアルでもやっておけばよかったと今更後悔している。そのうちテストコードが書けるようになったら、テストコードの記事も書きたい。