Встановлення NextCloud на Raspberry Pi під управлінням Arch Linux ARM [ч. 1]

Використовуємо власний сервер для управління своїми файлами та даними (альтернатива Google Drive)

встановлюємо на локальний сервер Raspberry Pi, використовуючи SQLite як базу даних, Nginx як веб-сервер

Встановити пререквізити

Веб-сервер (Nginx)
sudo pacman -S nginx
PHP з додатками
sudo pacman -S php php-gd php-intl

Для активування php-dg потрібно відкоментити (вилучити крапку з комою) ;extension=gd

sudo nano /etc/php/php.ini
...
extension=gd
База даних (sqlite)
sudo pacman -S sqlite php-sqlite

Підключити БД для PHP (відкоментувати)

sudo nano /etc/php/php.ini
...
extension=sqlite3
extension=pdo_sqlite
Встановити nextcloud
sudo pacman -S nextcloud

Налаштування

  • підключити модуль OPCache та iconv в PHP
sudo nano /etc/php/php.ini
...
zend_extension=opcache
extension=iconv
  • налаштувати конфігурацію OPCache (продовжуємо у файлі /etc/php/php.ini)

    всі зміни в цьому файлі в розділі [opcache]

    налаштування потрібно відкоментувати (вилучити ;) і внести зміни/значення, як вказано далі

    opcache.enable = 1
    opcache.interned_strings_buffer=8
    opcache.max_accelerated_files=10000
    opcache.memory_consumption=128
    opcache.save_comments=1
    opcache.revalidate_freq=1
    
  • налаштувати FastCGI (для Nginx)

    sudo pacman -S php-fpm
    

    додати можливість використовувати розширення .html, .htm

    sudo nano /etc/php/php-fpm.d/www.conf
    ...
    security.limit_extensions = .php .php3 .php4 .php5 .php7 .html .htm
    

    відкоментувати налаштування env[PATH] у файлі /etc/php/php-fpm.d/www.conf

    sudo nano /etc/php/php-fpm.d/www.conf
    ...
    env[PATH] = /usr/local/bin:/usr/bin:/bin
    

    запускаємо сервіс php-fpm

    sudo systemctl start php-fpm
    sudo systemctl enable php-fpm
    sudo systemctl restart nginx
    
  • налаштувати сайт (створити файл /etc/nginx/sites-available/nextcloud.conf)

    sudo nano /etc/nginx/sites-available/nextcloud.conf

    upstream php-handler {
        server unix:/run/php-fpm/php-fpm.sock;
    }
    
    server {
        listen 80;
        listen [::]:80;
        server_name nextcloud.local;
    
        # ssl_certificate /etc/ssl/nginx/cloud.example.com.crt;
        # ssl_certificate_key /etc/ssl/nginx/cloud.example.com.key;
    
        # Path to the root of your installation
        root /usr/share/webapps/nextcloud/;
    
        # set max upload size
        client_max_body_size 512M;
        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 application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/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;
    
        location / {
          rewrite ^ /index.php$request_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, css and map files
        # Make sure it is BELOW the PHP block
        location ~ \.(?:css|js|woff2?|svg|gif|map)$ {
          try_files $uri /index.php$request_uri;
          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;
          add_header Referrer-Policy no-referrer;
    
          # Optional: Don't log access to assets
          access_log off;
        }
    
        location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ {
          try_files $uri /index.php$request_uri;
          # Optional: Don't log access to other assets
          access_log off;
        }
    }
    

    В server_name використано домен nextcloud.local. Для того, щоб все працювало із домашнього PC (тобто, щоб зайти із ноутбука/комп'ютера у веб-браузері), на особистому комп'ютері необхідно додати адресу хосту Raspberry Pi до файлу /etc/hosts (для *GNU/Linux систем) (додати IP адрес Raspberry Pi та домен nextcloud.local)

    sudo nano /etc/hosts
    ...
    # IP of RPi		# domain name
    192.168.1.5		 nextcloud.local
    
  • підключити сайт (до віртуального хоста Nginx)

    # якщо відсутня, створити папку /etc/nginx/sites-enabled/
    sudo mkdir -p /etc/nginx/sites-enabled/
    
    # активуємо вебсайт
    sudo ln -s /etc/nginx/sites-available/nextcloud.conf /etc/nginx/sites-available/nextcloud 
    

    тестимо чи всі налаштування nginx працюють

    sudo nginx -t
    

    якщо не видало помилок, то все ок.

  • створити папку для даних (файлів), та надати права доступу вебсерверу до папки з програмами (застосунками)

    # створюємо папку для даних та змінюємо права доступу
    sudo mkdir /var/nextcloud
    sudo chown http:http /var/nextcloud
    sudo chmod 750 /var/nextcloud
    
    # надаємо веб-серверу права доступу до папки із застосунками
    sudo chown -R http:http /usr/share/webapps/nextcloud/apps
    sudo chmod 750 /usr/share/webapps/nextcloud/apps
    

Перший запуск та створення профілю адміністратора

Заходимо із свого PC на сторінку nextcloud.local.

Відкриється меню для створення профілю адміністратора. Також з'явиться повідомлення, що використання SQLite не оптимально (ігноруємо).

Первинне завантаження

  • вводимо логін і пароль. Пароль вибрати супер надійний :)

  • клікаємо на "сховище та база даних" нижче в розділі "каталог даних" вводимо /var/nextcloud

  • нажати "Завершити встановлення"

Сервер здійснить налаштування і переадресує на вікно входу. Налаштування завершено, можна починати користуватись

Вікно входу


В наступній частині розглянемо використання SSL та доступ до Nextcloud серверу по HTTPS