From 0bb11c3bd75e934a8ee70597e9bb70674f0cab7e Mon Sep 17 00:00:00 2001 From: Alexander Goncharov Date: Sun, 1 Feb 2026 17:33:04 +0300 Subject: [PATCH] dockerize application --- Dockerfile | 10 ++++++++++ docker-compose.yml | 28 ++++++++++++++++++++++++++++ main.go | 10 ++++++++-- sysprompt.txt | 1 + 4 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 sysprompt.txt diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..a51de5a --- /dev/null +++ b/Dockerfile @@ -0,0 +1,10 @@ +FROM golang:latest AS builder +WORKDIR /app +COPY go.mod go.sum ./ +RUN go mod download +COPY *.go ./ +RUN CGO_ENABLED=0 GOOS=linux go build -o /grok-bot + +FROM alpine:latest +COPY --from=builder /grok-bot /grok-bot +CMD ["/grok-bot"] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..267f3c1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,28 @@ +services: + bot: + build: . + environment: + BOT_TOKEN: "" + CHAT_ID: "" + OPENAI_BASE_URL: "http://localhost:8080/v1" + SYSTEM_PROMPT_PATH: /etc/sysprompt.txt + volumes: + - ./sysprompt.txt:/etc/sysprompt.txt:ro + restart: unless-stopped + llama-server: + image: ghcr.io/ggml-org/llama.cpp:server + container_name: llama-server + ports: + - "8080:8080" + volumes: + - ~/models:/models + deploy: + resources: + limits: + memory: 2g + memswap_limit: 6g + command: > + -m /models/qwen25_15B.gguf + --port 8080 + --host 0.0.0.0 + -n 512 diff --git a/main.go b/main.go index 8e5d188..3e1787d 100644 --- a/main.go +++ b/main.go @@ -170,7 +170,7 @@ type Config struct { func LoadConfig(cfg *Config) error { if err := godotenv.Load(".env"); err != nil { - return err + slog.Warn("no env file loaded", "err", err) } cfg.OpenAIBaseURL = os.Getenv("OPENAI_BASE_URL") @@ -197,7 +197,13 @@ func LoadConfig(cfg *Config) error { cfg.ChatID = chatID - cfg.SystemPrompt = os.Getenv("SYSTEM_PROMPT") + sysPromptPath := os.Getenv("SYSTEM_PROMPT_PATH") + promptBytes, err := os.ReadFile(sysPromptPath) + if err != nil { + slog.Warn("could not load system prompt", "path", sysPromptPath) + } else { + cfg.SystemPrompt = string(promptBytes) + } return nil } diff --git a/sysprompt.txt b/sysprompt.txt new file mode 100644 index 0000000..6598844 --- /dev/null +++ b/sysprompt.txt @@ -0,0 +1 @@ +Put system prompt here