From 63654c4c1b55ddcfeb4a5adf43d0a1778236c58d Mon Sep 17 00:00:00 2001 From: Shiro-Nek0 Date: Mon, 2 Mar 2026 00:17:32 -0300 Subject: [PATCH] dockerfile + db relocation --- .dockerignore | 4 ++++ Dockerfile | 33 +++++++++++++++++++++++++++++++++ README.md | 38 ++++++++++++++++++++++++++++++++++++++ bot.db | Bin 40960 -> 0 bytes db/db.go | 2 +- go.mod | 2 +- 6 files changed, 77 insertions(+), 2 deletions(-) create mode 100644 .dockerignore create mode 100644 Dockerfile delete mode 100644 bot.db diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6ba89fb --- /dev/null +++ b/.dockerignore @@ -0,0 +1,4 @@ +.vscode +.git +data/ +bot.db diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..ccf7771 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,33 @@ +FROM golang:1.25-alpine AS builder + +# Ensure CGO is off for a static binary +ENV CGO_ENABLED=0 +# Ensure Go modules are strictly enforced +ENV GO111MODULE=on + +WORKDIR /app + +# Copy only the dependency files first +COPY go.mod go.sum ./ +RUN go mod download + +# Copy the entire project structure +COPY . . + +# Build from the current directory (.) so it finds the module root +RUN go build -o /app/bot . + +FROM alpine:latest + +RUN apk --no-cache add ca-certificates +RUN mkdir /data + +WORKDIR /root/ + +COPY --from=builder /app/bot . +COPY --from=builder /app/templates ./templates +COPY .env . + +ENV DB_PATH=/data/bot.db + +CMD ["./bot"] \ No newline at end of file diff --git a/README.md b/README.md index e9b0a7a..d843755 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,40 @@ # whatsapp-bot +## 🐳 Docker Deployment (Server) + +Build and run the central inventory server: + +```bash +# Build the image +docker build -t go-bot:latest . + +# Run the container (Map port 9090 and persist the database/cache) +docker run -d \ + --name whatsapp-bot \ + -p 9090:9090 \ + -e OPENROUTER_API_KEY=your_key \ + -e WHATSAPP_PHONE_ID=your_id \ + -e WHATSAPP_TOKEN=your_token \ + -v $(pwd)/whatsapp-bot/data:/root/data:Z \ + --restart unless-stopped \ + go-bot:latest +``` + +Or use this stack: +```yml +services: + bot: + image: go-bot:latest + container_name: whatsapp-bot + restart: unless-stopped + environment: + - OPENROUTER_API_KEY=your_api_key_here + - WHATSAPP_PHONE_ID=your_phone_id_here + - WHATSAPP_TOKEN=your_token_here + volumes: + # Map host data folder to the app's data path + # The :Z is required for SELinux (Fedora/RHEL) + - YOUR_PATH/whatsapp-bot/data:/root/data:Z + ports: + - "8080:9090" +``` diff --git a/bot.db b/bot.db deleted file mode 100644 index 514ac89f8809f75577576ac9360ce29b30fd8c8d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 40960 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 diff --git a/db/db.go b/db/db.go index 42ffff1..e40214f 100644 --- a/db/db.go +++ b/db/db.go @@ -10,7 +10,7 @@ var Conn *sql.DB func Init() { var err error - Conn, err = sql.Open("sqlite", "./bot.db") + Conn, err = sql.Open("sqlite", "./data/bot.db") if err != nil { panic(err) } diff --git a/go.mod b/go.mod index d20bad1..2ed9a8e 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.25.0 require ( github.com/gin-gonic/gin v1.12.0 + github.com/joho/godotenv v1.5.1 modernc.org/sqlite v1.46.1 ) @@ -21,7 +22,6 @@ require ( github.com/goccy/go-json v0.10.5 // indirect github.com/goccy/go-yaml v1.19.2 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/joho/godotenv v1.5.1 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect