diff --git a/Dockerfile b/Dockerfile index ede2417..fb5dce5 100644 --- a/Dockerfile +++ b/Dockerfile @@ -22,13 +22,11 @@ COPY --from=composer:latest /usr/bin/composer /usr/bin/composer COPY docker/php/php.ini /usr/local/etc/php/conf.d/custom-php.ini COPY docker/php/opcache.ini /usr/local/etc/php/conf.d/opcache.ini COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf -COPY docker/entrypoint.sh /entrypoint.sh -COPY docker/entrypoint.git.sh /entrypoint.git.sh COPY docker/nginx/default.conf.template /etc/nginx/templates/default.conf.template COPY docker/logrotate/laravel /etc/logrotate.d/app/laravel.conf +COPY docker/entrypoint.sh /entrypoint.sh RUN chmod 644 /etc/logrotate.d/app/laravel.conf WORKDIR /var/www -RUN chmod +x /entrypoint.sh /entrypoint.git.sh ENTRYPOINT ["/entrypoint.sh"] \ No newline at end of file diff --git a/docker-compose.letsencrypt.yaml b/docker-compose.letsencrypt.yaml deleted file mode 100644 index b20fe06..0000000 --- a/docker-compose.letsencrypt.yaml +++ /dev/null @@ -1,33 +0,0 @@ -services: - nginx-proxy: - image: jwilder/nginx-proxy - container_name: ${PROJECT_NAME}_nginx_proxy - ports: - - "80:80" - - "443:443" - volumes: - - /var/run/docker.sock:/tmp/docker.sock:ro - - ./certs:/etc/nginx/certs - - ./vhost.d:/etc/nginx/vhost.d - - ./html:/usr/share/nginx/html - networks: - - nginx_proxy - letsencrypt: - image: jrcs/letsencrypt-nginx-proxy-companion - container_name: ${PROJECT_NAME}_letsencrypt - environment: - NGINX_PROXY_CONTAINER: ${PROJECT_NAME}_nginx_proxy - DEFAULT_EMAIL: ${LETSENCRYPT_EMAIL} - volumes_from: - - nginx-proxy - volumes: - - /var/run/docker.sock:/var/run/docker.sock:ro - - ./certs:/etc/nginx/certs:rw - - ./vhost.d:/etc/nginx/vhost.d - - ./html:/usr/share/nginx/html - networks: - - nginx_proxy - -networks: - nginx_proxy: - external: true \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 4873cba..8a3d42b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,23 +1,4 @@ services: - mariadb: - image: mariadb:10.6 - container_name: ${APP_NAME}_db - restart: always - environment: - MYSQL_ROOT_PASSWORD: ${DB_PASSWORD} - MYSQL_DATABASE: ${DB_DATABASE} - MYSQL_USER: ${DB_USERNAME} - MYSQL_PASSWORD: ${DB_PASSWORD} - volumes: - - ./data/mariadb/lib:/var/lib/mysql - - ./data/mariadb/conf.d:/etc/mysql/conf.d - - ./data/logs/mariadb:/var/log/mysql - - ./docker/mariadb/my.cnf:/etc/mysql/conf.d/custom.cnf - ports: - - "3306:3306" - networks: - - app_network - app: build: context: . @@ -29,23 +10,29 @@ services: - ./data/logs/nginx/:/var/log/nginx ports: - "${APP_PORT:-80}:${APP_PORT:-80}" - depends_on: - - mariadb environment: REPO_URL: ${REPO_URL} BRANCH: ${REPO_BRANCH:-main} - APP_NAME: ${APP_NAME} - APP_URL: ${APP_URL} DB_HOST: mariadb DB_PORT: 3306 DB_DATABASE: ${DB_DATABASE} DB_USERNAME: ${DB_USERNAME} DB_PASSWORD: ${DB_PASSWORD} + REDIS_HOST: redis + REDIS_PORT: 6379 + SESSION_DRIVER: redis + QUEUE_CONNECTION: redis + CACHE_STORE: redis + APP_NAME: ${APP_NAME} + APP_URL: ${APP_URL} NGINX_HOST: ${APP_DOMAIN} NGINX_PORT: ${APP_PORT:-80} networks: + - mariadb_internal - app_network networks: + mariadb_internal: + external: true app_network: driver: bridge \ No newline at end of file diff --git a/docker/entrypoint.git.sh b/docker/entrypoint.git.sh deleted file mode 100644 index aa745f8..0000000 --- a/docker/entrypoint.git.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash -set -e - -BRANCH=${BRANCH:-main} -TARGET_DIR=/var/www/html - -echo "[git-worker] Loop started for branch $BRANCH" -while true; do - cd "$TARGET_DIR" - git remote update - LOCAL=$(git rev-parse @) - REMOTE=$(git rev-parse "origin/$BRANCH") - - if [ "$LOCAL" != "$REMOTE" ]; then - echo "[git-worker] Detected new commits, pulling..." - git pull origin "$BRANCH" - - echo "[git-worker] Restarting queue-worker..." - supervisorctl restart queue-worker - else - echo "[git-worker] No changes." - fi - sleep 300 -done \ No newline at end of file diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 3072289..b6acb3b 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -9,14 +9,16 @@ TARGET_DIR=/var/www/html if [ -z "$(ls -A "$TARGET_DIR")" ]; then echo "[entrypoint] Cloning $BRANCH from $REPO_URL ..." git clone --branch "$BRANCH" "$REPO_URL" "$TARGET_DIR" + cd "$TARGET_DIR" else echo "[entrypoint] Repository already present, skipping clone." + cd "$TARGET_DIR" + git pull origin "$BRANCH" fi -cd "$TARGET_DIR" # 2) Laravel 基礎安裝 -composer install --no-interaction --prefer-dist +[ -d vendor ] || composer install --no-interaction --prefer-dist [ -f .env ] || cp .env.example .env update_env() { local k=$1 v=$2; grep -q "^$k=" .env && sed -i "s|^$k=.*|$k=$v|" .env || echo "$k=$v" >> .env; } @@ -27,6 +29,11 @@ update_env DB_PORT "$DB_PORT" update_env DB_DATABASE "$DB_DATABASE" update_env DB_USERNAME "$DB_USERNAME" update_env DB_PASSWORD "$DB_PASSWORD" +update_env REDIS_HOST "$REDIS_HOST" +update_env REDIS_PORT "$REDIS_PORT" +update_env SESSION_DRIVER "$SESSION_DRIVER" +update_env QUEUE_CONNECTION "$QUEUE_CONNECTION" +update_env CACHE_STORE "$CACHE_STORE" php artisan key:generate --force php artisan migrate --force diff --git a/docker/mariadb/my.cnf b/docker/mariadb/my.cnf deleted file mode 100644 index 3ca321a..0000000 --- a/docker/mariadb/my.cnf +++ /dev/null @@ -1,23 +0,0 @@ -[mysqld] -log_error = /var/log/mysql/error.log -slow_query_log = 1 -slow_query_log_file = /var/log/mysql/slow.log -long_query_time = 2 - -# 使用 UTF-8 編碼 -character-set-server=utf8mb4 -collation-server=utf8mb4_unicode_ci - -# 提升最大連線數 -max_connections=200 - -# InnoDB 設定 -default-storage-engine=InnoDB -innodb_file_per_table=1 -innodb_buffer_pool_size=256M - -# 安全 SQL 模式 -sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION - -# 時區 -default_time_zone='+08:00' \ No newline at end of file diff --git a/docker/supervisord.conf b/docker/supervisord.conf index 445da03..d515ec2 100644 --- a/docker/supervisord.conf +++ b/docker/supervisord.conf @@ -21,14 +21,6 @@ autorestart=true stdout_logfile=/var/www/logs/schedule.log stderr_logfile=/var/www/logs/schedule_error.log -[program:git-worker] -command=/bin/sh /entrypoint.git.sh -autostart=true -autorestart=true -stdout_logfile=/var/www/logs/git-worker.log -stderr_logfile=/var/www/logs/git-worker_error.log -startsecs=0 - [program:cron] command=/usr/sbin/cron -f autostart=true