Nextcloud è la soluzione perfetta per un'alternativa a Google Drive o Dropbox self-hosted.
Non ho intenzione di dirti perché dovresti usare Nextcloud. Invece, ti mostrerò come installare il server Nextcloud con i contenitori Docker.
Il tutorial utilizza la configurazione del proxy inverso Ngnix in modo da poter distribuire la tua istanza Nextcloud con SSL. In questo modo, il tuo URL di distribuzione Nextcloud utilizzerà HTTPS e trasferirai i file in modo sicuro.
Verso la fine del tutorial, condividerò alcuni suggerimenti per gli utenti del cloud Linode per ridurre lo sforzo sull'implementazione di Nextcloud.
linode | The Independent Open Cloud for DevelopersLa nostra missione è accelerare l'innovazione rendendo il cloud computing semplice, conveniente e accessibile a tutti. LinodePrerequisiti
Prima di andare avanti, alcune cose devono essere risolte. Ecco cosa ti serve:
- Un server Linux fisico, una macchina virtuale o in un server cloud.
- Docker e Docker Compose installati sul tuo server Linux. Se hai bisogno di aiuto, segui la guida all'installazione della finestra mobile su Ubuntu e CentOS. Allo stesso modo, puoi seguire i tutorial di installazione di composizione Docker su Ubuntu e CentOS.
- È utile avere una certa conoscenza di Docker e Docker Compose.
- Un nome di dominio. Questa distribuzione, come tutte le altre di Linux Handbook, viene eseguita con un vero nome di dominio con HTTPS.
- Un po' di esperienza con i comandi della shell e di Linux poiché c'è molto movimento lì dentro.
- Accesso a un servizio SMTP come Sendgrid. Ti servirà per inviare notifiche via email, reimpostare la password ecc.
- Tempo e pazienza.
Distribuzione del server Nextcloud con Docker nel proxy inverso
Vediamo i passaggi uno per uno.
Passaggio 1:imposta il proxy inverso
Con il proxy inverso, puoi distribuire più servizi Web sullo stesso server. Questo non è facoltativo perché hai bisogno di Let's Encrypt container for SSL.
Esistono due modi per impostare il proxy inverso Ngnix..
Se non stai usando Linode, consulta il mio articolo su come configurare nginx-reverse-proxy con Docker.
Come utilizzare il proxy inverso Nginx con più app DockerScopri come distribuire più servizi Web sullo stesso server utilizzando il proxy inverso Nginx e i contenitori Docker. Linux HandbookDebdut ChakrabortySe stai usando Linode, ti consiglio di usare il nostro proxy inverso-jwilder StackScript per distribuire facilmente il tuo server con tutto già configurato per te.
La distribuzione del proxy inverso deve essere eseguita utilizzando un file Compose separato in modo da poter riavviare o aggiornare i servizi Web senza disturbare la configurazione del proxy inverso.
Ho già preparato i file di composizione nel nostro repository GitHub pubblico. Poiché questo non è un articolo dettagliato sulla distribuzione del proxy inverso, non entrerò nei dettagli del file Compose.
Puoi utilizzare git
o wget
per scaricare i file. Se si utilizza git
, clona l'intero repository:
git clone https://github.com/linuxhandbook/tutorial-snippets && \
cd tutorial-snippets/Reverse_Proxy
Altrimenti, scarica i file necessari:
mkdir -p ~/Reverse_Proxy && cd ~/Reverse_Proxy
for file in max_upload_size.conf env.example docker-compose.yaml; do
wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Reverse_Proxy/${file}
done
Ci sono tre file qui:
- env.example:rinominalo in .env e cambia il valore di
DEFAULT_EMAIL
alla tua email - max_upload_size.conf:questo file assicura che tu possa caricare file di dimensioni fino a 1 GB (il valore predefinito è 2 MB).
- docker-compose.yaml:il più grande di tutti. Discusso brevemente nel prossimo paragrafo.
Crea una rete Docker denominata net
. Viene utilizzato nel file docker-compose.yaml.
docker network create net
Il file di composizione mobile ha il seguente aspetto:
Infine, distribuisci i container
docker-compose up -d
In una distribuzione riuscita, dovresti ottenere un 503 quando tenti di visitare l'indirizzo IP del server che ospita questo proxy inverso. Va bene. Non hai ancora un servizio web in esecuzione su di esso.
Fase 2:distribuisci Nextcloud
Ci sono due componenti qui:uno è il database, un altro è Nextcloud stesso, o meglio chiamiamolo frontend.
Per il database back-end, funzionerà qualsiasi database basato su MySQL. Sto utilizzando MariaDB, in particolare il tag immagine (o versione) 10.5.9.
Per Nextcloud utilizzerò la versione 21.0.0, questa è l'ultima al momento della stesura di questo articolo.
Pertanto, le immagini utilizzate sono
mariadb:10.5.9
nextcloud:21.0.0
I file skeleton, ovvero il file di composizione e i file env, sono già stati caricati nel nostro repository GitHub pubblico. Puoi scaricarlo o riscriverlo mentre leggi le spiegazioni.
Ti consiglio di scaricare i file, e poi ripassare tutto per capire cosa sta succedendo, non c'è bisogno che tu riscriva tutto da zero.
Puoi clonare l'intero repository GitHub o semplicemente scaricare i file necessari.
Se hai clonato il repository "tutorial-snippets" durante la distribuzione del proxy inverso, cambia la directory corrente in tutorial-snippets/Nextcloud
.
Il git
funzionante il comando è il seguente:
git clone https://github.com/linuxhandbook/tutorial-snippets && \
cd tutorial-snippets/Nextcloud
Altrimenti, usa il seguente codice shell per creare una directory denominata "Nextcloud" e scaricare i file al suo interno.
mkdir -p ~/Nextcloud && cd ~/Nextcloud
for file in env.example docker-compose.yaml; do
wget https://raw.githubusercontent.com/linuxhandbook/tutorial-snippets/main/Nextcloud/${file}
done
Copia il env.example
file in .env
. In seguito modificherai questo file per le variabili di ambiente. Mantenere il file originale è solo per motivi di backup, nient'altro.
cp env.example .env
Ora, lasciami scorrere le definizioni dei servizi:
1. Database NC
Il NCDatabase
il servizio si presenta così:
NCDatabase:
image: "mariadb:10.5.9"
volumes:
- "NCMariaDB:/var/lib/mysql"
environment:
- MYSQL_ROOT_PASSWORD
- MYSQL_RANDOM_ROOT_PASSWORD
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
restart: "on-failure"
networks: ["common"]
Questo è il servizio di database e, come affermato in precedenza, utilizza il mariadb:10.5.9
immagine come progetto.
Per l'archiviazione persistente, sto utilizzando un volume denominato NCMariaDB
, è montato su /var/lib/mysql
, dove MariaDB memorizza i suoi dati.
Le variabili di ambiente vengono gestite utilizzando un .env
file, ne parlerò tra un momento.
Mi piace il on-failure
criterio di riavvio, ma sei libero di scegliere unless-stopped
o always
. Potresti voler leggere di più sulla politica di riavvio in Docker.
Il common
rete è comune tra questo e il servizio frontend, è lì per assicurarsi che la comunicazione sia possibile tra questi contenitori.
Variabili d'ambiente
Questa è una distribuzione basata su Docker, sei obbligato a configurare alcune variabili di ambiente. Ora apri questo .env
file nel tuo editor di testo preferito e inizia a modificare i valori come segue:
MYSQL_ROOT_PASSWORD
o MYSQL_RANDOM_ROOT_PASSWORD
:Imposta MYSQL_RANDOM_ROOT_PASSWORD
a 1 o impostare una password di root complessa per MariaDB. Usa openssl
per generare una password casuale.
MYSQL_DATABASE
&MYSQL_USER
:Sono state impostate alcune impostazioni predefinite, ma è possibile modificarle se necessario. Impostali rispettivamente sul nome del database e sul nome utente preferiti.
MYSQL_PASSWORD
:Password per l'utente (MYSQL_USER
) che avrà accesso al database principale di MariaDB (MYSQL_DATABASE
).
MYSQL_HOST
:questo è il nome del servizio del contenitore del database. Se non hai intenzione di cambiare il nome del servizio nel Compose File, lascialo così com'è.
2. NCFrontend
Questo è il servizio di frontend di Nextcloud. Questo servizio è semplice come il precedente. Dai un'occhiata:
NCFrontend:
image: "nextcloud:21.0.0"
volumes:
- "NCData:/var/www/html"
environment:
- LETSENCRYPT_HOST
- VIRTUAL_HOST
- TRUSTED_PROXIES
- OVERWRITEPROTOCOL
- MYSQL_DATABASE
- MYSQL_USER
- MYSQL_PASSWORD
- MYSQL_HOST
- SMTP_HOST
- SMTP_PORT
- SMTP_NAME
- SMTP_PASSWORD
- MAIL_FROM_ADDRESS
- NEXTCLOUD_TRUSTED_DOMAINS
- NEXTCLOUD_ADMIN_USER
- NEXTCLOUD_ADMIN_PASSWORD
depends_on:
- "NCDatabase"
networks: ["net", "common"]
L'immagine utilizzata è nextcloud:21.0.0
, come ho detto in precedenza, è l'ultima versione al momento in cui scrivo.
Per assicurarti di mantenere i tuoi dati al sicuro e di non perderli in uno sfortunato caso di un semplice riavvio del contenitore, i dati devono essere mantenuti. Nextcloud salva i suoi dati/informazioni in /var/www/html
, quindi questa posizione viene resa persistente utilizzando un volume denominato NCData
.
Il depends_on
l'array è interessante. Si assicura che i valori, ovvero i servizi in esso menzionati, vengano distribuiti prima dell'avvio di quello corrente.
Qui, mi sto assicurando che il database venga avviato prima di Nextcloud stesso, per evitare problemi di connessione.
Potresti ancora vedere alcuni problemi nei log, perché un avvio del contenitore riuscito non indica che anche i processi previsti all'interno del contenitore sono stati avviati correttamente. Possono richiedere più tempo. Nel nostro caso, mysqld impiega un po' più di tempo per iniziare, motivo per cui potresti vedere un paio di errori nei log fino a quando non viene stabilita una connessione riuscita.
Ci sono due reti. Il primo è net
, anch'esso parte della distribuzione del proxy inverso. Ciò è necessario perché il proxy inverso deve essere in grado di comunicare con i servizi proxy, ovvero Nextcloud. Il common
la rete è per i container nextcloud e database in grado di comunicare correttamente.
Variabili d'ambiente
Apri il .env
file (lo stesso che hai usato per MariaDB) nel tuo editor di testo preferito e inizia a modificare i valori come segue:
LETSENCRYPT_HOST
, VIRTUAL_HOST
&NEXTCLOUD_TRUSTED_DOMAINS
:impostali sul dominio/sottodominio su cui desideri ospitare la tua istanza Nextcloud.
TRUSTED_PROXIES
:la sottorete della rete, condivisa dal proxy inverso e da questo frontend. Puoi ottenere la sottorete usando il seguente comando (assicurati che jq
è installato)
docker inspect -f '{{ json .IPAM.Config }}' net | jq -r .[].Subnet
OVERWRITEPROTOCOL
:Il parametro overwriteprotocol viene utilizzato per impostare il protocollo del proxy. Poiché utilizziamo HTTPS, impostalo su HTTPS.
SMTP_HOST
&SMTP_PORT
:L'indirizzo del server SMTP e la porta su cui sarà in ascolto, per SendGrid è smtp.sendgrid.net e la porta 587 per TLS automatico.
SMTP_NAME
&SMTP_PASSWORD
:il nome utente e la password per l'autenticazione. Per SendGrid il valore del nome utente è molto coerente. È apikey
. Per la password, sarà la tua chiave API.
MAIL_FROM_ADDRESS
:Il valore di From
Intestazione SMTP. Impostalo su qualcosa come [email protected]
.
NEXTCLOUD_ADMIN_USER
&NEXTCLOUD_ADMIN_PASSWORD
:invece di utilizzare l'interfaccia utente Web la prima volta per creare l'utente amministratore, puoi invece crearlo direttamente nella fase di distribuzione tramite queste variabili. Impostali sul nome utente e sulla password dell'utente amministratore. Se l'hai lasciato, ti verrà chiesto di creare un account la prima volta che avvii Nextcloud.
Volumi
Ho due volumi interni definiti in questa rete, NCMariaDB
per MariaDB e NCData
per Nextcloud. Se mantenerli interni o esterni dipende da te.
Molti diranno che è rischioso mantenerli interni poiché puoi facilmente commettere l'errore di usare docker-compose down -v
e rimuovere i volumi insieme ai contenitori. Allo stesso tempo, con i volumi esterni, puoi commettere l'errore di docker volume prune
ed elimina tutti i tuoi dati.
Decidi quale sarà più sicuro per te. Se decidi di renderli esterni, apri il file Componi e modifica i volumes
definizione a qualcosa del genere:-
volumes:
NCMariaDB:
external: true
NCData:
external: true
Successivamente, crea i volumi:
for volume in NCMariaDB NCData; do
docker volume create ${volume}
done
Reti
Non c'è molto qui. Noterai che sono state definite due reti. Uno è per il front-end e il proxy inverso, e l'altro è per il front-end e il back-end per poter comunicare.
Il contenitore del database e il frontend nextcloud hanno una rete comune denominata "comune", questa è lì per questi due contenitori per essere in grado di comunicare tra loro. Puoi renderlo interno, il che limiterà il contenitore del database dall'accesso a Internet pubblico, ma non sono sicuro di quali vantaggi potresti ottenere da questo.
Tuttavia, se vuoi farlo, dovrebbe assomigliare a questo:
networks:
net:
external: true
common:
internal: true
Infine, distribuzione di Nextcloud
Non c'è altro da fare. Basta eseguire il seguente comando
docker-compose up -d
Le immagini necessarie verranno estratte e quindi distribuite.
Una volta distribuito, dovrebbero esserci un totale di quattro container in esecuzione sul tuo server.
[email protected]:~$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1dce1c7909fe jrcs/letsencrypt-nginx-proxy-companion:latest "/bin/bash /app/entr…" 7 hours ago Up 7 hours reverse_proxy_LetsencryptCompanion_1
d29719999132 jwilder/nginx-proxy:latest "/app/docker-entrypo…" 7 hours ago Up 7 hours 0.0.0.0:80->80/tcp, 0.0.0.0:443->443/tcp reverse_proxy_NginxProxy_1
cd719cb2a677 nextcloud:21.0.0 "/entrypoint.sh apac…" 7 hours ago Up 7 hours 80/tcp nextcloud_NCFrontend_1
60dff2062aa5 mariadb:10.5.9 "docker-entrypoint.s…" 7 hours ago Up 7 hours 3306/tcp nextcloud_NCDatabase_1
puoi avere anche più contenitori in esecuzione se erano presenti contenitori in esecuzione in precedenza. La conclusione è che questa distribuzione di Nextcloud è composta da quattro container, il container nginx, il container companion letencrypt, il container mariadb e infine il container nextcloud vero e proprio.
Post-distribuzione
Prima di concludere, volevo menzionare una cosa che potresti voler sapere dopo la distribuzione.
Per prima cosa apri il browser e vai al dominio su cui è ospitata questa istanza Nextcloud (VIRTUAL_HOST
). Dovresti vedere una schermata simile a questa, se non hai impostato l'utente amministratore utilizzando il file di composizione
Poiché le variabili di ambiente del database sono condivise tramite il comune .env
file, non vedrai l'interfaccia utente di installazione Web più comune che richiede informazioni sul database come nome host, porta, password del nome utente del database.
Anche lì è possibile visualizzare una casella di controllo simile. Ti consiglio di deselezionare questa casella e installare le app di cui hai bisogno in seguito dall'elenco delle app.
Per ulteriori suggerimenti sull'implementazione post, leggi questo fantastico articolo scritto dal mio collega Avimanyu:
10 suggerimenti utili per la gestione di un'istanza Docker Nextcloud Alcuni consigli utili da tenere a mente e da seguire in pratica mentre si ospita autonomamente l'istanza Nextcloud con Docker! Manuale LinuxAvimanyu BandyopadhyayQuesto è tutto. Spero che questo tutorial dettagliato ti aiuti con l'installazione del tuo server Nextcloud con Docker. Se hai domande o suggerimenti, faccelo sapere nella sezione commenti e sarò felice di aiutarti.