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