小伙伴們大家好。
在往期的文章里,我們已經(jīng)分享過多期有關(guān)應(yīng)用部署相關(guān)的主題,比如:前后端分離的項(xiàng)目、各種靜態(tài)博客框架、自建知識(shí)庫網(wǎng)站等等。
聊到個(gè)人網(wǎng)站的建站,靜態(tài)網(wǎng)站的優(yōu)勢(shì)很明顯,那就是速度快、成本低,但是缺點(diǎn)也很明顯,功能單一,有時(shí)候不太靈活。我們都知道,WordPress是一個(gè)應(yīng)用廣泛的建站工具,但是今天我們不用這個(gè),而是選用另外一個(gè)顏值更高的建站神器。
因此本文將從0到1,部署一個(gè)更高顏值的公網(wǎng)動(dòng)態(tài)個(gè)人網(wǎng)站,操作簡單,顏值高,5分鐘就可以搞定!
不過在此之前,我們要先做幾個(gè)前置工作,準(zhǔn)備一點(diǎn)小素材。
個(gè)人使用的話,一般沒有人會(huì)去買那種真實(shí)的物理實(shí)體服務(wù)器。現(xiàn)在比較普遍的選擇自然就是云主機(jī)了,而且一般來說還會(huì)附帶一個(gè)公網(wǎng)IP,所以使用起來非常方便。
稍后我們會(huì)從購買云服務(wù)器開始,一步步進(jìn)行展示。
好,有了服務(wù)器之后,怎么去遠(yuǎn)程管理?如何去操作服務(wù)器?怎樣進(jìn)行文件交互呢?
這時(shí)候就需要一些服務(wù)器的連接和管理軟件,常用的有兩種:
第一個(gè)是SSH工具。
簡單點(diǎn)理解,這就是一個(gè)終端工具,通過它,我們可以連到服務(wù)器上敲命令。
如果是macOS平臺(tái),像SecureCRT、Terminus、Tabby等工具都挺常用:
而如果是Windows系統(tǒng),常見的像MobaXterm、XShell、FinalShell、Tabby等也都可以搞定。
第二個(gè)工具就是SFTP工具。
簡單點(diǎn)理解,通過它就可以方便地實(shí)現(xiàn)往服務(wù)器上傳或者下載文件。
macOS平臺(tái)下的一個(gè)經(jīng)典工具那就是Tansmit:
同理,如果是Windows系統(tǒng)的話,像MobaXterm、Tabby、FileZilla等軟件,同樣可以搞定一切。
其實(shí)服務(wù)器和電腦一樣,拿到一個(gè)新服務(wù)器,也要在上面裝軟件、裝環(huán)境,比如常見像:Python環(huán)境、Java環(huán)境、Node環(huán)境、MySQL、Redis、Nginx、Maven等等,這些都是服務(wù)器上的基礎(chǔ)軟件環(huán)境和設(shè)施。
提前裝好軟件,準(zhǔn)備好環(huán)境,后面就可以隨用隨連,非常方便了!
關(guān)于這部分呢,之前咱們這里就已經(jīng)分享過一個(gè)PDF版本的《服務(wù)器編程環(huán)境安裝+軟件設(shè)施部署》手冊(cè)。
這應(yīng)該說是一個(gè)事無巨細(xì)的PDF文檔,把常見編程環(huán)境和基礎(chǔ)軟件設(shè)施的安裝過程給詳細(xì)地記錄下來了。這樣大家以后在裝環(huán)境的時(shí)候,就不用漫天去找各種博客、帖子參考了。
如果需要該P(yáng)DF文檔手冊(cè)的小伙伴,轉(zhuǎn)發(fā)本文后私信【612】三個(gè)數(shù)字即可無償獲取了
最后一步,就是準(zhǔn)備好網(wǎng)站的源碼,或者編譯打包好的jar包,在已經(jīng)準(zhǔn)備好環(huán)境的服務(wù)器上進(jìn)行部署即可。
聊到動(dòng)態(tài)個(gè)人網(wǎng)站或者說博客,比較了一堆網(wǎng)站建站系統(tǒng)之后,發(fā)現(xiàn)Halo應(yīng)該是其中顏值比較高的一個(gè)!并且還是開源的,代碼我都整理好的,需要的同學(xué)直接私信【halo】四個(gè)字母即可
而且這么多年它一直在更新,并且部署超級(jí)簡單,文檔全面,看過源碼的小伙伴應(yīng)該知道,它在源碼這塊也寫得非常易懂,對(duì)于初學(xué)者來說也算是一個(gè)學(xué)習(xí)和練手的好項(xiàng)目了。
用它來進(jìn)行個(gè)人建站,對(duì)外展示,還是非常不錯(cuò)的。
這地方我們提前將個(gè)人網(wǎng)站的「安裝包+主題包」先提前下載下來了。
下文就將其部署起來,成為個(gè)站。
因?yàn)槲易约阂呀?jīng)有好幾臺(tái)云服務(wù)器了,但是都跑了不同的服務(wù)在上面,比如我自己的:
等等,這些都跑在已有的服務(wù)器上面了。
所以這次準(zhǔn)備重新再買一臺(tái)云服務(wù)器用于演示,正好最近我又有兩個(gè)需要部署的小應(yīng)用,所以這樣正好就趕上了。
我們都知道,現(xiàn)在提供云服務(wù)器的廠商實(shí)在太多了:
五花八門,多到讓人眼花繚亂。自己選擇就可以了
注意,本文所用云服務(wù)器的版本為:
由于Halo對(duì)服務(wù)器環(huán)境的要求是需要Java 11環(huán)境即可,所以很簡單,一行命令即可在服務(wù)器上安裝好Java環(huán)境:
yum install -y java-11-openjdk
然后使用如下命令來檢查一下安裝是否成功即可:
java -version
如果安裝成功,則會(huì)打印出類似如下的輸出:
openjdk version "11.0.14.1" 2022-02-08 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.14.1+1-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.14.1+1-LTS, mixed mode, sharing)
這一步就更簡單了,利用上文的SFTP工具將網(wǎng)站安裝包上傳到服務(wù)器上的某個(gè)文件夾,然后在命令行中執(zhí)行如下命令,將其運(yùn)行起來即可。
nohup java -jar halo-1.4.17.jar &
接下來瀏覽器中訪問:your_ip:8090,就會(huì)自動(dòng)跳轉(zhuǎn)到首次的安裝向?qū)ы撁妫?/p>
設(shè)置完成之后,再重新登錄,就可以進(jìn)入到網(wǎng)站后臺(tái)管理頁面了:
然后接下來就可以在后臺(tái)添加內(nèi)容、更換主題、修改資料等等。
比如這地方,我們?cè)诤笈_(tái)寫了幾篇文章之后并且更換了主題之后,網(wǎng)站的主頁變成了下面的樣子,效果還是可以的。
如果每次都像上面一樣通過操作命令行操作jar包的方式來啟停個(gè)人網(wǎng)站實(shí)屬不太方便,所以最好還是將其做成一個(gè)服務(wù),通過systemctl命令來進(jìn)行操作比較符合人體工學(xué)。
我們準(zhǔn)備一個(gè)website.service文件,內(nèi)容如下:
[Unit]
Description=Personal Website Service
After=network-online.target
[Service]
Type=simple
ExecStart=/usr/bin/java -jar /root/website/halo-1.4.17.jar
ExecStop=/bin/kill -s QUIT $MAINPID
Restart=always
StandOutput=syslog
StandError=inherit
[Install]
WantedBy=multi-user.target
這個(gè)配置文件內(nèi)容非常好理解,主要就是設(shè)置好ExecStart所指向的指令內(nèi)容,通過它來運(yùn)行啟動(dòng)個(gè)人網(wǎng)站。
然后將其置于服務(wù)器的/etc/systemd/system目錄下。
systemctl daemon-reload
systemctl start website
systemctl stop website
一般來說,我們不會(huì)讓這個(gè)jar包啟動(dòng)的這個(gè)8090的網(wǎng)站服務(wù)去直面用戶,而是在中間再加一層代理服務(wù)器做轉(zhuǎn)發(fā),常用的當(dāng)屬Nginx服務(wù)器。
因?yàn)镹ginx除了占用資源小、運(yùn)行穩(wěn)定之外,它的性能也很高,特別能扛并發(fā),所以一般把它放到最前面去直面用戶。
接下來安裝部署Nginx服務(wù)器,我們這地方以1.17.10這個(gè)版本為例。
cd /usr/local/
mkdir nginx
cd nginx
[root@localhost nginx]# tar zxvf /root/nginx-1.17.10.tar.gz -C ./
解壓完之后,在/usr/local/nginx?錄中會(huì)出現(xiàn)?個(gè)nginx-1.17.10的目錄
yum -y install pcre-devel
yum -y install openssl openssl-devel
cd nginx-1.17.10
./configure
make && make install
安裝完成后, Nginx的可執(zhí)??件位置位于
/usr/local/nginx/sbin/nginx
而其配置?件則位于:
/usr/local/nginx/conf/nginx.conf
直接執(zhí)?如下命令即可
[root@localhost sbin]# /usr/local/nginx/sbin/nginx
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx -s reload
上一步的Nginx服務(wù)器安裝完成并且啟動(dòng)之后,接下來我們修改Nginx的配置文件:/usr/local/nginx/conf/nginx.conf
我們找到server配置,然后做如下配置即可
# 新增此段upstream配置,代表網(wǎng)站實(shí)際啟動(dòng)的服務(wù)
upstream blog {
server 127.0.0.1:8090;
}
server {
listen 80;
server_name www.your_domain.com;
location / {
# 讓Nginx服務(wù)器代理到上面所定義的實(shí)際網(wǎng)站服務(wù)upstream
proxy_pass http://blog;
proxy_set_header HOST $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
這樣配置的目的很簡單,就是讓代理服務(wù)器Nginx代理到網(wǎng)站的jar包實(shí)際所啟動(dòng)的服務(wù)上去即可。
這時(shí)候直接通過服務(wù)器公網(wǎng)IP即可訪問個(gè)人網(wǎng)站了。
當(dāng)然如果有域名的話,將域名解析到公網(wǎng)IP就齊活了。
接下來不管是寫東西、還是管理網(wǎng)站都非常方便了。
至于網(wǎng)站本身的各種功能,有需要的小伙伴可以自己盡情地折騰了。
綜上所述,從初始化一直到網(wǎng)站上線,整個(gè)操作非常簡單,幾分鐘即可搞定。
另外文中用到的所有關(guān)于:服務(wù)器、博客、文檔、安裝包、PDF手冊(cè) 等離線文件,都統(tǒng)一整理在此,需要的同學(xué)轉(zhuǎn)發(fā)本文后私信【612】三個(gè)數(shù)字即可無償獲取
所以這篇先聊到這里了,我們下篇見。
本文旨在通過 快速部署一個(gè) wordpress 網(wǎng)站到阿里云函數(shù)計(jì)算平臺(tái) 這個(gè)示例來展示 serverless web 新的開發(fā)模式, 包括 FUN 工具一鍵初始化 NAS, 同步網(wǎng)站到 NAS, 一鍵部署等能力, 展現(xiàn)函數(shù)計(jì)算的開發(fā)敏捷特性、自動(dòng)彈性伸縮能力、免運(yùn)維和完善的監(jiān)控設(shè)施。
相關(guān)參考文檔: https://yq.aliyun.com/articles/640912
1.1 DEMO 概述
1.2 解決方案
如上圖所示, 當(dāng)多個(gè)用戶通過對(duì)外提供的 url 訪問web服務(wù)的時(shí)候時(shí)候,每秒的請(qǐng)求幾百上千都沒有關(guān)系, 函數(shù)計(jì)算平臺(tái)會(huì)自動(dòng)伸縮, 提供足夠的執(zhí)行實(shí)例來響應(yīng)用戶的請(qǐng)求, 同時(shí)函數(shù)計(jì)算提供了完善的監(jiān)控設(shè)施來監(jiān)控您的函數(shù)運(yùn)行情況。
1.3 Serverless 方案與傳統(tǒng)自建 web 方案對(duì)比
函數(shù)計(jì)算完整費(fèi)用詳情:
函數(shù)計(jì)算計(jì)費(fèi) | NAS 定價(jià)
如上所述, 在低成本網(wǎng)站領(lǐng)域, 函數(shù)計(jì)算具有十分明顯的成本優(yōu)勢(shì),同時(shí)還保持了彈性能力,以后業(yè)務(wù)規(guī)模做大以后并沒有技術(shù)切換成本(可能需要做的只是更換一個(gè)更強(qiáng)的關(guān)系型數(shù)據(jù)庫), 同時(shí)財(cái)務(wù)成本增長配合預(yù)付費(fèi)也能保持平滑。低成本網(wǎng)站變成高可用高性能網(wǎng)站如絲般順滑。
在具體操作部署之前, 先簡單梳理一遍 函數(shù)計(jì)算運(yùn)行 PHP 框架原理
2.1 傳統(tǒng)服務(wù)器 PHP 運(yùn)行原理
從上面原理示意圖我們可以看出,Web 服務(wù)器根據(jù) conf 中 location將 PHP 腳本交給 php-fpm 去解析,然后將解析后的結(jié)果返回給 client 端
2.2 FC 驅(qū)動(dòng) PHP 工程原理
PHP 工程中的 php 文件進(jìn)行解析,該對(duì)象提供了兩個(gè)重要的接口:
requestPhpCgi($request, $docRoot, $phpFile="index.php", $fastCgiParams=[], $options=[])
如果您有興趣, 可以了解下函數(shù)計(jì)算 PHP Runtime:
準(zhǔn)備條件
有一個(gè)域名, 比如 abc.com, 并將域名 CNAME 解析到 函數(shù)計(jì)算(FC) 對(duì)應(yīng)的 region
如您想在杭州的 region 部署 wordpres 網(wǎng)站, 則將 abc.com CNAME 解析到 12345.cn-hangzhou.fc.aliyuncs.com, 其中 12345 是您的 accountId
3.1 安裝最新的 Fun 工具
3.2 Clone 工程
git clone https://github.com/awesome-fc/fc-wordpress.git
3.3 根據(jù)需要使用的數(shù)據(jù)庫進(jìn)入不同的目錄
如果使用 mysql 數(shù)據(jù)庫, 參考章節(jié) 3.3.1
如果使用 sqlite3 數(shù)據(jù)庫, 參考章節(jié) 3.3.2
3.3.1 使用 mysql 數(shù)據(jù)庫
fun nas init fun nas info
fun nas init: 初始化 NAS, 基于您的 .env 中的信息獲取(已有滿足條件的nas)或創(chuàng)建一個(gè)同region可用的nas
如果你沒有修改 templata.yml 中的配置 service名字, 那么則可以進(jìn)入下一步; 如果有修改, 會(huì)在當(dāng)前目錄生成新的目錄 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目錄), 將默認(rèn)目錄下的 .fun/nas/auto-default/fc-wp-mysql/wordpress 的wordpress目錄拷貝到 .fun/nas/auto-default/{serviceName} 下, 同時(shí)可以刪除目錄 .fun/nas/auto-default/fc-wp-mysql/wordpress
fun nas sync fun nas ls nas:///mnt/auto/
fun nas sync: 將本地 NAS 中的內(nèi)容(.fun/nas/auto-default/fc-wp-mysql)上傳到 NAS 中的 fc-wp-mysql 目錄
fun nas ls nas:///mnt/auto/: 查看我們是否已經(jīng)正確將文件上傳到了 NAS
3.3.2 使用 sqlite3 數(shù)據(jù)庫
fun nas init fun nas info
fun nas init: 初始化 NAS, 基于您的 .env 中的信息獲取(已有滿足條件的nas)或創(chuàng)建一個(gè)同region可用的nas
如果你沒有修改 templata.yml 中的配置 service名字, 那么則可以進(jìn)入下一步; 如果有修改, 會(huì)在當(dāng)前目錄生成新的目錄 .fun/nas/auto-default/{serviceName} (fun nas info 可以列出新的目錄), 將默認(rèn)目錄下的 .fun/nas/auto-default/fc-wp-sqlite/wordpress 的wordpress目錄拷貝到 .fun/nas/auto-default/{serviceName} 下, 同時(shí)可以刪除目錄 .fun/nas/auto-default/fc-wp-sqlite/wordpress
php -S 0.0.0.0:80
其中 hz.mofangdegisn.cn 是您預(yù)先準(zhǔn)備的域名
成功安裝以后, 這個(gè)時(shí)候, .fun/nas/auto-default/fc-wp-sqlite/wordpress/wp-content 下面應(yīng)該有一個(gè) database 的目錄, ls -a 查看, 應(yīng)該有 .ht.sqlite 這個(gè) sqlite3 數(shù)據(jù)庫文件
注: 中間修改 host 的目的是初始化 sqlite3 數(shù)據(jù)庫的時(shí)候, base site url 是提前準(zhǔn)備的域名, 而不是 127.0.0.1
fun nas sync fun nas ls nas:///mnt/auto/
fun nas sync: 將本地 NAS 中的內(nèi)容(.fun/nas/auto-default/fc-wp-sqlite)上傳到 NAS 中的 fc-wp-sqlite 目錄
fun nas ls nas:///mnt/auto/: 查看我們是否已經(jīng)正確將文件上傳到了 NAS
3.4 部署函數(shù)到FC平臺(tái)
接下來將函數(shù)部署到云平臺(tái):
登錄控制臺(tái) https://fc.console.aliyun.com,可以看到service 和 函數(shù)已經(jīng)創(chuàng)建成功, 并且 service 也已經(jīng)正確配置。
通過瀏覽器打開自己之前配置的域名, 比如本例中的 hz.mofangdegisn.cn
Q1: 函數(shù)計(jì)算能開發(fā)高性能高可用網(wǎng)站嗎?
A: 可以, 只要連接的數(shù)據(jù)庫性能足夠, 有必要再配合預(yù)留實(shí)例消除冷啟動(dòng)就足夠高 qps 的 web 網(wǎng)站了。
Q2: 使用低成本 sqlite3 版本的網(wǎng)站, 冷啟動(dòng)第一次打開很慢怎么辦?
A: 用一個(gè) timer trigger 的函數(shù) keep warm
Q3: 使用低成本 sqlite3 版本的網(wǎng)站, 能支持多大的qps?
A: 由 sqlite3 數(shù)據(jù)庫性能決定, 這邊有一些壓測(cè)結(jié)果:
每次壓力增大時(shí)候, 都有些冷啟動(dòng),時(shí)間慢點(diǎn),但是支持從壓測(cè)結(jié)果來看支持 50 QPS 是沒有疑問的, 是足夠支持一些中小網(wǎng)站的。
Q3: 使用其他語言基于函數(shù)計(jì)算開發(fā) serverless 網(wǎng)站可以嗎?
A: 可以, 比如 python: https://yq.aliyun.com/articles/603249 , 或者直接使用 custom runtime, 內(nèi)置了 java、python 和 node, Custom Runtime 用戶手冊(cè)
作者:rsong
本文為云棲社區(qū)內(nèi)容,未經(jīng)允許不得轉(zhuǎn)載。