Цей сайт використовує файли cookie

Цей веб-сайт використовує файли cookie, щоб забезпечити вам найкращий досвід використання нашого веб-сайту.

Дізнайтесь більше Погоджуюсь

02. Посібник із налаштування: налаштування Nextcloud Друк

  • 0

 Замовити зараз | Завантажити | Питання та відповіді

Nextcloud, включаючи Nextcloud Office на Debian 10 з nginx, MariaDB, PHP 8.1, Let's Encrypt, Redis, Fail2ban та ufw

 

1. Підготовка та встановлення веб-сервера nginx

для встановлення наступних пакетів програмного забезпечення як обов'язкової основи для роботи сервера:

apt-get install -y apt-transport-https bash-completion bzip2 ca-certificates cron curl dialog dirmngr ffmpeg ghostscript git gpg gnupg gnupg2 htop jq libfile-fcntllock-perl libfontconfig1 libfuse2 locate lsb-release net-tools rsyslog screen smbclient socat software-properties-common ssl-cert tree unzip wget zip

Введіть майбутнє ім'я сервера як в файл hosts, так і в файл імені хоста

nano /etc/hosts
127.0.0.1 localhost 
public_IP your.domain.de 

 

Ім'я сервера повинно бути вказане як FQDN, тобто повністю якісне:

nano /etc/hostname
your.domain.de
reboot now

Переконайтеся, що встановлено пакет "debian-archive-keyring":

Додайте ключ nginx на свій сервер:

apt install -y debian-archive-keyring
curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null

Додайте джерела програмного забезпечення для nginx та PHP:

echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/mainline/debian `lsb_release -cs` nginx" | tee /etc/apt/sources.list.d/nginx.list 
echo "deb [arch=amd64] https://packages.sury.org/php/ $(lsb_release -cs) main" | tee /etc/apt/sources.list.d/php.list

Для того, щоб мати змогу довіряти також джерелам PHP, ми також додаємо цей ключ:

wget -qO - https://packages.sury.org/php/apt.gpg | apt-key add -

Підготовка до встановлення сервера баз даних MariaDB:

wget https://downloads.mariadb.com/MariaDB/mariadb_repo_setup 
chmod +x mariadb_repo_setup && ./mariadb_repo_setup --mariadb-server-version="mariadb-10.8"

Тепер ми оновлюємо систему і генеруємо тимчасові "self-signed" сертифікати, які пізніше будуть замінені на повноцінні сертифікати Let's Encrypt.

Оновлення сервера:

apt update && make-ssl-cert generate-default-snakeoil -y

Для того, щоб переконатися, що залишки попередніх встановлень не заважають роботі веб-сервера, ми видаляємо їх:

apt remove nginx nginx-extras nginx-common nginx-full -y --allow-change-held-packages

Ми також переконуємося, що контрфорте (Apache2), відповідник nginx веб-сервера, ні активний, ні встановлений.

systemctl stop apache2.service 
systemctl disable apache2.service

Тепер підготовка до встановлення веб-сервера завершена, і ми можемо встановити його за допомогою наступної команди

apt install -y nginx

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

systemctl enable nginx.service

З метою майбутніх налаштувань за замовчуванням зберігається конфігурація, і відкривається новий файл конфігурації:

mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak 
touch /etc/nginx/nginx.conf && nano /etc/nginx/nginx.conf

Скопіюйте весь наступний вміст у файл:

user www-data;
worker_processes auto;
pid /var/run/nginx.pid;
events {
  worker_connections 2048;
  multi_accept on; use epoll;
  }
