読者です 読者をやめる 読者になる 読者になる

Arch上のRedmineにGitを連携させた時に苦戦した部分のメモ

RedmineにGitを連携させた時に苦戦したのでメモ

環境はArchLinux

RedmineでGitを連携させる
ここでRedmineにgitを連携させようとしてdigest認証をしようとしたら、 AuthDigestProvider fileと怒られた。

ログとか見ても分からず、 systemctl status httpd をするとmod_authn_file.soをロードしろって言われているけど既にロードされている。 その場合は、 Apache モジュール mod_authn_dbm このドキュメントにAuthDigestPrividerはmod_auth_digestモジュールだ的なことが書いてあったので、
LoadModule auth_digest_module modules/mod_auth_digest.so をロードしたら行けた

それでも動かなかったらmod_cgiもロードする

あと、ベアリポジトリを作成する時に、

sudo -uhttp git init --bare --shared

で作成しないとパーミッションが無くてpushできなくなってしまう(今回はあまり関係無い気がするけど 未確認)

忘れそうなので追加でメモ (2015/07/30)

ここを参考に

$ cd project.git
$ mv hooks/post-update.sample hooks/post-update
$ chmod a+x hooks/post-update

を実行する

参考

Redmineに通知メールの設定をした時のメモ

Redmineで、通知メールが送信できるように設定したのでメモ

環境はArchLinux

メールの設定

今回は、Redmineと同サーバにPostfixをインストールし使用する
まず、Postfixのインストール

$ sudo pacman -S postfix

mailの設定はmail.mdの設定を確認

config/configuration.ymlのサンプルをコピーする

$ sudo -uhttp cp config/configuration.yml.example config/configuration.yml

config/configuration.yml に以下の行をアンコメントして編集

$ sudo vim config/configuration.yml
default:
    email_delivery:
        delivery_method: :smtp
        smtp_settings:
        address: "localhost"
        port: 25
        domain : redmine.hnron.net

既に default: と email_delivery: はアンコメントしてあるはずなので、その後に残りの行を追加するか、=== Simple SMTP server at localhostという項目がコメントアウトしてあるので、その部分をアンコメントする。
この時、email_deliveryが2箇所存在すると、エラーになるので注意

設定したらhttpdを再起動する

$ sudo systemctl restart httpd.service

特にポートとかは開放しなくておk

参考

RedmineにSSLを設定した時のメモ

忘れそうだったのでメモ

環境とか

  • ArchLinux
  • apache2.4

証明書を作成する

証明書の作成

オレオレ証明書をopensslで作る(詳細版)Add Star
こことか、
無料のSSL証明書StartSSLを活用する
こことかで証明書を作成する。

Apache側での設定

Moduleのアンコメント
LoadModule ssl_module modules/mod_ssl.so
LoadModule socache_shmcb_module modules/mod_socache_shmcb.so

をアンコメント

httpd.conf
Include conf/extra/httpd-ssl.conf

をアンコメント

extra/httpd-ssl.conf
DocumentRoot "/srv/http"                                                        
ServerName www.example.com:443                                                  
ServerAdmin you@example.com                                                     

DocumentRoot "/srv/redmine-3.0.3/public"
ServerName redmine.my.domain:443
ServerAdmin postmaster@my.domain

こんな感じで変更

証明書ファイルの指定

上で取得した証明書を extra/httpd-ssl.conf で指定する

# vim /etc/httpd/conf/extra/httpd-ssl.conf
SSLCertificateFile "/etc/httpd/conf/ssl/server.crt"
SSLCertificateKeyFile "/etc/httpd/conf/ssl/server.key"
FREAKとかPOODLE対策

ここを参考に

SSLCipherSuite     ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA
SSLHonorCipherOrder on

SSLProtocol All -SSLv2 -SSLv3

このパラメータを設定しました。

Redmine側の設定

管理 > 設定 > 全般 > プロトコル でHTTPSを選択。

強制的にhttpsじゃないと通信できなくする

