不務正業,搗鼓了一個破網站,全過程記錄
這篇文章沒有什么關于嵌入式的干貨,僅僅是詳細記錄一下前段時間搗鼓的一個靜態的個人網站。
最近都沒有想到什么好的文章方向,下一階段想把之前對Lua語言的學習心得總結一下,實現一個基于插件機制的物聯網網關。
或者再稍微往工業領域上走一些,實現一個可以二次開發的工業網關。
目前只是有這個模糊的想法,具體做成什么樣子還有待更詳細的計劃。
寫這個網關的目的有兩個:
通過Lua語言來深入的理解一門【語言】,而不僅僅是使用一門語言。
實現一個基本上可以在生產環節可用的代碼模型。
這兩個目的基本上符合我的定位:讓有意思的事情變得更有意義。
言歸正傳,回到這篇文章的主題:從頭開始,一步一步搭建一個靜態的個人網站。
為什么會有這個網站
作為一個嵌入式軟件開發者來說,搭一個網站有點是不務正業的。
但是作為一名廣義上的程序員,又經常對互聯網領域的一些技術心生向往,于是就有了這個破網站。
最主要的初衷是:
在工作的過程中,經常需要參考一些常用的工具,比如:
- 查找ASCII碼;
- 查詢 shell 指令;
- 時間戳轉換;
- 格式化 Json/xml 等文檔;
- 。。。
每次在遇到上面這些需求時,總是需要去麻煩搜索引擎;即使把一些工具站點保存在收藏夾中,還需要按照分類區點擊、打開。
所以我就想:是否可以寫一個簡單的、靜態的頁面,把自己經常使用的工具、鏈接都放進去,每次需要使用的時候,就打開這個頁面就可以了。
換句話說,這個網站的最大作用就是:工具導航。
市面上也有很多這樣的工具導航網站的。
后來發現,我也會經常去翻一下自己寫的文章,于是就把所有的文章進行分類,然后也放到網站上。
于是,我就開始用三腳貓的web技術搗鼓這個網站...
我們知道,現在已經有很多現成的一鍵建站工具了,就像黑盒測試一下,我們只需要把自己的資料按照指定的格式、流程輸入進去,一個漂亮的頁面就立刻出現在面前。
但是作為一名軟件開發者,還是希望能夠偷窺一下這里面的一些細節。
在互聯網領域,我也是一名門外漢。所以就拋棄了很多現代的、方便的工具,從最基本的html、javascript、css開始,一步一個腳印的把一個靜態的個人網站給攢起來。
如果要部署一個動態網站,那需要掌握的東西就多了去了:java、jsp、maven、mysql、mybatis、spring那一套。
當然,為了避免最后的結果太難看,我也充分地“借鑒”了bootstrap前端開發框架,因為它簡潔、直觀、強悍,并且提供了很多免費的、漂亮的主題框架。
預覽幾個頁面
網站的缺陷
在貼出頁面之前,先說一下幾個缺點:
- 圖片太多,導致加載的速度太慢。
我已經把所有的圖片放在七牛的圖床上了,也啟用了CDN節點來緩存頁面,但是其中有幾個大圖片影響了加載速度。
下面是PageSpeed Insights對網站的測試結果:
從測試結果中可以看到,主要還是圖片惹的禍。
我已經把所有的圖片換成.webp格式了,但是其中幾張大的圖片影響了加載速度。我也不準備優化了,因為下面第2個原因。
- 添加新的內容時,操作步驟太多。
前文說過,這個網站的主要目的還是自用,所以會經常添加新的內容,比如:看到了特別棒的網站,需要把鏈接添加進去。
由于在網站導航布局中,為了美化一下,使用一個小圖片放在站點上。
因此每次添加時,需要下面幾個步驟才能完成:
- 對目標網站進行截圖;
- 把png格式的圖片轉成 .webp 格式;
- 把圖片傳入到七牛的圖床上(需要登錄、打開目標位置、選圖片、上傳);
- 修改靜態的html頁面;
- 上傳到web服務器;
- 更新CDN緩存節點內容;
以上這個步驟想想都覺得很煩,而且無法用自動化的腳本來實現。
基于以上這些原因,后面會重新部署一下,還是以實用主義為主。
不管怎樣,這里還是把目前網站的頁面貼幾張截圖,下個月可能就被撤掉了,以后也能偶爾回憶一下~~
網站搭建過程
1. 服務器
如果把站點部署在公網上,肯定需要買一個服務器。
國內的話就那么三家,選擇便宜、文檔、使用人數多的買就行了。
我使用的服務器是之前一個項目中用來測試MQTT性能的,后來廢棄不用了,第一年費用不到一百元。
購買服務器的時候,需要選擇操作系統,這里使用的是Ubuntu18.04。
2. 域名
為了便于記憶,最好注冊一個域名。
現在的域名很便宜,普通的域名大概30元/年,主要就是域名備案需要花一些時間。
現在備案方便多了,直接在手機上就可以完成。
很久以前的備案,還需要郵寄一塊背景幕布,專門用來拍照用。
域名備案完成之后,就可以綁定購買的服務器IP地址了,也就是域名解析。
順便把80端口也打開,因為下面需要通過這個端口來訪問站點。
3. html + js + css
因為目標是一個靜態網站,所以基本上粗略的掌握上面這三部分的知識點就足夠了。
另外,為了美化一下界面,使用了bootstrap這個前端框架,而且它還提供了很多漂亮的模板。
于是,在攢的過程中,我就把每一個模板中被我使用的部分摘抄出來,組裝在一起,形成了最后的界面。
下面這張圖是文件結構:
在寫代碼的時候,使用的軟件是WebStorm,我覺得挺好用!
4. 圖片轉換
很多網站使用的圖片都是webp?格式,它的圖像壓縮算法比較好,有更小的文件體積,而且保持很高的圖片質量,支持Alpha透明以及動畫等特點。
這里主要貼一下如何是用谷歌轉換工具,批量的把png?格式的圖片轉換成webp格式。
以下步驟是在MAC下操作
(1) 下載libwebp的庫
brew install webp
(2) 下載轉換工具,解壓
libwebp-0.6.0-mac-10.12.tar.gz
下載地址:https://storage.googleapis.com/downloads.webmproject.org/releases/webp/index.html
(3) 轉換單張圖片
./cwebp -lossless 輸入圖像路徑 -o 輸出圖像路徑
(4) 批量轉換多張圖片
#!/bin/bash
CMD=/<絕對路徑>/libwebp-0.6.0-mac-10.12/bin/cwebp
for file in *.png
do
${CMD} -lossless "$file" -o "${file%.*}.webp"
done
5. 安裝 web 服務器
可選的web?服務器有很多,常用的有tomcat、apache、nginx,當然還有很多其它的選擇,都有各自的特點。
感興趣的朋友可以去搜一下它們各自使用的場景,我最后選擇的時nginx,安裝命令很簡單:
sudo apt-get install nginx
安裝好的文件位置:
- /usr/sbin/nginx:主程序
- /etc/nginx: 配置文件
- /usr/share/nginx:靜態文件
- /var/log/nginx: 日志
當然,如果要更清楚 Nginx?的配置項放在什么地方,可以打開文件/etc/nginx/nginx.conf 看一下。
如果想手動安裝的話,步驟如下:
sudo apt-get install libpcre3 libpcre3-dev
apt-get install openssl
apt-get install zlib1g-dev
wget http://nginx.org/download/nginx-1.11.3.tar.gz
cd nginx-1.11.3/
./configure
make
make install
啟動、停止服務的相關命令:
sudo service nginx {start|stop|restart|reload|force-reload|status|configtest|rotate|upgrade}
在啟動nginx?之后,就可以在瀏覽器中測試一下安裝是否成功,如果一切順利的話,可以看到nginx的默認頁面。
6. 站點部署
最簡單的操作,就是直接把本地寫好的站點代碼直接推送到/var/www/html目錄下即可。
為了更靈活的部署(比如:在一個服務器上部署多個站點),最好創建站點獨立的目錄。
nginx?的配置文件位于:/etc/nginx,如下所示:
比較重要的是目錄sites-available和sites-enabled。
目錄中包括:
請忽略這里的 https,那是為了測試 ssl 訪問而設置的。
配置文件:/etc/nginx/sites-available/linuxbar.net的內容是:
也就是說:所有的文件是放在/var/www/linuxbar.net/html目錄下。
因此創建這個文件,并且把步驟3中的所有文件推送到這個目錄下即可,最終部署的所有文件如下:
小結
完成以上步驟之后,就可以在本地瀏覽器中輸入域名,然后就可以看到漂亮的網站了!
7. 使用圖床
在上面的第6步中,把所有的文件都放在了站點中,包括圖片文件。
當瀏覽器訪問站點的時候,所有的文件(特別是圖片)都直接從web服務器的鏈路里獲取,浪費流量。
可以利用一些免費的圖床來存放圖片文件,瀏覽器獲取html?文件之后,加載圖片時,就從圖床中獲取圖片文件,大大減少了web服務器的壓力。
我使用的是七牛的圖床,因此把所有圖片上傳到圖床上,然后把html文件中對圖片的鏈接全部修改一下就可以了。
當然了,也可以選擇其他的圖床工具,很多免費的(收費的也很便宜)。
8. 使用 CDN 加速
在上面第二步:綁定域名和IP?地址的時候,使域名直接解析到對應的web?服務器所在的IP地址。
可以利用CDN域名加速功能,來提升訪問速度,提高用戶體驗。設置如下:
配置完成之后,會得到一個cname?,然后在域名解析設置中把域名指向這個cname即可:
完成這個設置之后,在瀏覽器中輸入域名,將會訪問CDN節點。
當然了,如果節點中沒有內容,將會訪問web服務器,把最新的頁面緩存起來,然后再返回給瀏覽器。
總結
這篇文章從一個初學者的角度,來描述如何從零開始建一個靜態頁面的個人網站。