沉冰浮水

沉冰浮水

做最终到的事,成为最终成为的人!
github
bilibili
mastodon
zhihu
douban

「折騰」Docker 化部署 lighttpd 並安裝 Z-BlogPHP

本文原始鏈接如下:

「折騰」Docker 化部署 lighttpd 並安裝 Z-BlogPHP

https://www.wdssmq.com/post/20210804429.html

寫在前邊#

在自己可控的前提下,探究「正確」的步驟。—— 沉冰浮水

起因是有位同學想在路由器裡安裝 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]
載入中......
此文章數據所有權由區塊鏈加密技術和智能合約保障僅歸創作者所有。