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 リポジトリを追加した後、必要なパッケージ一式をインストールします。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 | 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 にアクセス出来なくなってしまいます…
| This version of ownCloud is not compatible with PHP 7.2
You are currently running 7.2.0RC4.
|
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
グループに変更しておきます。
| chown -R root:nginx /var/lib/php/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 | 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
で不要な設定を削除しておきます。
| 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
の初期状態
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138 | [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
の初期状態
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 | [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
|