AmazonEC2 上に、Redmine 2.6.5 を構築したメモ
2017/6/15 : 流石に陳腐化したので AMI は消しました。
AMI 好きに使って
下記で作った AMI を共有しました。好きに使って。
当たり前ですが、バージョンアップとか色々あっても保証しないっすよー
ami-4001ac40
メールサーバは立ててないので、ご自分で立てて運用してください。
こいつは何よ?
普通に入れても発狂したくなる Redmine を Amazon EC2 上に構築したメモ。 教師はこれバージョンはあえて 2.6.5 を入れる。 何で今更こんな古い物を入れるのかってーと、BackLogsが 2.3.1 までしか対応していないのと、2.6.3 で動かしたという記事を見つけたため。
BackLogs は有志で 3.0.x 対応してる臭いが、公式はだんまりしてるので、とりあえず現状は動かせるもので動かそうって腹。
ベースは Amazon Linux AMI 2015.03 (HVM), SSD Volume Type を選択。一番基礎っぽいしね。
sudo yum update
直後がこんな感じ。
$ ruby --version ruby 2.0.0p645 (2015-04-13) [x86_64-linux] $ gem -v 2.0.14
公式 には、Redmine2.x は Ruby 2.2↑が未サポートなので、このまま使う。
周辺サーバ突っ込もうか
$ sudo yum install httpd ... ==================================================================================================================================================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ==================================================================================================================================================================================================================================== インストール中: httpd x86_64 2.2.29-1.5.amzn1 amzn-main 1.2 M 依存性関連でのインストールをします: ... $ sudo yum install mysql-server mysql-devel ... ==================================================================================================================================================================================================================================== Package アーキテクチャー バージョン リポジトリー 容量 ==================================================================================================================================================================================================================================== インストール中: mysql-devel noarch 5.5-1.6.amzn1 amzn-main 2.7 k mysql-server noarch 5.5-1.6.amzn1 amzn-main 2.8 k 依存性関連でのインストールをします:
MySQL の言語はデフォでは使えないので、/etc/my.cnf
弄って
[mysqld] # 略 character-set-server=utf8 [mysql] default-character-set=utf8
を追加。
そしたら sudo service mysqld start
でサービス開始。sudo chkconfig mysqld on
で自動起動も入れておく。
Redmine 用のDBアカウントも入れておく。
$ mysql -uroot mysql> create database db_redmine default character set utf8; mysql> grant all on db_redmine.* to user_redmine@localhost identified by 'PutYourPassword';
Redmine に使うツールを入れ始める。
$ sudo yum groupinstall "Development Tools" $ sudo yum --enablerepo=epel install ruby-devel mysql-devel ImageMagick ImageMagick-devel ipa-gothic-fonts
ipa フォントとかは、pdf 操作で必要なんだけど、epel にしか無いのでそこから入れる。
Redmine インストール開始
$ wget http://www.redmine.org/releases/redmine-2.6.5.tar.gz $ tar xvf redmine-2.6.5.tar.gz $ sudo mv redmine-2.6.5 /var/lib/redmine
で redmine 本体をデプロイ。
cd /var/lib/redmine $ bundle install --without development test /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require': cannot load such file -- io/console (LoadError) from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require' from /home/ec2-user/.gem/ruby/2.0/gems/bundler-1.10.5/lib/bundler/vendor/thor/lib/thor/shell/basic.rb:2:in `<top (required)>' from /usr/share/ruby/vendor_ruby/2.0/rubygems/core_ext/kernel_require.rb:55:in `require' 以下略
いきなりか ruby よ。相変わらず最悪なエコシステムだなw ついでに Rails 3.2.22 を入れる(Remine 2.6.x は rails 3.2 依存のため)。
難しい所なのだが、bundler の管轄(Gemfile)の記述でバージョン問題起こすと、そもそもスタックなしでエラーが表示される。
その時は Gemfile を必死に修正する必要があるのだが、今回の様にスタックが出る場合、そもそも Gemfile に書いてないライブラリの問題。
この場合は gem コマンドで入れれば直る場合が多い(ただし、開発者が Gemfile 記述漏れとかで実はバージョン依存だと地獄を見る事もある)
gem install rails -v '3.2.22'
尚、検証して無いが、rails4.x を既に入れてしまった環境の場合、gem uninstall railties -v '4.0.0'
で削除しないと、rails4 がデフォルトで動いて地獄を見るそうな。
$ gem install io-console $ bundle install --without development test Fetching: io-console-0.4.2.gem (100%) Building native extensions. This could take a while... Successfully installed io-console-0.4.2 ...以下略
よし入った。
mv config/database.yml.example config/database.yml vi config/database.yml
production: adapter: mysql2 database: db_redmine host: localhost username: user_redmine password: "PutYourPassword" encoding: utf8
同様に設定も
mv config/configuration.yml.example config/configuration.yml vi 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
まぁそのままだよね。
$ bundle exec rake generate_secret_token Could not find gem 'mysql2 (~> 0.3.11) ruby' in any of the gem sources listed in your Gemfile or available on this machine. Run `bundle install` to install missing gems.
DB 設定に対応したバンドルが足らねーよって言われた…
$ bundle install --without development test Installing mysql2 0.3.18 with native extensions 略 $ bundle exec rake generate_secret_token $
そしたらラスト
$ bundle exec rake db:migrate RAILS_ENV=production
正常終了したらOK。
失敗した時は、conf/database.xml
の設定に間違いが無いか見直すと良さげ。
(自分はここで躓いてないので、何か出たとしてもわからん)
Passenger 突っ込む
Rails アプリを Apache とかのサーバ経由で動かすためのミドルウェアと思えばいい。
$ gem install passenger --no-rdoc --no-ri $ passenger-install-apache2-module
後は画面の指示に従えば良さそう。
Installation instructions for required software * To install Curl development headers with SSL support: Please install it with yum install libcurl-devel * To install Apache 2 development headers: Please install it with yum install httpd-devel * To install Apache Portable Runtime (APR) development headers: Please install it with yum install apr-devel * To install Apache Portable Runtime Utility (APU) development headers: Please install it with yum install apr-util-devel If the aforementioned instructions didn't solve your problem, then please take a look at the Users Guide: /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.13/doc/Users guide Apache.html https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html
こんな風に言われるので、順に実行。その上で、再度 passenger-install-apache2-module を実行すると。
Compiling Phusion Passenger works best when you have at least 1024 MB of virtual memory. However your system only has 996 MB of total virtual memory (996 MB RAM, 0 MB swap). It is recommended that you temporarily add more swap space before proceeding. You can do it as follows: sudo dd if=/dev/zero of=/swap bs=1M count=1024 sudo mkswap /swap sudo swapon /swap See also https://wiki.archlinux.org/index.php/Swap for more information about the swap file on Linux. If you cannot activate a swap file (e.g. because you're on OpenVZ, or if you don't have root privileges) then you should install Phusion Passenger through DEB/RPM packages. For more information, please refer to the manual, section "Installation": /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.13/doc/Users guide Apache.html https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html
動かす前にあぶねーからスワップ作っとけと…
Ctrl + C
でプロセスを一旦止めて、上記コマンドでスワップを作り、ぞの上で再チャレンジ。
スワップ作る途中で、6G がオススメだぜとか言われるが無視☆
Please edit your Apache configuration file, and add these lines: LoadModule passenger_module /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.13/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.13 PassengerDefaultRuby /usr/bin/ruby2.0 </IfModule> After you restart Apache, you are ready to deploy any number of web applications on Apache, with a minimum amount of configuration! Press ENTER when you are done editing. -------------------------------------------- Validating installation... * Checking whether this Passenger install is in PATH... ✓ * Checking whether there are no other Passenger installations... ✓ * Checking whether Apache is installed... ✓ * Checking whether the Passenger module is correctly configured in Apache... (!) You did not specify 'LoadModule passenger_module' in any of your Apache configuration files. Please paste the configuration snippet that this installer printed earlier, into one of your Apache configuration files, such as /etc/httpd/conf/httpd.conf. Detected 0 error(s), 1 warning(s). Press ENTER to continue. -------------------------------------------- Deploying a web application: an example Suppose you have a web application in /somewhere. Add a virtual host to your Apache configuration file and set its DocumentRoot to /somewhere/public: <VirtualHost *:80> ServerName www.yourhost.com # !!! Be sure to point DocumentRoot to 'public'! DocumentRoot /somewhere/public <Directory /somewhere/public> # This relaxes Apache security settings. AllowOverride all # MultiViews must be turned off. Options -MultiViews # Uncomment this if you're on Apache >= 2.4: #Require all granted </Directory> </VirtualHost> And that's it! You may also want to check the Users Guide for security and optimization tips, troubleshooting and other useful information: /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.13/doc/Users guide Apache.html https://www.phusionpassenger.com/documentation/Users%20guide%20Apache.html Enjoy Phusion Passenger, a product of Phusion (www.phusion.nl) :-) https://www.phusionpassenger.com Phusion Passenger is a trademark of Hongli Lai & Ninh Bui.
と言う事で、上から順に対応。
/etc/httpd/conf.d/passenger.conf
を作成して
LoadModule passenger_module /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.13/buildout/apache2/mod_passenger.so <IfModule mod_passenger.c> PassengerRoot /home/ec2-user/.gem/ruby/2.0/gems/passenger-5.0.13 PassengerDefaultRuby /usr/bin/ruby2.0 </IfModule> Header always unset "X-Powered-By" Header always unset "X-Rack-Cache" Header always unset "X-Content-Digest" Header always unset "X-Runtime" PassengerMaxPoolSize 20 PassengerMaxInstancesPerApp 4 PassengerPoolIdleTime 3600 PassengerHighPerformance on PassengerStatThrottleRate 10 PassengerSpawnMethod smart RailsAppSpawnerIdleTime 86400 PassengerMaxPreloaderIdleTime 0
これで、問題なければモジュールが読み込まれる筈。
$ sudo service httpd start $ sudo chkconfig httpd on
Passenger を apache に設定
$ sudo chown -R apache:apache /var/lib/redmine
Passenger のインストール時には、VirtualHost の設定が書かれていたが、そんな事は知らん(Redmine 専用サーバ)なので、/etc/httpd.conf
を直編集。
sudo vi /etc/httpd/conf/httpd.conf
で、
# DocumentRoot "/var/www/html" DocumentRoot "/var/lib/redmine/public"
そしたら
$ /etc/init.d/httpd configtest Syntax OK $ service httpd restart
でとりあえず動かそうとしたわけだが、
We're sorry, but something went wrong. We've been notified about this issue and we'll take a look at it shortly.
ブラウザ上表示される。で、何が悪いか見ようとしても、そもそも Production 動作でそんなもの見せねーよとありがたいお言葉。
仕方ないので、conf/database.xml
の development に記述を入れた上、/etc/httpd/conf.d/passenger.conf
にも RailsEnv development
を突っ込む。
そしてでてくるエラーメッセージ。
cannot load such file -- bundler/setup
はぁ?って感じだが、どうも passenger から色々依存が解決できないらしい。
$ sudo gem install bundler --no-rdoc --no-ri $ sudo gem install passenger --no-rdoc --no-ri $ export ORIG_PATH="$PATH" $ sudo -s -E $ export PATH="$ORIG_PATH" $ passenger-install-apache2-module
なので、各種 sudo で書き出して、パスを root ユーザにまで引き継いだ上で、モジュールビルド。
で、起動すると
It looks like Bundler could not find a gem. Maybe you didn't install all the gems that this application needs. To install your gems, please run: bundle install
どうも読み込みパスが違うらしい。
上記のまま、ルート権限をログアウトせず(つまりパスを引き継いだまま)に
$ gem install io-console $ bundle install --without development test $ service httpd restart
これで動いた。
相変わらずかつての MS と等しく dll 地獄、もしくは Java の Jar 地獄をひきずるクソッタレな環境だぜい…。