http {
  log_format criegerde escape=json
  '{'
    '"time_local":"$time_local",'
    '"remote_addr":"$remote_addr",'
    '"remote_user":"$remote_user",'
    '"request":"$request",'
    '"status": "$status",'
    '"body_bytes_sent":"$body_bytes_sent",'
    '"request_time":"$request_time",'
    '"http_referrer":"$http_referer",'
    '"http_user_agent":"$http_user_agent"'
  '}';
  access_log /var/log/nginx/access.log criegerde;
  error_log /var/log/nginx/error.log warn;
  #set_real_ip_from 127.0.0.1;
  real_ip_header X-Forwarded-For;
  real_ip_recursive on;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  sendfile on;
  send_timeout 3600;
  tcp_nopush on;
  tcp_nodelay on;
  open_file_cache max=500 inactive=10m;
  open_file_cache_errors on;
  keepalive_timeout 65;
  reset_timedout_connection on;
  server_tokens off;
  resolver 127.0.0.53 valid=30s;
  resolver_timeout 5s;
  include /etc/nginx/conf.d/*.conf;
 }

Збережіть файл і закрийте його, щоб потім перезапустити веб-сервер:

systemctl restart nginx.service

В підготовці до SSL-сертифікатів і веб-каталогів ми створюємо чотири папки та встановлюємо правильні дозволи:

mkdir -p /var/log/nextcloud /var/nc_data /var/www/letsencrypt/.well-known/acme-challenge /etc/letsencrypt/rsa-certs /etc/letsencrypt/ecc-certs 
chown -R www-data:www-data /var/nc_data /var/www /var/log/nextcloud

Встановлення веб-сервера вже завершено, і ми продовжуємо зі встановленням та налаштуванням PHP.

 
2. Встановлення та налаштування PHP 8.1 (fpm)

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

apt update && apt install -y php-common \
php8.1-{fpm,gd,curl,xml,zip,intl,mbstring,bz2,ldap,apcu,bcmath,gmp,imagick,igbinary,mysql,redis,smbclient,cli,common,opcache,readline} \
imagemagick --allow-change-held-packages

Необов'язково (якщо ви плануєте використовувати Samba та/або cifs-каталоги або підключення LDAP(s)):

apt install -y ldap-utils nfs-common cifs-utils

Встановіть правильний формат дати для правильного ведення журналу:

timedatectl set-timezone Europe/Warsaw

Перш ніж розпочати оптимізацію PHP, давайте зробимо резервну копію файлів конфігурації:

cp /etc/php/8.1/fpm/pool.d/www.conf /etc/php/8.1/fpm/pool.d/www.conf.bak
cp /etc/php/8.1/fpm/php-fpm.conf /etc/php/8.1/fpm/php-fpm.conf.bak
cp /etc/php/8.1/cli/php.ini /etc/php/8.1/cli/php.ini.bak
cp /etc/php/8.1/fpm/php.ini /etc/php/8.1/fpm/php.ini.bak
cp /etc/php/8.1/fpm/php-fpm.conf /etc/php/8.1/fpm/php-fpm.conf.bak
cp /etc/php/8.1/mods-available/apcu.ini /etc/php/8.1/mods-available/apcu.ini.bak
cp /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xml.bak

Для налаштування PHP під вашу систему розраховуються деякі параметри, просто виконайте наступні рядки:

AvailableRAM=$(awk '/MemAvailable/ {printf "%d", $2/1024}' /proc/meminfo)
AverageFPM=$(ps --no-headers -o 'rss,cmd' -C php-fpm8.1 | awk '{ sum+=$1 } END { printf ("%d\n", sum/NR/1024,"M") }')
FPMS=$((AvailableRAM/AverageFPM))
PMaxSS=$((FPMS*2/3))
PMinSS=$((PMaxSS/2))
PStartS=$(((PMaxSS+PMinSS)/2))

 

sed -i "s/;env\[HOSTNAME\] = /env[HOSTNAME] = /" /etc/php/8.1/fpm/pool.d/www.conf
sed -i "s/;env\[TMP\] = /env[TMP] = /" /etc/php/8.1/fpm/pool.d/www.conf
sed -i "s/;env\[TMPDIR\] = /env[TMPDIR] = /" /etc/php/8.1/fpm/pool.d/www.conf
sed -i "s/;env\[TEMP\] = /env[TEMP] = /" /etc/php/8.1/fpm/pool.d/www.conf
sed -i "s/;env\[PATH\] = /env[PATH] = /" /etc/php/8.1/fpm/pool.d/www.conf
sed -i 's/pm = dynamic/pm = static/' /etc/php/8.1/fpm/pool.d/www.conf
sed -i 's/pm.max_children =.*/pm.max_children = '$FPMS'/' /etc/php/8.1/fpm/pool.d/www.conf
sed -i 's/pm.start_servers =.*/pm.start_servers = '$PStartS'/' /etc/php/8.1/fpm/pool.d/www.conf
sed -i 's/pm.min_spare_servers =.*/pm.min_spare_servers = '$PMinSS'/' /etc/php/8.1/fpm/pool.d/www.conf
sed -i 's/pm.max_spare_servers =.*/pm.max_spare_servers = '$PMaxSS'/' /etc/php/8.1/fpm/pool.d/www.conf
sed -i "s/;pm.max_requests =.*/pm.max_requests = 1000/" /etc/php/8.1/fpm/pool.d/www.conf
sed -i "s/allow_url_fopen =.*/allow_url_fopen = 1/" /etc/php/8.1/fpm/php.ini
sed -i "s/output_buffering =./output_buffering = 'Off'/" /etc/php/8.1/cli/php.ini
sed -i "s/max_execution_time =./max_execution_time = 3600/" /etc/php/8.1/cli/php.ini
sed -i "s/max_input_time =./max_input_time = 3600/" /etc/php/8.1/cli/php.ini
sed -i "s/post_max_size =./post_max_size = 10240M/" /etc/php/8.1/cli/php.ini
sed -i "s/upload_max_filesize =./upload_max_filesize = 10240M/" /etc/php/8.1/cli/php.ini
sed -i "s/;date.timezone./date.timezone = Europe/Berlin/" /etc/php/8.1/cli/php.ini
sed -i "s/;cgi.fix_pathinfo.*/cgi.fix_pathinfo=0/" /etc/php/8.1/cli/php.ini

sed -i "s/memory_limit = 128M/memory_limit = 1G/" /etc/php/8.1/fpm/php.ini
sed -i "s/output_buffering =./output_buffering = 'Off'/" /etc/php/8.1/fpm/php.ini
sed -i "s/max_execution_time =./max_execution_time = 3600/" /etc/php/8.1/fpm/php.ini
sed -i "s/max_input_time =./max_input_time = 3600/" /etc/php/8.1/fpm/php.ini
sed -i "s/post_max_size =./post_max_size = 10G/" /etc/php/8.1/fpm/php.ini
sed -i "s/upload_max_filesize =./upload_max_filesize = 10G/" /etc/php/8.1/fpm/php.ini
sed -i "s/;date.timezone./date.timezone = Europe/Berlin/" /etc/php/8.1/fpm/php.ini
sed -i "s/;cgi.fix_pathinfo./cgi.fix_pathinfo=0/" /etc/php/8.1/fpm/php.ini
sed -i "s/;session.cookie_secure./session.cookie_secure = True/" /etc/php/8.1/fpm/php.ini
sed -i "s/;opcache.enable=./opcache.enable=1/" /etc/php/8.1/fpm/php.ini
sed -i "s/;opcache.validate_timestamps=./opcache.validate_timestamps=0/" /etc/php/8.1/fpm/php.ini
sed -i "s/;opcache.enable_cli=./opcache.enable_cli=1/" /etc/php/8.1/fpm/php.ini
sed -i "s/;opcache.memory_consumption=./opcache.memory_consumption=256/" /etc/php/8.1/fpm/php.ini
sed -i "s/;opcache.interned_strings_buffer=./opcache.interned_strings_buffer=32/" /etc/php/8.1/fpm/php.ini
sed -i "s/;opcache.max_accelerated_files=./opcache.max_accelerated_files=100000/" /etc/php/8.1/fpm/php.ini
sed -i "s/;opcache.revalidate_freq=./opcache.revalidate_freq=60/" /etc/php/8.1/fpm/php.ini
sed -i "s/;opcache.save_comments=./opcache.save_comments=1/" /etc/php/8.1/fpm/php.ini

sed -i "s|;emergency_restart_threshold.|emergency_restart_threshold = 10|g" /etc/php/8.1/fpm/php-fpm.conf
sed -i "s|;emergency_restart_interval.|emergency_restart_interval = 1m|g" /etc/php/8.1/fpm/php-fpm.conf
sed -i "s|;process_control_timeout.*|process_control_timeout = 10|g" /etc/php/8.1/fpm/php-fpm.conf

sed -i '$aapc.enable_cli=1' /etc/php/8.1/mods-available/apcu.ini

sed -i "s/rights="none" pattern="PS"/rights="read|write" pattern="PS"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights="none" pattern="EPS"/rights="read|write" pattern="EPS"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/" /etc/ImageMagick-6/policy.xml
sed -i "s/rights="none" pattern="XPS"/rights="read|write" pattern="XPS"/" /etc/ImageMagick-6/policy.xml

Тепер перезапустіть обидва сервіси, nginx та PHP:

systemctl restart php8.1-fpm.service nginx.service

PHP вже встановлено і оптимізовано для Nextcloud. Для додаткової оптимізації PHP давайте розпочнемо встановлення та налаштування сервера баз даних MariaDB.

 

3. Встановлення та конфігурація MariaDB 10.8

MariaDB встановлюється за допомогою цієї команди:

apt update && apt install -y mariadb-server

Тепер давайте забезпечимо безпеку сервера бази даних за допомогою інструмента "mysql_secure_installation". З ініційною встановленням, не існує паролю адміністратора (root), тому ви можете підтвердити запит, натиснувши клавішу ENTER. Рекомендується встановити пароль самостійно, відповідний діалог з'явиться автоматично:

mysql_secure_installation
Введіть поточний пароль для root (натисніть ENTER для відсутності): <ENTER> або введіть пароль
Перейти до аутентифікації через unix_socket [Y/n] Y
Встановити пароль адміністратора (root)? [Y/n] Y
Видалити анонімних користувачів? [Y/n] Y
Заборонити віддалений вхід адміністратору (root)? [Y/n] Y
Видалити тестову базу даних та доступ до неї? [Y/n] Y
Перезавантажити таблиці дозволів зараз? [Y/n] Y

Тепер зупиніть сервер бази даних та збережіть конфігурацію за замовчуванням, щоб ви могли здійснити налаштування негайно після цього:

systemctl stop mysql
mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
nano /etc/mysql/my.cnf

Скопіюйте всі наступні рядки в порожній файл:

[client]
default-character-set = utf8mb4
port = 3306
socket = /var/run/mysqld/mysqld.sock
[mysqld_safe]
log_error=/var/log/mysql/mysql_error.log
nice = 0
socket = /var/run/mysqld/mysqld.sock
[mysqld]
basedir = /usr
bind-address = 127.0.0.1
binlog_format = ROW
bulk_insert_buffer_size = 16M
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
concurrent_insert = 2
connect_timeout = 5
datadir = /var/lib/mysql
default_storage_engine = InnoDB
expire_logs_days = 2
general_log_file = /var/log/mysql/mysql.log
general_log = 0
max_connections = 200
max_heap_table_size = 64M
myisam_sort_buffer_size = 512M
port = 3306
pid-file = /var/run/mysqld/mysqld.pid
query_cache_limit = 2M
query_cache_size = 64M
query_cache_type = 1
query_cache_min_res_unit = 2k
read_buffer_size = 2M
read_rnd_buffer_size = 1M
skip-external-locking
skip-name-resolve
slow_query_log_file = /var/log/mysql/mariadb-slow.log
slow-query-log = 1
socket = /var/run/mysqld/mysqld.sock
sort_buffer_size = 4M
table_open_cache = 400
thread_cache_size = 128
tmp_table_size = 64M
tmpdir = /tmp
transaction_isolation = READ-COMMITTED
[isamchk]
key_buffer = 16M

Збережіть та закрийте файл, а потім перезапустіть сервер бази даних для налаштування бази даних Nextcloud, користувача Nextcloud і його пароля:

systemctl restart mysql.service
mysql -uroot -p
CREATE DATABASE nextclouddb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER nextclouddbuser@localhost identified by 'nextclouddbpassword'; GRANT ALL PRIVILEGES on nextclouddb.* to nextclouddbuser@localhost; FLUSH privileges; quit;

Пояснення :
Назва бази даних: nextclouddb
Користувач бази даних: nextclouddbuser
Пароль користувача бази даних: nextclouddbpassword

mysql -h localhost -uroot -p -e "SELECT @@TX_ISOLATION; SELECT SCHEMA_NAME 'database', default_character_set_name 'charset', DEFAULT_COLLATION_NAME 'collation' FROM information_schema.SCHEMATA WHERE SCHEMA_NAME='nextclouddb'"

 

4. Встановлення та налаштування Redis

Ми встановлюємо сервер Redis, щоб підвищити продуктивність Nextcloud, оскільки Redis зменшує навантаження на базу даних Nextcloud MariaDB:

apt update && apt install -y redis-server

Налаштуйте конфігурацію Redis, зробивши резервну копію та налаштувавши конфігурацію за допомогою наступних команд:

cp /etc/redis/redis.conf /etc/redis/redis.conf.bak
sed -i "s/port 6379/port 0/" /etc/redis/redis.conf
sed -i s/\#\ unixsocket/\unixsocket/g /etc/redis/redis.conf
sed -i "s/unixsocketperm 700/unixsocketperm 770/" /etc/redis/redis.conf
sed -i "s/# maxclients 10000/maxclients 10240/" /etc/redis/redis.conf
usermod -aG redis www-data
cp /etc/sysctl.conf /etc/sysctl.conf.bak
sed -i '$avm.overcommit_memory = 1' /etc/sysctl.conf

На основі відповідного досвіду встановлення, я рекомендую перезавантажити весь сервер один раз:

reboot now

Вітаємо, сервер вже встановлено та налаштовано, тож ви можете почати налаштовувати Nextcloud.

 

5. Встановлення та оптимізація Nextcloud (включно з SSL)

 

Вам потрібно замінити yourdomain.com на свій власний домен

Certbot - це інструмент для створення сертифікатів з командного рядка для Let's Encrypt.

У цьому рецепті ми створимо сертифікат Let's Encrypt за допомогою Certbot. Цей сертифікат потім буде використовуватися в сервері Nextcloud.

Встановіть Certbot

sudo apt update
sudo apt-get install certbot python3-certbot-nginx

Тепер ми налаштуємо різні файли конфігурації vhost (конфігурація веб-сервера), зробимо резервну копію стандартного файлу конфігурації vhost та створимо порожні файли конфігурації vhost.

sudo -s
[ -f /etc/nginx/conf.d/default.conf ] && mv /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak
touch /etc/nginx/conf.d/nextcloud.conf
nano /etc/nginx/conf.d/nextcloud.conf

Скопіюйте всі наступні рядки в файл nextcloud.conf

upstream php-handler {
  server unix:/run/php/php8.1-fpm.sock;
}
map $arg_v $asset_immutable {
"" "";
default "immutable";
}

server {
listen 80 default_server;
server_name nextcloud-test.uuq.pl;
return 301 https://$host$request_uri;
}

server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name yourdomain.com;

ssl_certificate /etc/letsencrypt/live/yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/yourdomain.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/yourdomain.com/cert.pem;

ssl_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_session_tickets off;
ssl_protocols TLSv1.3 TLSv1.2;
ssl_ciphers 'TLS-CHACHA20-POLY1305-SHA256:TLS-AES-256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384';
ssl_ecdh_curve X448:secp521r1:secp384r1;
ssl_prefer_server_ciphers on;
ssl_stapling on;
ssl_stapling_verify on;
client_max_body_size 10G;
client_body_timeout 3600s;
fastcgi_buffers 64 4K;
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/wasm 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;
add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;
add_header Permissions-Policy "interest-cohort=()";
add_header Referrer-Policy "no-referrer" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-Download-Options "noopen" always;
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header X-Robots-Tag "none" always;
add_header X-XSS-Protection "1; mode=block" always;
fastcgi_hide_header X-Powered-By;
root /var/www/nextcloud;
index index.php index.html /index.php$request_uri;
location = / {
if ( $http_user_agent ~ ^DavClnt ) {
return 302 /remote.php/webdav/$is_args$args;
}
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
location ^~ /apps/rainloop/app/data {
deny all;
}
location ^~ /.well-known {
location = /.well-known/carddav { return 301 /remote.php/dav/; }
location = /.well-known/caldav { return 301 /remote.php/dav/; }
location /.well-known/acme-challenge { try_files $uri $uri/ =404; }
location /.well-known/pki-validation { try_files $uri $uri/ =404; }
return 301 /index.php$request_uri;
}
location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/) { return 404; }
location ~ ^/(?:.|autotest|occ|issue|indie|db_|console) { return 404; }
location ~ .php(?:$|/) {
rewrite ^/(?!index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|oc[ms]-provider/.+|.+/richdocumentscode/proxy) /index.php$request_uri;
fastcgi_split_path_info ^(.+?.php)(/.*)$;
set $path_info $fastcgi_path_info;
try_files $fastcgi_script_name =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $path_info;
fastcgi_param HTTPS on;
fastcgi_param modHeadersAvailable true;
fastcgi_param front_controller_active true;
fastcgi_pass php-handler;
fastcgi_intercept_errors on;
fastcgi_request_buffering off;
fastcgi_read_timeout 3600;
fastcgi_send_timeout 3600;
fastcgi_connect_timeout 3600;
fastcgi_max_temp_file_size 0;
}
location ~ .(?:css|js|svg|gif|png|jpg|ico|wasm|tflite|map)$ {
try_files $uri /index.php$request_uri;
add_header Cache-Control "public, max-age=15778463, $asset_immutable";
expires 6M;
access_log off;
location ~ .wasm$ {
default_type application/wasm;
}
}
location ~ .woff2?$ {
try_files $uri /index.php$request_uri;
expires 7d;
access_log off;
}
location /remote {
return 301 /remote.php$request_uri;
}
location / {
try_files $uri $uri/ /index.php$request_uri;
}
}

