Создадим своё облачное хранилище NextCloud под управление Nginx на базе дистрибутива CSS от Calculate Linux. Принцип установки и настройки подойдет для любого другого дистрибутива Linux. Совместная работа с файлами с любого браузера.
Содержание:
Введение
Ранее я описывал как настраивать NGINX на web сервер CentOS 7 и LEMP сервер на Calculate Linux на основе последнего материала произведу настройку NextCloud. Обновление облачного хранилища производится средствами самого ресурса и поэтому выполним установку из исходных файлов с сайта разработчика. NextCloud будет работать в локальной сети. Для удобства работы откроем доступ с сети интернет и подключим свободный сертификат SSL от компании Let`s Encrypt. В качестве базы данных будем использовать PostgreSQL.
Ошибка при установке на MariaBD
При попытке установки на базу данных MariaDB вы получите ошибку:
«General error: 1665 Cannot execute statement: impossible to write to binary log since BINLOG_FORMAT = STATEMENT and at least one table uses a storage engine limited to row-based logging. InnoDB is limited to row-logging when transaction isolation level is READ COMMITTED or READ UNCOMMITTED»
Для избавления от этой ошибки необходимо отредактировать конфигурационный файл /etc/mysql/my.cnf отвечающий за настройки базы.
/etc/mysql/my.cnf = необходимые параметры = [mysqld] binlog-format=MIXED innodb_large_prefix=on innodb_file_format=barracuda innodb_file_per_table=true
После перезагрузки MariaDB установка пройдёт без ошибок.
Установка и настройка PostgreSQL
В будущем я напишу более детальную статью о том как работать с PostgreSQL. Ниже я лишь опишу основные моменты которые необходимы для работы NextCloud с этой базой данных.
Установим базу данных PostgreSQL командой:
emerge --ask dev-db/postgresql
Настроим базу выполнив команду:
emerge --config =dev-db/postgresql-9.6.6 = вывод команды = Configuring pkg... * You can modify the paths and options passed to initdb by editing: * /etc/conf.d/postgresql-9.6 * * Information on options that can be passed to initdb are found at: * http://www.postgresql.org/docs/9.6/static/creating-cluster.html * http://www.postgresql.org/docs/9.6/static/app-initdb.html * * PG_INITDB_OPTS is currently set to: * --encoding=UTF8 * * Configuration files will be installed to: * /etc/postgresql-9.6/ * * The database cluster will be created in: * /var/lib/postgresql/9.6/data * * Continuing initialization in 5 seconds (Control-C to cancel) ... [ ok ] * Creating the data directory ... * Initializing the database ... Файлы, относящиеся к этой СУБД, будут принадлежать пользователю "postgres". От его имени также будет запускаться процесс сервера. Кластер баз данных будет инициализирован со следующими параметрами локали: COLLATE: ru_RU.utf8 CTYPE: ru_RU.utf8 MESSAGES: ru_RU.utf8 MONETARY: ru_RU.utf8 NUMERIC: C TIME: ru_RU.utf8 Выбрана конфигурация текстового поиска по умолчанию "russian". Контроль целостности страниц данных отключён. исправление прав для существующего каталога /var/lib/postgresql/9.6/data... ок создание подкаталогов... ок выбирается значение max_connections... 100 выбирается значение shared_buffers... 128MB выбор реализации динамической разделяемой памяти ... posix создание конфигурационных файлов... ок выполняется подготовительный скрипт ... ок выполняется заключительная инициализация ... ок сохранение данных на диске... ок ПРЕДУПРЕЖДЕНИЕ: используется проверка подлинности "trust" для локальных подключений. Другой метод можно выбрать, отредактировав pg_hba.conf или используя ключи -A, --auth-local или --auth-host при следующем выполнении initdb. Готово. Теперь вы можете запустить сервер баз данных: /usr/lib64/postgresql-9.6/bin/pg_ctl -D /var/lib/postgresql/9.6/data -l logfile start * The autovacuum function, which was in contrib, has been moved to the main * PostgreSQL functions starting with 8.1, and starting with 8.4 is now enabled * by default. You can disable it in the cluster's: * /etc/postgresql-9.6/postgresql.conf * * The PostgreSQL server, by default, will log events to: * /var/lib/postgresql/9.6/data/postmaster.log * * You should use the '/etc/init.d/postgresql-9.6' script to run PostgreSQL * instead of 'pg_ctl'.
В выводе указана вся основная информация.
Запустим сервис PostgreSQL:
/etc/init.d/postgresql-9.6 start = вывод команды = postgresql-9.6 | * /run/postgresql: creating directory postgresql-9.6 | * /run/postgresql: correcting owner postgresql-9.6 | * Starting PostgreSQL 9.6 ...
Добавим в автозагрузку:
rc-update add postgresql-9.6 default = вывод команды = * service postgresql-9.6 added to runlevel default
Создадим пароль для пользователя posgres:
psql -U postgres psql (9.6.6) Введите "help", чтобы получить справку. postgres=# \password Введите новый пароль: вводим пароль Повторите его: повторяем пароль postgres=# \q
Настройка доступа к базам PostgreSQL
Настройки ниже необходимы если вы планируйте подключатся к базам данных с других компьютеров в локальной сети посредством программы pgAdmin 4 версии.
За доступ отвечают параметры в файле /etc/postgresql-9.6/pg_hba.conf. В моем случае мне необходимо чтобы доступ был разрешен только с моего компьютера в локальной сети. Произведем корректировку файла:
vim /etc/postgresql-9.6/pg_hba.conf
= часть вывода команды с необходимым дополнением =
# IPv4 local connections:
host all all 127.0.0.1/32 trust
host all all 192.168.0.3/24 trust
Помимо того что надо добавить доступ в iptables для 5432 необходимо внести изменения в файл /etc/hosts. Добавим нужные данные с учетом что ip адрес сервера 192.168.0.141:
vim /etc/hosts
= часть вывода команды с необходимым добавлением =
127.0.0.1 lempcss.sevo44.loc lempcss localhost
192.168.0.141 lempcss.sevo44.loc lempcss localhost
Перезагрузим сервис баз данных:
/etc/init.d/postgresql-9.6 restart postgresql-9.6 | * Stopping PostgreSQL 9.6 (this can take up to 92 seconds) ... [ ok ] postgresql-9.6 | * /run/postgresql: correcting mode postgresql-9.6 | * Starting PostgreSQL 9.6 ... [ ok ]
Проверим какие порты работают:
netstat -an = часть вывода команды = Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 192.168.0.141:5432 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN
Достаточно указать в pgAdmin4 сервер 192.168.0.141, порт 5432, данные пользователя posgres для подключения и удобно работать с базами данных.
Добавление базы PosgreSQL
Добавим базу и пользователя для облачного ресурса NextCloud:
Перейдем под пользователя posgres su - postgres Создадим базу nextcloud postgres@lempcss ~ $ createdb nextcloud Подключимся к консоли Postgres psql -U postgres psql (9.6.6) Введите "help", чтобы получить справку. Выведем список всех баз postgres=# \l Список баз данных Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа -----------+----------+-----------+------------+------------+----------------------- nextcloud | postgres | UTF8 | ru_RU.utf8 | ru_RU.utf8 | postgres=CTc/postgres+ | | | | | postgres | postgres | UTF8 | ru_RU.utf8 | ru_RU.utf8 | template0 | postgres | UTF8 | ru_RU.utf8 | ru_RU.utf8 | =c/postgres + | | | | | postgres=CTc/postgres template1 | postgres | UTF8 | ru_RU.utf8 | ru_RU.utf8 | =c/postgres + | | | | | postgres=CTc/postgres (4 строки) Добавим роль (пользователя) nextcloud с правами на вход postgres=# CREATE ROLE nextcloud WITH LOGIN; CREATE ROLE Посмотрим список ролей (пользователей) postgres=# \du Список ролей Имя роли | Атрибуты | Член ролей -----------+-------------------------------------------------------------------------+------------ nextcloud | | {} oc_admin | Создаёт БД | {} postgres | Суперпользователь, Создаёт роли, Создаёт БД, Репликация, Пропускать RLS | {} Добавим пароль пользователю nextcloud postgres=# \password nextcloud Введите новый пароль: вводим пароль Повторите его: повторяем пароль Назначим полные права на базу nextcloud пользователю ntxtcloud postgres=# grant connect, create on database nextcloud to nextcloud; GRANT Выведем информацию о базе nextcloud postgres=# \l nextcloud Список баз данных Имя | Владелец | Кодировка | LC_COLLATE | LC_CTYPE | Права доступа -----------+----------+-----------+------------+------------+----------------------- nextcloud | postgres | UTF8 | ru_RU.utf8 | ru_RU.utf8 | postgres=CTc/postgres+ | | | | | nextcloud=Cc/postgres (1 строка) Выйдем из консоли PostgresQL postgres=# \q
Всё хорошо. Необходимая база и пользователь созданы. Осталось проверить подключение к базе выполнив команду:
psql -U nextcloud -d nextcloud -h 127.0.0.1 -W = вывод команды = Пароль пользователя nextcloud: psql (9.6.6) Введите "help", чтобы получить справку. nextcloud-> \q
Базу данных настроили можно переходить к дальнейшим этапам установки свободного облачного сервиса Nextcloud.
Установка NextCloud
Установка с исходных кодов с сайта разработчика производится в три этапа:
- Создание необходимых путей и загрузка файлов,
- Создание фала конфигурации Nginx для работы облачного ресурса,
- Внесение необходимых поправок в конфигурацию сервисов для корректной работы NextCloud.
Предварительная подготовка
Создадим необходимые папки:
mkdir -p /var/www/nextcloud/{logs,upload,save}
Перейдем в папку и скачаем последнюю версию NextCloud:
cd /var/www/nextcloud wget https://download.nextcloud.com/server/releases/nextcloud-12.0.3.zip
Распакуем:
unzip /var/www/nextcloud/nextcloud-12.0.3.zip -d /var/www/nextcloud
Переименуем:
mv /var/www/nextcloud/nextcloud /var/www/nextcloud/htdocs
Назначим необходимые права:
chown -R nginx:nginx /var/www/nextcloud
Настройка Nginx для Nextcloud
Создадим файл для работы NextCloud под управлением сервиса Nginx:
В моем случае название ресурса будет cloud.sevo44.ru
vim /etc/nginx/conf.d/nextcloud.conf = необходимый код с пояснениями = # nc.sevo44.ru upstream php-handler { #server 127.0.0.1:9000; server unix:/run/php-fpm.socket; } server { listen 80; server_name cloud.sevo44.ru; # Path to the root of your installation root /var/www/nextcloud/htdocs/; #Logs access_log /var/www/nextcloud/logs/access.log main; error_log /var/www/nextcloud/logs/error.log; #Max upload size client_max_body_size 10G; fastcgi_buffers 64 4K; # Enable gzip but do not remove ETag headers gzip on; gzip_vary on; gzip_comp_level 4; gzip_min_length 256; gzip_proxied expired no-cache no-store private no_last_modified no_etag auth; gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json applicati on/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json applic ation/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vca rd text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; # Uncomment if your server is build with the ngx_pagespeed module # This module is currently not supported. #pagespeed off; # 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=15768000; # includeSubDomains; preload;"; # # WARNING: Only add the preload option once you read about # the consequences in https://hstspreload.org/. This option # will add the domain to a hardcoded list that is shipped # in all major browsers and getting removed from this list # could take several months. add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; add_header X-Content-Type-Options nosniff; 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; location = /robots.txt { allow all; log_not_found off; access_log off; } #Для получения сертификата ssl location ~ /.well-known { allow all; } # 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; } # Uncomment if your server is build with the ngx_pagespeed module # This module is currently not supported. #pagespeed off; 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/.+)\.php(?:$|/) { 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_param HTTPS on; #Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass php-handler; fastcgi_intercept_errors on; 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=15778463"; # 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;"; # # WARNING: Only add the preload option once you read about # the consequences in https://hstspreload.org/. This option # will add the domain to a hardcoded list that is shipped # in all major browsers and getting removed from this list # could take several months. add_header X-Content-Type-Options nosniff; 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; } }
Запрос getenv(«PATH») для NextCloud
Для избежания ошибки в последующем после установки NextCloud сразу внесем необходимое изменение.
Определим пути в системе:
printenv PATH = вывод команды = /usr/x86_64-pc-linux-gnu/gcc-bin/5.4.0:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin
Отредактируем файл www.conf:
vim /etc/php/fpm-php7.0/fpm.d/www.conf
= необходимое изменение =
; При значении 5 на небольшой нагрузке можно получить ошибку 504
; в моем случае ошибка появлялась при просмотре фильмов
pm.max_children = 20
= необходимое дополнение =
;PHP был установлен неверно. Запрос getenv("PATH") возвращает пустые результаты.
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/opt/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
;/PHP был установлен неверно. Запрос getenv("PATH") возвращает пустые результаты.
Параметры PHP OPcache для Nextcloud
Для избежания ошибки в последующем после установки NextCloud сразу внесем необходимое изменение.
Внесем изменения в файл php.ini:
vim /etc/php/fpm-php7.0/php.ini = необходимые дополнения = [opcache] ! В моём случае все параметры этого блока были отключены! opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1
После всех настроек перед непосредственном запуском установки NextCloud необходимо проверить, перезапустить Nginx и Php-fpm:
nginx -t = вывод команды = nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful /etc/init.d/nginx reload = вывод команды = nginx | * Checking nginx' configuration ... [ ok ] nginx | * Refreshing nginx' configuration ... [ ok ] /etc/init.d/php-fpm restart = вывод команды = php-fpm | * Stopping PHP FastCGI Process Manager ... [ ok ] php-fpm | * Testing PHP FastCGI Process Manager config ... [ ok ] php-fpm | * Starting PHP FastCGI Process Manager ... [ ok ]
Запуск установки NextCloud
Перед запуском установки необходимо прописать имя ресурса cloud.sevo44.ru работающего на ip адресе 192.168.0.141 в DNS сервер локальной сети или внести необходимые изменения в необходимый файл локальной машины для доступа к ресурсу. Для систем Linux дополнение вносятся в файл /etc/hosts:
vim /etc/hosts = необходимое дополнение = 192.168.0.141 cloud.sevo44.ru
Получение SSL от Let`s Encrypt
Ранее я описывал более подробно про получение и продление бесплатный трехмесячных сертификатов SSL. Ниже я лишь опишу получение и продление сертификатов со спецификой для дистрибутивов на базе Gentoo.
Установка Let`s Encrypt для Calculate и Gentoo
Установим сам certbot обеспечивающий работу с сертификатами от Let`s Encrypt:
emerge --ask app-crypt/certbot
Установим расширения для получения сертификатов средствами nginx:
emerge --ask app-crypt/certbot-nginx
После успешной установки получим сертификат для нашего домена cloud.sevo44.ru:
Внимание! В моем варианте облачное хранилище уже настроено так чтобы доступ к ресурсу был как с локальной сети так и с интернета!Первый раз раз можно получить сертификат, используя временный веб сервер самого certbot (пункт 2), но после начала работы сайта придется повторить действие по получению сертификата для перенастройки файла отвечающего за автоматическое продление сертификата!
certbot certonly = вывод команды с пояснениями = Saving debug log to /var/log/letsencrypt/letsencrypt.log How would you like to authenticate with the ACME CA? ------------------------------------------------------------------------------- 1: Nginx Web Server plugin - Alpha (nginx) 2: Spin up a temporary webserver (standalone) 3: Place files in webroot directory (webroot) ------------------------------------------------------------------------------- ------------------------------------------------------------------------------- Select the appropriate number [1-3] then [enter] (press 'c' to cancel): 3 Plugins selected: Authenticator webroot, Installer None Enter email address (used for urgent renewal and security notices) (Enter 'c' to cancel): info@sevo44.ru ------------------------------------------------------------------------------- Please read the Terms of Service at https://letsencrypt.org/documents/LE-SA-v1.2-November-15-2017.pdf. You must agree in order to register with the ACME server at https://acme-v01.api.letsencrypt.org/directory ------------------------------------------------------------------------------- (A)gree/(C)ancel: A ------------------------------------------------------------------------------- Would you be willing to share your email address with the Electronic Frontier Foundation, a founding partner of the Let's Encrypt project and the non-profit organization that develops Certbot? We'd like to send you email about EFF and our work to encrypt the web, protect its users and defend digital rights. ------------------------------------------------------------------------------- (Y)es/(N)o: Y Please enter in your domain name(s) (comma and/or space separated) (Enter 'c' to cancel): cloud.sevo44.ru --- доменное имя на которое получаем Obtaining a new certificate Performing the following challenges: http-01 challenge for cloud.sevo44.ru Select the webroot for cloud.sevo44.ru: ------------------------------------------------------------------------------- 1: Enter a new webroot ------------------------------------------------------------------------------- Press 1 [enter] to confirm the selection (press 'c' to cancel): 1 Input the webroot for cloud.sevo44.ru: (Enter 'c' to cancel): /var/www/nextcloud/htdocs/ --- путь до корневой папки ресурса Waiting for verification... Cleaning up challenges IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/cloud.sevo44.ru/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/cloud.sevo44.ru/privkey.pem Your cert will expire on 2018-02-19. To obtain a new or tweaked version of this certificate in the future, simply run certbot again. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
Обязательно указывайте правильный и рабочий почтовый ящик чтобы в последствии в случае неудачного продления сертификата получать такое письмо с предупреждением:
Hello,
Your certificate (or certificates) for the names listed below will expire in
19 days (on 15 Dec 17 11:21 +0000). Please make sure to renew
your certificate before then, or visitors to your website will encounter errors.webinar.sevo44.ru
В результате успешной установки мы получим необходимые файлы которые необходимо прописать в файл настройки Nginx для сайта. Ниже я расскажу что и как прописать в файл настройки сайта а сейчас остановлюсь на автоматической продлении и основных моментах работы этого сервиса.
Расположение файлов для работы SSL от Let’s Encrypt
Перейдем в папку с сервисом и выведем информацию о тот что находится в папке:
cd /etc/letsencrypt/ ls = вывод команды = accounts csr live renewal ssl-dhparams.pem archive keys options-ssl-nginx.conf renewal-hooks
Назначение папок и файлов:
- live — в этой папке находятся все необходимые файлы для работы ssl разбитые папками на каждый ресурс для которого получались ключи,
- renewal — параметры которые будут использованы при продлении сертификата,
- options-ssl-nginx.conf — необходимые параметры которые необходимо указать в файле настройки nginx,
- ssl-dhparams.pem — файл параметров Диффи-Хеллмана необходимый для лучшей безопасности при работе сайта с SSL.
Внимание! В случае если вам необходимо сменить тип получения сертификата необходимо запустить заново команду «certbot certonly» и указать необходимые параметры для нужного домена и файл отвечающий за параметры продления сертификата будет обновлен в папке renewal!
Автоматическое продление сертификатов Let’s Encrypt
Ручное обновление всех сертификатов сводится к вводу в командной строке команды:
certbot renew
Для проверки работы сервиса но без обновления сертификатов достаточно указать команду:
certbot renew --dry-run
В случае успешной проверки нам достаточно создать файл в необходимой папке и указать необходимый код:
vim /etc/cron.d/cartboot = вывод команды с необходимыми изменениями = # Получение сертификатов 30 4 * * 1 root /usr/bin/certbot renew >> /var/log/cron-renew.log 35 4 * * 1 root /etc/init.d/nginx reload
Согласно этого кода в 4.30 каждый понедельник будет производится получение новых ssl сертификатов взамен старым, если их пора обновлять, с записью лога в файл и последующая перезагрузка сервиса Nginx.
Файл лога будет выглядеть:
cat /var/log/cron-renew.log = часть вывода команды = -------------------------------------------------------------------- Processing /etc/letsencrypt/renewal/cloud.sevo44.ru.conf -------------------------------------------------------------------- -------------------------------------------------------------------- Processing /etc/letsencrypt/renewal/office.sevo44.ru.conf -------------------------------------------------------------------- -------------------------------------------------------------------- The following certs are not due for renewal yet: /etc/letsencrypt/live/cloud.sevo44.ru/fullchain.pem (skipped) /etc/letsencrypt/live/office.sevo44.ru/fullchain.pem (skipped) No renewals were attempted.
В моем случае была попытка обновить 2 сертификата, но они актуальны и замена не производилась.
Файл настройки NextCloud для работы с SSL Nginx
Исходя из всего сказанного выше мой файл настройки получил такой вид:
vim /etc/nginx/conf.d/nextcloud.conf = вывод команды c пояснениями = # cloud.sevo44.ru 443 http2 upstream php-handler { #server 127.0.0.1:9000; server unix:/run/php-fpm.socket; } server { listen 80; server_name cloud.sevo44.ru; rewrite ^ https://$server_name$request_uri? permanent; } server { # Работа сайта на ssl c включением протокола http2 listen 443 ssl http2; server_name cloud.sevo44.ru; # Path to the root of your installation root /var/www/nextcloud/htdocs/; #Logs access_log /var/www/nextcloud/logs/access.log main; error_log /var/www/nextcloud/logs/error.log; #Max upload size client_max_body_size 10G; fastcgi_buffers 64 4K; # Enable gzip but do not remove ETag headers gzip on; gzip_vary on; gzip_comp_level 4; gzip_min_length 256; gzip_proxied expired no-cache no-store private no_last_modified no_etag auth ; gzip_types application/atom+xml application/javascript application/json appl ication/ld+json application/manifest+json application/rss+xml application/vnd.ge o+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-ap p-manifest+json application/xhtml+xml application/xml font/opentype image/bmp im age/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text /vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy; # Uncomment if your server is build with the ngx_pagespeed module # This module is currently not supported. #pagespeed off; #Если самоподписной ssl #ssl_certificate /etc/ssl/nginx/cloud.sevo44.loc.crt; #ssl_certificate_key /etc/ssl/nginx/cloud.sevo44.loc.key; #Для ssl ssl_certificate /etc/letsencrypt/live/cloud.sevo44.ru/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/cloud.sevo44.ru/privkey.pem; ssl_session_cache shared:le_nginx_SSL:1m; ssl_session_timeout 1440m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_ciphers 'ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE -ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA3 84:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA3 84:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA:ECDH E-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES256-SHA384:ECDHE-ECDSA-A ES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-RSA- AES256-SHA256:DHE-RSA-AES256-SHA:ECDHE-ECDSA-DES-CBC3-SHA:ECDHE-RSA-DES-CBC3-SHA :EDH-RSA-DES-CBC3-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-S HA256:AES128-SHA:AES256-SHA:DES-CBC3-SHA:!DSS'; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; # 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=15768000; # includeSubDomains; preload;"; # # WARNING: Only add the preload option once you read about # the consequences in https://hstspreload.org/. This option # will add the domain to a hardcoded list that is shipped # in all major browsers and getting removed from this list # could take several months. add_header Strict-Transport-Security "max-age=31536000; includeSubDomains"; add_header X-Content-Type-Options nosniff; 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; location = /robots.txt { allow all; log_not_found off; access_log off; } #Для получения сертификата ssl location ~ /.well-known { allow all; } # 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; } # Uncomment if your server is build with the ngx_pagespeed module # This module is currently not supported. #pagespeed off; 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]|u pdater/.+|ocs-provider/.+)\.php(?:$|/) { 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_param HTTPS on; #Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass php-handler; fastcgi_intercept_errors on; 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=15778463"; # 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;"; # # WARNING: Only add the preload option once you read about # the consequences in https://hstspreload.org/. This option # will add the domain to a hardcoded list that is shipped # in all major browsers and getting removed from this list # could take several months. add_header X-Content-Type-Options nosniff; 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; } }
Ресурсы проверки SSL и Http2 сайта
Проверим сторонними ресурсами как установился наш SSL-сертификат.
- SSLChecker — cервис проверки настройки SSL,
- SSLReport — сервис проверки SSL но более детальный.
Проверим работу http2 протокола:
- HTTP/2 Test — сервис показывающий проверяющий работу http2.
Ротация логов сайта Nginx
Так как логи сайта выведены из стандартного места хранения логов и файл отвечающего за легирование сайтов уже нестроен, согласно предыдущей статьи LEMP сервер на Calculate Linux, то нам достаточно добавить одну строчку:
vim /etc/logrotate.d/sites
= вывод команды с пояснениями =
# Указываем в каждой строчке необходимый сайт
/var/www/pma/logs/*log
/var/www/nextcloud/logs/*log
{
create 0644 nginx nginx
daily
rotate 60
missingok
notifempty
compress
sharedscripts
postrotate
test -r /run/nginx.pid && kill -USR1 `cat /run/nginx.pid`
endscript
}
Результат
Установка и работа своего облачного хранилища средствами свободного программного обеспечения была основная задача статьи и она успешно реализована. Было желание описать в этой статье более подробную настройку, но статья стала получатся слишком большая и было решено рассказать про детальную настройку NextCloud в следующей статье. Будет затронуто описанием установки самых популярных расширений для удобной работы облачного ресурса NextCloud.
Я использовал отличную статью по покупке и настройке https на nginx
onlinebd.ru/blog/instrukciya-po-nastroike-https-dlya-php-fpm-s-ocenkoi-a
Как в целом впечатление о продукте? У меня давно витают мысли перейти с яндекс диска на свое сетевое хранилище. Но всегда смущает, что яндекс работает стабильно и предсказуемо, я всегда могу получить доступ к данным, а опенсорсные программы возможно не обладают такой же стабильностью и надежностью. Но реально я их не проверял еще, руки не доходят.
Начинал я с OwnCloud. После тестирования NextCloud однозначно могу сказать что удобств и расширений в NextCloud больше. Есть нюансы в настройке про которые расскажу в следующей статье. Обновления проходят без проблем… Ну а по функционалу и возможностей мне нравится больше чем Yandex.Disk. Примантировал в NextCloud свои все Yandex диски и все теперь в одном месте 😉 Есть там система видео звонков между пользователей, чат, привязка календарей всех популярных, групповые всякие политики, подключение хоть к LDAP хоть к AD….. А стабильность он в руках пользователя только… с кривыми руками и самые стабильные программы ломаются 🙂
Подключение яндекс дисков к своему хранилищу очень удобно. Не знал об этой возможности. Надо будет попробовать.