使用postgres、golang和Debian 11、Agora appbuilder后端运行Docker容器或Doc



我在AWS上构建了一个Debian 11 EC2,并在上面安装了postgres 14.5,在上面添加了docker和docker compose;admin'使用密码。我创建了docker-compose.yml文件和.env文件。

当我尝试使用docker-compose.yml文件时,我得到:

sudo docker compose up -d
services.database.environment must be a mapping

当我用构建码头集装箱时

sudo docker build . -t tvappbuilder:latest

然后尝试使用运行

sudo docker run -p 8080:8080 tvappbuilder:latest --env-file .env -it
Config Path .
4:47PM INF server/utils/logging.go:105 > logging configured fileLogging=true fileName=app-builder-logs logDirectory=./logs maxAgeInDays=0 maxBackups=0 maxSizeMB=0
4:47PM FTL server/cmd/video_conferencing/server.go:71 > Error initializing database error="pq: Could not detect default username. Please provide one explicitly"

以下是迄今为止的码头工人:

sudo docker image list
REPOSITORY     TAG       IMAGE ID       CREATED         SIZE
<none>         <none>    6e5f035abda5   18 hours ago    1.82GB
tvappbuilder   latest    6166e24a47e0   21 hours ago    21.8MB
<none>         <none>    cedcaf2facd1   21 hours ago    1.82GB
hello-world    latest    feb5d9fea6a5   12 months ago   13.3kB
golang         1.15.1    9f495162f677   2 years ago     839MB

这是docker-compose.yml:

version: 3.7
services:
server:
container_name: server
build: .
depends_on:
- database
ports:
- 8080:8080
environment:
- APP_ID: $APP_ID
- APP_CERTIFICATE: $APP_CERTIFICATE
- CUSTOMER_ID: $CUSTOMER_ID
- CUSTOMER_CERTIFICATE: $CUSTOMER_CERTIFICATE
- BUCKET_NAME: $BUCKET_NAME
- BUCKET_ACCESS_KEY: $BUCKET_ACCESS_KEY
- BUCKET_ACCESS_SECRET: $BUCKET_ACCESS_SECRET
- CLIENT_ID: $CLIENT_ID
- CLIENT_SECRET: $CLIENT_SECRET
- PSTN_USERNAME: $PSTN_USERNAME
- PSTN_PASSWORD: $PSTN_PASSWORD
- SCHEME: $SCHEME
- ALLOWED_ORIGIN: ""
- ENABLE_NEWRELIC_MONITORING: false
- RUN_MIGRATION: true
- DATABASE_URL: postgresql://$POSTGRES_USER:$POSTGRES_PASSWORD@database:5432/$POSTGRES_DB?sslmode=disable
database:
container_name: server_database
image: postgres-14.5
restart: always
hostname: database
environment: 
- POSTGRES_USER: $POSTGRES_USER
- POSTGRES_PASSWORD: $POSTGRES_PASSWORD
- POSTGRES_DB: $POSTGRES_DB

这是Dockerfile:

## Using Dockerfile from the following post: https://medium.com/@petomalina/using-go-mod-download-to-speed-up-golang-docker-builds-707591336888
FROM golang:1.15.1 as build-env
# All these steps will be cached
RUN mkdir /server
WORKDIR /server
COPY go.mod . 
COPY go.sum .
# Get dependancies - will also be cached if we won't change mod/sum
RUN go mod download
# COPY the source code as the last step
COPY . .
# Build the binary
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -a -installsuffix cgo -o /go/bin/server /server/cmd/video_conferencing
# Second step to build minimal image
FROM scratch
COPY --from=build-env /go/bin/server /go/bin/server
COPY --from=build-env /server/config.json config.json
ENTRYPOINT ["/go/bin/server"]

这是.env文件:

ENCRYPTION_ENABLED=0
POSTGRES_USER=admin
POSTGRES_PASSWORD=<correct pswd for admin>
POSTGRES_DB=tvappbuilder
APP_ID=<my real app ID>
APP_CERTIFICATE=<my real app cert>
CUSTOMER_ID=<my real ID>
CUSTOMER_CERTIFICATE=<my real cert>
RECORDING_REGION=0
BUCKET_NAME=<my bucket name>
BUCKET_ACCESS_KEY=<my real key>
BUCKET_ACCESS_SECRET=<my real secret>
CLIENT_ID=
CLIENT_SECRET=
PSTN_USERNAME=
PSTN_PASSWORD=
PSTN_ACCOUNT=
PSTN_EMAIL=
SCHEME=esports1_agora
ENABLE_SLACK_OAUTH=0
SLACK_CLIENT_ID=
SLACK_CLIENT_SECRET=
GOOGLE_CLIENT_ID=
ENABLE_GOOGLE_OAUTH=0
GOOGLE_CLIENT_SECRET=
ENABLE_MICROSOFT_OAUTH=0
MICROSOFT_CLIENT_ID=
MICROSOFT_CLIENT_SECRET=
APPLE_CLIENT_ID=
APPLE_PRIVATE_KEY=
APPLE_KEY_ID=
APPLE_TEAM_ID=
ENABLE_APPLE_OAUTH=0
PAPERTRAIL_API_TOKEN=<my real token>

据此:https://pkg.go.dev/github.com/lib/pq我可能不需要使用pq,而是直接使用postgres,但它似乎是这样设置的。

非常感谢你的指点!

根据注释,您的设置存在许多问题。

第一个是运行docker compose up -d时出现错误services.database.environment must be a mapping。这是由docker-compose.yml中类似- APP_ID: $APP_ID的行引起的-根据文档使用APP_ID: $APP_ID- APP_ID=$APP_ID

另一个问题是,您在裸操作系统上安装了Postgres,然后使用了Postgres容器。你只需要做一个或另一个(但如果使用docker,你会想使用Postgres数据的卷或装载(否则,当容器重建时,它会丢失(。

可能还有其他问题,但以上内容应该会让您开始。

相关内容

  • 没有找到相关文章

最新更新