Skip to content

Podman - Forgejo Server aufsetzen

Angeheftet Podman
5 1 644
  • Vorwort

    Ich habe mir mal am Karnevalswochenende vorgenommen, mir ein wenig Podman, als Docker Ersatz, näher zu bringen. Es war fordernd 🙂

    Mein Plan ist es einen Forgejo Server aufzusetzen. Die Dienste sollen alle als Podman Container laufen. Dafür brauche ich

    • Forgejo
    • Postgres
    • Nginx

    Los geht's

    Ich werde das hier über Pfingsten vollständig aktualisieren. Ich habe jetzt mehrere Tage das Setup komplett optimiert. Ich bin jetzt auf einem vollständigem Quatlet Setup.

    Da hat sich so viel geändert und verbessert, das ich diese Installation aktuell nicht mehr empfehlen kann. Ich lasse sie aber erst mal hier stehen.

    Installation Server

    Ich nutze eine VM von Hetzner. Darauf läuft ein Debian 13 "Trixie". Also, die nächste Version die kommt.

    deb http://deb.debian.org/debian trixie main contrib non-free-firmware
    # deb-src http://deb.debian.org/debian bookworm main contrib non-free-firmware
    
    deb http://deb.debian.org/debian trixie-updates main contrib non-free-firmware
    # deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free-firmware
    
    # deb http://deb.debian.org/debian bookworm-backports main contrib non-free-firmware
    # deb-src http://deb.debian.org/debian bookworm-backports main contrib non-free-firmware
    
    deb http://security.debian.org/debian-security trixie-security main contrib non-free-firmware
    # deb-src http://security.debian.org/debian-security bookworm-security main contrib non-free-firmware
    

    Warum Trixie? Mein Profi Berater meint, die uralte Podman Version sollte man nicht mehr benutzen, man braucht etwas Frisches 🙂

    root@forgejo:/etc/apt# podman -v
    podman version 5.3.2
    

    Security Server

    • Firewall wird über Hetzner gemacht. Port 22, 80, 443
    • Crowdsec benutze ich um ungebetene Gäste eine Zeit lang auszusperren. (Crowdsec ist eine Alternative zu fail2ban)

    Voraussetzungen

    Nachinstallierte Pakete.

    apt install crowdsec crowdsec-firewall-bouncer git socat catatonit
    

    Ich hoffe, ich habe hier nichts vergessen. Wenn doch kommt ja eine Meldung, dann kann man das einfach nachinstallieren.

    Catatonit

    @forgejo:~# apt search catatonit
    catatonit/testing,now 0.2.1-1 amd64 [installed]
      init process for containers
    

    Wird benötigt für die Anlage von Pods. (Hoffe das ist richtig, wie gesagt, war ein langes Wochenende)

    ACME

    Wird benötigt für das SSL Zertifikat. @Nico schwört ja immer drauf 😉

    git clone --depth 1 https://github.com/acmesh-official/acme.sh.git
    cd acme.sh/
    ./acme.sh --server letsencrypt --standalone --issue -d forgejo.linux-nerds.org
    ./acme.sh --install-cert -d forgejo.linux-nerds.org --cert-file      /root/nginx/letsencrypt/live/forgejo.linux-nerds.org/cert.pem  --key-file       /root/nginx/letsencrypt/live/forgejo.linux-nerds.org/key.pem  --fullchain-file /root/nginx/letsencrypt/live/forgejo.linux-nerds.org/fullchain.pem
    

    git und socat sind für acme nötig.

    Crontab zur Aktualisierung des Zertifikates anlegen

    Crontab anlegen

    crontab -e
    

    Inhalt

    # m h  dom mon dow   command
    03 09 * * * "/root/.acme.sh"/acme.sh --cron --home "/root/.acme.sh" --reloadcmd "systemctl restart nginx.service" > /dev/null
    

    Test auf der Konsole

    root@forgejo:~/acme.sh# ./acme.sh --cron --home "/root/.acme.sh" --reloadcmd "systemctl restart nginx.service"
    [Fri Feb 28 01:37:11 PM UTC 2025] ===Starting cron===
    [Fri Feb 28 01:37:11 PM UTC 2025] Renewing: 'forgejo.linux-nerds.org'
    [Fri Feb 28 01:37:11 PM UTC 2025] Renewing using Le_API=https://acme-v02.api.letsencrypt.org/directory
    [Fri Feb 28 01:37:11 PM UTC 2025] Skipping. Next renewal time is: 2025-04-28T07:23:28Z
    [Fri Feb 28 01:37:11 PM UTC 2025] Add '--force' to force renewal.
    [Fri Feb 28 01:37:11 PM UTC 2025] Skipped forgejo.linux-nerds.org_ecc
    [Fri Feb 28 01:37:11 PM UTC 2025] ===End cron===
    

    User

    Ich brauche ein paar User auf dem Host.

    useradd -m -d /home/pguser pguser
    useradd -m -d /home/forgejo forgejo
    

    Secrets erstellen

    podman secret create POSTGRES_PASSWORD /root/secrets/POSTGRES_PASSWORD.txt
    

    Hier liegt das Postgres Passwort drin. Ich erläutere in einem anderen Artikel was Podamn Secret ist.

    1. Einen Pod erstellen

    Zuerst erstellen wir einen Pod mit den entsprechenden Port-Mappings.

    podman pod create --name forgejo-pod -p 3000:3000 -p 222:22 -p 80:80 -p 443:443
    

    Dieser Befehl legt einen Pod namens forgejo-pod an, der die Ports 3000, 222, 80 und 443 vom Host an den Pod weiterleitet.

    Die Ports sind für

    • 22 SSH
    • 80, 443 Web
    • 3000 Forgejo

    NGINX dient als Proxy.

    Der Systemd Dienst für den Pod

    /etc/systemd/system/forgejo-pod.service

      GNU nano 8.3                                                                                        forgejo-pod.service                                                                                                  
    [Unit]
    Description=Forgejo Pod
    Requires=network.target
    After=network-online.target
    
    [Service]
    Type=oneshot
    RemainAfterExit=yes
    ExecStartPre=-/usr/bin/podman pod rm -f forgejo-pod
    ExecStart=/usr/bin/podman pod create --name forgejo-pod -p 3000:3000 -p 222:22 -p 80:80 -p 443:443
    ExecStop=/usr/bin/podman pod rm -f forgejo-pod
    
    [Install]
    WantedBy=multi-user.target[Pod]
    Name=forgejo-pod
    PublishPort=3000:3000
    PublishPort=222:22
    PublishPort=80:80
    PublishPort=443:443
    
    [Service]
    TimeoutStartSec=90
    
    [Install]
    WantedBy=multi-user.target
    

    Danach

    systemctl start forgejo-pod.service
    systemctl enable forgejo-pod.service
    

    Jetzt startet der Pod auch nach einem Server Reboot.

    2. Container im Pod starten

    Hier starten wir die einzelnen Container, mit der Angabe in welchem POD sie laufen sollen.

    Ich nutze die Podman Funktion quatlet, diese ist in Podman integriert. Dazu legt man unter /etc/containers/systemd folgende Files an.

    Datenbank (Postgres)

    Wir benötigen einen leeren Ordner unter /home/pguser/db-data. An die Benutzerrechte denken.

    /etc/containers/systemd/postgres.container

    [Unit]
    Description=Postgres Container im Pod forgejo-pod
    After=network.target
    After=forgejo-pod.service
    Requires=forgejo-pod.service
    Restart=always
    
    [Container]
    Image=docker.io/library/postgres:17
    AutoUpdate=registry
    Label=PODMAN_SYSTEMD_UNIT=%n
    User=1000:1000
    PodmanArgs=--pod=forgejo-pod --name=postgres --secret=POSTGRES_PASSWORD,type=env,target=POSTGRES_PASSWORD
    Volume=/home/pguser/db-data:/var/lib/postgresql/data
    
    [Install]
    WantedBy=multi-user.target
    

    Forgejo Server

    /etc/containers/systemd/forgejo.container

    [Unit]
    Description=Forgejo Container im Pod forgejo-pod
    After=network.target
    After=forgejo-pod.service
    Requires=forgejo-pod.service
    Restart=always
    
    [Container]
    Image=codeberg.org/forgejo/forgejo:10.0.1
    AutoUpdate=registry
    Label=PODMAN_SYSTEMD_UNIT=%n
    PodmanArgs=--pod=forgejo-pod --name=forgejo
    Environment=USER_UID=1001
    Environment=USER_GID=1001
    Volume=/home/forgejo:/data
    Volume=/etc/timezone:/etc/timezone:ro
    Volume=/etc/localtime:/etc/localtime:ro
    
    [Install]
    WantedBy=multi-user.target
    

    Hier wird der Forgejo-Server-Container in den Pod integriert. Bei der Instalaltion von Forgejo muss man folgende Daten eingeben.

    • Datenbank Adresse: postgres:5432
    • DB User: postgres
    • DB Name: postgres
    • Beide URL mit https://

    Nginx

    Für NGINX brauchen wir folgende Files

    /etc/nginx/default.conf

    server {
        listen 80;
        server_name forgejo.linux-nerds.org;
        return 301 https://$server_name$request_uri;
    }
    
    server {
        listen 443 ssl;
        listen [::]:443 ssl;
        http2 on;
        server_name forgejo.linux-nerds.org;
    
        # Use Mozilla's guidelines for SSL/TLS settings
        # https://mozilla.github.io/server-side-tls/ssl-config-generator/
        ssl_certificate      /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/fullchain.pem;
        ssl_certificate_key  /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/key.pem;
        ssl_dhparam /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/dhparam.pem;
    
        # enables TLSv1.2 & TLSv1.3
        ssl_protocols TLSv1.2 TLSv1.3;
        ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
        ssl_prefer_server_ciphers off;
    
        # Prevent nginx HTTP Server Detection
        server_tokens off;
    
        # HSTS settings
        # WARNING: Only add the preload option once you read about
        # the consequences in https://hstspreload.org/. This option
        # will add the domain to a hardcoded list that is shipped
        # in all major browsers and getting removed from this list
        # could take several months.
        # add_header Strict-Transport-Security "max-age=15552000; includeSubDomains;" always;
    
        # set max upload size and increase upload timeout:
        client_max_body_size 512M;
        client_body_timeout 300s;
        fastcgi_buffers 64 4K;
    
        # The settings allows you to optimize the HTTP2 bandwitdth.
        # See https://blog.cloudflare.com/delivering-http-2-upload-speed-improvements/
        # for tunning hints
        client_body_buffer_size 512k;
    
        # Remove X-Powered-By, which is an information leak
        fastcgi_hide_header X-Powered-By;
    
        location / {
            proxy_pass http://138.199.209.222:3000;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header X-Forwarded-Proto $scheme;
        }
    
    }
    

    und einen Ordner

    /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/

    Darin liegen die Zertifikate

    root@forgejo:# ls -lha /etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/
    total 24K
    drwxr-xr-x 2 999 996 4.0K Mar  2 18:36 .
    drwxr-xr-x 3 999 996 4.0K Feb 28 07:49 ..
    -rw-r--r-- 1 999 996 1.3K Feb 28 07:49 cert.pem
    -rw-r--r-- 1 999 996  428 Mar  2 18:30 dhparam.pem
    -rw-r--r-- 1 999 996 2.8K Feb 28 07:49 fullchain.pem
    -rw------- 1 999 996  227 Feb 28 07:49 key.pem
    

    /etc/containers/systemd/nginx.container

    [Unit]
    Description=NGINX Container im Pod forgejo-pod
    After=network.target
    After=forgejo-pod.service
    Requires=forgejo-pod.service
    Restart=always
    
    [Container]
    Image=docker.io/library/nginx:latest
    AutoUpdate=registry
    Label=PODMAN_SYSTEMD_UNIT=%n
    PodmanArgs=--pod=forgejo-pod --name=nginx
    Volume=/etc/nginx/default.conf:/etc/nginx/conf.d/default.conf:ro
    Volume=/etc/nginx/letsencrypt/live/forgejo.linux-nerds.org/:/etc/nginx/letsencrypt/live/forgejo.linux-nerds.org:ro
    
    [Install]
    WantedBy=multi-user.target
    

    Auch der Nginx-Container wird im selben Pod gestartet. Dadurch nutzen alle Container denselben Netzwerk-Namespace, was u. a. bedeutet, dass sie sich über ihre Containernamen (z. B. postgres) erreichen können. Wichtig bei der Installation von Forgejo, dort gibt man dann postgres:5432 an.

    Nachdem alle Files erstellt wurden, lädt man mal den Daemon neu

    systemctl daemon-reload
    

    Jetzt sollten die Dienste angelegt worden sein.

    • postgres.service
    • forgejo.service
    • nginx.service

    Das kann man mit

    systemctl status nginx.service
    

    kontrollieren. Auch eine gute Hilfe, wenn was nicht startet.

    3. Überprüfen des Pods und der Container

    Mit den folgenden Befehlen kannst Du sicherstellen, dass der Pod und alle Container korrekt laufen:

    podman pod ps
    podman ps
    

    podman pod ps listet alle Pods und deren Port-Zuordnungen, während podman ps die laufenden Container anzeigt.

    4. Systemd Unit-Datei generieren (Deprecated)

    Podman bietet die Möglichkeit, systemd Service-Dateien automatisch zu generieren. Für Deinen Pod erstellst Du beispielsweise eine Unit-Datei mit:

    podman generate systemd --name forgejo-pod --files --new
    

    Dieser Befehl generiert vier Dateien.

    root@debian-4gb-nbg1-2-forgejo:~# podman generate systemd --name forgejo-pod --files --new
    
    DEPRECATED command:
    It is recommended to use Quadlets for running containers and pods under systemd.
    
    Please refer to podman-systemd.unit(5) for details.
    /root/container-forgejo.service
    /root/container-nginx-proxy.service
    /root/pod-forgejo-pod.service
    /root/container-postgres.service
    

    5. Systemd Unit-Datei aktivieren und starten (Deprecated)

    Kopiere die generierten Systemd-Dateien in das systemweite systemd-Verzeichnis, aktiviere sie und starte den Service:

    cp *.service /etc/systemd/system/
    systemctl daemon-reload
    systemctl enable container-forgejo-pod.service
    systemctl enable container-nginx-proxy.service
    systemctl enable pod-forgejo-pod.service
    systemctl enable container-postgres.service
    systemctl start container-forgejo-pod.service
    

    Nun wird Dein Pod zusammen mit allen enthaltenen Containern über systemd verwaltet und startet beim Systemstart automatisch.

    6. Rechte

    Ein Thema was ich nicht wirklich verstehe, aber man kann ja dran arbeiten. Schauen wir uns mal die einzelnen Container an.

    nginx-proxy

    root@forgejo:/home/pguser# podman top nginx
    USER        PID         PPID        %CPU        ELAPSED              TTY         TIME        COMMAND
    root        1           0           0.000       11h22m59.211971839s  ?           0s          nginx: master process nginx -g daemon off; 
    nginx       16          1           0.000       11h22m59.212103517s  ?           0s          nginx: worker process 
    nginx       17          1           0.000       11h22m59.21219268s   ?           0s          nginx: worker process 
    

    NGINX läuft als root, die Worker als User nginx.

    postgres

    root@forgejo:/home/pguser# podman top postgres
    USER        PID         PPID        %CPU        ELAPSED              TTY         TIME        COMMAND
    pguser      1           0           0.005       11h23m46.923566147s  ?           2s          postgres 
    pguser      9           1           0.000       11h23m46.923736112s  ?           0s          postgres: checkpointer  
    pguser      10          1           0.000       11h23m46.923826476s  ?           0s          postgres: background writer  
    pguser      12          1           0.000       11h23m45.923891884s  ?           0s          postgres: walwriter  
    pguser      13          1           0.000       11h23m45.923977432s  ?           0s          postgres: autovacuum launcher  
    pguser      14          1           0.000       11h23m45.92404386s   ?           0s          postgres: logical replication launcher  
    pguser      350         1           0.003       8h53m41.924108998s   ?           1s          postgres: postgres postgres 127.0.0.1(51406) idle 
    pguser      1372        1           0.000       53m41.924171702s     ?           0s          postgres: postgres postgres 127.0.0.1(53832) idle 
    

    Postgres läuft wie eingestellt, mit dem User pguser.

    forgejo

    root@forgejo:/home/pguser# podman top forgejo 
    USER        PID         PPID        %CPU        ELAPSED              TTY         TIME        COMMAND
    root        1           0           0.000       11h24m30.390732597s  ?           0s          /bin/s6-svscan /etc/s6 
    root        11          1           0.000       11h24m30.390842417s  ?           0s          s6-supervise openssh 
    root        12          1           0.000       11h24m30.390906629s  ?           0s          s6-supervise gitea 
    git         13          12          0.285       11h24m30.390967669s  ?           1m57s       /usr/local/bin/gitea web 
    root        14          11          0.000       11h24m30.391030954s  ?           0s          sshd: /usr/sbin/sshd -D -e [listener] 0 of 10-100 startups 
    

    Forgejo läuft als root, aber die Dienste, die nach außen kommunizieren, werden als forgejo gestartet. Kann man sich mit htop ansehen.

    Backups

    Für Backups braucht ihr nur diese beiden Ordner sichern.

    • /home/pguser/db-data/
    • /home/forgero

    Anmerkungen

    Wer hier Fehler oder Verbesserungsvorschläge hat, schreibt es gerne hier unten drunter. Ich freue mich über jeden Tipp.

    Teile dieser Doku sind mit Text von ChatGPT erstellt worden. Dürfte aber mittlerweile nicht mehr viel von über sein, aber wegen der Transparenz sei dies hier erwähnt.

  • FrankMF FrankM hat dieses Thema am angepinnt
  • Bei der Installation wird die Registrierung ausgeschaltet, es sei denn ihr habt das bei der Installation geändert. Ok, was machen, wenn man das ändern möchte?

    Zwei Möglichkeiten.

    Volume

    Wir legen die ganze app.ini in ein Volume.

    Volume=/home/forgejo/conf/app.ini:/data/gitea/conf/app.ini
    

    In /home/forgejo/conf/app.ini erstellt man das File. Den Inhalt holt man sich vorher aus dem Container.

    podman exec -it forgejo bash
    vi data/gitea/conf/app.ini
    

    Environment

    Wir steuern den gewünschten Wert über eine Environment Variable.

    Environment=FORGEJO__SERVICE__DISABLE_REGISTRATION=false
    

    Danach

    systemctl daemon-reload
    systemctl restart forgejo.service
    

    und die Registrierung ist eingeschaltet.

    Was ich festgestellt habe ist, das ich keinen Mailer aktiv habe. Der Test-Account war ohne E-Mail-Verifizierung aktiv. Das schaue ich mir dann auch noch mal an.

  • FrankMF FrankM hat am auf dieses Thema verwiesen
  • FrankMF FrankM hat am auf dieses Thema verwiesen
  • Und das Beste kommt jetzt 😉

    Wir wollen den Container updaten, weil es ein neues Release gibt.

    /etc/containers/systemd/forgejo.container

    [Unit]
    Description=Forgejo Container im Pod forgejo-pod
    After=network.target
    After=forgejo-pod.service
    Requires=forgejo-pod.service
    Restart=always
    
    [Container]
    Image=codeberg.org/forgejo/forgejo:10.0.1
    AutoUpdate=registry
    Label=PODMAN_SYSTEMD_UNIT=%n
    PodmanArgs=--pod=forgejo-pod --name=forgejo
    Environment=USER_UID=1001
    Environment=USER_GID=1001
    Volume=/home/forgejo:/data
    Volume=/etc/timezone:/etc/timezone:ro
    Volume=/etc/localtime:/etc/localtime:ro
    

    Die alte Version steht oben auf 10.0.1, jetzt gibt es heute die neue Version 11.0.0. Kein Problem.

        [Unit]
        Description=Forgejo Container im Pod forgejo-pod
        After=network.target
        After=forgejo-pod.service
        Requires=forgejo-pod.service
        Restart=always
        
        [Container]
        Image=codeberg.org/forgejo/forgejo:11.0.0
        AutoUpdate=registry
        Label=PODMAN_SYSTEMD_UNIT=%n
        PodmanArgs=--pod=forgejo-pod --name=forgejo
        Environment=USER_UID=1001
        Environment=USER_GID=1001
        Volume=/home/forgejo:/data
        Volume=/etc/timezone:/etc/timezone:ro
        Volume=/etc/localtime:/etc/localtime:ro
    

    Danach beherzt neustarten.

    systemctl restart forgejo.service
    

    Es dauert etwas, weil er kurz das neue Image ziehen muss. Geduld, kurze Zeit später ist Forgejo auf der neuen Version.

    46d176bc-33ee-476e-b8f5-65d892b93902-grafik.png

    Danke ans Forgejo-Team - richtig coole Software!

  • Ok, ich habe viele neue Erfahrungen gesammelt, die ich die Tage noch oben ergänzen bzw. korrigieren werde. Aber damit ich das nicht vergesse, ein total nerviges Problem konnte ich hiermit lösen. Obwohl ich immer noch gerne wüsste, warum es mit enabled DNS im Netzwerk nicht funktioniert. Der Workaround funktioniert aber immerhin, ich habe jetzt DNS im forgejo.container und z.B. die Registrierung geht vernünftig (Konnte vorher die cloudflare Adresse nicht auflösen)

  • Und noch was sehr wichtiges!

    The Forgejo configuration is stored in the app.ini file as described in the Configuration Cheat Sheet. When using the Forgejo container image, this file is automatically created if it does not exist already. In addition it is possible to add settings using configuration variables. For instance:

    FORGEJO__repository__ENABLE_PUSH_CREATE_USER=true
    

    is the equivalent of adding the following to app.ini:

    [repository]
    ENABLE_PUSH_CREATE_USER = true
    

    NOTE: it is not possible to use environment variables to remove an existing value, it must be done by editing the app.ini file.

    NOTE: in case you are in a SELinux environment check the audit logs if you are having issues with containers.
    Quelle: https://forgejo.org/docs/latest/admin/installation-docker/

  • OpenCloud - Storage Backends testen

    OpenCloud opencloud linux docker
    2
    0 Stimmen
    2 Beiträge
    56 Aufrufe
    FrankMF
    So, mal weiter damit beschäftigen. Also, durch meine ganze Testerei war doch ein Haufen Müll angefallen. dockeruser@opencloud:~/opencloud/deployments/examples/opencloud_full$ docker volume ls DRIVER VOLUME NAME local 0fcd6f237898477b251f3dacb6cd083996092b783f991f899b06d89befc41b1e local 1d8df3f5d41613ad93ed753ce2102a14738cf00e8e7d127ec79881660be291ab local 3b612ce20b207c226640d6b84c32c788cd0fad9f9157578c2310f4b3db63dd29 local 5dfdde733fefb9fdb805acec8338a860762e88cd0753f4bb4098a19fbcd4b6c3 local 6bd5659759fb99b0d0613175d2392ca268dbdb3bd0353b85ccdf9a6004e798c0 local 6f8881420aa0e7713ed5308e635fcb9382939b6570afbd1d776866a07f6d61f2 local 29f7d20edd9eda935041cea7af5aab0af748175d7df8f345288463753d2afa9a local 66ca6287706aac5013b458a109e7c143c4fb177670734fc7a0f68495b1c62fd4 local 74d304835ef51f91226cc22dbbd494d2ddc9a4d91badf88814cae24126efd04a local 0203eb654c1f28a60899ded4660fb101ea222a5f8c86a225d39f3e5da877f1c0 local 271c474feb2ed915afb8efa85e422461fcfdf8acd4097355841eadf33847b7ef local 569a8c34804afd5861299973bed023c0146f40c0dbda0d980b8651bbcadc7fc9 local 655b1f446b5db9749787d4be4445887dcb3d19906d4244d059a0f292a6cd5f01 local 843bb8d0d7845adab06e146c44b153b842d5a1a1d8eb3972bdee1d3cbcb7e815 local 987ee19b8639ad5fffabba276ceb1ca09af6ebc66efb007e561570589c9c53a8 local 1004f5b7b161a4fe37a07d7960740e5cd09b90d5744f1922fb3e41c1265f800a local 2043c77b57728106cbcca8b7e2d3ae2f07ddf4ca44ee21fca232526c95e07381 local 3685c81df1be0061352dfc5b0e6db8d8d9f9b0915a271f1ca53d2796a7876805 local 9581abcfb4fb42b2fabfabbc8139cc4659ca83d92a8b60041957565409293ef4 local 796650f1fa887ff0b153822b268a10aa3579f4f2ca3ce6855ff292e49b3bb6b8 local 426251107e3131a250b27b96e795355332127f19ccf1ec8252860aff5d0caec8 local bd43ceef38448db348cc34e7dc5c4fee9c834d8b6c5957b1e6cdb83cec7b0974 local d94e7ce6c0fb1f4f7b811f624b4526ea889f2f8b99d2aa1b21e79d00dfeb38d0 local e87a27c307a8be80839fae1c006273d57570bb99f60c78c95e86a1e9ea1a786c local f2b3e30406db730e2a341850243c115b6eb231f30f41f5353c7b2427de39af75 local opencloud_full_certs local opencloud_full_opencloud-apps local opencloud_full_opencloud-config local opencloud_full_opencloud-data Oje, das sieht ziemlich vermüllt aus. Dann mal ganz mutig alles löschen. Vorher alles gestoppt. docker compose down Volume löschen, nur ein Beispiel docker volume rm opencloud_full_opencloud-data Alles gelöscht. Dann mal ein Neustart docker compose up -d Jetzt sieht das schon viel besser aus. dockeruser@opencloud:~/opencloud/deployments/examples/opencloud_full$ docker volume ls DRIVER VOLUME NAME local 3737a8eab68ffdc08d6e41493346feeb2e06ef350a210213ab450775318e49f8 local opencloud_full_opencloud-apps Da ich neugierig bin, schauen wir mal rein. root@opencloud:~ ls -lha /var/lib/docker/volumes/3737a8eab68ffdc08d6e41493346feeb2e06ef350a210213ab450775318e49f8/_data/web/assets/apps/ total 8.0K drwxr-x--x 2 dockeruser dockeruser 4.0K May 19 18:25 . drwxr-x--x 3 dockeruser dockeruser 4.0K May 31 10:21 .. Vermutlich ein Speicher, wo die Web Apps was ablegen können. Der andere zeigt es dann klarer. root@opencloud-4gb-fsn1-2:~# ls -lha /var/lib/docker/volumes/opencloud_full_opencloud-apps/_data total 28K drwxr-x--x 7 dockeruser dockeruser 4.0K May 31 10:22 . drwx-----x 3 root root 4.0K May 31 10:21 .. drwxr-xr-x 2 root root 4.0K May 31 10:22 draw-io drwxr-xr-x 2 root root 4.0K May 31 10:21 external-sites drwxr-xr-x 3 root root 4.0K May 31 10:22 json-viewer drwxr-xr-x 2 root root 4.0K May 31 10:22 progress-bars drwxr-xr-x 3 root root 4.0K May 31 10:22 unzip Ok, das sollte mir erst mal reichen. Meine Installation lagert die certs ja aus, das habe ich im docker compose geändert. dockeruser@opencloud:~/opencloud/deployments/examples/opencloud_full$ ls -lha certs/ total 44K drwxr-xr-x 2 dockeruser dockeruser 4.0K May 30 05:49 . drwxr-xr-x 6 dockeruser dockeruser 4.0K May 31 10:38 .. -rw------- 1 dockeruser dockeruser 33K May 29 11:00 acme.json Im docker-compose.yml volumes: - ./certs:/certs # bind-mount acme.json Der Grund dafür ist, das ich das docker-compose nicht als root laufen haben möchte. Die Hauptdaten sind nach lokal ausgelagert. OC_CONFIG_DIR=/home/dockeruser/oc_data/config OC_DATA_DIR=/home/dockeruser/oc_data/data Somit sollte jetzt alles so passen und ich muss mal langsam mit der Spielerei aufhören
  • 0 Stimmen
    1 Beiträge
    32 Aufrufe
    Niemand hat geantwortet
  • 0 Stimmen
    1 Beiträge
    18 Aufrufe
    Niemand hat geantwortet
  • Debian Bookworm 12.9 released

    Verschoben Linux debian linux bookworm
    1
    0 Stimmen
    1 Beiträge
    333 Aufrufe
    Niemand hat geantwortet
  • Restic feiert 10. Geburtstag

    Restic restic linux
    1
    1
    0 Stimmen
    1 Beiträge
    176 Aufrufe
    Niemand hat geantwortet
  • duf - ein hübsches Kommandozeilen Tool

    Linux linux duf
    1
    1
    0 Stimmen
    1 Beiträge
    182 Aufrufe
    Niemand hat geantwortet
  • Portainer - Python3.10

    Linux portainer docker linux
    1
    7
    0 Stimmen
    1 Beiträge
    104 Aufrufe
    Niemand hat geantwortet
  • Restic - Backblaze B2 Cloud Storage

    Restic backblaze linux restic
    1
    2
    0 Stimmen
    1 Beiträge
    419 Aufrufe
    Niemand hat geantwortet