Створення сертифіката Let's Encrypt

sudo certbot --nginx -d вашдомен.com

Перезавантажити сервер nginx

sudo service nginx restart

Для автоматичного оновлення сертифіката, додайте це до cron

crontab -e
0 12 * * * /usr/bin/certbot renew --quiet

Тепер ми починаємо "фактичну" установку програмного забезпечення Nextcloud та налаштування SSL-сертифікатів від Let's Encrypt за допомогою acme . Для цього перейдіть до робочого каталогу

cd /usr/local/src

і завантажте поточний реліз Nextcloud:

wget https://download.nextcloud.com/server/releases/latest.tar.bz2
wget https://download.nextcloud.com/server/releases/latest.tar.bz2.md5

Перевірте файли:

md5sum -c latest.tar.bz2.md5 < latest.tar.bz2

Розпакуйте програмне забезпечення Nextcloud в веб-каталог (var/www) та встановіть відповідні дозволи, а потім видаліть завантажувальний файл:

tar -xjf latest.tar.bz2 -C /var/www && chown -R www-data:www-data /var/www/ && rm -f latest.tar.bz2

Тепер ми можемо перейти до налаштування Nextcloud. Для цього використовуйте наступну команду "тихої" установки:

sudo -u www-data php /var/www/nextcloud/occ maintenance:install --database "mysql" --database-name "nextclouddb" --database-user "nextclouddbuser" --database-pass "nextclouddbpassword" --admin-user "YourNextcloudAdmin" --admin-pass "YourNextcloudAdminPasssword" --data-dir "/var/nc_data"

