DockerAdvanced
Real-world Project — Full Stack Deploy
Next.js frontend + Express API + MongoDB + Redis + nginx — পুরো সিস্টেম এক compose file-এ — বাংলায়।
10টি অংশবাংলা ভাষায়
এত সব শিখলাম — এবার সেগুলোকে একসাথে একটি বাস্তব project-এ বসাই। Project: Blog SaaS — Next.js frontend, Express API, MongoDB ডেটা, Redis cache, nginx reverse proxy।
সম্পূর্ণ compose.prod.yml
compose.prod.ymlyaml
yaml
services:
web:
image: ghcr.io/myorg/blog-web:latest
restart: unless-stopped
env_file:
- .env.production
depends_on:
- api
api:
image: ghcr.io/myorg/blog-api:latest
restart: unless-stopped
env_file:
- .env.production
healthcheck:
test: ["CMD", "node", "-e", "fetch('http://localhost:5000/health').then(r=>process.exit(r.ok?0:1)).catch(()=>process.exit(1))"]
interval: 30s
timeout: 5s
retries: 3
depends_on:
mongo:
condition: service_healthy
redis:
condition: service_healthy
mongo:
image: mongo:7
restart: unless-stopped
volumes:
- mongo-data:/data/db
healthcheck:
test: ["CMD", "mongosh", "--eval", "db.runCommand('ping').ok"]
interval: 10s
timeout: 5s
retries: 5
redis:
image: redis:7-alpine
restart: unless-stopped
volumes:
- redis-data:/data
healthcheck:
test: ["CMD", "redis-cli", "ping"]
interval: 10s
timeout: 5s
retries: 5
nginx:
image: nginx:1.27-alpine
restart: unless-stopped
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./certs:/etc/nginx/certs:ro
depends_on:
- web
- api
volumes:
mongo-data:
redis-data:nginx routing
nginx.confnginx
nginx
# ফ্রন্টএন্ড
server {
listen 80;
server_name blog.example.com;
location / {
proxy_pass http://web:3000;
proxy_set_header Host $host;
}
location /api/ {
proxy_pass http://api:5000/;
proxy_set_header Host $host;
}
}Deploy steps (server)
One-shot deploybash
bash
# 1. project folder এ যান
cd /opt/blog
# 2. config plus registry login
cat > .env.production <<'EOF'
MONGODB_URI=mongodb://mongo:27017/blog
REDIS_URL=redis://redis:6379
JWT_SECRET=<strong-random>
NEXT_PUBLIC_API_URL=https://blog.example.com/api
EOF
# 3. pull ও start
docker compose -f compose.prod.yml pull
docker compose -f compose.prod.yml up -d
# 4. check
docker compose -f compose.prod.yml ps
curl -I https://blog.example.comসাধারণ pitfalls
.env.production-এ secret + server-এ chmod 600 করুন- Next.js-এ
NEXT_PUBLIC_*build-time — সবসময় build-time API URL দরকার - HTTP API-কে HTTPS-এর ভেতর proxy করলে cookies ঠিক করতে
secureসেট করুন - log-এ secret যেন না যায় — logger-এ filter
Monorepo হলে
সব service এক repo-তে থাকলে এক compose file-এ build: ./web ও build: ./api দিয়ে local affiliate — CI-তে registry-তে push করে server pull করে।
শেষ প্যারায় নিজে practice করুন — কোড কপি করে নিজের এডিটরে চালিয়ে দেখুন।