Nextcloud-сервер на базе одноплатного ПК BananaPi

Представляю вашему вниманию продолжение статьи - Установка облачного хранилища NextCloud в окружение Nginx+PHP-FPM и сегодня я настрою облачное хранилище на домашнем микро-пк на базе ARM-системы Banana PI. Фактически это доработка статьи про настройке Banana PI для платформы x86 под архитектуру ARM.

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 02 Апр 2018 (последние правки 1 месяц)

apt-get aptitude certbot certonly cloud cv dev email git install live nextcloud nginx ssl tar ubuntu

Я буду рассматривать только особенности реализации хранилища под ARM-платформу которые были выявлены в процессе переноса моего облачного хранилища от хостинг-провайдера себе на домашний микро-сервер и если вас интересует подробное руководство по установке и настройке NextCloud, я рекомендую обратиться к статье "Установка облачного хранилища NextCloud в окружение Nginx+PHP-FPM".

Обноплатный микро-ПК на базе BananaPI

Настройка Let's encrypt в ARM-окружении

Честно говоря ничем не отличается от настройки в x86 окружении, но раз уж в прошлой статье я не рассматривал его, то сейчас самое время рассмотреть настройку на примере домена cloud.gita-dev.ru и начнем мы естественно с установки CertBot который отвечает за управление сертификатами Let's encrypt.

Для Ubuntu Linux версии 16.04 просто выполните следующие команды:

# apt-get update
# apt-get install software-properties-common
# add-apt-repository ppa:certbot/certbot
# apt-get update
# aptitude install python-certbot-nginx

Создаем тестовый конфиг Nginx для нашего домена чтобы осуществить регистрацию и привязку сертификата Let's encrypt. Конфигурационный файл в простейшем виде выглядит следующим образом (/etc/nginx/sites-available/cloud.gita-dev.ru.conf):

server {
        listen 80;
        listen [::]:80;

        server_name cloud.gita-dev.ru;

        root /var/www/cloud.gita-dev.ru;
        index index.html;

        location / {
                try_files $uri $uri/ =404;
        }
}

Используя Let's encrypt получим SSL-сертификат для этого домена и это очень просто, вам достаточно выполнить команду:

# certbot certonly --nginx -d cloud.gita-dev.ru

В идеале получение сертификата пройдет в полностью автоматическом режиме, хотя при первом запуске мастер задаст вам несколько вопросов:

Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator nginx, Installer nginx
Enter email address (used for urgent renewal and security notices) (Enter 'c' to
cancel): service@gita-dev.ru
Starting new HTTPS connection (1): acme-v01.api.letsencrypt.org

-------------------------------------------------------------------------------
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
Starting new HTTPS connection (1): supporters.eff.org
Obtaining a new certificate

При первом запуске вам предложат указать адрес электронной почты на который будут отправляться извещения о том, что срок действия сертификата подходит к концу и конечно же требуется согласиться с условиями лицензионного соглашения (как без этого).

Если получение сертификата прошло успешно, то вы получите сообщение:

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/cloud.gita-dev.ru/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/cloud.gita-dev.ru/privkey.pem
   Your cert will expire on 2018-07-01. 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

Следовательно необходимые нам SSL-сертификаты находятся в каталоге /etc/letsencrypt/live/cloud.gita-dev.ru/, но так как сертификаты выдается лишь на три месяца нам необходимо создать небольшой скрипт автоматического обновления SSL-сертификатов в каталоге /etc/cron.monthly:

#!/bin/sh
certbot renew

Не забудьте сделать скрипт исполняемым:

# chmod +x ./lets-update.sh

Адаптируем скрипт PHP-Nginx окружения

Адаптируем скрипт из предыдущей реализации к работе с сертификатами Let's encrypt.

server {
    listen 80;
    server_name cloud.gita-dev.ru;
    return 301 https://cloud.gita-dev.ru$request_uri;

}

server {
    listen 443 ssl;
    ssl_certificate /etc/letsencrypt/live/cloud.gita-dev.ru/fullchain.pem; # managed by Certbot
    ssl_certificate_key /etc/letsencrypt/live/cloud.gita-dev.ru/privkey.pem; # managed by Certbot
    include /etc/letsencrypt/options-ssl-nginx.conf; # managed by Certbot

    server_name cloud.gita-dev.ru;

    access_log /var/log/nginx/cloud.gita-dev.ru.log;
    error_log /var/log/nginx/cloud.gita-dev.ru-error.log;

    add_header Strict-Transport-Security "max-age=63072000;";
    client_max_body_size 10G;

    location / {

      proxy_pass http://127.0.0.1:8080;
      proxy_read_timeout    6h;
      proxy_connect_timeout 600s;

      proxy_set_header X-Real-IP $remote_addr;

      proxy_set_header X-Forwarded-Host $host;
      proxy_set_header X-Forwarded-Server $host;

      proxy_set_header X-Forwarded-for $proxy_add_x_forwarded_for;
      proxy_set_header Host $host:$server_port;
      proxy_set_header X-Forwarded-Proto $scheme;

    }

}

