Замовити зараз | Завантажити | Питання та відповіді
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
Тепер створіть новий файл 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