From fc8536ff74cd2f40a2b0413d31ce8440008ee032 Mon Sep 17 00:00:00 2001 From: pommee Date: Tue, 10 Jun 2025 21:28:38 +0200 Subject: [PATCH] fix: improve volume mounts and dev setup --- Dockerfile | 12 ++++++---- Dockerfile.dev | 39 ++++++++++++++++++++++++++++++++ Makefile | 3 +++ backend/api/server.go | 15 ++++++++---- backend/dns/database/database.go | 9 +++++++- backend/settings/settings.go | 6 ++--- docker-compose.dev.yml | 17 ++++++++++++++ docker-compose.yml | 11 ++++----- start.sh | 14 ------------ 9 files changed, 92 insertions(+), 34 deletions(-) create mode 100644 Dockerfile.dev create mode 100644 docker-compose.dev.yml delete mode 100755 start.sh diff --git a/Dockerfile b/Dockerfile index 1b68607..eeaa55e 100644 --- a/Dockerfile +++ b/Dockerfile @@ -10,17 +10,19 @@ COPY installer.sh ./ RUN apk add --no-cache curl jq bash ca-certificates && \ adduser -D -s /bin/bash appuser && \ + mkdir -p /app && \ ./installer.sh $GOAWAY_VERSION && \ - mv /root/.local/bin/goaway /home/appuser/goaway && \ - chown -R appuser:appuser /home/appuser && \ + mv /root/.local/bin/goaway /app/goaway && \ + chown -R appuser:appuser /app && \ rm -rf /var/cache/apk/* /tmp/* /var/tmp/* /root/.cache /root/.local installer.sh -WORKDIR /home/appuser +WORKDIR /app -COPY updater.sh start.sh ./ +COPY updater.sh ./ +RUN chown appuser:appuser updater.sh EXPOSE ${DNS_PORT}/tcp ${DNS_PORT}/udp ${WEBSITE_PORT}/tcp USER appuser -CMD ["./start.sh"] +ENTRYPOINT [ "./goaway" ] diff --git a/Dockerfile.dev b/Dockerfile.dev new file mode 100644 index 0000000..f12f074 --- /dev/null +++ b/Dockerfile.dev @@ -0,0 +1,39 @@ +FROM golang:1.24-alpine AS builder + +RUN apk add --no-cache git ca-certificates + +WORKDIR /src + +COPY go.mod go.sum ./ +RUN go mod download + +COPY . . + +RUN CGO_ENABLED=0 go build -o goaway . + +FROM alpine:3.22 + +ARG DNS_PORT=6121 +ARG WEBSITE_PORT=8080 + +ENV DNS_PORT=${DNS_PORT} WEBSITE_PORT=${WEBSITE_PORT} + +RUN apk add --no-cache bash ca-certificates && \ + adduser -D -s /bin/bash appuser && \ + mkdir -p /app && \ + chown -R appuser:appuser /app && \ + rm -rf /var/cache/apk/* /tmp/* /var/tmp/* + +WORKDIR /app + +COPY --from=builder /src/goaway ./goaway +RUN chown appuser:appuser goaway + +COPY updater.sh ./ +RUN chown appuser:appuser updater.sh + +EXPOSE ${DNS_PORT}/tcp ${DNS_PORT}/udp ${WEBSITE_PORT}/tcp + +USER appuser + +ENTRYPOINT [ "./goaway" ] diff --git a/Makefile b/Makefile index 28e07bd..601abde 100644 --- a/Makefile +++ b/Makefile @@ -23,6 +23,9 @@ start: ; docker compose up -d lint: ; pnpm -C client lint && golangci-lint run ./backend/... format: ; npx prettier --write "client/**/*.{html,css,js,tsx}" +dev: build + docker compose -f docker-compose.dev.yml up -d + dev-website: ; pnpm -C client install && pnpm -C client dev dev-server: ; mkdir client/dist ; touch client/dist/.fake ; air . diff --git a/backend/api/server.go b/backend/api/server.go index a513d74..866054f 100644 --- a/backend/api/server.go +++ b/backend/api/server.go @@ -7,6 +7,7 @@ import ( "goaway/backend/updater" "net/http" "os" + "path/filepath" "strconv" "strings" @@ -40,7 +41,7 @@ func (api *API) handleServer(c *gin.Context) { log.Error("%s", err) } - dbSize, err := getDBSize() + dbSize, err := getDBSizeMB() if err != nil { log.Error("%s", err) } @@ -81,10 +82,16 @@ func getCPUTemperature() (float64, error) { return temp / 1000, nil } -func getDBSize() (float64, error) { - files := []string{"database.db", "database.db-wal", "database.db-shm"} +func getDBSizeMB() (float64, error) { var totalSize int64 + basePath := "data" + files := []string{ + filepath.Join(basePath, "database.db"), + filepath.Join(basePath, "database.db-wal"), + filepath.Join(basePath, "database.db-shm"), + } + for _, filename := range files { info, err := os.Stat(filename) if err != nil { @@ -98,7 +105,7 @@ func getDBSize() (float64, error) { totalSize += info.Size() } - return float64(totalSize) / (1024 * 1024), nil // Return size in MB + return float64(totalSize) / (1024 * 1024), nil } func (api *API) handleMetrics(c *gin.Context) { diff --git a/backend/dns/database/database.go b/backend/dns/database/database.go index 11f1c76..bdfdf90 100644 --- a/backend/dns/database/database.go +++ b/backend/dns/database/database.go @@ -3,6 +3,8 @@ package database import ( "database/sql" "fmt" + "os" + "path/filepath" "sync" _ "modernc.org/sqlite" @@ -14,7 +16,12 @@ type DatabaseManager struct { } func Initialize() (*DatabaseManager, error) { - db, err := sql.Open("sqlite", "database.db") + if err := os.MkdirAll("data", 0755); err != nil { + return nil, fmt.Errorf("failed to create data directory %s: %w", "data", err) + } + + databasePath := filepath.Join("data", "database.db") + db, err := sql.Open("sqlite", databasePath) if err != nil { return nil, fmt.Errorf("failed to open database: %w", err) } diff --git a/backend/settings/settings.go b/backend/settings/settings.go index f6d5b58..f2cc2d4 100644 --- a/backend/settings/settings.go +++ b/backend/settings/settings.go @@ -49,13 +49,13 @@ func LoadSettings() (Config, error) { if err != nil { return Config{}, fmt.Errorf("could not determine current directory: %w", err) } - path = filepath.Join(path, "settings.yaml") + path = filepath.Join(path, "config", "settings.yaml") if _, err := os.Stat(path); os.IsNotExist(err) { log.Info("Settings file not found, creating from defaults...") config, err = createDefaultSettings(path) if err != nil { - return Config{}, fmt.Errorf("failed to create default settings: %w", err) + return Config{}, err } } @@ -121,7 +121,7 @@ func (config *Config) Save() { return } - if err := os.WriteFile("./settings.yaml", data, 0644); err != nil { + if err := os.WriteFile("./config/settings.yaml", data, 0644); err != nil { log.Error("Could not save settings %v", err) } } diff --git a/docker-compose.dev.yml b/docker-compose.dev.yml new file mode 100644 index 0000000..9aa85ab --- /dev/null +++ b/docker-compose.dev.yml @@ -0,0 +1,17 @@ +services: + goaway: + container_name: goaway + build: + context: . + dockerfile: Dockerfile.dev + restart: unless-stopped + environment: + - DNS_PORT=6121 + - WEBSITE_PORT=8080 + ports: + - "6121:6121/udp" + - "6121:6121/tcp" + - "8080:8080/tcp" + cap_add: + - NET_BIND_SERVICE + - NET_RAW diff --git a/docker-compose.yml b/docker-compose.yml index 2076904..75364fe 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,9 +2,10 @@ services: goaway: image: pommee/goaway:latest container_name: goaway - build: . - volumes: - - goaway_data:/home/appuser + restart: unless-stopped + # volumes: + # - /path/to/config:/app/config # Custom settings.yaml configuration + # - /path/to/data:/app/data # Database storage location environment: - DNS_PORT=${DNS_PORT:-53} - WEBSITE_PORT=${WEBSITE_PORT:-8080} @@ -15,7 +16,3 @@ services: cap_add: - NET_BIND_SERVICE - NET_RAW - -volumes: - goaway_data: - name: goaway_data diff --git a/start.sh b/start.sh deleted file mode 100755 index c2c2bfa..0000000 --- a/start.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/bash - -run_goaway() { - while true; do - echo "Starting goaway..." - /home/appuser/goaway --dns-port=${DNS_PORT} --webserver-port=${WEBSITE_PORT} - echo "goaway process exited with code $?. Restarting..." - done -} - -trap 'echo "Received SIGTERM, shutting down..."; exit 0' SIGTERM -run_goaway & - -wait \ No newline at end of file