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. LinodePř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 ChakrabortyPokud 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
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.
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.
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 BandyopadhyayA 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.