Как установить NextCloud 11 в FreeNas 9.10 на LEMP?

Как установить NextCloud 11 в FreeNas 9.10 на LEMP?

Как установить 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
pkg install nano wget sudo

Nginx

pkg install 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
nginx -t

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 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

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

Нажимаем завершить и дожидаемся конца установки и редиректа на главную страницу.

Вот и все =) Можно начинать пользоваться нашим облоком.

Publisher
Оцените автора
AsaDagar
Добавить комментарий