Skip to content

Docker Compose Setup Guide

Docker Compose Setup - OpenVSCode with PostgreSQL RAG

Section titled “Docker Compose Setup - OpenVSCode with PostgreSQL RAG”

Date: November 18, 2025 Status: ✅ Production Ready with Environment Variables

This setup uses Docker Compose to run:

  • PostgreSQL with pgvector - Vector database for RAG embeddings
  • OpenVSCode Server - Browser-based IDE with workspace-rag extension pre-installed

No hardcoded passwords! All sensitive configuration is managed via environment variables.

Terminal window
# Copy the example file
cp .env.example .env
# Edit .env with your secure password
nano .env # or use your preferred editor

Important: Set a secure password in .env:

Terminal window
POSTGRES_PASSWORD=your-secure-password-here
Terminal window
# Start all services in the background
docker-compose up -d
# View logs
docker-compose logs -f
# Check status
docker-compose ps
Open: http://localhost:3000

The database connection is pre-configured - no manual setup required!

  1. Open a workspace in the IDE (File → Open Folder)
  2. Press Cmd+Shift+P (or Ctrl+Shift+P)
  3. Type: “Workspace RAG: Index Workspace”
  4. Wait for indexing to complete ✅
Terminal window
# Connect to database
docker-compose exec postgres psql -U postgres -d workspace_rag
# Inside psql:
SELECT COUNT(*) FROM workspace_documents;
\q
VariableDefaultDescription
POSTGRES_USERpostgresPostgreSQL username
POSTGRES_PASSWORDrequiredPostgreSQL password (set this!)
POSTGRES_DBworkspace_ragDatabase name
POSTGRES_PORT5432PostgreSQL port on host
OPENVSCODE_PORT3000OpenVSCode port on host

The workspace-rag extension uses these default values (from package.json):

{
"workspaceRag.pgHost": "postgres-pgvector",
"workspaceRag.pgPort": 5432,
"workspaceRag.pgDatabase": "workspace_rag",
"workspaceRag.pgUser": "postgres",
"workspaceRag.pgPassword": "password"
}

Note: The password in the extension must match POSTGRES_PASSWORD in your .env file for the default setup. For custom passwords, see Custom Configuration below.

vibecode-webgui/
├── docker-compose.yml # Service definitions
├── .env # Your environment variables (gitignored)
├── .env.example # Template for .env
├── init-db.sql # Database initialization script
└── DOCKER_COMPOSE_SETUP.md # This file
Terminal window
# Start all services
docker-compose up -d
# Start specific service
docker-compose up -d postgres
docker-compose up -d openvscode
Terminal window
# Stop all services (keeps data)
docker-compose down
# Stop and remove volumes (deletes data)
docker-compose down -v
Terminal window
# All services
docker-compose logs -f
# Specific service
docker-compose logs -f postgres
docker-compose logs -f openvscode
Terminal window
# Restart all
docker-compose restart
# Restart specific service
docker-compose restart postgres
Terminal window
# Connect to database
docker-compose exec postgres psql -U postgres -d workspace_rag
# Backup database
docker-compose exec postgres pg_dump -U postgres workspace_rag > backup.sql
# Restore database
cat backup.sql | docker-compose exec -T postgres psql -U postgres -d workspace_rag
# Clear all data
docker-compose exec postgres psql -U postgres -d workspace_rag -c "TRUNCATE workspace_documents CASCADE;"

If you want to use a password other than “password”:

  1. Update .env:

    Terminal window
    POSTGRES_PASSWORD=my-secure-password
  2. Update Extension (Option A - Rebuild Extension):

    Edit extensions/workspace-rag/package.json:

    "workspaceRag.pgPassword": {
    "default": "my-secure-password"
    }

    Then rebuild:

    Terminal window
    cd extensions/workspace-rag
    npm run package
    npx @vscode/vsce package
    # Copy to Docker build directory
    cp workspace-rag-0.1.0.vsix /tmp/openvscode-dockerfile/workspace-rag-1.0.0.vsix
    # Rebuild Docker image
    cd /tmp/openvscode-dockerfile
    docker build -t openvscode-with-rag:latest .
    # Restart services
    docker-compose down
    docker-compose up -d
  3. Update Extension (Option B - VS Code Settings):

    After starting the IDE, manually configure via Settings UI:

    • Press Cmd+, (Settings)
    • Search: “workspace rag”
    • Set “Pg Password” to your password

