Kör Nextcloud med Podman utan root

Din egen Nextcloud för filer, kalendrar och kontakter på Debian 13, i rootless Podman-containrar under en egen användare, med HTTPS, bakgrundsjobb, uppdateringar och säkerhetskopior.

Testad på Nextcloud 34 och 35 på Debian 13 (trixie) på en server hos Melonslab Uppdaterad 25 september 2026

Rekommenderad server för guiden

VC-S Micro · 2 vCPU · 8 GB Minne · 250 GB Lagring

Månadsvis, ingen bindningstid 7 dagars öppet köp

90 kr/mån

Beställ nu
På den här sidan

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.com och 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.

Kör det på din egen server

VC-S Micro

90 kr/mån

vCPU
2
Minne
8 GB
Lagring
250 GB
Trafik
10 TB
Standard
HDD · RAID 10
  • Full root-åtkomst
  • Nativt /64 IPv6
  • RAID-skyddad lagring
  • Malmö, Sverige
  • Månadsvis, ingen bindningstid
  • 7 dagars öppet köp
Alla guider