services: # The first service is a portainer instance that allows for easy management of the swarm portainer: image: portainer/portainer-ce:latest ports: - "9000:9000" volumes: - portainer_data:/data - /var/run/docker.sock:/var/run/docker.sock deploy: replicas: 1 restart_policy: condition: on-failure placement: constraints: - node.role == manager # We also want a watchtower instance to automatically update our services watchtower: image: containrrr/watchtower:latest volumes: - /var/run/docker.sock:/var/run/docker.sock deploy: replicas: 1 restart_policy: condition: on-failure placement: constraints: - node.role == manager # This defines the NFS volumes for persistence #! This requires nodes to be IP whitelisted in the NAS volumes: portainer_data: driver: local driver_opts: type: nfs device: ":volume1/portainer_data" o: "addr=I-Form_Data,rw,noatime,rsize=8192,wsize=8192,tcp,timeo=14,nfsvers=4"