
Как установить NextCloud 11 в FreeNAS 9.10 в LEMP и не используя стандартный плагин?
Обновленно — 16.01.2016
Что имеем:
Static IP FreeNas 9.10: 192.168.10.70
Volumes: /mnt/cloud — 6Tb Raid1 под файлы Nextcloud
/mnt/system — 1Tb Raid1 под Jail, логи и прочие системные файлы.
Мы будем устанавливать на FreeBSD 10.3:
• Nginx 1.10
• MariaDB
• PHP 7.0 (версия 7.1 хоть и поддерживается, но имеет проблемы)
• NextCloud 11.x
Создаем разделы:
Создаем раздел под файлы Nextcloud:
Storage > Volume > /mnt/cloud > Creat Dataset
• Dataset Name = files
• Compression level = lz4
• Enable atime = Off
• Остальные опции оставить по умолчанию
Создаем раздел по хранение баз SQL
Storage > Volume > /mnt/system > Creat Dataset
• Dataset Name = db
• Compression level = zle
• Enable atime = Off
• Record Size = 16K (Используйте Advanced Mode)
• Остальные опции оставить по умолчанию
Добавляем пользователей и настраиваем права (mysql):
Account > Users > Add User
• Username: mysql
• Shell: nologin
• Full Name: SQL User
• Disable password login: ставим галочку
• Password: оставляем пустым
• Остальные опции оставить по умолчанию
Storage > Volumes > /mnt/system > /mnt/system/db > Change Permissions
• Owner (user): mysql
• Owner (group): mysql
• Set permission recursively: ставим галочку
• Остальные опции оставить по умолчанию
Настройка primary cache
В FreeNas запускаем Shell (через web, а не Putty):
zfs set primarycache=metadata system/db
Создаем и настраиваем Jail:
Jails > Add Jail
Нажимаем сразу: Advanced Mode
• Jail Name: NextCloud
• Template: «——«
• IPv4 DHCP: снимаем галку
• IPv4 Address: 192.168.10.71
• IPv4 netmask: /24 (255.255.255.0)
• IPv4 default gateway: 192.168.10.1
• Остальные опции оставить по умолчанию
Добавляем нашему Jail (NextCloud) разделы:
Jails > View Jails > Storage > Add Storage
• Jail: NextCloud
• Source = /mnt/Cloud/files
• Destination = /mnt/files
• Jail: NextCloud
• Source = /mnt/system/db
• Destination = /var/db/mysql
Настраиваем SSH в Jail
Jails > View Jails > NextCloud >Shell
Включаем SSH
sed -i '' 's/#PermitRootLogin no/PermitRootLogin yes/g' /etc/ssh/sshd_config
sysrc sshd_enable=yes && service sshd start
Меняем пароль root в Jail
Вводим и далее по подсказкам
passwd
Теперь можно закрывать Shell в FreeNas и подключаться к Jail через Putty
Устанавливаем LEMP
pkg update && pkg upgrade
Если будут обновления, то на все вопросы отвечаем «Y«
Первым делом поставим все необходимое:
pkg install nano wget sudo

Nginx
pkg install nginx

