GNU/Linux >> Znalost Linux >  >> Panels >> Docker

Jak nainstalovat Nextcloud s Dockerem na váš Linux Server

Nextcloud je perfektním řešením pro alternativu Disku Google nebo Dropbox s vlastním hostováním.

Neřeknu vám, proč byste měli používat Nextcloud. Místo toho vám ukážu, jak nainstalovat server Nextcloud s kontejnery Docker.

Výukový program používá reverzní proxy server Ngnix nastavený tak, abyste mohli nasadit svou instanci Nextcloud s SSL. Tímto způsobem bude vaše adresa URL nasazení Nextcloud používat HTTPS a soubory budete přenášet bezpečně.

Ke konci tutoriálu se podělím o několik tipů pro uživatele cloudu Linode, jak snížit námahu při nasazování Nextcloud.

Linode | Nezávislý otevřený cloud pro vývojáře Naším posláním je urychlit inovace tím, že bude cloud computing jednoduchý, cenově dostupný a dostupný pro všechny. Linode

Předpoklady

Než půjdete kupředu, je třeba se postarat o některé věci. Zde je to, co potřebujete:

  • Linuxový server buď fyzický, virtuální počítač nebo cloudový server.
  • Docker a Docker Compose nainstalovány na vašem linuxovém serveru. Pokud potřebujete pomoc, postupujte podle průvodce instalací dockeru na Ubuntu a CentOS. Podobně můžete postupovat podle instalačních návodů docker-compose na Ubuntu a CentOS.
  • Je dobré mít určité znalosti Dockeru a Docker Compose.
  • Název domény. Toto nasazení, stejně jako všechna ostatní z Linux Handbook, se provádí pod skutečným názvem domény s HTTPS.
  • Nějaké zkušenosti s příkazy shellu a Linuxu, protože je tam hodně pohybu.
  • Přístup ke službě SMTP, jako je Sendgrid. Budete jej potřebovat pro zasílání e-mailových upozornění, resetování hesla atd.
  • Čas a trpělivost.

Nasazení serveru Nextcloud s Dockerem v reverzním proxy

Podívejme se na kroky jeden po druhém.

Krok 1:Nastavení reverzního proxy

Pomocí reverzního proxy můžete na stejný server nasadit několik webových služeb. Toto není volitelné, protože potřebujete kontejner Encrypt for SSL.

Existují dva způsoby, jak můžete nastavit reverzní proxy Ngnix..

Pokud nepoužíváte Linode, projděte si můj článek o tom, jak nastavit nginx-reverse-proxy pomocí Dockeru.

Jak používat Nginx Reverse Proxy s více Docker AppsZjistěte, jak můžete nasadit více webových služeb na stejném serveru pomocí Nginx reverzního proxy a kontejnerů dockeru. Linux HandbookDebdut Chakraborty

Pokud používáte Linode, doporučuji vám použít náš reverse-proxy-jwilder StackScript pro snadné nasazení vašeho serveru se vším, co je pro vás již nastaveno.

Nasazení reverzního proxy by mělo být provedeno pomocí samostatného souboru Compose, abyste mohli restartovat nebo aktualizovat webové služby, aniž byste narušili nastavení reverzního proxy.

Soubory pro psaní jsem již připravil v našem veřejném úložišti GitHub. Protože toto není podrobný článek o nasazení reverzního proxy, nebudu se zabývat podrobnostmi souboru Compose.

Můžete použít buď git , nebo wget ke stažení souborů. Pokud používáte git , naklonujte celé úložiště:

git clone https://github.com/linuxhandbook/tutorial-snippets && \
	cd tutorial-snippets/Reverse_Proxy

V opačném případě stačí stáhnout potřebné soubory:

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

Zde jsou tři soubory:

  • env.example:Přejmenujte jej na .env a změňte hodnotu DEFAULT_EMAIL na váš e-mail
  • max_upload_size.conf:Tento soubor zajišťuje, že můžete nahrávat soubory o velikosti až 1 GB (výchozí hodnota je 2 MB).
  • docker-compose.yaml:Největší ze všech. Stručně pojednáno v dalším odstavci.

