From 88c3678a4db53c156dda18ccd40a13386a504ccd Mon Sep 17 00:00:00 2001 From: sky121113 Date: Tue, 13 Jan 2026 11:04:58 +0800 Subject: [PATCH] =?UTF-8?q?chore:=20=E5=8A=A0=E5=85=A5=20Docker=208.5=20Do?= =?UTF-8?q?ckerfile=20=E4=B8=A6=E6=81=A2=E5=BE=A9=20deploy.yaml=20?= =?UTF-8?q?=E5=8E=9F=E5=A7=8B=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 加入 docker/8.5 目錄(從 Laravel Sail 8.4 複製) - 恢復 deploy.yaml 到原始版本 --- .gitea/workflows/deploy.yaml | 31 +++------------ docker/8.5/Dockerfile | 74 ++++++++++++++++++++++++++++++++++++ docker/8.5/php.ini | 5 +++ docker/8.5/start-container | 26 +++++++++++++ docker/8.5/supervisord.conf | 14 +++++++ 5 files changed, 124 insertions(+), 26 deletions(-) create mode 100644 docker/8.5/Dockerfile create mode 100644 docker/8.5/php.ini create mode 100644 docker/8.5/start-container create mode 100644 docker/8.5/supervisord.conf diff --git a/.gitea/workflows/deploy.yaml b/.gitea/workflows/deploy.yaml index e9fa5bd..de583b7 100644 --- a/.gitea/workflows/deploy.yaml +++ b/.gitea/workflows/deploy.yaml @@ -94,26 +94,15 @@ jobs: command_timeout: 10m script: | cd /home/amba/star-cloud - - # 修正權限問題(確保整個專案目錄為 sail 擁有) - docker exec -u root star-cloud-laravel sh -c " - mkdir -p /.npm && chown -R sail:sail /.npm && - chown -R sail:sail /var/www/html - " - - - docker exec -u sail -w /var/www/html star-cloud-laravel sh -c " + docker exec -u 1000:1000 -w /var/www/html star-cloud-laravel sh -c " # 1. 後端依賴 (Demo 環境建議加上 --no-interaction 避免卡住) composer install --no-dev --optimize-autoloader --no-interaction && - # 2. 清理 npm cache(避免權限問題) - npm cache clean --force 2>/dev/null || true && - - # 3. 前端依賴與編譯 + # 2. 前端編譯 npm install && npm run build && - # 4. Laravel 初始化與優化 + # 3. Laravel 初始化與優化 php artisan migrate --force && php artisan optimize:clear && php artisan optimize && @@ -195,21 +184,11 @@ jobs: fi echo "容器狀態:" && docker ps --filter "name=star-cloud-laravel" - - # 修正權限問題(確保整個專案目錄為 sail 擁有) - docker exec -u root star-cloud-laravel sh -c " - mkdir -p /.npm && chown -R sail:sail /.npm && - chown -R sail:sail /var/www/html - " - docker exec -u sail -w /var/www/html star-cloud-laravel sh -c " + docker exec -u 1000:1000 -w /var/www/html star-cloud-laravel sh -c " composer install --no-dev --optimize-autoloader && - - # 清理 npm cache(避免權限問題) - npm cache clean --force 2>/dev/null || true && - npm install && - npm run build && + npm run build php artisan migrate --force && php artisan optimize:clear && diff --git a/docker/8.5/Dockerfile b/docker/8.5/Dockerfile new file mode 100644 index 0000000..701b834 --- /dev/null +++ b/docker/8.5/Dockerfile @@ -0,0 +1,74 @@ +FROM ubuntu:24.04 + +LABEL maintainer="Taylor Otwell" + +ARG WWWGROUP +ARG NODE_VERSION=22 +ARG MYSQL_CLIENT="mysql-client" +ARG POSTGRES_VERSION=18 + +WORKDIR /var/www/html + +ENV DEBIAN_FRONTEND=noninteractive +ENV TZ=UTC +ENV SUPERVISOR_PHP_COMMAND="/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan serve --host=0.0.0.0 --port=80" +ENV SUPERVISOR_PHP_USER="sail" +ENV PLAYWRIGHT_BROWSERS_PATH=0 + +RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone + +RUN echo "Acquire::http::Pipeline-Depth 0;" > /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::http::No-Cache true;" >> /etc/apt/apt.conf.d/99custom && \ + echo "Acquire::BrokenProxy true;" >> /etc/apt/apt.conf.d/99custom + +RUN apt-get update && apt-get upgrade -y \ + && mkdir -p /etc/apt/keyrings \ + && apt-get install -y gnupg gosu curl ca-certificates zip unzip git supervisor sqlite3 libcap2-bin libpng-dev python3 dnsutils librsvg2-bin fswatch ffmpeg nano \ + && curl -sS 'https://keyserver.ubuntu.com/pks/lookup?op=get&search=0xb8dc7e53946656efbce4c1dd71daeaab4ad4cab6' | gpg --dearmor | tee /etc/apt/keyrings/ppa_ondrej_php.gpg > /dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/ppa_ondrej_php.gpg] https://ppa.launchpadcontent.net/ondrej/php/ubuntu noble main" > /etc/apt/sources.list.d/ppa_ondrej_php.list \ + && apt-get update \ + && apt-get install -y php8.4-cli php8.4-dev \ + php8.4-pgsql php8.4-sqlite3 php8.4-gd \ + php8.4-curl php8.4-mongodb \ + php8.4-imap php8.4-mysql php8.4-mbstring \ + php8.4-xml php8.4-zip php8.4-bcmath php8.4-soap \ + php8.4-intl php8.4-readline \ + php8.4-ldap \ + php8.4-msgpack php8.4-igbinary php8.4-redis php8.4-swoole \ + php8.4-memcached php8.4-pcov php8.4-imagick php8.4-xdebug \ + && curl -sLS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer \ + && curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpg \ + && echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_$NODE_VERSION.x nodistro main" > /etc/apt/sources.list.d/nodesource.list \ + && apt-get update \ + && apt-get install -y nodejs \ + && npm install -g npm \ + && npm install -g pnpm \ + && npm install -g bun \ + && npx playwright install-deps \ + && curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | gpg --dearmor | tee /etc/apt/keyrings/yarn.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/yarn.gpg] https://dl.yarnpkg.com/debian/ stable main" > /etc/apt/sources.list.d/yarn.list \ + && curl -sS https://www.postgresql.org/media/keys/ACCC4CF8.asc | gpg --dearmor | tee /etc/apt/keyrings/pgdg.gpg >/dev/null \ + && echo "deb [signed-by=/etc/apt/keyrings/pgdg.gpg] http://apt.postgresql.org/pub/repos/apt noble-pgdg main" > /etc/apt/sources.list.d/pgdg.list \ + && apt-get update \ + && apt-get install -y yarn \ + && apt-get install -y $MYSQL_CLIENT \ + && apt-get install -y postgresql-client-$POSTGRES_VERSION \ + && apt-get -y autoremove \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* + +RUN setcap "cap_net_bind_service=+ep" /usr/bin/php8.4 + +RUN userdel -r ubuntu +RUN groupadd --force -g $WWWGROUP sail +RUN useradd -ms /bin/bash --no-user-group -g $WWWGROUP -u 1337 sail +RUN git config --global --add safe.directory /var/www/html + +COPY start-container /usr/local/bin/start-container +COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf +COPY php.ini /etc/php/8.4/cli/conf.d/99-sail.ini +RUN chmod +x /usr/local/bin/start-container + +EXPOSE 80/tcp + +ENTRYPOINT ["start-container"] diff --git a/docker/8.5/php.ini b/docker/8.5/php.ini new file mode 100644 index 0000000..0d8ce9e --- /dev/null +++ b/docker/8.5/php.ini @@ -0,0 +1,5 @@ +[PHP] +post_max_size = 100M +upload_max_filesize = 100M +variables_order = EGPCS +pcov.directory = . diff --git a/docker/8.5/start-container b/docker/8.5/start-container new file mode 100644 index 0000000..40c55df --- /dev/null +++ b/docker/8.5/start-container @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +if [ "$SUPERVISOR_PHP_USER" != "root" ] && [ "$SUPERVISOR_PHP_USER" != "sail" ]; then + echo "You should set SUPERVISOR_PHP_USER to either 'sail' or 'root'." + exit 1 +fi + +if [ ! -z "$WWWUSER" ]; then + usermod -u $WWWUSER sail +fi + +if [ ! -d /.composer ]; then + mkdir /.composer +fi + +chmod -R ugo+rw /.composer + +if [ $# -gt 0 ]; then + if [ "$SUPERVISOR_PHP_USER" = "root" ]; then + exec "$@" + else + exec gosu $WWWUSER "$@" + fi +else + exec /usr/bin/supervisord -c /etc/supervisor/conf.d/supervisord.conf +fi diff --git a/docker/8.5/supervisord.conf b/docker/8.5/supervisord.conf new file mode 100644 index 0000000..656da8a --- /dev/null +++ b/docker/8.5/supervisord.conf @@ -0,0 +1,14 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:php] +command=%(ENV_SUPERVISOR_PHP_COMMAND)s +user=%(ENV_SUPERVISOR_PHP_USER)s +environment=LARAVEL_SAIL="1" +stdout_logfile=/dev/stdout +stdout_logfile_maxbytes=0 +stderr_logfile=/dev/stderr +stderr_logfile_maxbytes=0