Пояснення:

database-name " nextclouddb " : назва бази даних

database-user “ nextclouddbuser ” : користувач бази даних

database-pass “ nextclouddbpassword ” : пароль користувача бази даних

admin-user “ YourNextcloudAdmin ” : адміністратор Nextcloud (виберіть за своїм бажанням)

admin-pass “ YourNextcloudAdminPasssword ” : пароль адміністратора Nextcloud (виберіть за своїм бажанням)

Зачекайте, доки встановлення Nextcloud буде завершено, а потім налаштуйте центральний файл конфігурації Nextcloud "config.php" від імені користувача вебу www-data:

1. Додайте свій домен як довірений домен, додаючи ваш домен в файл your.domain.de:

sudo -u www-data php /var/www/nextcloud/occ config:system:set trusted_domains 0 --value=ihre.domain.de

2. Встановіть ваш домен як overwrite.cli.url, додаючи ваш домен в файл з вашим доменом:

sudo -u www-data php /var/www/nextcloud/occ config:system:set overwrite.cli.url --value=https://ihre.domain.de

Тепер ми нарешті розширюємо конфігурацію Nextcloud. Для цього спершу збережіть існуючий config.php, а потім виконайте наступні рядки в одному блоку:

sudo -u www-data cp /var/www/nextcloud/config/config.php /var/www/nextcloud/config/config.php.bak 
sudo -u www-data touch /var/www/nextcloud/config/tweaks.config.php
nano /var/www/nextcloud/config/tweaks.config.php
<?php
$CONFIG = array (
	'activity_expire_days' => 14,
	'allow_local_remote_servers' => true,
	'auth.bruteforce.protection.enabled' => true,
	'blacklisted_files' => 
	array (
		0 => '.htaccess',
		1 => 'Thumbs.db',
		2 => 'thumbs.db',
	),
	'cron_log' => true,
	'default_phone_region' => 'DE',
	'defaultapp' => 'files,dashboard',
	'enable_previews' => true,
	'enabledPreviewProviders' => 
	array (
		0 => 'OC\Preview\PNG',
		1 => 'OC\Preview\JPEG',
		2 => 'OC\Preview\GIF',
		3 => 'OC\Preview\BMP',
		6 => 'OC\Preview\PDF',
		7 => 'OC\Preview\MP3',
		8 => 'OC\Preview\TXT',
		9 => 'OC\Preview\MarkDown',
	),
	'filesystem_check_changes' => 0,
	'filelocking.enabled' => 'true',
	'htaccess.RewriteBase' => '/',
	'integrity.check.disabled' => false,
	'knowledgebaseenabled' => false,
	'logfile' => '/var/log/nextcloud/nextcloud.log',
	'loglevel' => 2,
	'logtimezone' => 'Europe/Berlin',
	'log_rotate_size' => '104857600',
	'maintenance' => false,
	'maintenance_window_start' => 1,
	'overwriteprotocol' => 'https',
	'preview_max_x' => 1024,
	'preview_max_y' => 768,
	'preview_max_scale_factor' => 1,
	'profile.enabled' => false,
	'redis' => 
	array (
		'host' => '/var/run/redis/redis-server.sock',
		'port' => 0,
		'timeout' => 0.5,
		'dbindex' => 1,
	),
	'quota_include_external_storage' => false,
	'share_folder' => '/Freigaben',
	'skeletondirectory' => '',
	'theme' => '',
	'trashbin_retention_obligation' => 'auto, 7',
	'updater.release.channel' => 'stable',
);

