ArchLinuxにownCloudを構築した
ArchLinuxにownCloudを構築したのでメモ
ファイル共有をするのにRedmine上でのファイル共有だと何かと不便なのでownCloudを構築してみた
ownCloudを選択した理由はプラギンでRedmineと連携でユーザ管理が出来るっぽかったので
肝心の連携云々はまだやってないです(そのうちやります&書きます)
ということでRedmineを構築してあるサーバと同じサーバに構築します
一応本番環境鯖なので、作業は一度ローカルのコンテナでシミュレートしてから本番環境を構築しました
環境とか
- ArchLinux
- ownCloud 8.1.0-1
- Apache 2.4.16-1
- postgresql 9.4.4-2 最近Postgresqlに乗り換えました(Redmineの方もMySQLからPostgresqlにマイグレーションしたい...)
phpの設定
まず、phpのインストール
$ sudo pacman -S php php-apache
mpmの変更。これをしないとphpが上手く動作してくれない。
LoadModule mpm_event_module modules/mod_mpm_event.so #コメントアウト LoadModule mpm_prefork_module modules/mod_mpm_prefork.so #アンコメント or 追加
以下の2行を追加する
LoadModule php5_module modules/libphp5.so #Loadmoduleリストの最後に追加 Include conf/extra/php5_module.conf #Includeリストの最後に追加
そしてapacheを再起動
$ sudo systemctl restart httpd
owncloudのインストールと設定
owncloudのインストール
$ sudo pacman -S owncloud
phpのエクステンションを入れる
$ sudo pacman -S php-intl php-mcrypt
DB用のパッケージもインストール
今回はPostgresqlを使用するので、php-pgsqlをインストールする。
MySQLの場合は違うパッケージなので注意
$ sudo pacman -S php-pgsql
/etc/php/php.iniの編集
以下をアンコメント
gd.so iconv.so xmlrpc.so zip.so bz2.so curl.so intl.so mcrypt.so openssl.so # 以下DBにpostgresを使用する場合 pdo_pgsql.so pgsql.so
Apacheにowncloudの設定を記入
owncloudの設定をApacheのextraディレクトリにcp
$ sudo cp /etc/webapps/owncloud/apache.example.conf /etc/httpd/conf/extra/owncloud.conf
httpd.confのファイルの最後に以下の1行を追加
Include conf/extra/owncloud.conf
このままではRedmineと競合してしまうのでownCloudをサブディレクトリで動くように変更しておく。 VirtualHostの部分をコメントアウト
$ sudo vim /etc/httpd/conf/extra/owncloud.conf #<VirtualHost *:80> # ServerAdmin foo@foofarm.com # DocumentRoot /usr/share/webapps/owncloud # ServerName owncloud.foo.com # ErrorLog /var/log/httpd/owncloud.foo.info-error_log # CustomLog /var/log/httpd/owncloud.foo.info-access_log common #</VirtualHost>
また、httpd.confで、mod_dav と mod_dav_fs がLoadされている場合、コメントアウトしておかないとownCloudの実装と衝突する可能性があるらしい。
owncloudディレクトリの所有者の変更
$ sudo chown -R http:http /usr/share/webapps/owncloud/
postgresqlのインストールと設定
postgresqlのインストール
$ sudo pacman -S postgresql
Postgresqlの初期設定
まず、
$ sudo su - postgres
でpostgresユーザにsuして、
postgres$ initdb --locale en_US.UTF-8 -E UTF8 -D '/var/lib/postgres/data'
を実行。postgresqlをstart&enable。
$ sudo systemctl start postgresql.service $ sudo systemctl enable postgresql.service
/etc/php/php.ini
一応/etc/php/php.iniの確認
# さっきアンコメントした extension=pdo_pgsql.so extension=pgsql.so # 以下のように変更。Archはデフォルトでこの設定になっているはず。 [PostgresSQL] pgsql.allow_persistent = On pgsql.auto_reset_persistent = Off pgsql.max_persistent = -1 pgsql.max_links = -1 pgsql.ignore_notice = 0 pgsql.log_notice = 0
ownCloud用のユーザとDBの作成
postgresqlに接続
$ psql -hlocalhost -Upostgres
以下のSQLを実行
CREATE USER username WITH PASSWORD 'password'; CREATE DATABASE owncloud TEMPLATE template0 ENCODING 'UNICODE'; ALTER DATABASE owncloud OWNER TO username; GRANT ALL PRIVILEGES ON DATABASE owncloud TO username; \q
ここで作成するユーザは、ownCloudがDBに接続するために使用するユーザ。
ユーザ名は何でもおk。ユーザ名やデータベース名はこの次にブラウザ上で設定する。
apacheを再起動して接続出来るか確認
$ sudo systemctl restart httpd.service
アクセスしてみる
http(s)://example.org/owncloud/ もしくは http(s)://example.org/owncloud/index.php
...org/owncloud/ ← ここの「/」をつけないと開けないので注意
セットアップ画面が表示されたらさっき作成したユーザ名とDB名を入力して完了!
ログのtimezoneを変更する
デフォルトだとログに記録される時間がUTCになっている
ので、変更。
/etc/webapps/owncloud/config/config.php
の
'logtimezone' => 'UTC', を 'logtimezone' => 'Asia/Tokyo',
に変更
セキュリティ&セットアップ警告
ログインに成功したら、右上のプルダウンから設定を開く。
設定画面の一番上に「セキュリティ&セットアップ警告」という項目があるのでその部分を解決していく。
「/dev/urandom は PHP から読み取ることができず、この状態はセキュリティの観点からおすすめできません。より詳しい情報については、documentation を参照ください。」
英語版のArchWikiのowncloudのページにphp.ini
ファイルのopen_basedir
に:/dev/urandom
を追加しろと書いてあったので
open_basedir = /srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/:/dev/urandom
こんな感じに変更してみたはいいけど警告が消えない。
四苦八苦しているとgithubに似たような警告メッセージが出ている人がいた。
https://github.com/owncloud/core/issues/17465
The addition of /dev/urandom needed to be in php_admin_value open_basedir within the vhost file, and not within /etc/php/php.ini
どうやら/etc/php/php.ini
ではなく、/etc/httpd/conf/extra/owncloud.conf
の方に書いてあげなきゃいけなかったみたい
確かに /etc/httpd/conf/extra/owncloud.conf
を見てみると
<Directory /usr/share/webapps/owncloud/> Options FollowSymlinks AllowOverride all Require all granted # ↓これ php_admin_value open_basedir "/srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/owncloud/:/etc/webapps/owncloud" </Directory>
確かにこっちにもopen_basedirがある
ので、ここを
php_admin_value open_basedir "/srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/owncloud/:/etc/webapps/owncloud:/dev/urandom"
に変更してapacheを再起動すると警告が消えているはず
/etc/php/php.ini
の方には追加しなくてもおk。
「The "Strict-Transport-Security" HTTP header is not configured to least "15768000" seconds. For enhanced security we recommend enabling HSTS as described in our security tips.」
The "Strict-Transport-Security" HTTP header is not configured to least "15768000" seconds. For enhanced security we recommend enabling HSTS as described in our security tips.
って怒られる場合は公式ドキュメントを参考に、
<VirtualHost *:443> ServerName cloud.owncloud.com Header always add Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" </VirtualHost>
こんな感じで変更。
自分の環境だと、/etc/httpd/conf/extra/httpd-ssl.conf
を
<VirtualHost _default_:443> Header always add Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" </VirtualHost>
というような感じで変更。
もしRedmineとownCloudでVirtualhostを分けるなら
<VirtualHost redmine.mydomain.net:443> ... Header always add Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" </VirtualHost> <VirtualHost owncloud.mydomain.net:443> ... Header always add Strict-Transport-Security "max-age=15768000; includeSubDomains; preload" </VirtualHost>
みたいにすれば行けると思う
このStrict-Transport-Securityは、httpでアクセスしてきたら強制的にhttps通信にするものらしい
Archだとmod_headersがデフォルトでLoadされているけどそれ以外の環境だったらLoadmoduleされているか確認
「メモリキャッシュが設定されていません。パフォーマンスを向上するために、可能であれば memcache を設定してください。 より詳しい情報については、documentation を参照してください。」
そのうち書きます
その他logとかエラーなど
ログの Array 関連
「Array to string conversion at /usr/share/webapps/owncloud/lib/private/template/functions.php#36」
設定画面のログを見ると、
Array to string conversion at /usr/share/webapps/owncloud/lib/private/template/functions.php#36
と表示されていて、ググってたらgithubで見つけた
https://github.com/owncloud/core/issues/17468
https://github.com/owncloud/core/issues/17782
ownCloudの8.1でのバグっぽい?
「array_key_exists() expects parameter 2 to be array, null given at /usr/share/webapps/owncloud/settings/controller/appsettingscontroller.php#192 」
こっちは8.1のバグみたい
https://github.com/owncloud/core/issues/17433
https://github.com/owncloud/core/pull/17606
github上では修正されているみたいだから、Archのパッケージが更新されるまで待つしか無いっぽいかな
ログの is_file()... 関連
こんな感じのエラーが何個か出るかも
is_file(): open_basedir restriction in effect. File(/usr/share/webapps/owncloud/apps/build.xml/appinfo/info.xml) is not within the allowed path(s): (/srv/http/:/home/:/tmp/:/usr/share/pear/:/usr/share/webapps/owncloud/:/etc/webapps/owncloud:/dev/urandom) at /usr/share/webapps/owncloud/lib/private/app.php#782
https://github.com/owncloud/core/issues/17400
https://github.com/owncloud/core/pull/17472
github見たら修正されていたのでこっちもArchのパッケージが更新されるまで待つ
TODO
そのうちやりますor書きます
- メモリキャッシュ(memcache)の設定
- RedmineのPostgresへのマイグレーション
- ownCloudとRedmineの連携(ユーザ)
- 現在はSSL証明書的な問題でRedmineのサーバのサブディレクトリ内にownCloudがある状態なので、ワイルドカード署名的なのを取得してvirtualhost、もしくは別サーバで運用したい
参考
php関連
ownCloudの設定
Postgreの設定
Log
トラブル関連
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対策
- FREAK (Factoring attack on RSA-EXPORT Keys) 対策で Web サーバに行った SSLCipherSuite の設定例
- httpd における POODLE SSLv3.0 脆弱性問題の解決方法 (CVE-2014-3566)
ここを参考に
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
を追加する。 - 詳しくはここ
- httpd.confに
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(秒)です。