Czym jest Nextcloud?

Nextcloud to doskonałe rozwiązanie jako samodzielnie hostowana alternatywa dla Google Drive lub Dropbox.

Nie zamierzam ci mówić, dlaczego powinieneś używać Nextcloud. Zamiast tego, pokażę ci, jak zainstalować serwer Nextcloud za pomocą kontenerów Dockerowych.

Poradnik wykorzystuje konfigurację reverse proxy Nginx, dzięki której możesz wdrożyć swoją instancję Nextcloud z SSL. W ten sposób adres URL Twojego wdrożenia Nextcloud będzie używał protokołu HTTPS, a transfer plików będzie odbywał się w sposób bezpieczny.

Pod koniec poradnika podzielę się kilkoma wskazówkami dla użytkowników chmury Linux w celu zmniejszenia wysiłku przy wdrażaniu Nextcloud. Wymagania wstępne

Zanim przejdziemy dalej, musisz się upewnić, że pewne rzeczy są załatwione. Oto czego potrzebujesz:

  • Serwer Linux
  • Zainstalowany Docker wraz z Docker Compose
  • Zarejestrowana domena

Wdrażanie serwera Nextcloud z Dockerem na reverse proxy

Zobaczmy kroki jeden po drugim.

Krok 1: Skonfiguruj reverse proxy

Dzięki reverse proxy możesz wdrożyć wiele usług sieciowych na tym samym serwerze.jest to koniczeczne bo potrzebujesz kontenera Let’s Encrypt do obsługi SSL.

Istnieją dwie metody konfiguracji odwróconego proxy Nginx.

Wdrożenie odwróconego proxy powinno być przeprowadzone za pomocą oddzielnego pliku Compose, abyś mógł uruchamiać lub aktualizować usługi sieciowe bez zakłócania konfiguracji odwróconego proxy.

Już przygotowałem pliki Compose w naszym publicznym repozytorium GitHub. Ponieważ nie jest to szczegółowy artykuł o wdrożeniu odwróconego proxy, nie będę zagłębiał się w szczegóły pliku Compose.

Możesz użyć gita aby pobrać repo:

git clone https://github.com/hakue1990/reverse-proxy-docker &&
cd reverse-proxy-docker

Są tutaj trzy pliki:

  • env.example: nazwij go .env i zmień DEFAULT_EMAIL na swój adres e-mail.
  • max_upload_size.conf: Ten plik zapewnia, że ​​możesz przesyłać pliki o wielkości nawet 1 GB (domyślnie 2 MB).
  • docker-compose.yaml: Największy z nich wszystkich. Omówiony krótko w następnym akapicie.

Utwórz sieć Docker o nazwie net. Będzie ona używana w pliku docker-compose.yaml.

docker network create net

Plik docker-compose wygląda następująco:

version: "3.3"

services:

    NginxProxy:
        image: "jwilder/nginx-proxy:latest"

        volumes:
            - "NPhtml:/usr/share/nginx/html"
            - "NPdhparam:/etc/nginx/dhparam"
            - "NPvhost:/etc/nginx/vhost.d"
            - "NPcerts:/etc/nginx/certs:ro"
            - "/var/run/docker.sock:/tmp/docker.sock:ro"
            - "./client_max_upload_size.conf:/etc/nginx/conf.d/client_max_upload_size.conf"

        labels:
            - "com.github.jrcs.letsencrypt_nginx_proxy_companion.nginx_proxy"
        restart: "on-failure"
        networks: ["net"]

        ports:
            - "80:80"
            - "443:443"

    LetsencryptCompanion:
        image: "jrcs/letsencrypt-nginx-proxy-companion:latest"

        volumes:
            - "LCacme:/etc/acme.sh"
            - "NPvhost:/etc/nginx/vhost.d"
            - "NPcerts:/etc/nginx/certs"
            - "NPhtml:/usr/share/nginx/html"
            - "/var/run/docker.sock:/var/run/docker.sock:ro"

        environment:
            - DEFAULT_EMAIL

        depends_on: ["NginxProxy"]
        restart: "on-failure"
        networks: ["net"]


volumes:
    NPhtml:
    NPdhparam:
    NPvhost:
    NPcerts:
    LCacme:

networks:
    net:
        external: true

Nareszcie, wdrożenie kontenerów

docker-compose up -d

Po pomyślnym wdrożeniu, przy próbie odwiedzenia adresu IP serwera, na którym znajduje się nasze reverse proxy zoabczysz poniższy komuniktat.

