Tämä opas on suunnattu jotka haluavat rakentaa yritystason Nextcloud-ympäristön puhtaalle Debian 13 -palvelimelle täysin ilman Dockeria.
Tässä arkkitehtuurissa hyödynnämme natiiveja binäärejä, edistynyttä PHP 8.3 -resurssienhallintaa, Redis-välimuistia ja NATS-viestinvälitystä. Lopputuloksena on järjestelmä, joka kestää raskasta mediasiirtoa ja kymmenien käyttäjien samanaikaisia videopuheluita maksimaalisella tietoturvalla.
Ennen ohjelmistojen asennusta käyttöjärjestelmä on suojattava ulkopuolisilta uhkilta. Suljemme tarpeettomat portit ja asennamme järjestelmän, joka estää automaattisesti toistuvat murtoyritykset.
1. Palomuurin (UFW) käyttöönotto: Sallimme vain välttämättömän verkkoliikenteen ja SSH-hallinnan. mikäli tämän haluaa.
sudo apt update && sudo apt install -y ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
Fail2Ban tarkkailee Nextcloudin lokeja ja estää hyökkääjien IP-osoitteet.
sudo apt install -y fail2ban
sudo nano /etc/fail2ban/jail.local
Lisää tiedostoon seuraava:
[nextcloud]
backend = auto
enabled = true
port = 80,443
protocol = tcp
filter = nextcloud
maxretry = 3
bantime = 86400
findtime = 43200
logpath = /mnt/ncdata/nextcloud.log
Käynnistä palvelu uudelleen: sudo systemctl restart fail2ban
Asennamme palvelimelle seuraavat: PHP 8.3:n, Nginx-verkkopalvelimen, MariaDB-tietokannan ja Redis-välimuistin. Muista aina valita uusin PHP-versio!
# Perustyökalut
sudo apt install -y curl wget gnupg2 ca-certificates lsb-release apt-transport-https unzip default-mysql-server nginx redis-server
# Lisää Ondřej Surýn virallinen PHP-lähde
sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg
echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list
sudo apt update
# Asenna PHP 8.3 ja vaaditut moduulit
sudo apt install -y php8.3-fpm php8.3-cli php8.3-common php8.3-mysql php8.3-zip php8.3-gd php8.3-mbstring php8.3-curl php8.3-xml php8.3-bcmath php8.3-intl php8.3-gmp php8.3-redis php8.3-apcu php8.3-imagick
#Version tarkistus
sudo php -v
Perusasetuksilla PHP ja tietokanta tukehtuvat suuren kuorman alla. Skaalaamme resurssit vastaamaan nykyaikaisen laitteiston tehoa. Tämä riippuu suuresti minkälainen kokoonpano sinulla on!
Avaa /etc/php/8.3/fpm/php.ini ja viritä muistirajat isojen tiedostojen siirtoa varten:
memory_limit = 1024M
upload_max_filesize = 16G
post_max_size = 16G
max_execution_time = 3600
[opcache]
opcache.enable = 1
opcache.memory_consumption = 256
opcache.interned_strings_buffer = 32
opcache.max_accelerated_files = 10000
opcache.jit = tracing
opcache.jit_buffer_size = 128M
Säädä työntekijäprosessit tiedostosta /etc/php/8.3/fpm/pool.d/www.conf:
pm = dynamic
pm.max_children = 120
pm.start_servers = 12
pm.min_spare_servers = 6
pm.max_spare_servers = 18
Käynnistä uudelleen: sudo systemctl restart php8.3-fpm
Pakota tietokanta pitämään tiedot RAM-muistissa levyhakujen sijaan muokkaamalla /etc/mysql/mariadb.conf.d/50-server.cnf:
[mysqld]
innodb_buffer_pool_size = 4G # Suositus: n. 60% vapaasta RAM-muistista
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
Käynnistä uudelleen: sudo systemctl restart mariadb
Nginx konfiguroidaan turvalliseksi taustapalvelimeksi (sopii erinomaisesti käytettäväksi käänteisen välityspalvelimen takana ”Reverse Proxy”). Suosittelen tätä suuresti jotta tietoturva on entistä isompi. Sivultani löytyy helppo ohje tämän toteuttamiseen! Tämän takia ohjeessani ei käytetä porttia 443 sekä SSL-Suojausta. Voit kuitenkin vapaasti valita haluamasi portin kunhan se ei ole jo varattuna.
Luo tiedosto /etc/nginx/sites-available/nextcloud:
server {
listen 80;
server_name pilvi.esimerkki.fi;
root /var/www/nextcloud;
index index.php index.html /index.php$request_uri;
client_max_body_size 16G;
client_body_timeout 300s;
fastcgi_buffers 64 4K;
# HTTP-tietoturvaotsakkeet
add_header Strict-Transport-Security "max-age=15552000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Robots-Tag "none" always;
add_header X-Download-Options "noopen" always;
add_header X-Permitted-Cross-Domain-Policies "none" always;
add_header Referrer-Policy "no-referrer" always;
location / {
rewrite ^ /index.php;
}
location ~ ^\/(?:build|tests|config|lib|3rdparty|templates|data)\/ {
deny all;
}
location ~ ^\/((?:index|remote|public|cron|core\/ajax\/update|status|ocs\/v[12]|updater\/.+|oc[ms]-provider\/.+)\.php(?:$|\/)) {
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_pass unix:/run/php/php8.3-fpm.sock;
}
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";
access_log off;
}
}
Ota käyttöön: sudo ln -s /etc/nginx/sites-available/nextcloud /etc/nginx/sites-enabled/ && sudo systemctl restart nginx
Rediksen käyttö tiedostojen lukituksessa (File Locking) on kriittistä, jotta järjestelmä ei korruptoidu, kun useat käyttäjät siirtävät tiedostoja samanaikaisesti.
cd /var/www/
sudo wget https://download.nextcloud.com/server/releases/latest.zip
sudo unzip latest.zip
sudo chown -R www-data:www-data /var/www/nextcloud
Avaa nyt selaimesi ja avaa palvelimen IP-Osoite. Kun olet suorittanut selaimen asennusnäkymän, muokkaa tiedostoa /var/www/nextcloud/config/config.php:
// Käänteisen välityspalvelimen (Reverse Proxy) reititys
'trusted_proxies' => ['<VÄLITYSPALVELIMEN_IP>'],
'overwriteprotocol' => 'https',
// APCu ja Redis -välimuisti
'memcache.local' => '\\OC\\Memcache\\APCu',
'memcache.distributed' => '\\OC\\Memcache\\Redis',
'memcache.locking' => '\\OC\\Memcache\\Redis',
'redis' => [
'host' => 'localhost',
'port' => 6379,
],
// Lokituksen ja roskakorin hallinta
'loglevel' => 2,
'trashbin_retention_obligation' => 'auto, 30',
'versions_retention_obligation' => 'auto, 30',
Vähennä selaimen latausaikoja siirtämällä taustatyöt käyttöjärjestelmän vastuulle.
sudo crontab -u www-data -e
# Lisää rivi: */5 * * * * php -f /var/www/nextcloud/cron.php
Talk-sovellus vaatii tehokkaan signaalipalvelimen yli neljän hengen kokouksia varten. Asennamme NATS- ja Spreed-binäärit natiivisti. HUOM: Käy kuitenkin tarkistamassa uusimmat versiot ja lataa ne: https://github.com/nats-io/nats-server/releases ja https://github.com/strukturag/nextcloud-spreed-signaling/releases
wget https://github.com/nats-io/nats-server/releases/download/v2.10.16/nats-server-v2.10.16-linux-amd64.tar.gz
tar -xzf nats-server-*.tar.gz
sudo mv nats-server-*/nats-server /usr/local/bin/
wget https://github.com/strukturag/nextcloud-spreed-signaling/releases/download/v1.2.3/signaling-linux-amd64
sudo mv signaling-linux-amd64 /usr/local/bin/signaling
sudo chmod +x /usr/local/bin/signaling
sudo mkdir /etc/signaling
(/etc/signaling/server.conf):
Luo kaksi satunnaista avainta (openssl rand -hex 16) ja sijoita ne hash- ja blockkey-kohtiin.
[server]
listen = 127.0.0.1:8080
[sessions]
hashkey = <GENEROITU_AVAIN_1>
blockkey = <GENEROITU_AVAIN_2>
[backend]
backends = nextcloud
allowall = false
timeout = 10
connectionsperhost = 8
[nextcloud]
backend = https://pilvi.esimerkki.fi
secret = <LUOTU_SALASANA_PALVELIMELLE>
[nats]
url = nats://localhost:4222
Tämän jälkeen luodaan Systemd-palvelut molemmille ja yhdistetään HPB Nextcloudin Talk-asetuksista secret avainta käyttäen.
Lopuksi viimeistelemme järjestelmän tietoturvan komentorivin kautta ja varmistamme tietokannan rakenteen.
sudo -u www-data php /var/www/nextcloud/occ app:enable twofactor_totp
sudo -u www-data php /var/www/nextcloud/occ twofactorauth:enforce --on
Luo puuttuvat tietokantaindeksit asennuksen jäljiltä:
sudo -u www-data php /var/www/nextcloud/occ db:add-missing-indices
Olet nyt onnistuneesti rakentanut palvelimen, joka hyödyntää laitteistosi resursseja suoraan ja tehokkaasti.
Oikein konfiguroitu välimuistien ketju (APCu -> Redis -> MariaDB RAM Puskuri -> JIT) varmistaa, että järjestelmä pysyy salamannopeana myös silloin, kun tallennustilaan lisätään satoja gigatavuja dataa tai kun verkossa on kymmeniä samanaikaisia käyttäjiä. Palomuurit ja Fail2Ban-säännöt takaavat, että yritystason datasi pysyy turvassa verkkoon avattuna. Lisäturvallisuutta saat myös käyttämällä välityspalvelinta Internetin ja palvelimesi välillä.
Kiitos viestistäsi! Vastaan siihen mahdollisimman nopeasti sähköpostitse.