Edit .env:

Terminal window
POSTGRES_PORT=5433 # PostgreSQL on host:5433
OPENVSCODE_PORT=8080 # OpenVSCode on host:8080

Then restart:

Terminal window
docker-compose down
docker-compose up -d

The postgres service includes a healthcheck to ensure it’s ready before openvscode starts:

healthcheck:
test: ["CMD-SHELL", "pg_isready -U postgres"]
interval: 5s
timeout: 5s
retries: 5

This prevents connection errors during startup.

PostgreSQL data is stored in a Docker volume:

Terminal window
# List volumes
docker volume ls | grep workspace
# Inspect volume
docker volume inspect vibecode-webgui_postgres_data
# Backup volume
docker run --rm -v vibecode-webgui_postgres_data:/data -v $(pwd):/backup \
ubuntu tar czf /backup/postgres-backup.tar.gz /data
# Restore volume
docker run --rm -v vibecode-webgui_postgres_data:/data -v $(pwd):/backup \
ubuntu tar xzf /backup/postgres-backup.tar.gz -C /
  1. Check containers are running:

    Terminal window
    docker-compose ps
  2. Check logs for errors:

    Terminal window
    docker-compose logs postgres | grep -i error
    docker-compose logs openvscode | grep -i error
  3. Verify network:

    Terminal window
    docker-compose exec openvscode ping -c 2 postgres-pgvector
  4. Check extension is using correct password:

    • Open IDE Settings (Cmd+,)
    • Search “workspace rag”
    • Verify password matches your .env file
Terminal window
# Check PostgreSQL is healthy
docker-compose exec postgres pg_isready -U postgres
# Check password in .env matches
cat .env | grep POSTGRES_PASSWORD
Terminal window
# Check what's using the port
lsof -i :3000 # or :5432
# Use different port in .env
OPENVSCODE_PORT=8080
  1. Use strong passwords:

    Terminal window
    # Generate secure password
    openssl rand -base64 32
  2. Don’t expose PostgreSQL port:

    Edit docker-compose.yml, remove:

    ports:
    - "${POSTGRES_PORT:-5432}:5432"
  3. Use Docker secrets (Docker Swarm):

    services:
    postgres:
    secrets:
    - postgres_password
    environment:
    POSTGRES_PASSWORD_FILE: /run/secrets/postgres_password
    secrets:
    postgres_password:
    external: true
  4. Enable SSL for PostgreSQL:

    Mount SSL certificates:

    volumes:
    - ./ssl/server.crt:/var/lib/postgresql/server.crt:ro
    - ./ssl/server.key:/var/lib/postgresql/server.key:ro
Terminal window
# Development
docker-compose -f docker-compose.yml up -d
# Production
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
# Staging
docker-compose -f docker-compose.yml -f docker-compose.staging.yml up -d

If you modify the extension:

Terminal window
# 1. Build extension
cd extensions/workspace-rag
npm run package
npx @vscode/vsce package
# 2. Copy VSIX to Docker build directory
cp workspace-rag-0.1.0.vsix /tmp/openvscode-dockerfile/workspace-rag-1.0.0.vsix
# 3. Rebuild Docker image
cd /tmp/openvscode-dockerfile
docker build -t openvscode-with-rag:latest .
# 4. Recreate container with new image
docker-compose up -d --force-recreate openvscode

No hardcoded passwords - All sensitive data in .envAutomatic database initialization - Schema created on first run ✅ Health checks - Ensures services start in correct order ✅ Data persistence - PostgreSQL data survives container restarts ✅ Easy configuration - Change ports and settings via .envProduction ready - Supports Docker secrets and SSL

Quick Start:

Terminal window
cp .env.example .env
nano .env # Set POSTGRES_PASSWORD
docker-compose up -d
open http://localhost:3000

Access: http://localhost:3000 Status: ✅ Ready to Use