この設定をすると強制的にhttpsを使用させることができる
もし、ページによって通常のHTTP通信をさせたい場合は、公式Guideに載っているのでそっちを参照
/srv/redmine-3.0.3/config/environments/production.rb
を編集し、ファイル内のendよりも前の行に、

config.force_ssl = true

を追加する。

参考

Redmineの設定メモ

日本語の最適化

既定の言語 と 名前の書式 の設定

日付時刻や通知メールの言語に影響がある。
左上の管理から
管理 > 設定 > 表示
デフォルトの言語を "Japanese(日本語)" に設定
ユーザ名の表示形式を "Admin Redmine" に設定
後はお好みで
設定が終わったら保存ボタンで保存

リポジトリブラウザで文字コードの自動判別

管理 > 設定 > 全般 > 添付ファイルとリポジトリのエンコーディング
以下を追加する。
utf-8,cp932,euc-jp

ホスト名、プロトコル、テキストの書式

管理 > 設定 > 全般
ホスト名とパス : ホスト名を入力 ここはメールで使用する
プロトコル : SSL/TLSを使用している場合HTTPSに
テキストの書式 : お好みに

Redmineの情報を外部から見られないように設定

管理 > 設定 > 認証
から、認証が必要にチェック

勝手にユーザ登録されないように設定

管理 > 設定 > 認証
ユーザーによるアカウント登録
無効か、手動でアカウントを有効化にしておく

バックアップ

バックアップが必要な場所は2箇所
MySQL内のRedmineのデータベース
Redmineのfilesディレクトリ
以下Redmine Guideに書いてあったスクリプト例

Database
/usr/bin/mysqldump -u <username> -p <password> <redmine_database> | gzip > /path/to/backup/db/redmine_`date +%y_%m_%d`.gz
Attachments
rsync -a /path/to/redmine/files /path/to/backup/files

[参考サイト]

ArchLinuxにVirtualboxをインストールする手順

2016/09/13 【追記】内容古いです。普通にArchWiki見たほうがいいです。

自分用のメモ 手順のみ
インストールだけしたい時用
詳しい説明はWikiを見て

必要なパッケージをインストール

# pacman -S virtualbox qt4 virtualbox-guest-iso
あとAURから
virtualbox-ext-oracle
をインストール

モジュールのロード

# depmod -a
# modprobe vboxdrv

# vim /etc/modules-load.d/virtualbox.conf
以下を記入

vboxdrv
vboxnetadp
vboxnetflt
vboxpci

vboxusersに追加

# gpasswd -a $USER vboxusers
再ログインする

virtualboxコマンドで起動。sudoとかしなくてもおk

ArchLinuxにRedmineを導入する手順・本番環境構築編

前回のでRedmineを構築出来たので、外部に公開するための本番環境を構築したいと思います。

Apacheで本番環境を構築するために必要なもの

  • passengerというApacheのモジュールを導入する必要がある。
  • httpd.confに設定を追加。

Passengerの導入

Phusion Passengerは、Railsアプリケーションを実行するためのApacheモジュール。

Passengerのインストール

gemでインストールします。
$ sudo gem install --no-user-install passenger

Apacheモジュールのビルドとインストール

$ sudo passenger-install-apache2-module
対話形式のスクリプトになっています。

ビルドが終了した後、こんな感じのメッセージが表示されるはず。

Almost there!(背景青に黄色文字)

    LoadModule passenger_module /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10/buildout/apache2/mod_passenger.so
    <IfModule mod_passenger.c>
        PassengerRoot /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10
        PassengerDefaultRuby /usr/bin/ruby
    </IfModule>

Enterを押すと次のメッセージ

Deploying a web application: an example

    <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>
  • Almost there!の方はそのまま。
  • Deploying a web applicationの方は、
    • /somewhere/publicの部分を今回Redmineを展開した場所に変更
    • www.yourhost.comを自分のURLに変更。
    • Require all grantedをアンコメント
      • Apacheのバージョンが2.4以上ならアンコメントしないとダメ。ちなみにArchの公式リポジトリからインストールできるApacheはバージョンが2.4以上なのでアンコメントしないと動かないので注意

変更するとこんな感じ

