timmy zrewidował ten Gist 2 months ago. Przejdź do rewizji
2 files changed, 56 insertions, 9 deletions
Dockerfile
| @@ -1,21 +1,19 @@ | |||
| 1 | - | # 強制指定使用 bookworm (Debian 12) 基礎映像檔,避免 Trixie 的套件衝突 | |
| 1 | + | # 強制指定使用 bookworm (Debian 12) 基礎映像檔 | |
| 2 | 2 | FROM php:8.2-apache-bookworm | |
| 3 | 3 | ||
| 4 | 4 | SHELL ["/bin/bash", "-o", "pipefail", "-c"] | |
| 5 | 5 | ||
| 6 | - | # 1. 修正網路連線並安裝系統相依套件 | |
| 6 | + | # 1. 修正網路連線並安裝系統相依套件 (使用台灣 NCHC 鏡像站) | |
| 7 | 7 | RUN rm -f /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list && \ | |
| 8 | 8 | printf "deb https://free.nchc.org.tw/debian bookworm main contrib non-free non-free-firmware\n\ | |
| 9 | 9 | deb https://free.nchc.org.tw/debian bookworm-updates main contrib non-free non-free-firmware\n\ | |
| 10 | 10 | deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware\n" > /etc/apt/sources.list && \ | |
| 11 | - | # 第一次 update 必須跳過驗證 | |
| 12 | 11 | apt-get -o Acquire::https::Verify-Peer=false update && \ | |
| 13 | 12 | apt-get install -y --no-install-recommends -o Acquire::https::Verify-Peer=false \ | |
| 14 | 13 | ca-certificates \ | |
| 15 | 14 | curl \ | |
| 16 | 15 | gnupg \ | |
| 17 | 16 | gnupg2 && \ | |
| 18 | - | # 第二步:有了證書後安裝其餘套件(Bookworm 絕對不會有 libssl 版本衝突) | |
| 19 | 17 | apt-get update && apt-get install -y --no-install-recommends \ | |
| 20 | 18 | lsb-release \ | |
| 21 | 19 | libfreetype6-dev \ | |
| @@ -51,13 +49,13 @@ RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ | |||
| 51 | 49 | && docker-php-ext-install -j"$(nproc)" \ | |
| 52 | 50 | gd exif gmp mysqli pdo_mysql pdo_pgsql pgsql pdo_sqlite opcache | |
| 53 | 51 | ||
| 54 | - | # 4. 安裝 PECL 擴充 | |
| 52 | + | # 4. 安裝 PECL 擴充 (xmlrpc, sqlsrv, pdo_sqlsrv, memcached) | |
| 55 | 53 | RUN pecl install channel://pecl.php.net/xmlrpc-1.0.0RC3 \ | |
| 56 | 54 | && pecl install sqlsrv pdo_sqlsrv \ | |
| 57 | 55 | && pecl install memcached \ | |
| 58 | 56 | && docker-php-ext-enable xmlrpc sqlsrv pdo_sqlsrv memcached | |
| 59 | 57 | ||
| 60 | - | # SQL Server TLS workaround | |
| 58 | + | # 5. SQL Server TLS workaround (修正舊版 SQL Server 連線問題) | |
| 61 | 59 | RUN echo 'openssl_conf = default_conf' > /etc/ssl/openssl_custom.cnf \ | |
| 62 | 60 | && echo '[default_conf]' >> /etc/ssl/openssl_custom.cnf \ | |
| 63 | 61 | && echo 'ssl_conf = ssl_sect' >> /etc/ssl/openssl_custom.cnf \ | |
| @@ -69,5 +67,14 @@ RUN echo 'openssl_conf = default_conf' > /etc/ssl/openssl_custom.cnf \ | |||
| 69 | 67 | ||
| 70 | 68 | ENV OPENSSL_CONF=/etc/ssl/openssl_custom.cnf | |
| 71 | 69 | ||
| 70 | + | # 6. 設定 Apache Log 獨立目錄 (不在 /var/www/html 內) | |
| 71 | + | RUN mkdir -p /var/log/apache2/custom && chown -R www-data:www-data /var/log/apache2/custom | |
| 72 | + | ||
| 73 | + | # 修改 Apache 預設站台設定,指向自定義 Log 路徑 | |
| 74 | + | RUN sed -i 's|${APACHE_LOG_DIR}/access.log|/var/log/apache2/custom/access.log|g' /etc/apache2/sites-available/000-default.conf && \ | |
| 75 | + | sed -i 's|${APACHE_LOG_DIR}/error.log|/var/log/apache2/custom/error.log|g' /etc/apache2/sites-available/000-default.conf | |
| 76 | + | ||
| 72 | 77 | WORKDIR /var/www/html | |
| 78 | + | ||
| 79 | + | # 啟用 Apache Rewrite 模組 | |
| 73 | 80 | RUN a2enmod rewrite | |
docker-compose.yml
| @@ -1,4 +1,25 @@ | |||
| 1 | 1 | services: | |
| 2 | + | # Nginx Proxy Manager (站在最前面的門神) | |
| 3 | + | app: | |
| 4 | + | image: 'jc21/nginx-proxy-manager:latest' | |
| 5 | + | container_name: nginxproxymanager | |
| 6 | + | restart: unless-stopped | |
| 7 | + | ports: | |
| 8 | + | - '80:80' | |
| 9 | + | - '443:443' | |
| 10 | + | - '81:81' | |
| 11 | + | environment: | |
| 12 | + | TZ: 'Asia/Taipei' | |
| 13 | + | DISABLE_IPV6: 'true' | |
| 14 | + | volumes: | |
| 15 | + | - ./data:/data | |
| 16 | + | - ./letsencrypt:/etc/letsencrypt | |
| 17 | + | - /etc/localtime:/etc/localtime:ro | |
| 18 | + | dns: | |
| 19 | + | - 8.8.8.8 | |
| 20 | + | - 1.1.1.1 | |
| 21 | + | ||
| 22 | + | # PHP Apache 服務 | |
| 2 | 23 | php: | |
| 3 | 24 | image: timmy/php_base:v1.0 | |
| 4 | 25 | container_name: php | |
| @@ -6,16 +27,35 @@ services: | |||
| 6 | 27 | tty: true | |
| 7 | 28 | stdin_open: true | |
| 8 | 29 | ports: | |
| 9 | - | - "8888:80" | |
| 30 | + | - "8001:80" | |
| 10 | 31 | volumes: | |
| 11 | - | - "./html:/var/www/html" # 將目前目錄下的 html 資料夾對映進去 | |
| 32 | + | - "./html:/var/www/html" | |
| 33 | + | - "./logs:/var/log/apache2/custom" # 映射到自定義 Log 目錄 | |
| 34 | + | - /etc/localtime:/etc/localtime:ro | |
| 12 | 35 | environment: | |
| 36 | + | TZ: 'Asia/Taipei' | |
| 13 | 37 | MEMCACHED_HOST: memcached | |
| 14 | 38 | MEMCACHED_PORT: 11211 | |
| 15 | 39 | depends_on: | |
| 16 | 40 | - memcached | |
| 17 | 41 | ||
| 42 | + | # 資料庫管理工具 | |
| 43 | + | adminer: | |
| 44 | + | image: adminer | |
| 45 | + | container_name: adminer | |
| 46 | + | restart: always | |
| 47 | + | ports: | |
| 48 | + | - "8080:8080" | |
| 49 | + | environment: | |
| 50 | + | TZ: 'Asia/Taipei' | |
| 51 | + | volumes: | |
| 52 | + | - /etc/localtime:/etc/localtime:ro | |
| 53 | + | ||
| 54 | + | # 快取服務 | |
| 18 | 55 | memcached: | |
| 19 | 56 | image: memcached:1.6 | |
| 20 | 57 | command: ["-m", "64", "-p", "11211", "-vv"] | |
| 21 | - | ||
| 58 | + | environment: | |
| 59 | + | TZ: 'Asia/Taipei' | |
| 60 | + | volumes: | |
| 61 | + | - /etc/localtime:/etc/localtime:ro | |
timmy zrewidował ten Gist 2 months ago. Przejdź do rewizji
1 file changed, 19 insertions, 10 deletions
Dockerfile
| @@ -1,13 +1,23 @@ | |||
| 1 | - | FROM php:8.2-apache | |
| 1 | + | # 強制指定使用 bookworm (Debian 12) 基礎映像檔,避免 Trixie 的套件衝突 | |
| 2 | + | FROM php:8.2-apache-bookworm | |
| 2 | 3 | ||
| 3 | 4 | SHELL ["/bin/bash", "-o", "pipefail", "-c"] | |
| 4 | 5 | ||
| 5 | - | # 1. 安裝系統相依套件 | |
| 6 | - | RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| 7 | - | gnupg2 \ | |
| 6 | + | # 1. 修正網路連線並安裝系統相依套件 | |
| 7 | + | RUN rm -f /etc/apt/sources.list.d/debian.sources /etc/apt/sources.list && \ | |
| 8 | + | printf "deb https://free.nchc.org.tw/debian bookworm main contrib non-free non-free-firmware\n\ | |
| 9 | + | deb https://free.nchc.org.tw/debian bookworm-updates main contrib non-free non-free-firmware\n\ | |
| 10 | + | deb https://security.debian.org/debian-security bookworm-security main contrib non-free non-free-firmware\n" > /etc/apt/sources.list && \ | |
| 11 | + | # 第一次 update 必須跳過驗證 | |
| 12 | + | apt-get -o Acquire::https::Verify-Peer=false update && \ | |
| 13 | + | apt-get install -y --no-install-recommends -o Acquire::https::Verify-Peer=false \ | |
| 14 | + | ca-certificates \ | |
| 8 | 15 | curl \ | |
| 16 | + | gnupg \ | |
| 17 | + | gnupg2 && \ | |
| 18 | + | # 第二步:有了證書後安裝其餘套件(Bookworm 絕對不會有 libssl 版本衝突) | |
| 19 | + | apt-get update && apt-get install -y --no-install-recommends \ | |
| 9 | 20 | lsb-release \ | |
| 10 | - | ca-certificates \ | |
| 11 | 21 | libfreetype6-dev \ | |
| 12 | 22 | libjpeg62-turbo-dev \ | |
| 13 | 23 | libpng-dev \ | |
| @@ -28,21 +38,20 @@ RUN curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \ | |||
| 28 | 38 | | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg \ | |
| 29 | 39 | && echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" \ | |
| 30 | 40 | > /etc/apt/sources.list.d/mssql-release.list \ | |
| 31 | - | && apt-get update \ | |
| 32 | - | && ACCEPT_EULA=Y apt-get install -y --no-install-recommends \ | |
| 41 | + | && apt-get update && ACCEPT_EULA=Y apt-get install -y --no-install-recommends \ | |
| 33 | 42 | msodbcsql18 \ | |
| 34 | 43 | mssql-tools18 \ | |
| 35 | 44 | && rm -rf /var/lib/apt/lists/* | |
| 36 | 45 | ||
| 37 | 46 | ENV PATH="$PATH:/opt/mssql-tools18/bin" | |
| 38 | 47 | ||
| 39 | - | # 3. 安裝 PHP 內建擴充(加上 opcache) | |
| 48 | + | # 3. 安裝 PHP 內建擴充 | |
| 40 | 49 | RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ | |
| 41 | 50 | && docker-php-ext-configure gmp \ | |
| 42 | 51 | && docker-php-ext-install -j"$(nproc)" \ | |
| 43 | 52 | gd exif gmp mysqli pdo_mysql pdo_pgsql pgsql pdo_sqlite opcache | |
| 44 | 53 | ||
| 45 | - | # 4. 安裝 PECL 擴充(加上 memcached) | |
| 54 | + | # 4. 安裝 PECL 擴充 | |
| 46 | 55 | RUN pecl install channel://pecl.php.net/xmlrpc-1.0.0RC3 \ | |
| 47 | 56 | && pecl install sqlsrv pdo_sqlsrv \ | |
| 48 | 57 | && pecl install memcached \ | |
| @@ -61,4 +70,4 @@ RUN echo 'openssl_conf = default_conf' > /etc/ssl/openssl_custom.cnf \ | |||
| 61 | 70 | ENV OPENSSL_CONF=/etc/ssl/openssl_custom.cnf | |
| 62 | 71 | ||
| 63 | 72 | WORKDIR /var/www/html | |
| 64 | - | RUN a2enmod rewrite | |
| 73 | + | RUN a2enmod rewrite | |
timmy zrewidował ten Gist 3 months ago. Przejdź do rewizji
1 file changed, 5 insertions
php.ini(stworzono plik)
| @@ -0,0 +1,5 @@ | |||
| 1 | + | max_execution_time = 120 | |
| 2 | + | memory_limit = 256M | |
| 3 | + | post_max_size = 80M | |
| 4 | + | upload_max_filesize = 80M | |
| 5 | + | date.timezone = "Asia/Taipei" | |
timmy zrewidował ten Gist 3 months ago. Przejdź do rewizji
1 file changed, 21 insertions
docker-compose.yml(stworzono plik)
| @@ -0,0 +1,21 @@ | |||
| 1 | + | services: | |
| 2 | + | php: | |
| 3 | + | image: timmy/php_base:v1.0 | |
| 4 | + | container_name: php | |
| 5 | + | restart: always | |
| 6 | + | tty: true | |
| 7 | + | stdin_open: true | |
| 8 | + | ports: | |
| 9 | + | - "8888:80" | |
| 10 | + | volumes: | |
| 11 | + | - "./html:/var/www/html" # 將目前目錄下的 html 資料夾對映進去 | |
| 12 | + | environment: | |
| 13 | + | MEMCACHED_HOST: memcached | |
| 14 | + | MEMCACHED_PORT: 11211 | |
| 15 | + | depends_on: | |
| 16 | + | - memcached | |
| 17 | + | ||
| 18 | + | memcached: | |
| 19 | + | image: memcached:1.6 | |
| 20 | + | command: ["-m", "64", "-p", "11211", "-vv"] | |
| 21 | + | ||
timmy zrewidował ten Gist 3 months ago. Przejdź do rewizji
1 file changed, 44 insertions, 16 deletions
Dockerfile
| @@ -1,36 +1,64 @@ | |||
| 1 | 1 | FROM php:8.2-apache | |
| 2 | 2 | ||
| 3 | - | # 1. 更新 apt-get 並安裝相依套件 | |
| 4 | - | # 將所有 apt-get 操作合併,並在最後清理,以減小 Image 體積 | |
| 3 | + | SHELL ["/bin/bash", "-o", "pipefail", "-c"] | |
| 4 | + | ||
| 5 | + | # 1. 安裝系統相依套件 | |
| 5 | 6 | RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| 7 | + | gnupg2 \ | |
| 8 | + | curl \ | |
| 9 | + | lsb-release \ | |
| 10 | + | ca-certificates \ | |
| 6 | 11 | libfreetype6-dev \ | |
| 7 | 12 | libjpeg62-turbo-dev \ | |
| 8 | - | libjpeg-dev \ | |
| 9 | 13 | libpng-dev \ | |
| 10 | 14 | libgmp-dev \ | |
| 11 | 15 | libxml2-dev \ | |
| 12 | 16 | libcurl4-gnutls-dev \ | |
| 13 | 17 | libmariadb-dev-compat \ | |
| 14 | 18 | libmariadb-dev \ | |
| 19 | + | libpq-dev \ | |
| 20 | + | libsqlite3-dev \ | |
| 21 | + | unixodbc-dev \ | |
| 22 | + | libmemcached-dev \ | |
| 23 | + | zlib1g-dev \ | |
| 24 | + | && rm -rf /var/lib/apt/lists/* | |
| 25 | + | ||
| 26 | + | # 2. 安裝微軟 ODBC Driver for SQL Server | |
| 27 | + | RUN curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \ | |
| 28 | + | | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg \ | |
| 29 | + | && echo "deb [arch=amd64,arm64 signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" \ | |
| 30 | + | > /etc/apt/sources.list.d/mssql-release.list \ | |
| 31 | + | && apt-get update \ | |
| 32 | + | && ACCEPT_EULA=Y apt-get install -y --no-install-recommends \ | |
| 33 | + | msodbcsql18 \ | |
| 34 | + | mssql-tools18 \ | |
| 15 | 35 | && rm -rf /var/lib/apt/lists/* | |
| 16 | 36 | ||
| 17 | - | # 2. 配置並安裝 PHP 擴充功能 | |
| 18 | - | # 將多個 docker-php-ext-install 合併執行 | |
| 37 | + | ENV PATH="$PATH:/opt/mssql-tools18/bin" | |
| 38 | + | ||
| 39 | + | # 3. 安裝 PHP 內建擴充(加上 opcache) | |
| 19 | 40 | RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ | |
| 20 | 41 | && docker-php-ext-configure gmp \ | |
| 21 | - | && docker-php-ext-install -j$(nproc) gd exif gmp mysqli pdo_mysql | |
| 42 | + | && docker-php-ext-install -j"$(nproc)" \ | |
| 43 | + | gd exif gmp mysqli pdo_mysql pdo_pgsql pgsql pdo_sqlite opcache | |
| 22 | 44 | ||
| 23 | - | # 3. 安裝 XML-RPC 擴展 (透過 PECL) | |
| 45 | + | # 4. 安裝 PECL 擴充(加上 memcached) | |
| 24 | 46 | RUN pecl install channel://pecl.php.net/xmlrpc-1.0.0RC3 \ | |
| 25 | - | && docker-php-ext-enable xmlrpc | |
| 47 | + | && pecl install sqlsrv pdo_sqlsrv \ | |
| 48 | + | && pecl install memcached \ | |
| 49 | + | && docker-php-ext-enable xmlrpc sqlsrv pdo_sqlsrv memcached | |
| 26 | 50 | ||
| 27 | - | # 4. 複製 php.ini 設定檔 | |
| 28 | - | #修正:官方 Image 的設定檔路徑應為 /usr/local/etc/php/php.ini | |
| 29 | - | # 注意:請確保你的本地 php.ini 檔案中,沒有指定錯誤的 extension_dir | |
| 30 | - | COPY php.ini /usr/local/etc/php/php.ini | |
| 51 | + | # SQL Server TLS workaround | |
| 52 | + | RUN echo 'openssl_conf = default_conf' > /etc/ssl/openssl_custom.cnf \ | |
| 53 | + | && echo '[default_conf]' >> /etc/ssl/openssl_custom.cnf \ | |
| 54 | + | && echo 'ssl_conf = ssl_sect' >> /etc/ssl/openssl_custom.cnf \ | |
| 55 | + | && echo '[ssl_sect]' >> /etc/ssl/openssl_custom.cnf \ | |
| 56 | + | && echo 'system_default = system_default_sect' >> /etc/ssl/openssl_custom.cnf \ | |
| 57 | + | && echo '[system_default_sect]' >> /etc/ssl/openssl_custom.cnf \ | |
| 58 | + | && echo 'CipherString = DEFAULT@SECLEVEL=0' >> /etc/ssl/openssl_custom.cnf \ | |
| 59 | + | && echo 'Options = UnsafeLegacyRenegotiation' >> /etc/ssl/openssl_custom.cnf | |
| 31 | 60 | ||
| 32 | - | # 5. 設定工作目錄 | |
| 33 | - | WORKDIR /var/www/html | |
| 61 | + | ENV OPENSSL_CONF=/etc/ssl/openssl_custom.cnf | |
| 34 | 62 | ||
| 35 | - | # 6. 啟用 Apache 的 rewrite 模組 (通常 Web 專案都需要) | |
| 36 | - | RUN a2enmod rewrite | |
| 63 | + | WORKDIR /var/www/html | |
| 64 | + | RUN a2enmod rewrite | |
timmy zrewidował ten Gist 3 months ago. Przejdź do rewizji
1 file changed, 36 insertions
Dockerfile(stworzono plik)
| @@ -0,0 +1,36 @@ | |||
| 1 | + | FROM php:8.2-apache | |
| 2 | + | ||
| 3 | + | # 1. 更新 apt-get 並安裝相依套件 | |
| 4 | + | # 將所有 apt-get 操作合併,並在最後清理,以減小 Image 體積 | |
| 5 | + | RUN apt-get update && apt-get install -y --no-install-recommends \ | |
| 6 | + | libfreetype6-dev \ | |
| 7 | + | libjpeg62-turbo-dev \ | |
| 8 | + | libjpeg-dev \ | |
| 9 | + | libpng-dev \ | |
| 10 | + | libgmp-dev \ | |
| 11 | + | libxml2-dev \ | |
| 12 | + | libcurl4-gnutls-dev \ | |
| 13 | + | libmariadb-dev-compat \ | |
| 14 | + | libmariadb-dev \ | |
| 15 | + | && rm -rf /var/lib/apt/lists/* | |
| 16 | + | ||
| 17 | + | # 2. 配置並安裝 PHP 擴充功能 | |
| 18 | + | # 將多個 docker-php-ext-install 合併執行 | |
| 19 | + | RUN docker-php-ext-configure gd --with-freetype --with-jpeg \ | |
| 20 | + | && docker-php-ext-configure gmp \ | |
| 21 | + | && docker-php-ext-install -j$(nproc) gd exif gmp mysqli pdo_mysql | |
| 22 | + | ||
| 23 | + | # 3. 安裝 XML-RPC 擴展 (透過 PECL) | |
| 24 | + | RUN pecl install channel://pecl.php.net/xmlrpc-1.0.0RC3 \ | |
| 25 | + | && docker-php-ext-enable xmlrpc | |
| 26 | + | ||
| 27 | + | # 4. 複製 php.ini 設定檔 | |
| 28 | + | #修正:官方 Image 的設定檔路徑應為 /usr/local/etc/php/php.ini | |
| 29 | + | # 注意:請確保你的本地 php.ini 檔案中,沒有指定錯誤的 extension_dir | |
| 30 | + | COPY php.ini /usr/local/etc/php/php.ini | |
| 31 | + | ||
| 32 | + | # 5. 設定工作目錄 | |
| 33 | + | WORKDIR /var/www/html | |
| 34 | + | ||
| 35 | + | # 6. 啟用 Apache 的 rewrite 模組 (通常 Web 專案都需要) | |
| 36 | + | RUN a2enmod rewrite | |