Vytvořte dokovací síť s názvem net . To se používá v souboru docker-compose.yaml.

docker network create net

Soubor docker-compose vypadá takto:

Nakonec rozmístěte kontejnery

docker-compose up -d

Při úspěšném nasazení byste měli dostat 503 při pokusu o návštěvu IP adresy serveru, který je hostitelem tohoto reverzního proxy. To je v pořádku. Zatím na něm neběží webová služba.

Krok 2:Nasazení Nextcloud

Jsou zde dvě složky:jedna je databáze, další je samotný Nextcloud, nebo spíše říkejme tomu frontend.

Pro backendovou databázi bude fungovat jakákoli databáze založená na MySQL. Chystám se na MariaDB, zejména na značku obrázku (nebo verzi) 10.5.9.

Pro Nextcloud budu používat verzi 21.0.0, která je nejnovější v době psaní tohoto článku.

Proto jsou použité obrázky

  • mariadb:10.5.9
  • nextcloud:21.0.0
Pokud tento návod používáte v budoucnu (od současného odkazu) a existuje mnohem novější verze Nextcloud a MariaDB, použijte tyto verze.

Soubory kostry, tj. soubor pro psaní a soubory env, jsou již nahrány do našeho veřejného úložiště GitHub. Můžete si je stáhnout nebo je přepsat při čtení vysvětlení.

Doporučuji, abyste si stáhli soubory a pak si vše prošli, abyste pochopili, co se děje, není třeba, abyste vše přepisovali od začátku.

Můžete buď naklonovat celé naše úložiště GitHub, nebo si jen stáhnout potřebné soubory.

Pokud jste naklonovali úložiště „tutorial-snippets“ při nasazení reverzního proxy, stačí změnit váš aktuální adresář na tutorial-snippets/Nextcloud .

Funkční git příkaz je následující:

git clone https://github.com/linuxhandbook/tutorial-snippets && \
    cd tutorial-snippets/Nextcloud

V opačném případě použijte následující kód shellu k vytvoření adresáře s názvem „Nextcloud“ a ke stažení souborů v něm.

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

Zkopírujte env.example soubor do .env . Tento soubor budete později upravovat pro proměnné prostředí. Uchování původního souboru je jen kvůli zálohování, nic jiného.

cp env.example .env

Nyní mi dovolte projít definice služeb:

1. Databáze NCD

NCDatabase služba vypadá takto:

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"]

Toto je databázová služba a jak bylo uvedeno dříve, používá mariadb:10.5.9 obrázek jako jeho plán.

Pro trvalé úložiště používám svazek s názvem NCMariaDB , je připojen na /var/lib/mysql , kam MariaDB ukládá svá data.

Proměnné prostředí jsou zpracovány pomocí .env souboru, o tom budu mluvit za chvíli.

Líbí se mi on-failure zásadu restartování, ale můžete si vybrat unless-stopped nebo always . Možná si budete chtít přečíst více o zásadách restartování v Dockeru.

common síť je společná mezi touto a frontendovou službou, je zde proto, aby zajistila, že komunikace mezi těmito kontejnery bude možná.

Proměnné prostředí

Toto je nasazení založené na Dockeru, musíte nastavit některé proměnné prostředí. Nyní otevřete tento .env soubor ve vašem oblíbeném textovém editoru a začněte měnit hodnoty následovně:

MYSQL_ROOT_PASSWORD nebo MYSQL_RANDOM_ROOT_PASSWORD :Buď nastavte MYSQL_RANDOM_ROOT_PASSWORD na 1 nebo nastavte silné heslo root pro MariaDB. Použijte openssl vygenerovat náhodné heslo.

MYSQL_DATABASE &MYSQL_USER :Jsou nastaveny některé výchozí hodnoty, ale v případě potřeby je můžete změnit. Nastavte je na preferovaný název databáze a uživatelské jméno.

MYSQL_PASSWORD :Heslo pro uživatele (MYSQL_USER ), která bude mít přístup k hlavní databázi MariaDB (MYSQL_DATABASE ).

MYSQL_HOST :Toto je název služby databázového kontejneru. Pokud nechcete změnit název služby v souboru Compose File, ponechte jej tak, jak je.

