docker wordpress 的 Nginx 配置:php8.0-fpm-alpine
我的目標是在主機 Nginx 配置中創建一個伺服器塊,作為 wordpress php docker 容器的 fastcgi 前端。
也就是說nginx伺服器不在容器中,我也不希望它在容器中。我也不在乎 wordpress 站點的靜態文件是否以某種方式直接由 Nginx 提供——如果讓容器為它們提供服務更容易,那麼這就是我想做的。
我有一個使用 wordpress:php8.0-fpm-alpine 圖像執行的 docker 容器。到目前為止,我只嘗試了 Nginx 提供的伺服器塊:
upstream php { server unix:/tmp/php-cgi.socket; server 127.0.0.1:9000; } server { ## Your website name goes here. server_name domain.tld; ## Your only path reference. root /var/www/wordpress; ## This should be in your http block and if it is, it's not needed here. index index.php; location = /favicon.ico { log_not_found off; access_log off; } location = /robots.txt { allow all; log_not_found off; access_log off; } location / { # This is cool because no php is touched for static content. # include the "?$args" part so non-default permalinks doesn't break when using query string try_files $uri $uri/ /index.php?$args; } location ~ \.php$ { #NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini include fastcgi_params; fastcgi_intercept_errors on; fastcgi_pass php; #The following parameter can be also included in fastcgi_params file fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ { expires max; log_not_found off; } }
以及連結的建議範例:https ://gist.github.com/md5/d9206eacb5a0ff5d6be0#file-wordpress-fpm-conf
server { listen 80; server_name localhost; root /var/www/html; index index.php; location / { try_files $uri $uri/ /index.php?$args; } rewrite /wp-admin$ $scheme://$host$uri/ permanent; location ~ [^/]\.php(/|$) { fastcgi_split_path_info ^(.+?\.php)(/.*)$; if (!-f $document_root$fastcgi_script_name) { return 404; } include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info; fastcgi_pass fpm:9000; fastcgi_index index.php; } }
在這兩個範例中,我都根據需要替換了我的域和 php 伺服器主機名/套接字。但是,兩者都清楚地使用對 wordpress 靜態文件的直接訪問。我也將如何轉發這些請求?這能解決問題嗎?我實際上不知道 fpm-alpine 圖像提供其靜態內容,但我認為它確實如此。
PHP-FPM 僅提供 PHP 內容。大多數範例給出一個
-v
標誌來將主機上的路徑/卷映射到 docker 容器內的路徑第一個問題是“docker 容器是否響應非 CGI 請求”,這又回到“我也不關心 wordpress 站點的靜態文件是否以某種方式直接由 Nginx 提供”
docker容器是在nginx主機還是遠端主機上執行?如果它是本地的,那麼改變
servername
,root
在第二個例子中是要走的路。如果內容在遠端伺服器上,那麼您需要使用 NFS 之類的東西與 Nginx 伺服器共享內容。還有其他方法,但它們是最簡單的編輯 1
我更改了伺服器名和根目錄,並且能夠訪問這些文件。如果我做得對,我有點擔心。
那是對的
有沒有辦法確保使用更新版本的 docker 鏡像總是覆蓋卷?
Docker 將使用相關主機上的映像。你沒有在那裡提供任何細節,但通常你需要做
docker stop <name>
&&docker pull <new image>
&&docker run <new image>
注意圖像可能是latest
或其他一些滾動標籤。EDIT2(來自評論回复:卷是否會被覆蓋)
這涉及到你的跑步方式。該選項未涵蓋的所有內容都
-v
將失去。IIRC wordpress 有一個wp-content
,可能是一個wp-includes
文件夾和 sql 配置。因此,我希望有 2 個-v
選項可以將本地文件夾以及一堆-e
或一個--env-file
.這些捲和環境未涵蓋的所有內容都將替換為新容器