Amazon Linux に ownCloud 10.7 をインストールする
以前に Amazon Linux に Nginx + ownCloud 10.0.3 をインストールするという記事を書きましたが、各ソフトウェアのバージョンが上がっていたので、現時点 (2018/04/09 時点) での Amazon Linux + ownCloud インストール手順をメモしておきます。
構築する環境
今回、構築する環境は最終的に以下のバージョンになりました。
- Amazon Linux AMI release 2017.09
- MariaDB-server-10.3.5-1.el6.x86_64
尚、Amazon Linux はデフォルトで SELinux が無効化されている為、特に配慮する必要がありません。
MariaDB のインストール
Mattermost のバックエンドになる MariaDB をインストールします。 まず、GPG-KEY をインストールします。
| rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
|
/etc/yum.repos.d/mariadb.repo
というファイルを以下の内容で新規作成します。
| cat << EOF > /etc/yum.repos.d/mariadb.repo
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.3.5/centos6-amd64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1
EOF
|
インストールします。
| yum -y install MariaDB-client MariaDB-server
|
データベースのデータ更新時のトランザクションの分離レベルを変更します。 デフォルトでは REPEATABLE-READ
ですが、これを READ-COMMITED
に変更します。
項目 |
デフォルト |
説明 |
READ-UNCOMMITTED |
|
他のトランザクションのコミットされていない変更が見える |
READ-COMMITTED |
|
他のトランザクションのコミットされた変更が見える |
REPEATABLE-READ |
◯ |
トランザクション開始時にコミットされていたデータのみ、見える |
SERIALIZABLE |
|
すべての select でロックを行うことでトランザクションを直列化し競合が発生しないようにする |
具体的には /etc/my.cnf.d/server.cnf
の [mysqld]
セクションに transaction
の定義を追加します。
| [mysqld]
transaction-isolation=READ-COMMITTED
|
MariaDB (起動スクリプト名は mysql
)を起動します。
インストール直後の状態で自動起動設定になっていました。
| # chkconfig --list | grep mysql
mysql 0:off 1:off 2:on 3:on 4:on 5:on 6:off
|
MariaDB の初期設定
mysql_secure_installation
で初期設定を行い、不要なデータベースや anonymous ユーザを削除しておきます。
| mysql_secure_installation
|
実行例は以下の通りです。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56 | # mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] n
... skipping.
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] Y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] Y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] Y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] Y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
|
MariaDB 上にデータベースやユーザを作成します。
| mysql -u root
CREATE DATABASE owncloud;
CREATE USER 'owncloud'@'localhost' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON owncloud.* TO 'owncloud'@'localhost' WITH GRANT OPTION;
FLUSH PRIVILEGES;
quit
|
PHP のインストール
ownCloud は PHP 7.2 をインストールするとエラーになってしまうのですが、Amazon Linux のリポジトリには現時点で PHP 7.1 までしかリリースされていない為、ここはそのまま PHP 7.1 をインストールします。
| yum -y install \
nginx \
php71 \
php71-fpm \
php71-gd \
php71-intl \
php71-mbstring \
php71-mysqlnd \
php71-pdo \
php71-pecl-apcu \
php71-opcache
|
DB 接続時の維持設定
PHP から MariaDB へ接続する際、セッションを維持(パーシステンスの確保)を行うことで DB への接続が早くなるようにします。 /etc/php.d/30-mysqli.ini
に以下を追加します。
| cat << EOF >> /etc/php.d/30-mysqli.ini
mysqli.allow_local_infile=On
mysqli.allow_persistent=On
mysqli.cache_size=2000
mysqli.max_persistent=-1
mysqli.max_links=-1
mysqli.connect_timeout=60
mysqli.trace_mode=Off
EOF
|
PHP キャッシュの設定
OPcache と APCu を導入し、PHP のパフォーマンス改善を図ります。
OPcache の設定
OPcache の設定ファイルは以下にあるようです。 両者異なるファイルなのですが、初期状態では全く同じ内容でした。
/etc/php.d/10-opcache.ini
/etc/php-zts.d/10-opcache.ini
どちらを変更すべきか、すぐに判断出来なかったので両者を以下のように変更しました。
変更前(※ コメント除外版)
| zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.blacklist_filename=/etc/php-7.0.d/opcache*.blacklist
opcache.huge_code_pages=1
|
変更後
| zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.blacklist_filename=/etc/php-7.0.d/opcache*.blacklist
opcache.huge_code_pages=1
opcache.enable_cli=1
opcache.fast_shutdown=1
opcache.revalidate_freq=600
|
実行例
これらのファイルを修正するには、例えば以下のように実行します。 まず、/etc/php.d/10-opcache.ini
を修正します。
1
2
3
4
5
6
7
8
9
10
11
12 | cat << EOF > /etc/php.d/10-opcache.ini
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.blacklist_filename=/etc/php-7.0.d/opcache*.blacklist
opcache.huge_code_pages=1
opcache.enable_cli=1
opcache.fast_shutdown=1
opcache.revalidate_freq=600
EOF
|
続けて /etc/php-zts.d/10-opcache.ini
も修正します。
1
2
3
4
5
6
7
8
9
10
11
12 | cat << EOF > /etc/php-zts.d/10-opcache.ini
zend_extension=opcache.so
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=4000
opcache.blacklist_filename=/etc/php-7.0.d/opcache*.blacklist
opcache.huge_code_pages=1
opcache.enable_cli=1
opcache.fast_shutdown=1
opcache.revalidate_freq=600
EOF
|
APCu の設定
APCu の設定ファイルは以下にあるようです。 両者異なるファイルなのですが、初期状態では全く同じ内容でした。
/etc/php.d/40-apcu.ini
/etc/php-zts.d/40-apcu.ini
変更前(※ コメント除外版)
| extension = apcu.so
apc.enabled=1
apc.mmap_file_mask=/tmp/apc.XXXXXX
|
変更後
| extension=apcu.so
apc.enabled=1
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.shm_size=64M
apc.ttl=7200
|
実行例
これらのファイルを修正するには、例えば以下のように実行します。 まず、/etc/php.d/40-apcu.ini
を修正します。
| cat << EOF > /etc/php.d/40-apcu.ini
extension=apcu.so
apc.enabled=1
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.shm_size=64M
apc.ttl=7200
EOF
|
続けて /etc/php-zts.d/40-apcu.ini
も修正します。
| cat << EOF > /etc/php-zts.d/40-apcu.ini
extension=apcu.so
apc.enabled=1
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.enable_cli=1
apc.shm_size=64M
apc.ttl=7200
EOF
|
Nginx の明示的なインストールは不要
PHP をインストールした際に Nginx もインストールされている為、別途、インストールする必要はありません。 インストール直後の状態だと Nginx は停止しています。
| # service nginx status
nginx is stopped
|
自動起動設定もされていません。
| # chkconfig --list | grep nginx
nginx 0:off 1:off 2:off 3:off 4:off 5:off 6:off
|
PHP の設定修正
PHP 関連では以下、2 つの設定ファイルを修正する必要があります。
/etc/php.ini
/etc/php-fpm.d/www.conf
どちらのファイルも コメントアウトには「#」(シャープ)が使えず、「;」(セミコロン)を使う必要がある 点に注意します。 誤って「#」使ってしまうとコメントと見做されず、エラーになってしまいます。
/etc/php.ini
の修正
/etc/php.ini
は以下の項目を修正します。
Item |
Default Value |
New Value |
max_execution_time |
30 |
3600 |
max_input_time |
60 |
3600 |
memory_limit |
128M |
-1 |
post_max_size |
8M |
10G |
upload_max_filesize |
2M |
10G |
date.timezone |
(未設定) |
Asia/Tokyo |
修正例は以下の通りです。
| sed -i -e "s/^max_execution_time = 30/max_execution_time = 3600/g" /etc/php.ini
sed -i -e "s/^max_input_time = 60/max_input_time = 3600/g" /etc/php.ini
sed -i -e "s/^memory_limit = 128M/memory_limit = -1/g" /etc/php.ini
sed -i -e "s/^post_max_size = 8M/post_max_size = 10G/g" /etc/php.ini
sed -i -e "s/^upload_max_filesize = 2M/upload_max_filesize = 10G/g" /etc/php.ini
sed -i -e "s/^;date.timezone =/date.timezone = Asia\/Tokyo/g" /etc/php.ini
|
/etc/php-fpm.d/www.conf
の修正
/etc/php-fpm.d/www.conf
は以下の項目を修正します。
Item |
Default Value |
New Value |
user |
apache |
nginx |
group |
apache |
nginx |
listen |
/var/run/php-fpm/www.sock |
(変更無し) |
修正例は以下の通りです。
| sed -i -e "s/^user = apache/user = nginx/g" /etc/php-fpm.d/www.conf
sed -i -e "s/^group = apache/group = nginx/g" /etc/php-fpm.d/www.conf
|
また、このままの設定で進めると ownCloud を起動した後、管理画面に以下のようなエラーが表示されます。
PHPのシステム環境変数が正しく設定されていないようです。getenv("PATH") コマンドでテストして何も値を返さないことを確認してください。 PHP設定の注意事項と php-fpmを利用する場合のサーバー向け設定を インストールドキュメント ↗ で確認してください。
このエラーを避ける為に /etc/php-fpm.d/www.conf
の ;clear_env = no
からコメントを外しておきます。 修正例は以下の通りです。
| sed -i -e "s/^;clear_env = no/clear_env = no/g" /etc/php-fpm.d/www.conf
|
PHP セッションディレクトリの所有者修正
また、PHP をインストールした直後は PHP のセッションディレクトリ (/var/lib/php/7.1/session
) の所有者が apache
ユーザになっており、Nginx から操作出来なくなってしまいます。 よって、所有グループを nginx
グループに変更しておきます。
| chown -R :nginx /var/lib/php/7.1/session
|
Nginx 設定ファイルの修正
以下の内容で /etc/nginx/conf.d/owncloud.conf
というファイルを新規作成します。 upstream
には php-fpm の UNIX ソケットファイルを指定し、PHP の処理を php-fpm へ転送します。 server_name
には ownCloud で利用する FQDN を指定します。 SSL/TLS の設定が必要であれば追加します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59 | cat << EOF > /etc/nginx/conf.d/owncloud.conf
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/var/run/php-fpm/www.sock;
}
server {
listen 80;
server_name example.com;
#charset koi8-r;
#access_log /var/log/nginx/example.access.log main;
#error_log /var/log/nginx/example.error.log;
root /var/www/owncloud;
client_max_body_size 10G;
fastcgi_buffers 64 4K;
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
index index.php;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) {
deny all;
}
location / {
rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;
rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;
rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;
rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;
try_files $uri $uri/ index.php;
}
location ~ \.php(?:$|/) {
root /var/www/owncloud;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_pass php-handler;
include fastcgi_params;
}
}
EOF
|
ownCloud を所定ディレクトリに展開する
公式サイトから ownCloud をダウンロードし、所定のディレクトリに展開します。 今回は現時点の最新版である ownCloud 10.0.3 をダウンロードし、/usr/share/owncloud
というディレクトリに展開しています。 また、展開したファイル群は Nginx や php-fpm がアクセス出来るよう、所有者を nginx
ユーザに変更しておきます。
| curl -LO https://download.owncloud.org/community/owncloud-10.0.7.zip
unzip owncloud-10.0.7.zip -d /var/www
chown -R nginx:nginx /var/www/owncloud/
|
ownCloud へのログイン
ここまでの設定で ownCloud にログイン出来るはずです。 MariaDB は既に起動済みなので、Nginx と php-fpm を起動&自動起動の設定を行います。
| service nginx start
service php-fpm start
chkconfig nginx on
chkconfig php-fpm on
|
ブラウザから http://FQDN
と入力し、ownCloud へログインし、初期セットアップを完了させます。
APCu を有効化する
APCu を有効化します。 owncloud/config/config.php
に以下の業務を追加します。
| 'memcache.local' => '\OC\Memcache\APCu',
|
Linux OS 側の cron を利用するように設定する
ownCloud はデフォルトで定期処理を AJAX ベースの実装で行います。 これではパフォーマンス的に不利なので、定期処理は Linux OS 側の cron を使うように設定変更します。 以下の内容で /etc/cron.d/owncloud-cron-php
を新規作成します。
| * * * * * nginx php -f /var/www/owncloud/cron.php > /dev/null 2>&1 || logger "cron failed. ret=$? `/bin/awk \'{print $1}\' /proc/$$/cmdline`"' > /etc/cron.d/owncloud-cron-php
|
cron の定義ファイルを作成したので、occ
で ownCloud の設定を変更します(※ GUI から設定変更しても良いです)。
| sudo -u nginx /var/www/owncloud/occ background:cron
|
実行結果は以下のようになります。
| # sudo -u nginx /var/www/owncloud/occ background:cron
Set mode for background jobs to 'cron'
|
ファイルオーナーとは異なるユーザで実行すると以下のようなエラーになります。 よって、occ
を実行する場合は sudo -u nginx
のように指定し、実行ユーザを変更します。
| # /var/www/owncloud/occ background:cron
Console has to be executed with the user that owns the file config/config.php
Current user: root
Owner of config.php: nginx
Try adding 'sudo -u nginx ' to the beginning of the command (without the single quotes)
|
不要なアプリを無効化する
利用方針次第ですが、不要と思うアプリは無効化します。 今回は以下を無効化しました。
番号 |
アプリ名 |
無効にしても良いと思うもの |
1 |
Admin Config Report |
|
2 |
Deleted files |
無効にして良い |
3 |
Federation |
無効にして良い |
4 |
Provisioning API |
|
5 |
Share Files |
|
6 |
Update notification |
|
7 |
Versions |
無効にして良い |
8 |
Collaborative tags |
無効にして良い |
9 |
Comments |
無効にして良い |
10 |
First run wizard |
無効にして良い |
11 |
Mail Template Editor |
無効にして良い |
12 |
Market |
|
13 |
Notifications |
|
14 |
Video player |
無効にして良い |
WebDAV からアクセスする場合
Web ブラウザから ownCloud へアクセスしても良いのですが、日常的に利用するのであれば WebDAV クライアント・アプリケーションを使うのも便利です。 無料の WebDAV クライアントには以下のようなものがあります。
WebDAV クライアントからアクセスする場合は(ブラウザの場合とは違って)http://FQDN/remote.php/webdav/
という URL にアクセスします。
Nginx で Let's Encrypt の証明書を利用する
Nginx で Let's Encrypt の証明書を利用する場合、/etc/nginx/conf.d/owncloud.conf
を以下のように修正します。 FQDN は適宜、修正します。
| server {
listen 443;
server_name FQDN;
ssl on;
ssl_certificate /etc/letsencrypt/live/FQDN/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/FQDN/privkey.pem;
|
設定ファイルの修正が完了したら Nginx を再起動します。
これで SSL/TLS が有効化されましたので、https で ownCloud へアクセス出来るようになりました。