2. NCFrontend

Toto je frontendová služba Nextcloud. Tato služba je stejně jednoduchá jako předchozí. Podívejte se:

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"]

Použitý obrázek je nextcloud:21.0.0 , jak jsem již řekl, je nejnovější verzí v době psaní tohoto článku.

Abyste měli jistotu, že svá data uchováte v bezpečí a neztratíte je v nešťastném případě jednoduchého restartu kontejneru, musí být data uchována. Nextcloud ukládá svá data/informace do /var/www/html , takže toto umístění je trvalé pomocí svazku s názvem NCData .

depends_on pole je zajímavé. Zajišťuje, aby hodnoty, tedy služby v něm uvedené, byly nasazeny jako první před spuštěním té aktuální.

Zde se ujišťuji, že se databáze spouští před samotným Nextcloud, aby se předešlo problémům s připojením.

V protokolech můžete stále vidět nějaké problémy, protože úspěšné spuštění kontejneru neznamená, že zamýšlené procesy uvnitř kontejneru byly také úspěšně spuštěny. Mohou zabrat více času. V našem případě spuštění mysqld trvá o něco déle, což je důvod, proč můžete v protokolech vidět několik chyb, dokud se nakonec úspěšné připojení nenaváže.

Existují dvě sítě. První z nich je net , který byl také součástí nasazení reverzního proxy. To je nezbytné, protože reverzní proxy musí být schopen komunikovat se službami proxy, tj. Nextcloud. common síť je pro nextcloud a databázové kontejnery, aby mohly úspěšně komunikovat.

Docker Compose vytvoří výchozí síť pro všechny své služby v souboru Compose. Ale protože služba NCFrontend je již připojena k síťové síti, Docker Compose již nebude vytvářet tuto výchozí síť, a proto musíte vytvořit vlastní síť jako „běžnou“, aby komunikace proběhla.

Proměnné prostředí

Otevřete soubor .env soubor (stejný, jaký jste použili pro MariaDB) ve svém oblíbeném textovém editoru a začněte měnit hodnoty následovně:

LETSENCRYPT_HOST , VIRTUAL_HOST &NEXTCLOUD_TRUSTED_DOMAINS :Nastavte je na doménu/subdoménu, na které chcete hostovat instanci Nextcloud.

TRUSTED_PROXIES :Podsíť sítě sdílená reverzním proxy a tímto frontendem. Podsíť můžete získat pomocí následujícího příkazu (ujistěte se, že jq je nainstalován)

docker inspect -f '{{ json .IPAM.Config }}' net | jq -r .[].Subnet

OVERWRITEPROTOCOL :Parametr overwriteprotocol se používá k nastavení protokolu proxy. Protože používáme HTTPS, nastavte toto na HTTPS.

Konfigurace SMTP je volitelná. Pro tento článek použiji SendGrid jako příklad. Vhodnější hodnoty pro následující proměnné prostředí naleznete v dokumentaci k serveru SMTP.

SMTP_HOST &SMTP_PORT :Adresa SMTP serveru a port, na kterém bude naslouchat, pro SendGrid je to smtp.sendgrid.net a port 587 pro automatické TLS.

SMTP_NAME &SMTP_PASSWORD :Uživatelské jméno a heslo pro ověření. Pro SendGrid je hodnota uživatelského jména velmi konzistentní. Je to apikey . Jako heslo to bude váš klíč API.

MAIL_FROM_ADDRESS :Hodnota From SMTP hlavička. Nastavte toto na něco jako [email protected] .

NEXTCLOUD_ADMIN_USER &NEXTCLOUD_ADMIN_PASSWORD :Namísto prvního použití webového uživatelského rozhraní k vytvoření uživatele správce jej můžete vytvořit přímo ve fázi nasazení prostřednictvím těchto proměnných. Nastavte je na uživatelské jméno a heslo administrátora. Pokud jste jej opustili, budete vyzváni k vytvoření účtu při prvním spuštění Nextcloud.

Svazky

