diff --git a/docker-compose.yaml b/docker-compose.yaml index 5f0bde5..e5eba0b 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -20,21 +20,36 @@ services: nats: image: docker.io/library/nats-streaming:0.22.0 +# nobody + user: "65534" command: - "/nats-streaming-server" - "-m" - "8222" - - "--store=memory" + - "--store=file" + - "--dir=/nats" - "--cluster_id=faas-cluster" + volumes: +# Data directory + - type: bind + source: ./nats + target: /nats # ports: # - "127.0.0.1:8222:8222" prometheus: image: docker.io/prom/prometheus:v2.14.0 +# nobody + user: "65534" volumes: +# Config directory - type: bind source: ./prometheus.yml target: /etc/prometheus/prometheus.yml +# Data directory + - type: bind + source: ./prometheus + target: /prometheus cap_add: - CAP_NET_RAW ports: diff --git a/pkg/supervisor.go b/pkg/supervisor.go index 092b678..c7008eb 100644 --- a/pkg/supervisor.go +++ b/pkg/supervisor.go @@ -8,6 +8,8 @@ import ( "os" "path" "sort" + "strconv" + "strings" "github.com/alexellis/k3sup/pkg/env" "github.com/compose-spec/compose-go/loader" @@ -26,7 +28,8 @@ import ( ) const ( - workingDirectoryPermission = 0644 + // workingDirectoryPermission user read/write/execute, group and others: read-only + workingDirectoryPermission = 0744 ) type Service struct { @@ -145,6 +148,28 @@ func (s *Supervisor) Start(svcs []Service) error { Type: "bind", Options: []string{"rbind", "rw"}, }) + + // Only create directories, not files. + // Some files don't have a suffix, such as secrets. + if len(path.Ext(mnt.Src)) == 0 && + !strings.HasPrefix(mnt.Src, "/var/lib/faasd/secrets/") { + // src is already prefixed with wd from an earlier step + src := mnt.Src + fmt.Printf("Creating local directory: %s\n", src) + if err := os.MkdirAll(src, workingDirectoryPermission); err != nil { + if !errors.Is(os.ErrExist, err) { + fmt.Printf("Unable to create: %s, %s\n", src, err) + } + } + if len(svc.User) > 0 { + uid, err := strconv.Atoi(svc.User) + if err == nil { + if err := os.Chown(src, uid, -1); err != nil { + fmt.Printf("Unable to chown: %s to %d, error: %s\n", src, uid, err) + } + } + } + } } }