upstream php-handler {
    server unix:/var/run/php/php7.0-fpm.sock;
}

server {
    listen 8080;
    server_name 127.0.0.1;
    root /var/www/vhosts/next-cloud/;

    access_log /var/log/nginx/cloud.gita-dev.ru.log;
    error_log /var/log/nginx/cloud.gita-dev.ru-error.log;

    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;

    proxy_set_header        X-Real-IP       $remote_addr;
    proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    rewrite ^/.well-known/host-meta /public.php?service=host-meta last;
    rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json;

    location = /.well-known/carddav {
      return 301 $scheme://$host/remote.php/dav;
    }

    location = /.well-known/caldav {
      return 301 $scheme://$host/remote.php/dav;
    }

    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    gzip 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/.+|core/templates/40[34])\.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 modHeadersAvailable true;
        fastcgi_param front_controller_active true;
        fastcgi_param REMOTE_ADDR $http_x_real_ip;
        fastcgi_param PHP_VALUE "
                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";
        fastcgi_pass php-handler;
        fastcgi_intercept_errors on;
    }

    location ~ ^/(?:updater|ocs-provider)(?:$|/) {
        try_files $uri/ =404;
        index index.php;
    }

    location ~* \.(?:css|js|woff|svg|gif)$ {
        try_files $uri /index.php$uri$is_args$args;
        access_log off;
    }

    location ~* \.(?:png|html|ttf|ico|jpg|jpeg)$ {
        try_files $uri /index.php$uri$is_args$args;
        access_log off;
    }

}

Конфигурация выглядит немного монстроидально, но именно такая конфигурация используется у меня сейчас в продакшн и именно в этой конфигурации были вычищены все мелкие ошибки выявленные в процессе эксплуатации.

Настройка окружения Nginx - PHP-FPM

Дальнейшая настройка ничем не отличается от установки для платформы x86 и естественно, что визуально NextCloud на платформах x86 и ARM не отличается.

Запуск NextCloud на платформе ARM

Похожие статьи

Установка облачного хранилища NextCloud в окружение Nginx+PHP-FPM

Установка облачного хранилища NextCloud в окружение Nginx+PHP-FPM

Представляем вашему вниманию подробную инструкцию по настройке NextCloud (с установкой плагинов и ssl-сертификатов для реализации защищенного https-протокола). Nextcloud - пакет клиент-серверного программного обеспечения для создания облачного хранилища. Фактически, программное обеспечение аналогично DropBox, Яндекс.Диск и GoogleDrive, но при этом является отрытым ПО и может быть установлено на вашем сервере и интегрироваться с сервисами компании, такими как Active Directory. Функционал облачного хранилища может быть расширен при помощи плагинов и при некотором желании из облачного хранилища можно построить небольшую CRM.


Сборка клиента облачного хранилища NextCloud из исходных кодов

Сборка клиента облачного хранилища NextCloud из исходных кодов

Для облачного хранилища Next Cloud (форк проекта OwnCloud), на данный момент, не предоставляется собранный клиент для платформы Linux в виде ночных-билдов для тестирования, но его можно собрать из исходных кодов. Сборка не представляет особой сложности и единственный вопрос который может возникнуть- это разрешить ряд зависимостей необходимых для сборки. В дальнейшем мы планируем настроить сборку пакета для Ubuntu Linux, но сейчас нет времени этим заниматься, тем более, что в клиенте предусмотрена интеграция с KDE (предыдущей версии) и сейчас эта интеграция сломана причем похоже и в OwnCloud тоже.


Установка Nexus Repository Manager (NXRM) 3

Установка Nexus Repository Manager (NXRM) 3

Сегодня мне пришлось устанавливать довольно специфичное программное обеспечение. От меня требовалась только установка, а дальнейшая настройка в мою задачу не входила и на всякий случай я решил описать последовательность установки.


Настройка авторизации в Next Cloud с учетными данными Active Directory

Настройка авторизации в Next Cloud с учетными данными Active Directory

Если вы делаете небольшое облако на команду в 5-7 чел, то конечно никаких интеграций с Active Direcory можно и не городить, но когда речь заходит о крупной инсталляции человек так на 100-200, то как вы понимаете заводить их отдельно особого смысла не имеет, а пользователю придется помнить пароль к еще одной информационной системе вместо одного пароля ко всем сервисам. Сегодня будем рассматривать как раз второй вариант.


Отзывы и комментарии