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

6.4 KiB

AS4 Settlement - External Connection Resolution

Date: 2026-01-19
Status: ⚠️ CONFIGURATION COMPLETE - AUTHENTICATION PENDING


Summary

External database connection configuration has been updated. PostgreSQL Docker container is configured to accept external connections. Authentication needs to be verified/reset.


Configuration Changes Completed

✅ 1. Docker Compose Configuration

File: docker/docker-compose.as4.yml

Changes Applied:

  • ✅ Added POSTGRES_HOST_AUTH_METHOD: md5 environment variable
  • ✅ Added PostgreSQL command: listen_addresses=* to listen on all addresses
  • ✅ Added init script volume mount: ./postgres-init:/docker-entrypoint-initdb.d
  • ✅ Added PostgreSQL command parameters for connection settings

Status: ✅ COMPLETE

✅ 2. PostgreSQL pg_hba.conf Configuration

Changes Applied:

  • ✅ Added host-based authentication rules:
    • host all all 127.0.0.1/32 md5 (IPv4 localhost)
    • host all all ::1/128 md5 (IPv6 localhost)
    • host all all 0.0.0.0/0 md5 (All IPv4 hosts)
    • host all all ::/0 md5 (All IPv6 hosts)

Verification:

docker compose -f docker/docker-compose.as4.yml exec -T postgres cat /var/lib/postgresql/data/pg_hba.conf | tail -5

Status: ✅ COMPLETE

✅ 3. Init Script Created

File: docker/postgres-init/01-init-hba.sh

Purpose: Automatically configure pg_hba.conf on container initialization

Status: ✅ CREATED


Remaining Issue

⚠️ Password Authentication

Issue: External connections from localhost fail with:

FATAL: password authentication failed for user "dbis_user"

Root Cause:

  • PostgreSQL container was initialized before password configuration
  • POSTGRES_PASSWORD environment variable only affects initial database setup
  • Password may need to be reset or container recreated

Resolution Steps

# 1. Connect to container and reset password
docker compose -f docker/docker-compose.as4.yml exec -T postgres \
  psql -U dbis_user -d postgres -c "ALTER USER dbis_user WITH PASSWORD 'dbis_password';"

# 2. Reload PostgreSQL configuration
docker compose -f docker/docker-compose.as4.yml exec -T postgres \
  psql -U dbis_user -d postgres -c "SELECT pg_reload_conf();"

# 3. Test connection
psql postgresql://dbis_user:dbis_password@localhost:5432/dbis_core -c "SELECT version();"

Option 2: Recreate Container (Clean Setup)

# 1. Stop and remove container (keeps data volume)
cd docker
docker compose -f docker-compose.as4.yml stop postgres
docker compose -f docker-compose.as4.yml rm -f postgres

# 2. Remove volume (if starting fresh - WARNING: deletes all data)
docker volume rm docker_postgres_data

# 3. Start fresh container
docker compose -f docker-compose.as4.yml up -d postgres

# 4. Wait for initialization
sleep 10

# 5. Test connection
psql postgresql://dbis_user:dbis_password@localhost:5432/dbis_core -c "SELECT version();"

Option 3: Check for Port Conflict

# Check what's using port 5432
sudo lsof -i :5432

# If local PostgreSQL is running, stop it
sudo systemctl stop postgresql
# or
sudo service postgresql stop

# Restart Docker PostgreSQL
cd docker
docker compose -f docker-compose.as4.yml restart postgres

Verification Steps

Step 1: Verify Container is Running

docker compose -f docker/docker-compose.as4.yml ps postgres

Expected: Status should show "Up" and healthy

Step 2: Test Internal Connection

docker compose -f docker/docker-compose.as4.yml exec -T postgres \
  psql -U dbis_user -d dbis_core -c "SELECT version();"

Expected: PostgreSQL version output

Step 3: Test External Connection

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

Expected: PostgreSQL version output (may need password reset first)

Step 4: Run Migration

export DATABASE_URL=postgresql://dbis_user:dbis_password@localhost:5432/dbis_core
npx prisma migrate deploy

Expected: Migration applied successfully

Step 5: Verify Tables

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;"

Expected: 6 AS4 tables listed

Step 6: Seed Marketplace

export DATABASE_URL=postgresql://dbis_user:dbis_password@localhost:5432/dbis_core
npx ts-node --transpile-only scripts/seed-as4-settlement-marketplace-offering.ts

Expected: "AS4 Settlement Marketplace Offering created"


Alternative: Use Docker Internal Connection

If external connection continues to have issues, you can use Docker's internal networking:

# Use Docker exec for all database operations
docker compose -f docker/docker-compose.as4.yml exec -T postgres \
  psql -U dbis_user -d dbis_core

# Or run scripts inside Docker network
docker compose -f docker/docker-compose.as4.yml run --rm -e DATABASE_URL=postgresql://dbis_user:dbis_password@postgres:5432/dbis_core \
  dbis-core npx prisma migrate deploy

Configuration Summary

Files Modified

  1. ✅ docker/docker-compose.as4.yml - Updated with connection settings
  2. ✅ docker/postgres-init/01-init-hba.sh - Created init script
  3. ✅ PostgreSQL pg_hba.conf - Updated with host authentication rules

Configuration Applied

  • ✅ POSTGRES_HOST_AUTH_METHOD: md5 - Password authentication enabled
  • ✅ listen_addresses=* - Listening on all addresses
  • ✅ Host-based authentication rules added to pg_hba.conf

Status

  • ✅ Configuration: Complete
  • ✅ pg_hba.conf: Updated
  • ✅ Docker Compose: Updated
  • ⚠️ Authentication: Needs verification/reset
  • ⏳ Migration: Waiting for connection fix
  • ⏳ Seeding: Waiting for connection fix

Next Steps

  1. Reset password using Option 1 above
  2. Verify external connection works
  3. Run migration: npx prisma migrate deploy
  4. Seed marketplace: npx ts-node --transpile-only scripts/seed-as4-settlement-marketplace-offering.ts
  5. Start server: npm run dev
  6. Test endpoints: ./scripts/test-as4-api.sh

Configuration Status: ✅ COMPLETE
Connection Status: ⚠️ NEEDS PASSWORD RESET

All configuration files are updated and ready. Once the password is reset and connection verified, the system will be fully operational.


End of Document