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、もしくは別サーバで運用したい