1
3

More than 3 years have passed since last update.

Redmineプラグイン開発環境を作成する(MySQL)

Last updated at Posted at 2020-04-16

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のチューとリアルでもやっておけばよかったと今更後悔している。そのうちテストコードが書けるようになったら、テストコードの記事も書きたい。

1
3
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3