reverse-proxy

Jest okej - nie wdrożyliśmy jeszcze żadnych apliakcji webowych.

Krok 2: Deploy NextCloud

dwie składowe to: jedna to baza danych, druga to samo Nextcloud, albo raczej nazwijmy go frontem.

Dla backendowej bazy danych, każda baza oparta na MySQL będzie działać. Wybieram MariaDB, zwłaszcza znacznik (wersję) obrazu 10.5.9.

Dla Nextcloud, użyję wersji 21.0.0, jest to najnowsza wersja w chwili pisania tego artykułu.

Dlatego obrazy używane to

mariadb:10.5.9
nextcloud:21.0.0

Jeśli używasz tego tutorialu w przyszłości i istnieje nowsza wersja Nextcloud i MariaDB - użyj ich.

Możesz albo sklonować repozytorium GitHub, albo po prostu pobrać niezbędne pliki.

git clone https://github.com/hakue1990/nextcloud-docker-compose.git && \
cd nextcloud-docker

następnie zmień skopiuj plik env.example i zmień jego nazwę na .env - ustaw w nim zmienne środowiskowe.

cp env.example .env

1. NCDatabase

Usługa NCDatabase wygląda następująco:

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

obraz “mariadb:10.5.9”

  • image: mariadb:10.5.9
  • NCMariaDB:/var/lib/mysql - dla trwałych danych używam volumenu NCMariaDB który jest zbindowany z /var/lib/mysql gdzie MariaDB przechowuje swoje dane
  • environment - zmienne środowiskowe zapisane w pliku .env
  • restart: “on-failure” - kontener zostanie automatycznie ponownie uruchomiony w przypadku, gdy jego proces główny zakończy się niepowodzeniem.
  • networks: [“common”] - jest to sieć pomiędzy kontenerem bazy a usługą frontendową - służy to zapewnieniu możliwości komunikacji między tymi kontenerami.

2. NCFrontend

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"]
  • Używany obraz to nextcloud:21.0.0.
  • NCData:/var/www/html Aby zapewnić bezpieczeństwo danych i uniknąć ich utraty w przypadku niefortunnego zdarzenia prostego restartu.kontenera, dane muszą być przechowywane trwale w woluminie NCData i mapowane do /var/www/html wewnątrz kontenera.
  • networks: [“net”, “common”] - dwie sieci net, która jest też częścią reverse-proxy. common jest dla komunikacji bazy i nextclouda.

zmienne środowiskowe:

Otwórz plik .env (ten sam, który użyłeś dla MariaDB) w swoim ulubionym edytorze tekstu i zacznij zmieniać wartości zgodnie z poniższym:

LETSENCRYPT_HOST, VIRTUAL_HOST i NEXTCLOUD_TRUSTED_DOMAINS: Ustaw je na domenę/subdomenę, na której chcesz hostować swoją instancję Nextcloud.

TRUSTED_PROXIES: Podsieć sieci, wspólna dla odwrotnej proxy i tego frontu. Możesz uzyskać podsieć za pomocą poniższego polecenia (upewnij się, że zainstalowano jq):

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

OVERWRITEPROTOCOL: Parametr overwriteprotocol służy do ustawienia protokołu proxy. Ponieważ korzystamy z HTTPS, ustaw to na HTTPS.

Wolumeny

W tej sieci mam zdefiniowane dwa woluminy wewnętrzne: NCMariaDB dla MariaDB oraz NCData dla Nextcloud. Czy chcesz je zachować jako wewnętrzne czy zewnętrzne, zależy od Ciebie.

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

Następnie utwórz wolumeny:

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

Sieci

zdefiniowane są dwie sieci. Jedna jest dla front-endu i odwrotnej proxy, a druga jest dla front-endu i backendu, aby mogły się komunikować.

Kontener bazy danych i front-end Nextcloud mają wspólną sieć o nazwie “common”, służy to do umożliwienia tym dwóm kontenerom komunikowania się ze sobą. Możesz uczynić to wewnętrznym, co ograniczy dostęp kontenera bazy danych do publicznego internetu, ale nie jestem pewien, jakie korzyści mogą wyniknąć z tego.

Mimo to, jeśli chcesz to zrobić, powinno to wyglądać tak:

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

Deploy Nextclouda

docker-compose up -d

Jeśli wszystko poszło zgodnie z planem zobaczysz: reverse-proxy

Czyli swoją aplikację NextCloud w kontenerze Docker.