From e2dd54add228b3956c1457de54424063b6d7f192 Mon Sep 17 00:00:00 2001 From: Marco <35533749+marcopeocchi@users.noreply.github.com> Date: Wed, 2 Aug 2023 11:54:27 +0200 Subject: [PATCH] Expose config to docker volume (#73) * expose config to docker volume * fix dockerfile --- .gitignore | 4 +--- Dockerfile | 16 +++++++++------- main.go | 8 +++++--- server/config/parser.go | 8 +++++--- 4 files changed, 20 insertions(+), 16 deletions(-) diff --git a/.gitignore b/.gitignore index 3e94f74..775cbfb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,11 +1,8 @@ -.parcel-cache dist package-lock.json pnpm-lock.yaml .pnpm-debug.log node_modules -src/server/core/*.exe -src/server/core/yt-dlp .env *.mp4 *.ytdl @@ -16,3 +13,4 @@ downloads build/ yt-dlp-webui session.dat +config.yml diff --git a/Dockerfile b/Dockerfile index 36a234b..c2b8f1a 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,25 +1,27 @@ FROM golang:1.20-alpine AS build -# folder structure + WORKDIR /usr/src/yt-dlp-webui -# install core dependencies + RUN apk update && \ apk add nodejs npm go -# copia la salsa + COPY . . -# build frontend + WORKDIR /usr/src/yt-dlp-webui/frontend RUN npm install RUN npm run build -# build backend + incubator + WORKDIR /usr/src/yt-dlp-webui RUN CGO_ENABLED=0 GOOS=linux go build -o yt-dlp-webui -# but here yes :) FROM alpine:edge WORKDIR /downloads VOLUME /downloads +WORKDIR /config +VOLUME /config + WORKDIR /app RUN apk update && \ @@ -30,4 +32,4 @@ COPY --from=build /usr/src/yt-dlp-webui/yt-dlp-webui /app ENV JWT_SECRET=secret EXPOSE 3033 -ENTRYPOINT [ "./yt-dlp-webui" , "--out", "/downloads" ] +ENTRYPOINT [ "./yt-dlp-webui" , "--out", "/downloads", "--conf", "/config/config.yml" ] diff --git a/main.go b/main.go index 4666ea4..977b11c 100644 --- a/main.go +++ b/main.go @@ -8,6 +8,7 @@ import ( "runtime" "github.com/marcopeocchi/yt-dlp-web-ui/server" + "github.com/marcopeocchi/yt-dlp-web-ui/server/cli" "github.com/marcopeocchi/yt-dlp-web-ui/server/config" ) @@ -29,7 +30,7 @@ func init() { flag.IntVar(&port, "port", 3033, "Port where server will listen at") flag.IntVar(&queueSize, "qs", runtime.NumCPU(), "Download queue size") - flag.StringVar(&configFile, "conf", "", "Config file path") + flag.StringVar(&configFile, "conf", "./config.yml", "Config file path") flag.StringVar(&downloadPath, "out", ".", "Where files will be saved") flag.StringVar(&downloaderPath, "driver", "yt-dlp", "yt-dlp executable path") @@ -56,8 +57,9 @@ func main() { c.RequireAuth(requireAuth) c.RPCSecret(rpcSecret) - if configFile != "" { - c.LoadFromFile(configFile) + // if config file is found it will be merged with the current config struct + if _, err := c.TryLoadFromFile(configFile); err != nil { + log.Println(cli.BgRed, "config", cli.Reset, "no config file found") } server.RunBlocking(port, frontend) diff --git a/server/config/parser.go b/server/config/parser.go index 1f4b42a..9671a6e 100644 --- a/server/config/parser.go +++ b/server/config/parser.go @@ -22,13 +22,15 @@ type config struct { cfg serverConfig } -func (c *config) LoadFromFile(filename string) (serverConfig, error) { - bytes, err := os.ReadFile(filename) +func (c *config) TryLoadFromFile(filename string) (serverConfig, error) { + fd, err := os.Open(filename) if err != nil { return serverConfig{}, err } - yaml.Unmarshal(bytes, &c.cfg) + if err := yaml.NewDecoder(fd).Decode(&c.cfg); err != nil { + return serverConfig{}, err + } return c.cfg, nil }