Det här sätter du upp
Nextcloud lagrar dina filer, kalendrar och kontakter på din egen server och synkar dem till dina datorer och mobiler. Här körs den som tre containrar i en pod, under en egen användare som heter nextcloud:
- Nextcloud själv, med Apache och PHP,
- MariaDB, dess databas,
- Redis, för cache och fillåsning.
Caddy, som du satte upp i Podman-guiden, sköter HTTPS framför den.
Varje steg nedan har körts på en nyinstallerad VC-P Alloy (2 vCPU, 8 GB) hos Melonslab med Debian 13: Nextcloud 34 installerades och uppgraderades sedan till 35. I vila använde containrarna under 300 MB minne. Vi kontrollerade åtkomst till filer, kalendrar och kontakter, HTTPS över IPv4 och IPv6, besökarnas riktiga IP-adresser, bakgrundsjobb, en omstart av servern och säkerhetskopian.
Innan du börjar
Du behöver:
- en server uppsatt som i Podman-guiden, med Caddy igång;
- ett namn för din Nextcloud, till exempel
cloud.example.com, med en A-post och en AAAA-post som pekar på din server.
Exemplen använder cloud.example.com som namn och 203.0.113.10 som din servers IPv4-adress. Byt genomgående ut dem mot dina egna.
För Nextcloud passar våra Standard-paket oftast bäst: de har hårddiskar i RAID 10, från 250 GB på det minsta paketet upp till 1 TB, så det finns plats för filer till ett lägre pris. Performance-paketen har snabbare SSD-lagring, men mindre utrymme.
1. Skapa användaren
Som root:
useradd -m -s /bin/bash nextcloud
loginctl enable-linger nextcloud
machinectl shell nextcloud@
Allt fram till steg 6 körs som nextcloud.
2. Skapa lösenorden
printf %s "$(openssl rand -hex 24)" | podman secret create nextcloud-db-password -
printf %s "$(openssl rand -hex 16)" | podman secret create nextcloud-admin-password -
Podman sparar dem som hemligheter och lämnar över dem till containrarna när de startar, så inget lösenord skrivs in i filerna nedan. Med printf %s kommer ingen radbrytning med i lösenordet.
3. Definiera podden
mkdir -p ~/.config/containers/systemd
Skapa ~/.config/containers/systemd/nextcloud.pod:
[Pod]
PodName=nextcloud
# Only Caddy, on this server, can reach Nextcloud: the port is not open to the internet.
PublishPort=127.0.0.1:8081:80
AddHost=cloud.example.com:host-gateway
[Install]
WantedBy=default.target
Containrarna i en pod delar ett nätverk och når varandra på 127.0.0.1. Den enda vägen in är port 8081 på serverns egen loopback-adress, dit Caddy ansluter, så varken Nextcloud eller dess databas går att nå från internet. AddHost låter Nextcloud nå sin egen publika adress, som den använder för att kontrollera sin konfiguration.
4. Lägg till databasen och cachen
Skapa ~/.config/containers/systemd/nextcloud-db.container:
[Container]
ContainerName=nextcloud-db
Image=docker.io/library/mariadb:11.8
Pod=nextcloud.pod
Volume=nextcloud-db:/var/lib/mysql
Environment=MARIADB_DATABASE=nextcloud MARIADB_USER=nextcloud
Environment=MARIADB_RANDOM_ROOT_PASSWORD=1 MARIADB_AUTO_UPGRADE=1
Secret=nextcloud-db-password,type=env,target=MARIADB_PASSWORD
Exec=--transaction-isolation=READ-COMMITTED
AutoUpdate=registry
[Service]
Restart=always
MariaDB 11.8 är den version Nextcloud rekommenderar, och READ-COMMITTED den inställning den ber om. MARIADB_AUTO_UPGRADE uppdaterar databasfilerna när en nyare MariaDB-avbild släpps.
Skapa ~/.config/containers/systemd/nextcloud-redis.container:
[Container]
ContainerName=nextcloud-redis
Image=docker.io/library/redis:8-alpine
Pod=nextcloud.pod
AutoUpdate=registry
[Service]
Restart=always
5. Lägg till Nextcloud
Skapa ~/.config/containers/systemd/nextcloud-app.container:
[Unit]
After=nextcloud-db.service nextcloud-redis.service
[Container]
ContainerName=nextcloud-app
Image=docker.io/library/nextcloud:34-apache
Pod=nextcloud.pod
Volume=nextcloud:/var/www/html
Environment=MYSQL_HOST=127.0.0.1 MYSQL_DATABASE=nextcloud MYSQL_USER=nextcloud
Secret=nextcloud-db-password,type=env,target=MYSQL_PASSWORD
Environment=NEXTCLOUD_ADMIN_USER=admin
Secret=nextcloud-admin-password,type=env,target=NEXTCLOUD_ADMIN_PASSWORD
Environment=NEXTCLOUD_TRUSTED_DOMAINS=cloud.example.com
Environment=OVERWRITEPROTOCOL=https OVERWRITECLIURL=https://cloud.example.com
Environment=TRUSTED_PROXIES=203.0.113.10
Environment=REDIS_HOST=127.0.0.1
AutoUpdate=registry
[Service]
Restart=always
Vid första starten installerar containern Nextcloud med användaren admin. Caddys anslutningar når podden från serverns egen IPv4-adress, så TRUSTED_PROXIES anger den adressen: Nextcloud tar då varje besökares riktiga IP-adress från det Caddy skickar vidare, vilket den behöver för att bromsa lösenordsgissning. De två OVERWRITE-inställningarna får Nextclouds egna länkar att använda HTTPS.
Version 34 är den som avbilden märker som stabil. Med taggen 34-apache installeras uppdateringar inom 34 automatiskt; till nästa huvudversion uppgraderar du själv (steg 10).
Starta den och följ loggen:
systemctl --user daemon-reload
systemctl --user start nextcloud-pod
podman logs -f nextcloud-app
Vid första starten laddas omkring 2 GB avbilder ner och Nextcloud installeras, vilket tar några minuter. När loggen visar Nextcloud was successfully installed och sedan visar att Apache startar trycker du Ctrl+C.
6. Sätt Caddy framför
Gå tillbaka till root med exit och byt till Caddys användare:
machinectl shell caddy@
Lägg till det här blocket sist i ~/Caddyfile:
cloud.example.com {
reverse_proxy 127.0.0.1:8081
redir /.well-known/carddav /remote.php/dav/ 301
redir /.well-known/caldav /remote.php/dav/ 301
header Strict-Transport-Security "max-age=15552000; includeSubDomains"
}
Och starta om Caddy, vilket kort avbryter alla webbplatser den serverar:
systemctl --user restart caddy
Caddy hämtar ett certifikat för cloud.example.com och förnyar det själv, och omdirigerar besökare från vanlig HTTP till HTTPS. De två redir-raderna låter kalender- och kontaktappar hitta rätt utifrån bara din servers namn.
Gå tillbaka till root med exit och byt till Nextclouds användare med machinectl shell nextcloud@. Visa adminlösenordet:
podman secret inspect --showsecret --format '{{.SecretData}}' nextcloud-admin-password
Öppna https://cloud.example.com och logga in som admin.
7. Kör bakgrundsjobb
Nextcloud har återkommande uppgifter, till exempel städning och utskick av aviseringar, som ska köras var femte minut. Gör först dess occ-kommando kortare att skriva:
echo "alias occ='podman exec -u www-data nextcloud-app php occ'" >> ~/.bashrc
source ~/.bashrc
mkdir -p ~/.config/systemd/user
Skapa ~/.config/systemd/user/nextcloud-cron.service:
[Unit]
Description=Nextcloud background jobs
[Service]
Type=oneshot
ExecStart=/usr/bin/podman exec -u www-data nextcloud-app php -f /var/www/html/cron.php
Och ~/.config/systemd/user/nextcloud-cron.timer:
[Unit]
Description=Run Nextcloud background jobs every 5 minutes
[Timer]
OnCalendar=*:0/5
[Install]
WantedBy=timers.target
Slå på den och säg åt Nextcloud att använda den:
systemctl --user daemon-reload
systemctl --user enable --now nextcloud-cron.timer
occ background:cron
8. Gör klart inställningarna
occ config:system:set maintenance_window_start --type=integer --value=1
occ config:system:set default_phone_region --value=SE
occ maintenance:repair --include-expensive
Den första raden kör de tunga dagliga uppgifterna under de fyra timmarna från 01:00 UTC, den andra läser telefonnummer utan landsnummer som svenska, och den tredje gör klart en uppgift som en ny installation lämnar åt dig.
Det som återstår under Administration settings → Overview är förslag. Två är värda att göra: ställ in e-post under Basic settings så att Nextcloud kan skicka lösenordsåterställningar (din egen mailserver fungerar), och slå på tvåfaktorsautentisering för dina användare.
9. Håll den uppdaterad
Slå på Podmans dagliga uppdateringar för den här användaren:
systemctl --user enable --now podman-auto-update.timer
Då hålls alla tre containrarna uppdaterade. När en nyare avbild för Nextcloud 34 släpps uppgraderar containern Nextcloud när den startar om.
10. Uppgradera till en ny huvudversion
En ny huvudversion är ett steg du tar själv, en version i taget: Nextcloud kan inte hoppa över någon. Säkerhetskopiera först (steg 11), pausa sedan bakgrundsjobben så att de inte körs mitt i uppgraderingen, byt taggen och starta om:
systemctl --user stop nextcloud-cron.timer
sed -i 's/nextcloud:34-apache/nextcloud:35-apache/' ~/.config/containers/systemd/nextcloud-app.container
systemctl --user daemon-reload
systemctl --user restart nextcloud-app
podman logs -f nextcloud-app
När loggen visar Update successful trycker du Ctrl+C och startar bakgrundsjobben igen:
systemctl --user start nextcloud-cron.timer
I vårt test av 35.0.1 rapporterade loggen också en saknad tabell, oc_federated_invites, och översiktssidan listade databasförslag, bland dem "Replica lag", på en server utan replikering. Nextcloud 35 tar bort den tomma tabellen med flit, och replikkontrollen gäller inte en ensam server, så inget av dem behöver åtgärdas.
11. Säkerhetskopiera
mkdir -p ~/backup
occ maintenance:mode --on
podman exec nextcloud-db sh -c 'mariadb-dump --single-transaction -u nextcloud -p"$MARIADB_PASSWORD" nextcloud' > ~/backup/nextcloud-db.sql
podman volume export nextcloud --output ~/backup/nextcloud-files.tar
occ maintenance:mode --off
Det sparar databasen i en egen fil och Nextclouds filer, inställningar och program i ett arkiv. Nextcloud går inte att använda medan kommandona körs. Kopiera sedan ~/backup till en annan maskin: en säkerhetskopia på samma server överlever inte att servern går förlorad. Den innehåller databaslösenordet, så förvara den säkert.
Anslut dina enheter
- Filer: installera Nextcloud-appen på din dator eller mobil och ange
https://cloud.example.com. - Kalendrar och kontakter: lägg till ett CalDAV- eller CardDAV-konto (DAVx⁵ på Android, de inbyggda kontona på iPhone och Mac) med
https://cloud.example.comoch ditt användarnamn. Appen hittar dina kalendrar och adressböcker själv.
Felsökning
Webbläsaren visar "Access through untrusted domain". Adressen du använde är inte den i NEXTCLOUD_TRUSTED_DOMAINS, som bara gäller vid installationen. Så lägger du till en senare: occ config:system:set trusted_domains 1 --value=cloud.example.com.
Det finns inget certifikat, eller webbläsaren varnar för det. Kontrollera att A- och AAAA-posterna pekar på servern, och läs sedan Caddys logg som användaren caddy med podman logs caddy.
Varje inloggning ser ut att komma från din servers egen adress. TRUSTED_PROXIES i steg 5 måste vara serverns IPv4-adress, den som Caddys anslutningar kommer från.
Översiktssidan anger att headern Strict-Transport-Security inte är satt, fast Caddy sätter den. Nextcloud kunde inte nå sig själv via Caddy för att kontrollera. Raden AddHost i steg 3 måste ange din Nextclouds adress.
Något körs inte. Som nextcloud listar du containrarna med podman ps och ser poddens status med systemctl --user status nextcloud-pod.
Dina filer i Sverige
Med Nextcloud på en server hos Melonslab lagras dina filer, kalendrar och kontakter i Sverige, på en server du själv styr över, där svensk lag och EU-rätt gäller.