diff --git a/sam/docker/api/opcache.ini b/sam/docker/api/opcache.ini new file mode 100644 index 0000000..137d2c0 --- /dev/null +++ b/sam/docker/api/opcache.ini @@ -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 diff --git a/sam/docker/api/supervisord.conf b/sam/docker/api/supervisord.conf new file mode 100755 index 0000000..6010bfe --- /dev/null +++ b/sam/docker/api/supervisord.conf @@ -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 \ No newline at end of file diff --git a/sam/docker/docker-compose.yml b/sam/docker/docker-compose.yml new file mode 100644 index 0000000..a8f0fe8 --- /dev/null +++ b/sam/docker/docker-compose.yml @@ -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