diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3b27c27 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +# Build Stage +FROM golang:1.21.5 AS builder +ENV GO111MODULE=on \ + GOPROXY=https://goproxy.cn,direct +WORKDIR /app +COPY . . +RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main main.go + +# Run Stage +FROM zc1185230223/alpine:3.18 + +WORKDIR /app +COPY --from=builder /app/main . + +EXPOSE 9090 +CMD ["/app/main", "-debug=false"] \ No newline at end of file diff --git a/docker-compose.yaml b/docker-compose.yaml new file mode 100644 index 0000000..31f5465 --- /dev/null +++ b/docker-compose.yaml @@ -0,0 +1,42 @@ +version: '3.4' + +services: + + url-short-service: + build: + context: . + dockerfile: Dockerfile + container_name: url-short + restart: always + environment: + SERVER_PORT: "9090" + REDIS_ADDR: "redis:6379" + REDIS_PASSWORD: "hPxyR4" + REDIS_DB: "2" + networks: + - url-short-network + ports: + - "9090:9090" + depends_on: + - redis + + redis: + image: 'redis:7.2.3' + container_name: 'redis' + restart: always + networks: + - url-short-network + volumes: + - redis-db:/data:rw + ports: + - 6379:6379 + command: + --requirepass "hPxyR4" #这一行是设置密码 + privileged: true #使用该参数,container内的root拥有真正的root权限 + +networks: + url-short-network: + driver: bridge + +volumes: + redis-db: {} \ No newline at end of file diff --git a/main.go b/main.go index 94dde37..3910d75 100644 --- a/main.go +++ b/main.go @@ -2,6 +2,7 @@ package main import ( "context" + "flag" "log" "net/http" "os" @@ -16,9 +17,14 @@ import ( ) func main() { - err := godotenv.Load() - if err != nil { - log.Fatalf("failed to load env: %v", err) + var local bool + flag.BoolVar(&local, "debug", true, "server running in debug?") + flag.Parse() + + if local { + if err := godotenv.Load(); err != nil { + log.Fatalf("failed to load env: %v", err) + } } router := mux.NewRouter()