CentOS7 に Nginx + php-fpm + MariaDB 構成で ownCloud 10.0.3 をインストールする
CentOS7 へ ownCloud 10.0.3 をインストールする手順をメモしておきます。
環境¶
今回は最終的に以下のミドルウェア / バージョンを構築しました。
- CentOS 7.4.1708
- mariadb-server-5.5.56-2.el7.x86_64
- nginx-1.12.2-1.el7_4.ngx.x86_64
- ownCloud 10.0.3
- php-fpm-7.1.10-1.el7.remi.x86_64
必要パッケージのインストール¶
Nginx のリポジトリを追加します。 以下の内容で /etc/yum.repos.d/nginx.repo というファイルを新規作成します。
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=0
enabled=1
epel と remi リポジトリを追加した後、必要なパッケージ一式をインストールします。
yum -y install epel-release.noarch
yum -y install http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
yum -y --enablerepo=nginx --enablerepo=remi-php71 install \
mariadb \
mariadb-server \
nginx \
php \
php-dom \
php-fpm \
php-gd \
php-mbstring \
php-mysqlnd \
php-pdo \
php-pdo_mysql \
php-pecl-zip
現時点で最新の PHP のバージョンは 7.2 ですが、ここでは意図的に PHP 7.1 系をインストールします。 PHP 7.2 系をインストールすると、ownCloud インストール後にアクセスすると以下のエラーメッセージが表示され、ownCloud にアクセス出来なくなってしまいます…
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 |
/etc/php-fpm.d/www.conf の修正¶
/etc/php-fpm.d/www.conf は以下の項目を修正します。 listen.owner と listen.group が未設定のままだと php-fpm の UNIX ソケットファイル (/var/run/php-fpm/php-fpm.sock) の所有者が root になってしまい、Nginx と php-fpm が上手く連携出来ず、結果的に ownCloud が起動出来なくなってしまいます。
| Item | Default Value | New Value |
|---|---|---|
| user | apache | nginx |
| group | apache | nginx |
| listen | 127.0.0.1:9000 | /var/run/php-fpm/php-fpm.sock |
| listen.owner | (未設定) | nginx |
| listen.group | (未設定) | nginx |
PHP セッションディレクトリの所有者修正¶
また、PHP をインストールした直後は PHP のセッションディレクトリ (/var/lib/php/session) の所有者が apache ユーザになっており、Nginx から操作出来なくなってしまいます。 よって、所有グループを nginx グループに変更しておきます。
Nginx 設定ファイルの修正¶
以下の内容で /etc/nginx/conf.d/owncloud.conf というファイルを新規作成します。 upstream には php-fpm の UNIX ソケットファイルを指定し、PHP の処理を php-fpm へ転送します。 server_name には ownCloud で利用する FQDN を指定します。 SSL/TLS の設定が必要であれば追加します。
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/var/run/php-fpm/php-fpm.sock;
}
server {
listen 80;
server_name example.com;
#charset koi8-r;
#access_log /var/log/nginx/log/host.access.log main;
root /usr/share/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 /usr/share/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;
}
}
ownCloud を所定ディレクトリに展開する¶
公式サイトから ownCloud をダウンロードし、所定のディレクトリに展開します。 今回は現時点の最新版である ownCloud 10.0.3 をダウンロードし、/usr/share/owncloud というディレクトリに展開しています。 また、展開したファイル群は Nginx や php-fpm がアクセス出来るよう、所有者を nginx ユーザに変更しておきます。
curl -L -O https://download.owncloud.org/community/owncloud-10.0.3.zip
unzip owncloud-10.0.3.zip -d /usr/share
chown -R nginx:nginx /usr/share/owncloud/
サービスの起動¶
Nginx、MariaDB、php-fpm を起動&自動起動設定します。
systemctl enable nginx.service
systemctl enable mariadb.service
systemctl enable php-fpm.service
systemctl start nginx.service
systemctl start mariadb.service
systemctl start php-fpm.service
MariaDB の設定¶
MariaDB の設定をする前に mysql_secure_installation で不要な設定を削除しておきます。
MariaDB 上に ownCloud 用のデータベースとユーザを作成します。 今回は以下としました。
| Item | Value |
|---|---|
| データベース名 | owncloud |
| ユーザ名 | owncloud |
| パスワード | password |
具体的には以下を実行します。
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
ownCloud へアクセスする¶
これでインストールは完了です。 Nginx の設定ファイルに server_name として指定した URL (http://example.com 等) にアクセスすると ownCloud のログイン画面が表示されるはずです。

PHP のモジュール不足等がある場合は以下のようなエラーが表示されます。 こういった場合は「不足している」と表示されたモジュールを追加インストールします。

参考¶
/etc/php.ini の初期状態¶
[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
[filter]
[iconv]
[intl]
[sqlite3]
[Pcre]
pcre.jit=0
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
sendmail_path = /usr/sbin/sendmail -t -i
mail.add_x_header = On
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[PostgreSQL]
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
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[Assertion]
zend.assertions = -1
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[dba]
[curl]
[openssl]
/etc/php-fpm.d/www.conf の初期状態¶
[www]
user = apache
group = apache
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
slowlog = /var/log/php-fpm/www-slow.log
php_admin_value[error_log] = /var/log/php-fpm/www-error.log
php_admin_flag[log_errors] = on
php_value[session.save_handler] = files
php_value[session.save_path] = /var/lib/php/session
php_value[soap.wsdl_cache_dir] = /var/lib/php/wsdlcache