← Каталог
Docker Compose — готовые стеки — 4. Приложение + PostgreSQL
Фрагмент из «Docker Compose — готовые стеки»: 4. Приложение + PostgreSQL.
services:
api:
image: node:20-alpine
working_dir: /app
command: ["node", "server.js"]
volumes:
- ./app:/app
ports:
- "3000:3000"
environment:
DB_HOST: db
DB_PORT: "5432"
DB_USER: app
DB_PASSWORD: secret
DB_NAME: appdb
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: appdb
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d appdb"]
interval: 5s
retries: 5
volumes:
pg_data: services:
api:
image: node:20-alpine
working_dir: /app
command: ["node", "server.js"]
volumes:
- ./app:/app
ports:
- "3000:3000"
environment:
DB_HOST: db
DB_PORT: "5432"
DB_USER: app
DB_PASSWORD: secret
DB_NAME: appdb
depends_on:
db:
condition: service_healthy
db:
image: postgres:16-alpine
environment:
POSTGRES_USER: app
POSTGRES_PASSWORD: secret
POSTGRES_DB: appdb
volumes:
- pg_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U app -d appdb"]
interval: 5s
retries: 5
volumes:
pg_data: const http = require('http');
const { Client } = require('pg');
const client = new Client({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
});
client.connect()
.then(() => {
http.createServer((_req, res) => {
res.end('API + Postgres OK');
}).listen(3000);
})
.catch((err) => {
console.error('DB error:', err.message);
process.exit(1);
}); const http = require('http');
const { Client } = require('pg');
const client = new Client({
host: process.env.DB_HOST,
port: process.env.DB_PORT,
user: process.env.DB_USER,
password: process.env.DB_PASSWORD,
database: process.env.DB_NAME,
});
client.connect()
.then(() => {
http.createServer((_req, res) => {
res.end('API + Postgres OK');
}).listen(3000);
})
.catch((err) => {
console.error('DB error:', err.message);
process.exit(1);
});