Lewati ke konten

Perbaikan docker-compose

Port 443 dipublikasikan, tiga volume HTTPS ditambahkan.

Berkas: alat/hari-3/Praktik 11/perbaikan/docker-compose.yml

Praktik 11/perbaikan/docker-compose.yml
# =====================================================================
# Versi perbaikan dari Praktik 11/file latihan/docker-compose.yml
#
# Tiga perubahan, semuanya pada service nginx:
# 1. Port 443 dipublikasikan. Tanpa ini Nginx mendengarkan di dalam
# container, tetapi host tidak meneruskan trafik ke sana.
# 2. Tiga volume ditambahkan:
# ./certbot-webroot -> /var/www/certbot berkas challenge ACME
# ./tls -> /etc/nginx/tls server block 443
# /etc/letsencrypt -> /etc/letsencrypt sertifikat
# 3. Tidak ada perubahan pada service nextjs dan geoserver.
#
# Dua volume pertama relatif terhadap folder repository DI VM, yaitu
# /opt/webgis/app. Keduanya sudah dibuat oleh Tahap 6 modul dengan
# perintah: mkdir -p certbot-webroot tls
#
# Volume ketiga memakai jalur absolut karena menunjuk lokasi di VM, bukan
# di dalam repository. Tanpa volume ini, nginx -t gagal dengan pesan
# bahwa berkas sertifikat tidak ditemukan, walaupun sertifikatnya ada.
#
# Cara pakai: ganti docker-compose.yml di repository fork dengan berkas
# ini, lalu jalankan git pull --ff-only di VM dan buat ulang container
# nginx. Berkas ini masih memakai ${NEXTJS_IMAGE} dan
# ${GEOSERVER_ADMIN_PASSWORD} dari .env, sama seperti berkas aslinya,
# jadi .env harus sudah terisi sebelum docker compose dijalankan.
# =====================================================================
services:
nextjs:
image: ${NEXTJS_IMAGE:?Set NEXTJS_IMAGE in .env}
container_name: nextjs_portal
env_file:
- .env
depends_on:
- geoserver
networks:
- app-network
restart: unless-stopped
geoserver:
image: kartoza/geoserver:2.24.1
container_name: geoserver_app
environment:
- INITIAL_MEMORY=512m
- MAXIMUM_MEMORY=2048m
- GEOSERVER_ADMIN_USER=admin
# Diisi dari .env supaya kata sandi tidak tertulis di repository public.
- GEOSERVER_ADMIN_PASSWORD=${GEOSERVER_ADMIN_PASSWORD}
- GEOSERVER_CORS_ENABLED=true
- GEOSERVER_CORS_ALLOWED_ORIGINS=*
volumes:
- ./geoserver-data:/opt/geoserver/data_dir
networks:
- app-network
restart: unless-stopped
nginx:
image: nginx:1.27-alpine
container_name: nginx_proxy
depends_on:
- nextjs
- geoserver
ports:
- "80:80"
- "443:443" # WAJIB, kalau tidak HTTPS tak terjangkau
volumes:
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
- ./certbot-webroot:/var/www/certbot:ro # webroot ACME
- ./tls:/etc/nginx/tls:ro # server block 443
- /etc/letsencrypt:/etc/letsencrypt:ro # sertifikat Let's Encrypt
networks:
- app-network
restart: unless-stopped
networks:
app-network:
driver: bridge