LoadModule passenger_module /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
    PassengerRoot /usr/lib/ruby/gems/2.2.0/gems/passenger-5.0.10
    PassengerDefaultRuby /usr/bin/ruby
</IfModule>

<VirtualHost *:80>
    ServerName [自分のURL]
    DocumentRoot /srv/redmine-3.0.3/public
    <Directory /srv/redmine-3.0.3/public>
        AllowOverride None
        Options -MultiViews
        Require all granted
    </Directory>
</VirtualHost>

変更したら、/etc/httpd/conf/httpd.confに書き込む
書き込む場所はどこでも大丈夫だけど、LoadModuleがずらずら書いてあるところの最後辺りに追加してあげるといいかも。

文法チェック

Apacheを起動する前に文法チェックをしておく
apachectl configtest
もし問題がなければ Syntax OK と表示される。
問題があれば行数と理由が表示される。

ApacheとMySQLの起動

$ sudo systemctl start httpd
$ sudo systemctl start mysqld
既に立ち上がっていた場合はrestartで

うまく起動出来たらenableしておく
$ sudo systemctl enable httpd
$ sudo systemctl enable mysqld

実際にアクセスしてみる

ブラウザでアクセスしてみる ユーザ名とパスワードは初期設定でadmin、adminとなっている。

エラーが出た場合
  • We're sorry, but something went wrong.
    • httpd.confにRailsEnv developmentを追加する。
    • 詳しくはここ
  • Internal error
    • 多分MySQLの起動し忘れ
  • Access forbidden!
    • httpd.confの設定がミスっている可能性がある。
    • 文法チェックがokな場合、ディレクトリ名を間違ったりしていないかチェック
    • もしくは、Apacheのバージョンが2.4以上の場合、Require all grantedのアンコメントし忘れ

その他知っておくと便利な情報

再起動の仕方

Apacheを再起動すると自動的にRailsアプリケーションも再起動されるけど、バーチャルホストを使用している場合とか、特定のRailsアプリケーションだけを再起動させたい場合、
$RAILS_ROOT/tmp/restart.txtというファイルを作成することで再起動できる。 中身は空でおk。

例えばRailsアプリケーションが/var/lib/rails/redmineにインストールされている場合、/var/lib/rails/redmine/tmp/restart.txtというファイルを作成してください。中身は空でかまいません。restart.txtを作成した後の最初のリクエストの際に、PassengerがRailsアプリケーションを再起動します。再起動が完了するとrestart.txtは削除されます。

Passengerのチューニング

httpd.confに設定する方法。バーチャルホストごとの設定は不可。

Apacheで生成するRailsインスタンス数を設定

RailsMaxPoolSize

デフォは20。
メモリが少ない場合に大きすぎるとメモリ不足でレスポンスが悪くなる。

Passenger Users Guide では、メモリ256MBのVPS環境では2、2GBのメモリを搭載したサーバでは30が推奨されています。

設定値以上リクエストがなかったらインスタンスを終了させる

RailsPoolIdleTime

デフォは120(秒)。
値が小さすぎると、インスタンスの生成・終了が頻繁になるのでレスポンスが悪くなる。
逆に大きすぎると必要以上に長時間メモリを専有される。

Passenger Users Guideでは、ユーザーのwebサイト上の平均滞在時間の2倍を推奨しています。例えば1回のRedmine上での平均的な作業時間が5分の場合、推奨設定値は600(秒)です。

参考サイト

Ruby, Rails
Redmine

ArchLinuxにRedmineを導入する手順・構築編

ArchLinuxにRedmineを構築したのでメモ

とりあえずRedmine自体の構築のみ
本番環境とSSL/TLSを利用する場合の設定は別に書きます

必要なもの

  • データベース
    • mysql(mariadb)とかsqliteとかperaconaとかお好みで選べるらしい
    • 今回はmariadbを使用する。
    • $ sudo pacman -S mariadb
  • webサーバ(Apache)
    • 今回はApacheを使用します。
    • $ sudo pacman -S apache
  • ImageMagick
    • 画像を表示させたりするやつ
    • $ sudo pacman -S imagemagick
  • git
    • Redmineと連携

