chore:API Docker 환경 설정 (Queue Worker, Scheduler, OPcache 추가)
- supervisord.conf에 queue-worker 1개 + scheduler 추가 - opcache.ini 생성 (MNG 설정과 동일, 256MB) - docker-compose.yml에 opcache.ini 볼륨 마운트 추가 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
33
sam/docker/api/opcache.ini
Normal file
33
sam/docker/api/opcache.ini
Normal file
@@ -0,0 +1,33 @@
|
||||
; OPcache 설정 (성능 향상)
|
||||
; PHP OPcode 캐시를 활성화하여 애플리케이션 성능을 크게 향상시킵니다
|
||||
|
||||
[opcache]
|
||||
; OPcache 활성화
|
||||
opcache.enable=1
|
||||
|
||||
; CLI 환경에서도 OPcache 활성화 (개발 환경)
|
||||
opcache.enable_cli=1
|
||||
|
||||
; OPcache 메모리 사용량 (MB)
|
||||
; 256MB 권장 (프로젝트 크기에 따라 조정) - 개발 환경 성능 향상
|
||||
opcache.memory_consumption=256
|
||||
|
||||
; 내부 문자열 버퍼 크기 (MB)
|
||||
opcache.interned_strings_buffer=16
|
||||
|
||||
; 최대 가속화 파일 수
|
||||
opcache.max_accelerated_files=20000
|
||||
|
||||
; 타임스탬프 검증 활성화 (개발 환경)
|
||||
; 프로덕션에서는 0으로 설정하여 성능 최적화
|
||||
opcache.validate_timestamps=1
|
||||
|
||||
; 재검증 주기 (초) - 개발 환경 성능 향상을 위해 단축
|
||||
; validate_timestamps가 1일 때만 사용됨
|
||||
opcache.revalidate_freq=1
|
||||
|
||||
; 빠른 종료 활성화
|
||||
opcache.fast_shutdown=1
|
||||
|
||||
; 최적화 레벨 (0-7, 높을수록 느리지만 더 최적화됨)
|
||||
opcache.optimization_level=0x7FFFBFFF
|
||||
36
sam/docker/api/supervisord.conf
Executable file
36
sam/docker/api/supervisord.conf
Executable file
@@ -0,0 +1,36 @@
|
||||
[supervisord]
|
||||
nodaemon=true
|
||||
|
||||
[program:php-fpm]
|
||||
command=/usr/local/sbin/php-fpm
|
||||
|
||||
[program:nginx]
|
||||
command=nginx -g "daemon off;"
|
||||
|
||||
[program:queue-worker]
|
||||
command=php /var/www/api/artisan queue:work database --sleep=3 --tries=3 --timeout=1800 --max-jobs=100 --max-time=3600
|
||||
process_name=%(program_name)s_%(process_num)02d
|
||||
numprocs=1
|
||||
directory=/var/www/api
|
||||
autostart=true
|
||||
autorestart=true
|
||||
startsecs=5
|
||||
startretries=3
|
||||
stopwaitsecs=1830
|
||||
stdout_logfile=/var/www/api/storage/logs/queue-worker.log
|
||||
stdout_logfile_maxbytes=5MB
|
||||
stderr_logfile=/var/www/api/storage/logs/queue-worker-error.log
|
||||
stderr_logfile_maxbytes=5MB
|
||||
|
||||
[program:scheduler]
|
||||
command=bash -c "while true; do php /var/www/api/artisan schedule:run --no-interaction; sleep 60; done"
|
||||
process_name=%(program_name)s
|
||||
numprocs=1
|
||||
directory=/var/www/api
|
||||
autostart=true
|
||||
autorestart=true
|
||||
startsecs=0
|
||||
stdout_logfile=/var/www/api/storage/logs/scheduler.log
|
||||
stdout_logfile_maxbytes=5MB
|
||||
stderr_logfile=/var/www/api/storage/logs/scheduler-error.log
|
||||
stderr_logfile_maxbytes=5MB
|
||||
223
sam/docker/docker-compose.yml
Normal file
223
sam/docker/docker-compose.yml
Normal file
@@ -0,0 +1,223 @@
|
||||
services:
|
||||
nginx:
|
||||
image: nginx:latest
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- /home/aweso/sam/api:/var/www/api
|
||||
- /home/aweso/sam/admin:/var/www/admin
|
||||
- /home/aweso/sam/mng:/var/www/mng
|
||||
- /home/aweso/sam/5130:/var/www/5130
|
||||
- /home/aweso/sam/docker/nginx/nginx.conf:/etc/nginx/nginx.conf:ro
|
||||
- /home/aweso/sam/docker/nginx/ssl:/etc/nginx/ssl:ro
|
||||
command: >
|
||||
sh -c "rm -f /etc/nginx/conf.d/default.conf && nginx -g 'daemon off;'"
|
||||
depends_on:
|
||||
- api
|
||||
- admin
|
||||
- mng
|
||||
- react
|
||||
- design
|
||||
- sales
|
||||
- php73
|
||||
networks:
|
||||
- samnet
|
||||
|
||||
api:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: /home/aweso/sam/docker/api/Dockerfile
|
||||
volumes:
|
||||
- /home/aweso/sam/api:/var/www/api
|
||||
- api_vendor:/var/www/api/vendor
|
||||
- api_node_modules:/var/www/api/node_modules
|
||||
- /home/aweso/sam/docker/api/nginx.conf:/etc/nginx/conf.d/default.conf
|
||||
- /home/aweso/sam/docker/api/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
|
||||
- /home/aweso/sam/docker/api/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
|
||||
- /home/aweso/sam/docker/api/opcache.ini:/usr/local/etc/php/conf.d/opcache.ini
|
||||
- /home/aweso/sam/docker/mysql/client-skip-ssl.cnf:/etc/mysql/conf.d/disable-ssl.cnf:ro
|
||||
environment:
|
||||
- DB_HOST=sam-mysql-1
|
||||
- DB_PORT=3306
|
||||
- DB_DATABASE=samdb
|
||||
- DB_USERNAME=samuser
|
||||
- DB_PASSWORD=sampass
|
||||
networks:
|
||||
- samnet
|
||||
working_dir: /var/www/api
|
||||
|
||||
admin:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: /home/aweso/sam/docker/admin/Dockerfile
|
||||
volumes:
|
||||
- /home/aweso/sam/admin:/var/www/admin
|
||||
- admin_vendor:/var/www/admin/vendor
|
||||
- admin_node_modules:/var/www/admin/node_modules
|
||||
- /home/aweso/sam/docker/admin/nginx.conf:/etc/nginx/conf.d/default.conf
|
||||
- /home/aweso/sam/docker/admin/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
|
||||
- /home/aweso/sam/docker/admin/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
|
||||
environment:
|
||||
- DB_HOST=sam-mysql-1
|
||||
- DB_PORT=3306
|
||||
- DB_DATABASE=samdb
|
||||
- DB_USERNAME=samuser
|
||||
- DB_PASSWORD=sampass
|
||||
networks:
|
||||
- samnet
|
||||
working_dir: /var/www/admin
|
||||
|
||||
mng:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: mng/Dockerfile
|
||||
volumes:
|
||||
- ../mng:/var/www/mng
|
||||
- mng_vendor:/var/www/mng/vendor
|
||||
- mng_node_modules:/var/www/mng/node_modules
|
||||
- ./mng/nginx.conf:/etc/nginx/conf.d/default.conf
|
||||
- ./mng/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
|
||||
- ./mng/opcache.ini:/usr/local/etc/php/conf.d/opcache.ini
|
||||
- ./mng/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
|
||||
# - ./mng/www.conf:/usr/local/etc/php-fpm.d/www.conf
|
||||
- ../api/storage/logs:/var/www/api/storage/logs:ro
|
||||
- ./mysql/client-skip-ssl.cnf:/etc/mysql/conf.d/disable-ssl.cnf:ro
|
||||
- ../sales/apikey:/var/www/sales/apikey:ro # Google 서비스 계정 파일 접근용
|
||||
- ../shared-storage:/var/www/shared-storage # 테넌트 파일 공유 스토리지
|
||||
environment:
|
||||
- DB_HOST=sam-mysql-1
|
||||
- DB_PORT=3306
|
||||
- DB_DATABASE=samdb
|
||||
- DB_USERNAME=samuser
|
||||
- DB_PASSWORD=sampass
|
||||
networks:
|
||||
- samnet
|
||||
working_dir: /var/www/mng
|
||||
|
||||
react:
|
||||
build:
|
||||
context: /home/aweso/sam
|
||||
dockerfile: docker/react/Dockerfile
|
||||
volumes:
|
||||
- /home/aweso/sam/react:/app
|
||||
- /app/node_modules
|
||||
- /app/.next
|
||||
environment:
|
||||
- NEXT_PUBLIC_API_URL=https://api.sam.kr
|
||||
- NEXT_PUBLIC_ADMIN_URL=https://admin.sam.kr
|
||||
- NEXT_PUBLIC_API_KEY=42Jfwc6EaRQ04GNRmLR5kzJp5UudSOzGGqjmdk1a
|
||||
- NEXT_PUBLIC_APP_NAME=SAM
|
||||
- NODE_ENV=development
|
||||
- NODE_TLS_REJECT_UNAUTHORIZED=0
|
||||
extra_hosts:
|
||||
- "api.sam.kr:host-gateway"
|
||||
networks:
|
||||
- samnet
|
||||
working_dir: /app
|
||||
|
||||
design:
|
||||
build:
|
||||
context: /home/aweso/sam
|
||||
dockerfile: docker/design/Dockerfile
|
||||
volumes:
|
||||
- /home/aweso/sam/design:/app
|
||||
- /app/node_modules
|
||||
environment:
|
||||
- NODE_ENV=development
|
||||
networks:
|
||||
- samnet
|
||||
working_dir: /app
|
||||
|
||||
sales:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: /home/aweso/sam/docker/sales/Dockerfile
|
||||
volumes:
|
||||
- /home/aweso/sam/sales:/var/www/sales
|
||||
- sales_vendor:/var/www/sales/vendor
|
||||
- sales_node_modules:/var/www/sales/node_modules
|
||||
- /home/aweso/sam/docker/sales/nginx.conf:/etc/nginx/conf.d/default.conf
|
||||
- /home/aweso/sam/docker/sales/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
|
||||
- /home/aweso/sam/docker/sales/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
|
||||
environment:
|
||||
- TZ=Asia/Seoul
|
||||
networks:
|
||||
- samnet
|
||||
working_dir: /var/www/sales
|
||||
|
||||
php73:
|
||||
build:
|
||||
context: .
|
||||
dockerfile: /home/aweso/sam/docker/5130/Dockerfile
|
||||
volumes:
|
||||
- /home/aweso/sam/5130:/var/www/5130
|
||||
- php73_vendor:/var/www/5130/vendor
|
||||
- php73_node_modules:/var/www/5130/node_modules
|
||||
- /home/aweso/sam/docker/5130/nginx.conf:/etc/nginx/conf.d/default.conf
|
||||
- /home/aweso/sam/docker/5130/supervisord.conf:/etc/supervisor/conf.d/supervisord.conf
|
||||
- /home/aweso/sam/docker/5130/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini
|
||||
environment:
|
||||
- DB_HOST=sam-mysql-1
|
||||
- DB_PORT=3306
|
||||
- DB_DATABASE=chandj
|
||||
- DB_USERNAME=root
|
||||
- DB_PASSWORD=root
|
||||
- TZ=Asia/Seoul
|
||||
networks:
|
||||
- samnet
|
||||
working_dir: /var/www/5130
|
||||
|
||||
mysql:
|
||||
image: mysql:8.0
|
||||
restart: always
|
||||
environment:
|
||||
MYSQL_DATABASE: samdb
|
||||
MYSQL_USER: samuser
|
||||
MYSQL_PASSWORD: sampass
|
||||
MYSQL_ROOT_PASSWORD: root
|
||||
TZ: Asia/Seoul
|
||||
command: --sql-mode="NO_ENGINE_SUBSTITUTION" --default-time-zone="+09:00" --default-authentication-plugin=mysql_native_password
|
||||
volumes:
|
||||
- db_data:/var/lib/mysql
|
||||
- /home/aweso/sam/docker/mysql/init.sql:/docker-entrypoint-initdb.d/01-init.sql
|
||||
# - /home/aweso/sam/chandj_dump.sql:/docker-entrypoint-initdb.d/02-chandj-dump.sql
|
||||
ports:
|
||||
- "3306:3306"
|
||||
networks:
|
||||
- samnet
|
||||
|
||||
phpmyadmin:
|
||||
image: phpmyadmin:latest
|
||||
restart: always
|
||||
ports:
|
||||
- "8080:80"
|
||||
environment:
|
||||
- PMA_ARBITRARY=1
|
||||
- PMA_HOST=mysql
|
||||
- PMA_PORT=3306
|
||||
- PMA_USER=root
|
||||
- PMA_PASSWORD=root
|
||||
- TZ=Asia/Seoul
|
||||
depends_on:
|
||||
- mysql
|
||||
networks:
|
||||
- samnet
|
||||
|
||||
volumes:
|
||||
db_data:
|
||||
# 의존성 디렉토리 분리 (성능 향상)
|
||||
api_vendor:
|
||||
api_node_modules:
|
||||
mng_vendor:
|
||||
mng_node_modules:
|
||||
admin_vendor:
|
||||
admin_node_modules:
|
||||
sales_vendor:
|
||||
sales_node_modules:
|
||||
php73_vendor:
|
||||
php73_node_modules:
|
||||
|
||||
networks:
|
||||
samnet:
|
||||
driver: bridge
|
||||
Reference in New Issue
Block a user