Змініть файл ".user.ini"

sudo -u www-data sed -i "s/output_buffering=.*/output_buffering=0/" /var/www/nextcloud/.user.ini

і налаштуйте додатки Nextcloud як користувач www-data

sudo -u www-data php /var/www/nextcloud/occ app:disable survey_client
sudo -u www-data php /var/www/nextcloud/occ app:disable firstrunwizard
sudo -u www-data php /var/www/nextcloud/occ app:enable admin_audit
sudo -u www-data php /var/www/nextcloud/occ app:enable files_pdfviewer

Необов'язково для Nextcloud Office:

sudo -u www-data /usr/bin/php /var/www/nextcloud/occ app:install richdocuments
sudo -u www-data /usr/bin/php /var/www/nextcloud/occ app:install richdocumentscode

Nextcloud тепер повністю готовий до роботи, оптимізований та захищений. Перезавантажте всі відповідні служби:

systemctl stop nginx.service
systemctl stop php8.1-fpm.service
systemctl restart mysql.service
systemctl restart php8.1-fpm.service
systemctl restart redis-server.service
systemctl restart nginx.service

Налаштуйте cron-завдання для Nextcloud як користувач "www-data":

crontab -u www-data -e

Вставте цей рядок

*/5 * * * * php -f /var/www/nextcloud/cron.php > /dev/null 2>&1

