GNU/Linux >> Linux Esercitazione >  >> Panels >> Docker

Come installare Nextcloud con Docker sul tuo server Linux

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. Linode

Prerequisiti

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 Chakraborty

Se 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
Se stai usando questo tutorial in futuro (dal riferimento al tempo presente) e c'è una versione molto più recente di Nextcloud e MariaDB, usa quelle versioni.

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.

Docker Compose crea una rete predefinita per tutti i suoi servizi in un file Compose. Ma poiché il servizio NCFrontend è già connesso alla rete di rete, Docker Compose non creerà più quella rete predefinita, motivo per cui devi creare una rete personalizzata come "comune" per far sì che la comunicazione avvenga.

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.

La configurazione SMTP è facoltativa. Per questo articolo, userò SendGrid come esempio. Consultare la documentazione del server SMTP per valori più appropriati per le seguenti variabili di ambiente.

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 Bandyopadhyay

Questo è 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.


Docker
  1. Come installare un ambiente desktop sul tuo server Linux senza testa

  2. Come installare e ospitare il server OpenVPN con Docker

  3. Installa il server VPN Wireguard con Docker

  4. Come installare Jenkins con Docker

  5. Come installare NextCloud 13 su Ubuntu 16.04

Come installare Docker CE su Rocky Linux 8

Come installare Docker CE su Rocky Linux 8

Come installare il server NextCloud su Rocky Linux 8

Come installare KernelCare sul tuo server Linux

Come installare Softaculous su server Linux con cPanel?

Come installare e utilizzare Docker nel tuo sistema Linux