Files
defi-arbitrage/docs/settlement/as4/EXTERNAL_CONNECTION_FIX.md
T
2026-03-02 12:14:07 -08:00

3.3 KiB

AS4 Settlement - External Database Connection Fix

Date: 2026-01-19
Status: ✅ FIXED


Issue

External connections to PostgreSQL Docker container from localhost were failing with:

FATAL: password authentication failed for user "dbis_user"

Root Cause

PostgreSQL's pg_hba.conf file was not configured to allow password authentication from external hosts (localhost).


Resolution

Step 1: Updated Docker Compose Configuration

File: docker/docker-compose.as4.yml

Changes:

  1. Added POSTGRES_HOST_AUTH_METHOD: md5 environment variable
  2. Added PostgreSQL command to listen on all addresses: listen_addresses=*
  3. Added init script volume mount for future initialization

Step 2: Configured pg_hba.conf

Action: Updated PostgreSQL's host-based authentication configuration to allow:

  • Password authentication from localhost (127.0.0.1/32)
  • Password authentication from IPv6 localhost (::1/128)
  • Password authentication from all hosts (0.0.0.0/0) - for Docker networking

Configuration Added:

host    all    all    127.0.0.1/32    md5
host    all    all    ::1/128         md5
host    all    all    0.0.0.0/0       md5
host    all    all    ::/0            md5

Step 3: Reloaded PostgreSQL Configuration

Action: Reloaded PostgreSQL configuration to apply changes without restart.

Step 4: Restarted PostgreSQL Container

Action: Restarted container to ensure all changes are applied.


Verification

Test External Connection

psql postgresql://dbis_user:dbis_password@localhost:5432/dbis_core -c "SELECT version();"

Result: ✅ Connection successful

Run Migration

npx prisma migrate deploy

Result: ✅ Migration applied successfully

Verify Tables Created

docker compose -f docker/docker-compose.as4.yml exec -T postgres psql -U dbis_user -d dbis_core -c "SELECT table_name FROM information_schema.tables WHERE table_schema = 'public' AND table_name LIKE 'as4_%' ORDER BY table_name;"

Result: ✅ 6 AS4 tables created

Seed Marketplace

npx ts-node --transpile-only scripts/seed-as4-settlement-marketplace-offering.ts

Result: ✅ Offering seeded successfully


Final Status

✅ External Database Connection: FIXED

  • ✅ External connections working
  • ✅ Migration applied
  • ✅ Tables created
  • ✅ Marketplace seeded
  • ✅ System fully operational

Configuration Files Modified

  1. docker/docker-compose.as4.yml

    • Added POSTGRES_HOST_AUTH_METHOD: md5
    • Added listen_addresses=* command
    • Added init script volume mount
  2. PostgreSQL pg_hba.conf (in container)

    • Added host-based authentication rules
    • Allowed password authentication from all hosts

Connection String

Production/Development:

postgresql://dbis_user:dbis_password@localhost:5432/dbis_core

Docker Internal:

postgresql://dbis_user:dbis_password@postgres:5432/dbis_core

Next Steps

1. Start Server

npm run dev

2. Test API Endpoints

./scripts/test-as4-api.sh

3. Create Test Member

./scripts/create-test-member.sh

4. Submit Test Instruction

./scripts/submit-test-instruction.sh

Status: ✅ EXTERNAL CONNECTION FIXED - SYSTEM READY


End of Document