V této síti mám definované dva interní svazky, NCMariaDB pro MariaDB a NCData pro Nextcloud. Je na vás, zda si je ponecháte interní nebo externí.

Mnozí řeknou, že je riskantní ponechat je interní, protože můžete snadno udělat chybu, když použijete docker-compose down -v a odeberte objemy spolu s nádobami. Zároveň u externích svazků můžete udělat chybu docker volume prune a vymažte všechna svá data.

Rozhodněte se, který z nich bude pro vás bezpečnější. Pokud se rozhodnete je vytvořit externí, otevřete soubor Compose a změňte volumes definice k něčemu takovému:-

volumes:
  NCMariaDB:
    external: true
  NCData:
    external: true

Poté vytvořte svazky:

for volume in NCMariaDB NCData; do
  docker volume create ${volume}
done

Sítě

Tady toho moc není. Všimnete si, že jsou definovány dvě sítě. Jedna je pro frontend a reverzní proxy a druhá je pro frontend a backend, aby mohly komunikovat.

Databázový kontejner a nextcloud frontend mají společnou síť nazvanou „common“, je tu pro tyto dva kontejnery, aby spolu mohly komunikovat. Můžete to udělat interní, což omezí databázový kontejner v přístupu k veřejnému internetu, ale nejsem si jistý, jaké výhody z toho můžete získat.

Přesto, pokud to chcete udělat, mělo by to vypadat takto:

networks:
	net:
		external: true
	common:
		internal: true

Konečně nasazení Nextcloud

Nic jiného nezbývá. Stačí spustit následující příkaz

docker-compose up -d

Potřebné obrázky budou staženy a poté nasazeny.

Po nasazení by na vašem serveru měly běžet celkem čtyři kontejnery.

[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

můžete mít také spuštěno více kontejnerů, pokud dříve běžely kontejnery. Pointa je, že toto nasazení Nextcloud se skládá ze čtyř kontejnerů, kontejneru nginx, doprovodného kontejneru letsencrypt, kontejneru mariadb a nakonec skutečného kontejneru nextcloud.

Po nasazení

Než to zabalím, chtěl jsem zmínit jednu rychlou věc, kterou byste mohli chtít vědět po nasazení.

Nejprve otevřete prohlížeč a přejděte do domény, na které je hostována tato instance Nextcloud (VIRTUAL_HOST ). Měli byste vidět obrazovku podobnou této, pokud jste nenastavili uživatele admin pomocí nového souboru

Protože proměnné prostředí databáze jsou sdíleny prostřednictvím společného .env soubor, neuvidíte běžnější webové instalační rozhraní, které požaduje databázové informace, jako je název hostitele, port, heslo uživatelského jména databáze.

I tam je vidět podobné zaškrtávací políčko. Doporučuji zrušit zaškrtnutí tohoto políčka a nainstalovat aplikace, které budete později potřebovat, ze seznamu aplikací.

Chcete-li získat další tipy pro nasazení, přečtěte si tento úžasný článek, který napsal můj kolega Avimanyu:

10 užitečných tipů pro správu instance Nextcloud Docker Několik užitečných rad, které byste měli mít na paměti a dodržovat je v praxi, když sami hostujete svou instanci Nextcloud pomocí Dockeru! Příručka pro LinuxAvimanyu Bandyopadhyay

A je to. Doufám, že vám tento podrobný návod pomůže s instalací serveru Nextcloud pomocí Dockeru. Pokud máte dotazy nebo návrhy, dejte mi prosím vědět v sekci komentářů a já vám rád pomůžu.


Docker
  1. Jak nainstalovat a hostovat server OpenVPN pomocí Dockeru

  2. Nainstalujte server Wireguard VPN pomocí Docker

  3. Jak nainstalovat Jenkins pomocí Docker

  1. Jak nainstalovat desktopové prostředí na váš Headless Linux Server

  2. Jak nainstalovat NextCloud 13 na Ubuntu 16.04

  3. Jak nainstalovat Nextcloud 14 na Debian 9

  1. Jak nainstalovat SQL Server na Linux

  2. Jak nainstalovat NextCloud 15 na Ubuntu 18.04

  3. Jak nainstalovat virtualizační Linux Server