リリースパッケージのダウンロードと展開

Redmineのサイトからダウンロード。
$ wget http://www.redmine.org/releases/redmine-3.0.3.tar.gz
$ wget http://www.redmine.org/releases/redmine-3.0.3.tar.gz.md5

md5でハッシュを確認しておく

$ md5sum redmine-3.0.3.tar.gz
> 493463.... 
$ cat redmine-3.0.3.tar.gz.md5
> 493463....

tarをお好みの場所に展開する。
自分は/srvに展開しました。
$ sudo tar fvxz redmine-3.0.3.tar.gz -C /srv/

データベースの用意

コマンドがmysqlとなっているが、あくまでmariadbはmysqlの実装なのでmysqlのコマンドが使える。

データベースの初期設定

デフォルトのテーブルのインストール

自分の環境だとこれをやらないと後でmysqld.serviceが起動できなくなってしまった。
ArchWikiのトラブルシューティングの項目に載っていた

# cd /usr
# mysql_install_db --user=mysql --ldata=/var/lib/mysql/

を実行

mysqlの起動

systemdでmysqlを起動してみる。
$ sudo systemctl start mysqld
うまく起動できたら起動時に実行されるようにしておく
$ sudo systemctl enable mysqld

データベースの初期化

セットアップスクリプトの実行
$ sudo mysql_secure_installation

rootのpassを聞かれるが、まだパスワードを設定していないのでそのままEnter
> Enter current password for root (enter for none) :
新しいrootのパスワードを設定するか聞かれるので"y"
> Set root password? [Y/n] : y
> New password: 設定したいパスワードを入力
> Re-enter new password: 設定したいパスワードを再入力
匿名ユーザーを削除する
> Remove anonymous users? [Y/n] : Enter
リモートからのrootログインを拒否
> Disallow root login remotely? [Y/n] : Enter
testテーブルを削除する。
testテーブルは誰でもアクセスできてしまう。セキュリティ的に消したほうがいいらしいので消す
> Remove test database and access to it? [Y/n] : Enter
権限テーブルをリロードする
> Reload privilege tables now? [Y/n] : Enter
設定は以上で終わり

データベースの文字コード

文字コードをUTF-8に変更します。
ArchWikiに載っていた方法だとうまく変更できなかったので他のサイトで見つけてきた方法で変更します。
ちなみに、RedmineはUTF-8に設定しておけば文字化けはしないそうです。

とりあえず先に現在の文字コードを確認
$ mysql -uroot -p
mysql> show variables like "chara%";

Variable_name Value
character_set_client latin1
character_set_connection latin1
character_set_database utf8
character_set_filesystem binary
character_set_results latin1
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

mysqlの設定ファイルを編集し、[client]と[mysqld]に次の行を追加
$ sudo vim /etc/mysql/my.cnf

[client]
default-character-set=utf8

[mysqld]
character-set-server=utf8

他の設定項目を見ると、アンダーバーとハイフンの2通りの設定項目がありますが、mysqlの設定ファイルの場合、どちらでも問題は無いようです。
ちなみに、default-character-set=utf8character-set-server=utf8は同じ意味だそうです。
詳しくはここ

もう一度確認してみます。
mysql> show variables like "chara%";

Variable_name Value
character_set_client utf8
character_set_connection utf8
character_set_database utf8
character_set_filesystem binary
character_set_results utf8
character_set_server utf8
character_set_system utf8
character_sets_dir /usr/share/mysql/charsets/

データベースユーザの作成

Redmineが使用するMySQLのユーザを作成します。

MySQLにログインし、次の3行を入力

CREATE DATABASE redmine CHARACTER SET utf8;
CREATE USER 'redmine'@'localhost' IDENTIFIED BY '[パスワード]';
GRANT ALL PRIVILEGES ON redmine.* TO 'redmine'@'localhost';

データベースの設定

"production"環境用のデータベース設定をする。
Railsではproduction、development、testなどの本番環境や開発環境で環境をわけれるらしい?
productionが本番環境用で、developmentは開発環境
違いはdevelopmentはある程度のエラーは許容するみたい

