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