如何在路由器上搭建自己的個人網站(怎么在路由器里添加一個網址)
本文搭建個人網站采用了ONMP架構。
O = OpenWrt,即智能路由器的固件。
N = Nginx,輕量級的網頁服務器,也可選用uhttpd,lighttpd等,選nginx的原因只是因為我對它比較熟悉。
M = Mysql,目前新版已更名為Mariadb,一個數據庫服務器,可用于存儲網站數據,利于調用。
P = PHP7,編寫動態網頁的后臺語言程序之一,選用它是因為它背后有龐大、免費且開源的網站程序庫,拿來即可使用。
網上有很多關于ONMP架構的教程和腳本,但都已經過時,多數都安裝失敗。本文的搭建方法截止2021年5月5日依然有效,并且經過精簡,不安裝多余的軟件包。
搭建環境
OpenWrt版本:Lean固件LEDE R21.3.27
軟件源:官方(OpenWrt.Org)軟件源
如何更換軟件源看這篇:
需要用SSH登錄到命令行,不會的看:怎么用SSH登陸OpenWrt,服務端和客戶端的設置方法
先用SSH登錄路由器,下面正式開始。
安裝必要軟件
先更新一下軟件源,在命令行輸入以下命令并執行:
opkg update
更新完成后,安裝時區支持,否則之后服務器的時區設置會出錯。
opkg install zoneinfo-core zoneinfo-asia
安裝用戶和用戶組配置軟件:
opkg install shadow-groupadd shadow-useradd
這兩個軟件包將用來為系統增加用戶組和用戶,后面會用到。
創建www用戶
增加www用戶組:
groupadd www
在www用戶中增加www用戶:
useradd -g www www
現在我們創建了www用戶組,這個用戶組中有個名為www的用戶。之后的操作中,我們將讓nginx以www用戶的身份,僅在特定的目錄中運行網站服務,這樣,網站程序的所有操作不會影響到其它目錄。
nginx的安裝與配置
(1)安裝nginx
安裝命令:
opkg install nginx
安裝完成后,需要用vi打開并編輯配置文件:
vi /etc/nginx/nginx.conf
對照下列內容進行修改:
user www www; #配置nginx的用戶身份
server {
listen 8080; #讓nginx監聽8080端口,也可填任意沒被占用的端口。
server_name 192.168.1.1; #網站的域名,先配置成內網,填上你的路由器內網IP。
location / {
root /web; #存放網站的目錄,現在我們還沒創建,先填上
index index.html index.htm index.php; #默認首頁的名稱,需要用到php,所以加上index.php
}
location ~ \.php$ { #配置php解析,不用php這段可以不管
root /web; #同上,存放網站的目錄
fastcgi_pass 127.0.0.1:9000; #php解析服務器的地址,照填就行
fastcgi_index index.php; #php默認首頁
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; #腳本文件請求路徑
include fastcgi_params; #合并fastcgi的詳細配置文件
}
}
vi編輯文本的簡單提示:
vi編輯器有兩種工作模式,命令行模式和文本輸入模式,打開vi后默認是處于命令行模式。
用鍵盤↑,→,↓,←控制光標移動。
在命令行模式下,按“i”鍵進入文本輸入模式,即可像普通的文本一樣進行編輯。
在文本輸入模式下,按“ESC”進入命令行模式,這時不能編輯文本。
在命令行模式下,輸入“:wq”,對文本進行保存并退出,“:w”保存不退出,“:q!”不保存退出。
關于vi編輯器的用法更多請自行搜索,本文不過多講解。
(2)創建和配置網站目錄
創建目錄:
mkdir /web
更改目錄權限,讓nginx有權限可以操作:
chown -R www:www /web
(3)運行nginx服務并加入自啟動
兩條命令:
service nginx start
service nginx enable
好了,現在訪問192.168.1.1:8080,能不能看到有nginx字樣的網頁了呢?訪問的地址是根據你在nginx.conf中配置的內容,IP(域名):端口這樣的形式。
因為默認的網頁服務80端口已經被OpenWrt后臺管理占用,我們只能采用其它端口,以后可以通過端口轉發進行訪問,隱去 :8080 這部分不優雅的網址。
如果只想發布純Html,H5這樣的靜態網頁,下面的就不用看了。
如果想安裝博客、私有云這樣的程序,那么繼續。
mariadb(mysql)數據庫安裝與配置
(1)安裝數據庫
安裝命令:
opkg install mariadb-server-extra mariadb-client-extra
安裝完畢后,編輯 /etc/mysql/conf.d/50-server.cnf:
vi /etc/mysql/conf.d/50-server.cnf
對照下列內容進行修改:
user = root #數據庫管理員的用戶名
datadir = /mysql/databases #數據庫存放目錄,可自定義,但不要放到網站目錄下
tmpdir = /mysql/tmp #數據庫臨時文件存放目錄,同上
bind-address = 0.0.0.0 #允許遠程訪問#
(2)配置數據庫目錄
創建數據庫目錄:
mkdir /mysql/databases
mkdir /mysql/tmp
將數據安裝到 /mysql/databases,安裝命令:
mysql_install_db --force
啟動數據庫并加入自啟動:
service mysqld start
service mysqld enable
設置數據庫管理員密碼:
mysqladmin -u root password '設置為你自己的密碼'
(3)測試是否安裝成功
輸入 mysql -u root -p
執行之后,提示輸入密碼,輸入前面設置的管理員密碼。
登陸成功的話,命令行提示符會變成 “mysql>” 這樣,表示安裝成功,輸入 quit 退出即可。
舊的教程和腳本是安裝 mysql-server 這個軟件包。因為版本過時,軟件源自動匹配到 mariadb-server 進行安裝,但會導致軟件包安裝不全,需要同時安裝 mariadb-server-extra 和 mariadb-client-extra 這兩個包才對。
PHP7安裝與配置
PHP早已更新至PHP7了,官方軟件源中也只能安裝PHP7,那些還是PHP5的教程和腳本是絕對要安裝失敗的了。
而且不明白為什么那些教程和腳本中都要用spawn-fcgi來調用fastcgi,有親兒子php-fpm干嘛不用呢?并且php-fpm是集成了fastcgi的,只需安裝一個包就行了。
(1)安裝PHP7
命令:
opkg install php7 php7-fpm
(2)安裝 phh7 mariadb 擴展
命令:
opkg install php7-mod-mysqli php7-mod-pdo-mysql
(3)配置 php.ini
打開 /etc/php.ini
vi /etc/php.ini
對照下列內容修改:
[PHP]
doc_root = "/web" #網站存放目錄
user_dir = "/web" #隨意
extension_dir = "/usr/lib/php" #php擴展存放目錄,弄錯了會加載不到擴展
#擴展庫文件,把以下3項前面的#號去掉,其它的前面加上#號注釋
#以后若安裝了新的擴展,要在這里去掉相應的#號
extension=mysqli.so #原本是mysql.so,但mysql函數已被棄用,改用mysqli
extension=pdo.so #pdo擴展
extension=pdo-mysql.so #pdo的mysql函數
[Date]
date.timezone = Asia/Shanghai #更改時區,前面安裝的時區支持就是在這里用
#pdo配置
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket = /var/run/mysqld/mysqld.sock #連接數據庫的路徑
#這個區塊的所有mysql改為mysqli
[MySQLI]
mysqli.allow_local_infile = On
mysqli.allow_persistent = On
mysqli.cache_size = 2000
mysqli.max_persistent = -1
mysqli.max_links = -1
mysqli.default_port = 3306
mysqli.default_socket = /var/run/mysqld/mysqld.sock #連接數據庫的路徑
mysqli.default_host = 127.0.0.1 #數據庫地址,127.0.0.1或localhost均可
mysqli.default_user = root #數據庫管理員
mysqli.default_password = 'yourpassword' #數據庫管理員密碼
mysqli.connect_timeout = 60
mysqli.trace_mode = Off
(4)配置 php-fpm
打開 /etc/php7-fpm.d/www.conf:
vi /etc/php7-fpm.d/www.conf
對照下列內容修改:
user = www #php-fpm的運行身份
group = www #用戶組
listen = 127.0.0.1:9000 #php-fpm監聽服務端口,用于解析本機傳遞來的php代碼
(5)運行php-fpm并加入自啟動
service php7-fpm start
service php7-fpm enable
(6)測試 php7 是否正常運行
進入 /web 文件夾:
cd /web
創建名為 index.php 的文件:
vi index.php
在其中輸入代碼:
保存后,打開瀏覽器訪問192.168.1.1:8080,出現 phpinfo 網頁即表示安裝成功。
結語
至此,ONMP的基礎配置就算完成了。
當然,我們還沒有測試 php 與 mariadb 是否正常連接,我們可以用大神們寫好的探針來測試。度娘搜索“PHP探針",下載下來,并上傳到 /web 目錄中,訪問探針文件,就可以進行測試了。
還有,我們現在安裝的php功能是很弱的,比如禁用一些危險函數沒有設置,curl, iconv, json, xml等等擴展也還沒有安裝,可以使用以下命令:
opkg list | grep php7-mod-*
列出php7的所有擴展包,將列出的擴展包,用 opkg install 命令一個個安裝即可一勞永逸。
安裝擴展包之后,別忘了修改 php.ini,將 *.so 之前的 # 號去掉。
距離搭建個人網站,我們還剩下兩個關鍵步驟:
在本文搭建好的環境中安裝心儀的網站程序,下一篇我會以著名的 WordPress 博客程序進行安裝演示。
配置外網訪問。這需要用到DDNS或內網穿透,配置好外網訪問后,我們不管走到哪里都能訪問到自己路由器的所有服務,具體用處自行腦補吧。