Потім збережіть і закрийте файл та переконфігуруйте завдання Nextcloud з "Ajax" на "Cron" за допомогою Nextcloud CLI:

sudo -u www-data php /var/www/nextcloud/occ background:cron

Будь ласка, відведіть деякий час і перевірте статус безпеки вашого сервера.

Щоб уникнути проблем, які можуть виникнути при оновленні використовуваних компонентів, відповідні пакети можна виключити з оновлення за допомогою "apt-mark hold":

apt-mark hold nginx*
apt-mark hold redis*
apt-mark hold mysql*
apt-mark hold galera*
apt-mark hold mariadb*
apt-mark hold php*

Щоб включити ці пакети знову в контексті оновлень, достатньо зняти "hold":

apt-mark unhold nginx*
apt-mark unhold redis*
apt-mark unhold mysql*
apt-mark unhold galera*
apt-mark unhold mariadb*
apt-mark unhold php*

Після оновлення рекомендується знову встановити "hold".

6. Захист системи fail2ban та ufw
apt update && apt install -y fail2ban
touch /etc/fail2ban/filter.d/nextcloud.conf

Скопіюйте все від "cat..." до "...EOF" в буфер обміну, а потім вставте його в оболонку:

cat <<EOF >/etc/fail2ban/filter.d/nextcloud.conf
[Definition]
_groupsre = (?:(?:,?\s*"\w+":(?:"[^"]+"|\w+))*)
failregex = ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Login failed:
            ^\{%(_groupsre)s,?\s*"remoteAddr":"<HOST>"%(_groupsre)s,?\s*"message":"Trusted domain error.
datepattern = ,?\s*"time"\s*:\s*"%%Y-%%m-%%d[T ]%%H:%%M:%%S(%%z)?"
EOF

Підтвердьте, натиснувши <ENTER>, щоб заповнити файл. Результат виглядає так:

cat /etc/fail2ban/filter.d/nextcloud.conf

image-1677592920018.png

Тепер створіть новий файл jail

nano /etc/fail2ban/jail.d/nextcloud.local

Скопіюйте всі наступні рядки:

[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 5
bantime = 3600
findtime = 36000
logpath = /var/log/nextcloud/nextcloud.log 

Перезапустіть fail2ban і перевірте стан fail2ban:

systemctl restart fail2ban.service
fail2ban-client status nextcloud

Якщо ви раніше змінили порт SSH з 22 на інший порт, вам потрібно замінити 22 відповідно!

apt install -y ufw
ufw allow 80/tcp comment "LetsEncrypt(http)"
ufw allow 443/tcp comment "LetsEncrypt(https)"
ufw allow 22/tcp comment "SSH"
ufw enable
systemctl restart ufw.service


Ця відповідь Вам допомогла?

« Назад

Powered by WHMCompleteSolution