ここでは、一旦Redmineのデータベースの設定を行います。
実際のテーブルとかは後で作成します。

config/database.ymlの作成

Redmineの展開ディレクトリに移動して
$ sudo cp config/database.yml.example config/database.yml 設定ファイルの編集

# vim config/database.yml
    production:
        adapter: mysql2
        database: redmine
        host: localhost
        username: redmine
        password: "[パスワード]"
        encoding: utf8

bundlerのインストール

インストール

$ sudo gem install --no-user-install bundler
ArchLinuxでは、デフォルトではgemはシステム全体ではなく、個別にインストールされるようになっている。
--no-user-installオプションを追加することで、システム全体(/usr/lib/ruby/gems/)にインストールされる

gemのインストール

Redmineの展開したディレクトリの中で
$ bundle install --without development test postgresql sqlite
$ sudo -uhttp bundle install --without development test postgresql sqlite
今回はMySQLを使用するので、postgresqlとsqliteのgemを省略します。
ImageMagickをインストールしていない場合は--withoutオプションにrmagickを追加します。
インストールしている場合、エラーが出ることがあるそうです。
その場合はこことかが参考になりそうです

bundleコマンドは基本的にはsudoを使用しなくて問題ないみたいです。
sudoでbundleを使用したら怒られました
root権限が必要なときはその時にパスワードを求めてくるそうです。

セッションストア秘密鍵の生成

Redmineの展開ディレクトリで下記コマンドを実行
$ sudo rake generate_secret_token

データベース上にテーブルを作成

Redmineの展開ディレクトリに移動

データベースにテーブルを作成

テーブルとRedmineの管理者アカウントが作成される
$ RAILS_ENV=production rake db:migrate

デフォルトデータをデータベースに登録

デフォルトのロール、トラッカー、ステータス、ワークフロー、列挙項目がロードされる 使用言語を聞かれるのでjaと解答
$ RAILS_ENV=production rake redmine:load_default_data

パーミッションの設定

Redmineの展開ディレクトリ内で、
$ sudo mkdir tmp public/plugin_assets
$ sudo chown -R http:http [Redmine全体]
$ sudo chmod -R 755 files log tmp public/plugin_assets

ちなみにRedmine Guideによると、

Railsアプリケーションのディレクトリ($RAILS_ROOT)および$RAILS_ROOT以下のファイル・ディレクトリのオーナーは、root以外としてください。 Passengerでは、root権限でRailsアプリケーションを動かすことはできません。Railsアプリケーションが動作するユーザーは$RAILS_ROOT/config/environment.rbのオーナーとなりますが、environment.rbがrootの場合はnobodyユーザーで動作します。このとき、オーナーがrootである$RAILS_ROOT/logディレクトリや$RAILS_ROOT/tmpディレクトリに書き込みができず、アプリケーションが動作しないことがあります。

rootだとダメみたいです。

構築できたか確認

うまく構築できたか一度確認します。
$ sudo ruby script/rails server webrick -e production
script/railsは無いとか怒られたんでbin/railsを使用します。
$ sudo ruby bin/rails server webrick -e production
外部のVPSなどで起動する場合、そのVPSのIPをオプションで設定してあげる必要があります。
$ sudo ruby bin/rails server webrick -e production -b 157.7.53.36

WEBrickを起動して、http://[ホスト名]:3000/ にアクセスするとRedmineが開けるはずです。
(ポートの開け忘れに注意!)

WEBrickはRedmine Guideによると、

注意: Webrickは通常は開発時に使用すものであり、通常の運用には適していません。動作確認以外には使用しないでください。本番運用においてはPassenger (mod_rails)、FCGI、またはRackサーバ(Unicorn, Thin, Puma, hellipなど)の利用を検討してください。

とのことなので、本番環境を何で動かしゃいいのかググった結果、 ArchWikiに本番環境はApacheにPassengerを導入したものでいいみたいなことが書いてあったので、そうしたいと思います。

本番環境の構築と、設定などは次の記事で書きたいと思います。

ちなみにWEBrickでも login: admin password: admin でログインして設定変更とかは出来ます。

[参考サイト]

MySQL