Hi folks,

You all have been instrumental to my self-hosting journey, both as inspiration and as a knowledge base when I’m stumped despite my research.

I am finding various different opinions on this and I’m curious what folks here have to say.

I’m running a Debian server accessible only within the home with a number of docker images like paperless-ngx, jellyfin, focalboard, etc. Most of the data actually resides on my NAS via NFS.

  1. Is /mnt or /media the correct place to mount the directories. Is mounting it on the host and mapping the mount point to docker with a bind the best path here?

  2. Additionally, where is the best place to keep my docker-compose? I understand that things will work even if I pick weird locations, but I also believe in the importance of convention. Should this be in the home directory of the server user? I’ve seen a number of locations mentioned in search results.

  3. Do I have to change the file perms in the locations where I store the docker compose or any config files that don’t sit on the other end of NFS?

Any other resources you wish to share are appreciated. I appreciate the helpfulness of this community.

  • Scrubbles@poptalk.scrubbles.tech
    link
    fedilink
    arrow-up
    20
    arrow-down
    1
    ·
    1 month ago

    I wouldn’t worry about mounting your nfs shares directly to those host unless you need to. Compose has an operator similar to k8s that lets docker itself manage the shares, which is insanely useful if you lose your host. Then you don’t have to have piles of scripts to mount them.

    https://stackoverflow.com/questions/45282608/how-to-directly-mount-nfs-share-volume-in-container-using-docker-compose-v3

    version: "3.2"
    
    services:
      rsyslog:
        image: jumanjiman/rsyslog
        ports:
          - "514:514"
          - "514:514/udp"
        volumes:
          - type: volume
            source: example
            target: /nfs
            volume:
              nocopy: true
    volumes:
      example:
        driver_opts:
          type: "nfs"
          o: "addr=10.40.0.199,nolock,soft,rw"
          device: ":/docker/example"
    
    • Lem453@lemmy.ca
      link
      fedilink
      English
      arrow-up
      8
      ·
      1 month ago

      This is better as well because it prevents the docker from starting if the mount doesn’t work. Some apps will freak out if they loose their data and apps if they index files like jellyfin might start deleting the files from the index as the library is now empty.

      NFS mount via docker compose is the best way to go

      • Bakkoda@sh.itjust.works
        link
        fedilink
        English
        arrow-up
        4
        ·
        1 month ago

        And some start fine, find /mnt/thefolder unmounted and fill it up with shit. Don’t ask me how i know.

    • bezoar@lemmy.world
      link
      fedilink
      English
      arrow-up
      4
      ·
      edit-2
      1 month ago

      Keep in mind that if you change your nfs server IP in the compose file, you will also need to delete the associated docker volume with “docker volume rm” before restarting. This is a potential issue if your old nfs server is still active, you’ll still be accessing the old one. If you have a lot of services and occasionally switch nfs servers (I do this for redundancy, they are synced) it might be easier just to mount nfs in the host and do path:path bind mounts.

    • KyuubiNoKitsune@lemmy.blahaj.zone
      link
      fedilink
      English
      arrow-up
      1
      ·
      edit-2
      1 month ago

      I found this to be extremely underperforming. If you plan on doing anything that requires high throughput, don’t use the docker NFS operator.

      • mbirth@lemmy.ml
        link
        fedilink
        English
        arrow-up
        2
        ·
        1 month ago

        There’s no difference between using a volume in Compose to mount a share or your server’s fstab file. Both do the same kind of mount.

        • KyuubiNoKitsune@lemmy.blahaj.zone
          link
          fedilink
          English
          arrow-up
          1
          ·
          1 month ago

          It’s doing something different, I was using to mount an AWS FSx for ZFS share on a beefy machine (1.2GB/s network throughput) and was getting less than 50MB/s throughput using docker to mount it, but getting the full 1.2GB/s when mounted outside and mapped to a volume in the container.

          • mbirth@lemmy.ml
            link
            fedilink
            English
            arrow-up
            1
            ·
            1 month ago

            How did you mount it outside the cluster? Did you have a look at the mtab and used the exact same options in the compose file?