Swift Vapor 3 + PostgreSQL + Docker-Compose正确的配置?

麦克拉佐

当前正在构建一个软件包,以使用AWS测试一些devOps配置。使用Swift Vapor3,PostgreSQL 11,Docker构建应用程序。鉴于我的github Repo,只要vapor build vapor test vapor run您在本地安装了postgresql并安装了一个,该项目的构建/测试/运行就可以username: test, password: test

但是我的api没有连接到数据库,并且担心我的配置错误。

version: "3.5"
services:
  api:
    container_name: vapor_it_container
    build:
      context: .
      dockerfile: web.Dockerfile
    image: api:dev
    networks:
      - vapor-it
    environment:
      POSTGRES_PASSWORD: 'test'
      POSTGRES_DB: 'test'
      POSTGRES_USER: 'test'
      POSTGRES_HOST: db
      POSTGRES_PORT: 5432
    ports:
      - 8080:8080
    volumes:
      - .:/app
    working_dir: /app
    stdin_open: true
    tty: true
    entrypoint: bash
    restart: always
    depends_on:
      - db

  db:
    container_name: postgres_container
    image: postgres:11.2-alpine
    restart: unless-stopped
    networks:
      - vapor-it
    ports:
      - 5432:5432
    environment:
      POSTGRES_USER: test
      POSTGRES_PASSWORD: test
      POSTGRES_HOST: db
      POSTGRES_PORT: 5432
      PGDATA: /var/lib/postgresql/data
    volumes:
      - database_data:/var/lib/postgresql/data

  pgadmin:
    container_name: pgadmin_container
    image: dpage/pgadmin4
    environment:
      PGADMIN_DEFAULT_EMAIL: [email protected]
      PGADMIN_DEFAULT_PASSWORD: admin
    volumes:
      - pgadmin:/root/.pgadmin
    ports:
      - "${PGADMIN_PORT:-5050}:80"
    networks:
      - vapor-it
    restart: unless-stopped

networks:
  vapor-it:
    driver: bridge

volumes:
  database_data:
  pgadmin:
  #  driver: local

另外,在阅读Docker postgres文档时,我在“注意事项”部分遇到了这一点。

如果在容器中启动postgres时没有数据库,则postgres将为您创建默认数据库。尽管这是postgres的预期行为,但这意味着在此期间它将不接受传入的连接。当使用自动化工具(例如docker-compose)同时启动多个容器时,这可能会导致问题。Postgres的dockerhub

我尚未进行这些更改,因为我不确定如何制作该文件或配置的外观。有没有人做过这样的事情,并且在连接Postgresql和使用蒸气作为后端方面有一定的经验?

托比格里芬

从理论上讲,行为良好的容器应该能够妥善处理不运行其依赖项的问题,因为尽管您的容器调度程序做出了最大的努力,但是容器可能会来去去去。因此,如果您的应用程序需要一个数据库,但在任何给定时刻该数据库不可用,它应该做出合理的响应。例如,为HTTP请求返回503,或在计划任务延迟后重试。

虽然这是理论,但并不总是适用。在您的情况下,也许您确实只需要Vapor应用程序来等待Postgres可用,在这种情况下,您可以使用包装脚本来轮询数据库,并仅在数据库准备好后才启动主应用程序。

从Docker文档中查看以下建议的包装器脚本:

#!/bin/sh
# wait-for-postgres.sh

set -e

host="$1"
shift
cmd="$@"

until PGPASSWORD=$POSTGRES_PASSWORD psql -h "$host" -U "postgres" -c '\q'; do
  >&2 echo "Postgres is unavailable - sleeping"
  sleep 1
done

>&2 echo "Postgres is up - executing command"
exec $cmd
command: ["./wait-for-postgres.sh", "db", "vapor-app", "run"]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Swift Vapor 3 构建错误

Swift vapor 3 ViewRenderer错误

如何使用 Vapor 3 在 PostgreSQL 中存储 Swift 类型(日期、字典等)?

无需请求http的Vapor 3 PostgreSQL CRUD

在Docker上构建Vapor + PostgreSQL + Nginx无法正常运行

用PostgreSQL添加外键约束Swift Vapor Fluent

使用PostgreSQL在Vapor 3中上传图像

如何在 Swift 3 Vapor 中将 JSON 转换为字典

Docker + docker compose + postgresql 错误

Vapor Swift 如何配置客户端连接超时

如何在不将密码输入Vapor 3的configure.swift中的情况下配置Fluent / MySQL数据库连接?

Docker-compose:ECONNREFUSED的Postgresql

Swift Vapor:未等待catchMap

使用 Swift Vapor 代替 PHP

具有新连接的Swift Vapor3 Raw SQL查询

如何在Swift 3中将response.body从Vapor转换为String?

测试Docker Compose配置是否将启动的正确方法?

如何配置docker compose以正确公开端口?

Docker Compose 3多行

用Docker Compose设置Django / PostgreSQL项目的正确方法是什么?

Docker-Compose Postgresql导入转储

Docker-compose postgresql 密码认证失败

带有docker compose和sqlalchemy的PostgreSQL

使用docker-compose启用Postgresql登录

使用docker和docker-compose用1个主机配置3个Mesos实例

Docker容器中的用户和文件权限配置(docker-compose版本3)

为Postgresql配置Grails 3

强制Fluent迁移以重新创建删除的表-将Fluent与Vapor 3 iOS Swift MySQL一起使用

使用Swift 4.1将Vapor 3 Beta应用程序部署到Heroku时出现问题