Un `server privato virtuale` (VPS) è una macchina che ospita tutto il software e i dati necessari per l'esecuzione di un'applicazione o di un sito Web. Si chiama virtuale perché consuma solo una parte delle risorse fisiche strutturali del server, le quali sono gestite da un fornitore terzo.
Un VPS è possibile acquistarlo, ad esempio, da [OVH](https://www.ovhcloud.com/it/vps/). Sempre da OVH è possibile anche acquistare un [dominio](https://www.ovh.it/order/webcloud/?#/webCloud/domain/select?selection=~()).
Altri provider possono essere [Contabo](https://contabo.com/en/vps/) oppure [Hetzner](https://www.hetzner.com/cloud).
Su OVH, una volta acquistato il VPS e il nome di dominio, occorre, dal menù `Zone DNS/my.domain.com/Reindirizzamento`, reindirizzare il proprio dominio (o un sottodominio) all'indirizzo ip della VPS, così che, digitando sulla barra degli indirizzi del browser `my.domain.com`, sia possibile raggiungere il servizio installato sul VPS, in questo caso Nextcloud.
Sul proprio computer, creare la chiave ssh per accedere alla VM:
```bash
> cd
> ssh-keygen -f .ssh/debian -t ed25519
```
dove `debian` indica il nome da dare alla propria chiave.
Questa la configurazione:
```bash
> cat .ssh/config
Host debian
hostname ip_del_vps
user root
IdentityFile /home/user/.ssh/vps-debian
TCPKeepAlive yes
port 1267
```
Accedere alla VM e inserire la propria chiave ssh pubblica:
```bash
vim .ssh/authorized_keys
```
Quindi decommentare le seguenti righe nel file `/etc/ssh/sshd_config`:
```bash
> cat /etc/ssh/sshd_config | grep -v ^#
Port 1267
PubkeyAuthentication yes
PasswordAuthentication no
```
avendo cura di specificare una porta differente dalla 22 per la connessione ssh e di non permettere l'autenticazione tramite password, bensì solo con le chiavi.
Ora è possibile connettersi al vps tramite chiave ssh:
Leggere questi passaggi per configurare [Network Firewall](https://help.ovhcloud.com/csm/it-dedicated-servers-firewall-network?id=kb_article_view&sysparm_article=KB0043454)
Per altre configurazioni di sicurezza: [Mettere in sicurezza un VPS](https://help.ovhcloud.com/csm/it-vps-security-tips?id=kb_article_view&sysparm_article=KB0047709) e anche [Setup fail2ban](https://docs.nextcloud.com/server/21/admin_manual/installation/harden_server.html?highlight=fail2ban#setup-fail2ban)
ott 22 17:44:02 vps-971850be systemd[1]: Started fail2ban.service - Fail2Ban Service.
ott 22 17:44:02 vps-971850be fail2ban-server[58185]: 2023-10-22 17:44:02,748 fail2ban.configreader [58185]: WARNING 'allowipv6' not defined in 'Definition'. Using default one: 'auto'
ott 22 17:44:02 vps-971850be fail2ban-server[58185]: Server ready
GRANT ALL PRIVILEGES ON DATABASE nextcloud TO ncuser;
GRANT ALL PRIVILEGES ON SCHEMA public TO ncuser;
exit
```
Come da [documentazione](https://docs.nextcloud.com/server/latest/admin_manual/configuration_database/linux_database_configuration.html#postgresql-database), modificare la configurazione del modulo `pgsql.ini` nel modo seguente:
In questo modo viene creata la cartella `/var/www/nextcloud`, qui scaricata ed estratta l'ultima versione disponibile di Nextcloud. Infine, ricorsivamente, la cartella viene assegnata all'utente `www-data`.
#### Configurazione
Creare il file `/etc/nginx/sites-available/nextcloud`, come da [documentazione uffic iale](https://docs.nextcloud.com/server/latest/admin_manual/installation/nginx.html#nextcloud-in-the-webroot-of-nginx). In particolare, modificare le prime righe nel modo seguente:
```bash
> cat /etc/nginx/sites-enabled/nextcloud
upstream php-handler {
#server 127.0.0.1:9000;
server unix:/var/run/php/php8.2-fpm.sock;
}
# Set the `immutable` cache control options only for assets with a cache busting `v` argument
map $arg_v $asset_immutable {
"" "";
default "immutable";
}
server {
if ($host = my.domain.com) {
return 301 https://$host$request_uri;
} # managed by Certbot
listen 80;
listen [::]:80;
server_name my.domain.com;
# Prevent nginx HTTP Server Detection
server_tokens off;
# Enforce HTTPS
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name my.domain.com;
# Path to the root of your installation
root /var/www/nextcloud;
[...]
```
Avendo cura di inserire al posto di `my.domain.com` il proprio dominio.
Quindi dare il comando seguente per creare il link simbolico:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```
## Installazione web di Nextcloud
Se tutta la relativa configurazione del server è completa, è possibile accedere all'installazione di Nextcloud con il browser web.
- Aprire il browser web e digitare l'indirizzo URL dell'installazione di Nextcloud, ad esempio https://my.domain.com
- Digitare i dettagli del nome database, utente e password e attendere il completamento dell'installazione;
- Se l'installazione ha esito positivo, verrà caricata la dashboard di Nextcloud;
- All'interno di *Impostazioni di amministrazione/Riepilogo* vengono visualizzati eventuali errori o consigli. È inoltre possibile procedere con gli aggiornamenti di versione
## Troubleshooting
Assicurarsi di decommentare le seguenti righe nel file '/etc/php/8.2/fpm/php.ini'
```bash
> cat /etc/php/8.2/fpm/php.ini | grep -v '^;'
[PHP]
max_execution_time = 30
max_input_time = 60
memory_limit = 512M
post_max_size = 8M
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
[opcache]
opcache.enable=1
opcache.enable_cli=0
opcache.memory_consumption=128
opcache.interned_strings_buffer=16
opcache.max_accelerated_files=10000
opcache.revalidate_freq=1
opcache.save_comments=1
```
### cron
Come da [documentazione](https://docs.nextcloud.com/server/19/admin_manual/configuration_server/background_jobs_configuration.html), assicurarsi di configurare le operazioni in background correttamente. `Cron` è l'impostazione consigliata:
```bash
> crontab -u www-data -e
> crontab -u www-data -l
*/5 * ** * php -f /var/www/nextcloud/cron.php
```
Con questa configurazione viene utilizzato il servizio cron di sistema per invocare il file `cron.php` ogni 5 minuti.
### APCu
Appendere nel file `/etc/php/8.2/cli/php.ini` la seguente riga:
```bash
apc.enable_cli = 1
```
Per maggiori informazioni, leggere [qui](https://serverok.in/nextcloud-apcu-not-available-for-local-cache).
Per la configurazione di Nextcloud sul cellulare Android, seguire [questa guida](https://gitea.it/PicciHud/mywiki/src/branch/master/android/nextcloud.md), inserendo i dati della propria installazione.