最終更新 2 months ago

timmy revised this gist 2 months ago. Go to revision

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 revised this gist 2 months ago. Go to revision

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 revised this gist 3 months ago. Go to revision

1 file changed, 5 insertions

php.ini(file created)

@@ -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 revised this gist 3 months ago. Go to revision

1 file changed, 21 insertions

docker-compose.yml(file created)

@@ -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 revised this gist 3 months ago. Go to revision

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 revised this gist 3 months ago. Go to revision

1 file changed, 36 insertions

Dockerfile(file created)

@@ -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
Newer Older