本文原始鏈接如下:
「折騰」Docker 化部署 lighttpd 並安裝 Z-BlogPHP
寫在前邊#
在自己可控的前提下,探究「正確」的步驟。—— 沉冰浮水
起因是有位同學想在路由器裡安裝 Z-BlogPHP,環境是 lighttpd,然後偽靜態沒能正確生效;
IIS、Apache、Nginx 姑且都用過,lighttpd 也僅僅是知道其存在而已。
Docker 鏡像資源#
本想用另一個 ssh-nginx 鏡像項目修改下實現,好像沒成功,所以 Fork 了一個現成的;
wdssmq/alpine-lighttpd-php: Lighttpd and PHP running on Alpine Linux in a Docker image:
過程中遇到的一些小坑:
Call to undefined function simplexml_load_string()
解:
本身有安裝
php-xml
,需要額外安裝php-simplexml
;
另外還添加了php-mysqli
,「lighttpd.conf」規則中定義的mimetype
也不夠;
構建並使用#
數據庫及net_web
已經提前創建,參考「【折騰】Docker 化安裝 Z-BlogPHP_電腦網絡_沉冰浮水」;
# 創建目錄並拉取 Git
mkdir -p /root/Git/
cd /root/Git/
git clone [email protected]:wdssmq/alpine-lighttpd-php.git
# 構建鏡像
cd /root/Git/alpine-lighttpd-php
docker build -t wdssmq/lighttpd-php .
# 部署容器
DIR_lighttpd='/home/www/lighttpd'
PORT_lighttpd=8033
mkdir -p $DIR_lighttpd
cd ${DIR_lighttpd}
docker rm --force lighttpd-php
docker run --name lighttpd-php \
--net=net_web \
-p ${PORT_lighttpd}:80 \
-v $(pwd):/var/www \
-d wdssmq/lighttpd-php
# 「調試」查看日誌
docker logs lighttpd-php
# 「調試」進入容器內部
docker exec -it lighttpd-php /bin/sh
映射端口號為8033
,可自行更改,之後下載 Z-BlogPHP 程序到'/home/www/lighttpd'
目錄中即可;
具體命令行見:「下載 Z-BlogPHP - node.md」
關於偽靜態#
Z-BlogPHP 預置提供的偽靜態規則如下;
# Rewrite rules - Z-BlogPHP
url.rewrite-if-not-file = (
"^/(zb_install|zb_system|zb_users)/(.*)" => "$0",
"^/(.*.php)" => "$0",
"^/(.*)$" => "/index.php/$0"
)
雖然稍加研究便配置成功,並且預置在了上邊的鏡像構建中。然而怎麼解釋真心好難。
除了規則定義外,還需要先啟用相應的功能「模塊」,偽靜態對應的模塊是mod_rewrite
;
然而事實是,lighttpd 能夠解析執行 PHP 同樣需要開啟其相應的「模塊」,模塊名是mod_fastcgi
;
就結果來說,以下幾種形式都可以;
寫在一起:
server.modules = (
"mod_fastcgi",
# "mod_xxxx", # 其他啟用或未啟用的模塊,順序理論上不重要
"mod_rewrite"
)
追加寫法 1:
# 顯示定義一次
server.modules = (
"mod_fastcgi", # 作為最後一項時能不能有「,」並不明確;
# "mod_xxxxx", # 其他啟用或未啟用的模塊,順序理論上不重要
)
# 可能有其他定義或註釋或並沒有
# 追加並合併
server.modules += ("mod_rewrite")
追加寫法 2:
# 追加並合併,在此之前可能已經定義過 server.modules,也可能沒有;
server.modules += ("mod_fastcgi")
# 可能有其他定義或註釋或並沒有
# 追加並合併
server.modules += ("mod_rewrite")
所以最終「正確」的最簡步驟只能是:
在 PHP 本身能夠正確執行的前提下,並且已有定義中並末開啟mod_rewrite
模塊,那麼請嘗試在原有「lighttpd.conf」文件的最末尾「另起一行」「追加」以下內容以開啟偽靜態:
# 啟用 Rewrite 模塊
server.modules += ("mod_rewrite")
# Rewrite rules - Z-BlogPHP
url.rewrite-if-not-file = (
"^/(zb_install|zb_system|zb_users)/(.*)" => "$0",
"^/(.*.php)" => "$0",
"^/(.*)$" => "/index.php/$0"
)
如果仍然無法成功,作為「教程」,並不能預見你實際操作時會犯下的錯誤,以及實際環境中會影響結果的差異性,從數量意義上,可能性真的太多太多了;
Git 又忘記設置用戶信息了#
git config --global user.name author #將用戶名設為author
git config --global user.email [email protected] #將用戶郵箱設為[email protected]
git config user.name nickname #將用戶名設為nickname
git config user.email [email protected] #將用戶郵箱設為[email protected]