sysrc 'nginx_enable=YES' && service nginx start
mv /usr/local/etc/nginx/nginx.conf /usr/local/etc/nginx/nginx.conf.bak && nano /usr/local/etc/nginx/nginx.conf
Вставляем следующий код в nginx.conf:
load_module /usr/local/libexec/nginx/ngx_mail_module.so;
load_module /usr/local/libexec/nginx/ngx_stream_module.so;
user www;
worker_processes auto;
pid /var/run/nginx.pid;
events {
use kqueue;
worker_connections 1024;
multi_accept on;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 1800;
types_hash_max_size 2048;
server_tokens off;
include mime.types;
default_type application/octet-stream;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
# Logs format
# ----------
log_format main '$remote_addr - $host [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'rt=$request_time ut=$upstream_response_time '
'cs=$upstream_cache_status';
# Virtual host config
# ----------
include /usr/local/etc/nginx/conf.d/*.conf;
}
mkdir -p /usr/local/etc/nginx/conf.d && mkdir -p /var/www/nextcloud && nano /usr/local/etc/nginx/conf.d/nextcloud.conf && chown -R www:www /var/www/ && chown -R www:www /var/www/nextcloud
Вставляем следующий код в nextcloud.conf:
server {
listen 80;
charset utf-8;
server_name drive.yoursite.com;
# Add headers to serve security related headers
# Before enabling Strict-Transport-Security headers please read into this
# topic first.
add_header Strict-Transport-Security "max-age=15552000;
# includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Path to the root of your installation
root /var/www/nextcloud/;
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# The following 2 rules are only needed for the user_webfinger app.
# Uncomment it if you're planning to use this app.
#rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
#rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json
# last;
location = /.well-known/carddav {
return 301 $scheme://$host/remote.php/dav;
}
location = /.well-known/caldav {
return 301 $scheme://$host/remote.php/dav;
}
# set max upload size
client_max_body_size 10250M;
fastcgi_buffers 64 4K;
# Disable gzip to avoid the removal of the ETag header
gzip off;
# Uncomment if your server is build with the ngx_pagespeed module
# This module is currently not supported.
#pagespeed off;
error_page 403 /core/templates/403.php;
error_page 404 /core/templates/404.php;
location / {
rewrite ^ /index.php$uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ {
deny all;
}
location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) {
deny all;
}
location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+|core/templates/40[34])\.php(?:$|/) {
include fastcgi_params;
fastcgi_pass unix:/var/run/php-fpm.sock;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param HTTPS on;
#Avoid sending the security headers twice
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_request_buffering off;
}
location ~ ^/(?:updater|ocs-provider)(?:$|/) {
try_files $uri/ =404;
index index.php;
}
# Adding the cache control header for js and css files
# Make sure it is BELOW the PHP block
location ~* \.(?:css|js|woff|svg|gif)$ {
try_files $uri /index.php$uri$is_args$args;
add_header Cache-Control "public, max-age=7200";
# Add headers to serve security related headers (It is intended to
# have those duplicated to the ones above)
# Before enabling Strict-Transport-Security headers please read into
# this topic first.
# add_header Strict-Transport-Security "max-age=15768000;
# includeSubDomains; preload;";
add_header X-Content-Type-Options nosniff;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-XSS-Protection "1; mode=block";
add_header X-Robots-Tag none;
add_header X-Download-Options noopen;
add_header X-Permitted-Cross-Domain-Policies none;
# Optional: Don't log access to assets
access_log off;
}
location ~* \.(?:png|html|ttf|ico|jpg|jpeg)$ {
try_files $uri /index.php$uri$is_args$args;
# Optional: Don't log access to other assets
access_log off;
}
}
Проверяем конфиг:
nginx -t service nginx restart

PHP
pkg install php70 php70-bz2 php70-ctype php70-curl php70-dom php70-exif php70-fileinfo php70-filter php70-gd php70-hash php70-iconv php70-intl php70-json php70-mbstring php70-mcrypt php70-pdo_mysql php70-openssl php70-posix php70-session php70-simplexml php70-xml php70-xmlreader php70-xmlwriter php70-xsl php70-wddx php70-zip php70-zlib php70-APCu php70-redis php70-ldap php70-gmp php70-ftp php70-mysqli sysrc 'php_fpm_enable=YES' cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini && rehash && mkdir -p /var/tmp/php/upload_tmp && chown -R www:www /var/tmp/php/upload_tmp sed -i "" "s/post_max_size = .*/post_max_size = 10250M/" /usr/local/etc/php.ini sed -i "" "s~;upload_tmp_dir =.*~upload_tmp_dir = /var/tmp/php/upload_tmp~" /usr/local/etc/php.ini sed -i "" "s/upload_max_filesize = .*/upload_max_filesize = 10250M/" /usr/local/etc/php.ini sed -i "" "s/max_file_uploads = .*/max_file_uploads = 100/" /usr/local/etc/php.ini sed -i "" "s/max_execution_time = .*/max_execution_time = 1800/" /usr/local/etc/php.ini sed -i "" "s/max_input_time = .*/max_input_time = 3600/" /usr/local/etc/php.ini sed -i "" "s/output_buffering = .*/output_buffering = Off/" /usr/local/etc/php.ini sed -i "" "s/memory_limit = .*/memory_limit = 512M/" /usr/local/etc/php.ini sed -i "" "s~;date.timezone =.*~date.timezone = Europe/Moscow~" /usr/local/etc/php.ini sed -i "" "s~;cgi.fix_pathinfo=.*~cgi.fix_pathinfo=1~" /usr/local/etc/php.ini
nano /usr/local/etc/php-fpm.d/www.conf
Расскоментируем следующие строки (извиняюсь не хватило моих познаний сделать sed команды):
$ ;env[HOSTNAME] = $HOSTNAME
$ ;env[PATH] = /usr/local/bin:/usr/bin:/bin
$ ;env[TMP] = /tmp
$ ;env[TMPDIR] = /tmp
$ ;env[TEMP] = /tmp
sed -i "" "s~;pm.max_requests = .*~pm.max_requests = 500~" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s/pm.max_children = .*/pm.max_children = 200/" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s/pm.start_servers = .*/pm.start_servers = 10/" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s/pm.min_spare_server = .*/pm.min_spare_server = 5/" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s/pm.max_spare_servers = .*/pm.max_spare_servers = 10/" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s/pm.max_children = .*/pm.max_children = 100/" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s/listen = .*/listen = \/var\/run\/php-fpm.sock/" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s/;listen.owner = www/listen.owner = www/" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s/;listen.group = www/listen.group = www/" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s/;listen.mode = 0660/listen.mode = 0660/" /usr/local/etc/php-fpm.d/www.conf sed -i "" "s~;emergency_restart_threshold =.*~emergency_restart_threshold = 10~" /usr/local/etc/php-fpm.conf sed -i "" "s~;emergency_restart_interval =.*~emergency_restart_interval = 1m~" /usr/local/etc/php-fpm.conf sed -i "" "s~;process_control_timeout =.*~process_control_timeout = 10s~" /usr/local/etc/php-fpm.conf php-fpm -t service php-fpm start
Проверяем работу PHP:
Переходим в /var/www/nextcloud
cd /var/www/nextcloud touch index.php nano index.php
Вставляем:
<?php // Show all information, defaults to INFO_ALL phpinfo(); ?>
Сохраняем и выходим.
Переходим по ip http://192.168.10.71 и вы должны увидеть страницу со всей информацией по вашей PHP.
MariaDB
pkg install mariadb101-server
# Если выскочит «pkg: cached package mariadb101-server-10.1.20: size mismatch, cannot continue» надо выполнить:
# $ pkg update -f
sysrc 'mysql_enable=yes' cp /usr/local/share/mysql/my-small.cnf /usr/local/etc/my.cnf sed -i "" "s/max_allowed_packet = .*/max_allowed_packet = 32M/" /usr/local/etc/my.cnf service mysql-server start
Настраиваем пароль root на sql:
mysql_secure_installation
# На строчку «Enter current password for root (enter for none):» просто нажимаем «Enter«
# На строчку «Set root password? » выбираем «Y«
# Вбиваем новый пароль root
# На все дальнейшие вопросы отвечаем «Y«
service mysql-server restart
Заходим в базу MariaDB и создаем новую базу и пользователя:
mysql -u root -p
Вводим пароль от MariaDB который создали ранее.
Далее создаем базу и пользователя:
CREATE DATABASE nextcloud; CREATE USER 'nextcloud_admin'@'localhost' IDENTIFIED BY 'ВАШ МЕГА ПАРОЛЬ'; GRANT ALL ON nextcloud.* TO 'nextcloud_admin'@'localhost'; FLUSH PRIVILEGES; exit
Устанавливаем NextCloud:
Переходим в директорию сайта:
cd /var/www/
Скачиваем Nextcloud:
wget https://download.nextcloud.com/server/releases/latest.zip //в нашем случае это версия 11.0.1
Распаковываем Nextcloud:
unzip latest.zip
Устанавливаем правильные права:
chown -R www:www /var/www/nextcloud /mnt/files
Удаляем мусор:
rm /var/www/latest.zip
Далее переходим непосредственно к установке, заходим на http://192.168.10.71 и начинаем установку:
Имя пользователя: Это сами придумываем
Пароль: тоже сами придумываем
каталог с данными: /mnt/files
Пользователь базы данных: nextcloud_admin
Пароль базы данных: Указываем пароль что задавали выше при создании пользователя
Название базы данных: nextcloud
Хост базы данных: localhost:/tmp/mysql.sock
Нажимаем завершить и дожидаемся конца установки и редиректа на главную страницу.
Вот и все =) Можно начинать пользоваться нашим облоком.


