add docker for server demo

This commit is contained in:
arifal
2025-06-26 18:28:26 +07:00
parent c33193d5f0
commit a7f578ca3d
23 changed files with 2420 additions and 431 deletions

View File

@@ -1,4 +1,5 @@
services:
# Sibedas Application Container (Internal)
app:
build:
context: .
@@ -7,57 +8,214 @@ services:
container_name: sibedas_app
restart: unless-stopped
environment:
APP_ENV: production
APP_DEBUG: false
APP_URL: ${APP_URL:-http://localhost:8000}
VITE_APP_URL: ${VITE_APP_URL:-http://localhost:8000}
DB_CONNECTION: mariadb
APP_ENV: ${APP_ENV:-production}
APP_DEBUG: ${APP_DEBUG:-false}
APP_KEY: ${APP_KEY}
APP_URL: ${APP_URL:-https://sibedas.yourdomain.com}
VITE_APP_URL: ${VITE_APP_URL:-https://sibedas.yourdomain.com}
# Database Configuration
DB_CONNECTION: ${DB_CONNECTION:-mariadb}
DB_HOST: db
DB_PORT: 3306
DB_DATABASE: ${DB_DATABASE:-sibedas}
DB_USERNAME: ${DB_USERNAME:-root}
DB_PASSWORD: ${DB_PASSWORD:-root}
volumes:
- .:/var/www
depends_on:
- db
networks:
- sibedas_net
DB_USERNAME: ${DB_USERNAME:-sibedas_user}
DB_PASSWORD: ${DB_PASSWORD}
nginx:
# Cache Configuration (using database)
CACHE_DRIVER: ${CACHE_DRIVER:-database}
# Session Configuration (using database)
SESSION_DRIVER: ${SESSION_DRIVER:-database}
SESSION_LIFETIME: ${SESSION_LIFETIME:-120}
# Queue Configuration (using database)
QUEUE_CONNECTION: ${QUEUE_CONNECTION:-database}
# Mail Configuration
MAIL_MAILER: ${MAIL_MAILER:-smtp}
MAIL_HOST: ${MAIL_HOST}
MAIL_PORT: ${MAIL_PORT:-587}
MAIL_USERNAME: ${MAIL_USERNAME}
MAIL_PASSWORD: ${MAIL_PASSWORD}
MAIL_ENCRYPTION: ${MAIL_ENCRYPTION:-tls}
MAIL_FROM_ADDRESS: ${MAIL_FROM_ADDRESS}
MAIL_FROM_NAME: ${MAIL_FROM_NAME:-"Sibedas"}
# Google Sheets API
SPREAD_SHEET_ID: ${SPREAD_SHEET_ID}
volumes:
# Only mount specific directories for production security
- sibedas_app_storage:/var/www/storage
- sibedas_app_bootstrap_cache:/var/www/bootstrap/cache
- ./public:/var/www/public:ro
- ./docker/supervisor:/etc/supervisor/conf.d:ro
depends_on:
db:
condition: service_healthy
networks:
- sibedas_network
healthcheck:
test: ["CMD", "php", "-v"]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
deploy:
resources:
limits:
memory: 1G
cpus: "1.0"
reservations:
memory: 512M
cpus: "0.5"
# Use Supervisor for queue and scheduler
command:
["/usr/bin/supervisord", "-c", "/etc/supervisor/supervisord.conf"]
# Internal Nginx for Sibedas App
nginx-internal:
image: nginx:alpine
container_name: sibedas_nginx
container_name: sibedas_nginx_internal
restart: unless-stopped
volumes:
- ./public:/var/www/public:ro
- ./docker/nginx/conf.d/sibedas-internal.conf:/etc/nginx/conf.d/default.conf:ro
- sibedas_nginx_internal_logs:/var/log/nginx
depends_on:
app:
condition: service_healthy
networks:
- sibedas_network
healthcheck:
test:
[
"CMD",
"wget",
"--quiet",
"--tries=1",
"--spider",
"http://localhost/health-check",
]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
deploy:
resources:
limits:
memory: 128M
cpus: "0.25"
# Reverse Proxy Nginx (Main Entry Point)
nginx-proxy:
build:
context: ./docker/nginx
dockerfile: Dockerfile
container_name: sibedas_nginx_proxy
restart: unless-stopped
ports:
- "8000:80"
- "${NGINX_HTTP_PORT:-80}:80"
- "${NGINX_HTTPS_PORT:-443}:443"
environment:
DOMAIN: ${DOMAIN:-sibedas.yourdomain.com}
EMAIL: ${EMAIL:-admin@yourdomain.com}
SSL_TYPE: ${SSL_TYPE:-self-signed}
volumes:
- .:/var/www
- ./docker/nginx/conf.d/app.conf:/etc/nginx/conf.d/default.conf
- sibedas_nginx_proxy_logs:/var/log/nginx
- sibedas_ssl_certs:/etc/nginx/ssl
- sibedas_letsencrypt:/etc/letsencrypt
depends_on:
- app
nginx-internal:
condition: service_healthy
networks:
- sibedas_net
- sibedas_network
healthcheck:
test:
[
"CMD",
"wget",
"--quiet",
"--tries=1",
"--spider",
"http://localhost/health-check",
]
interval: 30s
timeout: 10s
retries: 3
start_period: 30s
deploy:
resources:
limits:
memory: 256M
cpus: "0.5"
db:
image: mariadb:10.6
container_name: sibedas_db
restart: unless-stopped
environment:
MYSQL_ROOT_PASSWORD: ${DB_PASSWORD:-root}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
MYSQL_DATABASE: ${DB_DATABASE:-sibedas}
MYSQL_USER: ${DB_USERNAME:-root}
MYSQL_PASSWORD: ${DB_PASSWORD:-root}
MYSQL_USER: ${DB_USERNAME:-sibedas_user}
MYSQL_PASSWORD: ${DB_PASSWORD}
MYSQL_INNODB_BUFFER_POOL_SIZE: ${MYSQL_INNODB_BUFFER_POOL_SIZE:-1G}
ports:
- "3306:3306"
# Only expose if needed for external access
- "${DB_EXTERNAL_PORT:-3306}:3306"
volumes:
- dbdata:/var/lib/mysql
- ./sibedas.sql:/docker-entrypoint-initdb.d/sibedas.sql
- sibedas_dbdata:/var/lib/mysql
- ./sibedas.sql:/docker-entrypoint-initdb.d/sibedas.sql:ro
- ./docker/mysql/conf.d:/etc/mysql/conf.d:ro
- sibedas_db_logs:/var/log/mysql
networks:
- sibedas_net
- sibedas_network
healthcheck:
test:
[
"CMD",
"mysqladmin",
"ping",
"-h",
"localhost",
"-u",
"${DB_USERNAME:-sibedas_user}",
"-p${DB_PASSWORD}",
]
interval: 30s
timeout: 10s
retries: 3
start_period: 60s
deploy:
resources:
limits:
memory: 2G
cpus: "1.0"
reservations:
memory: 1G
cpus: "0.5"
volumes:
dbdata:
sibedas_dbdata:
driver: local
sibedas_app_storage:
driver: local
sibedas_app_bootstrap_cache:
driver: local
sibedas_nginx_internal_logs:
driver: local
sibedas_nginx_proxy_logs:
driver: local
sibedas_db_logs:
driver: local
sibedas_ssl_certs:
driver: local
sibedas_letsencrypt:
driver: local
networks:
sibedas_net:
sibedas_network:
driver: bridge
ipam:
config:
- subnet: 172.20.0.0/16