概要
前回はAzure DevOpsのパイプライン上で起動したDockerのPostgresqlにそのままバックエンドからアクセスした。
今回は、Neon Proxyを経由してのアクセスを行う。
追加したパイプライン定義
packages/bdd-e2e-test/azure-pipeline.yml
- script: |
echo "127.0.0.1 db.localtest.me" | sudo tee -a /etc/hosts
displayName: "Add db.localtest.me to /etc/hosts"
- script: |
echo "Waiting for PostgreSQL..."
for i in {1..20}; do
if PGPASSWORD=postgres psql -h db.localtest.me -U postgres -d main -c "SELECT 1" &>/dev/null; then
echo "PostgreSQL is ready"
break
fi
sleep 2
done
displayName: 'Wait for PostgreSQL server to start'
# Neon Proxyはserviceとして起動すると postgresの起動を待たないので、docker runで起動する
- script: |
echo "Starting Neon Proxy..."
# Docker内からホストのPostgreSQLに接続するための設定
# --add-host=host.docker.internal:host-gateway は Linuxで host.docker.internal を使うためのオプション
docker run -d --name neon-proxy \
-e PG_CONNECTION_STRING=postgres://postgres:postgres@host.docker.internal:5432/main \
-p 4444:4444 \
--add-host=host.docker.internal:host-gateway \
ghcr.io/timowilhelm/local-neon-http-proxy:main
displayName: 'Start Neon Proxy'
Neon Proxyはpostgresの起動後に立ち上げないとエラーになるが、serviceで定義するとpostgresと同時に起動してしまう。
DevOpsでは docker-compose での depends_on
が利用できないので、タスクとしてNeon Proxy のDockerを起動する。
このとき、serviceの外で定義するとネットワークが別になるため、service名で通信ができない。
そのため、ホストのアドレスhost.docker.internal
とポートを利用している。
参考
Docker Engine(Linux)でコンテナからホスト側のサービスにアクセスする(host.docker.internal)
サービスコンテナ
Local Development with Neon
Neon(Postgres)のDockerをローカルで稼働させ、Drizzleを使ったマイグレーションとCloudflare Workersのローカル実行からの接続を行ったメモ