version: '3.8'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
depends_on:
- app
app:
build:
context: ./app
dockerfile: Dockerfile
ports:
- "3000:3000"
environment:
- DATABASE_URL=postgres://user:password@db:5432/mydb
depends_on:
- db
db:
image: postgres:15
restart: always
environment:
POSTGRES_USER: user
POSTGRES_PASSWORD: password
POSTGRES_DB: mydb
volumes:
- pgdata:/var/lib/postgresql/data
pgadmin:
image: dpage/pgadmin4
ports:
- "8080:80"
environment:
PGADMIN_DEFAULT_EMAIL: admin@example.com
PGADMIN_DEFAULT_PASSWORD: admin
depends_on:
- db
volumes:
pgdata:project/
│
├── docker-compose.yml
├── nginx/
│ └── nginx.conf
└── app/
├── Dockerfile
└── index.js
events {}
http {
server {
listen 80;
location / {
proxy_pass http://app:3000;
}
}
}FROM node:18
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "index.js"]const express = require('express');
const app = express();
app.get('/', (req, res) => {
res.send('Hello from Node.js app behind Nginx!');
});
app.listen(3000, () => {
console.log('Server listening on port 3000');
});package.json
{
"name": "hello-docker",
"version": "1.0.0",
"main": "app.js",
"scripts": {
"start": "node app.js"
},
"dependencies": {
"express": "^4.17.1"
}
}
sudo docker compose up -d --build