從零搭建基於golang的個人部落格網站
原文連結 : http://www.bugclosed.com/post/14
從零搭建個人部落格網站需要包括雲伺服器(虛擬主機),域名,程式環境,部落格程式等方面。本部落格 就是通過這幾個環節建立起來的,下面總結梳理一下環節的具體過程。
雲伺服器
部落格程式需要有一個伺服器部署和執行,所以首先需要選購一個雲伺服器。阿里雲是國內最大的雲廠商,簡單起見直接選購阿里雲的入門級ECS(1核,1G記憶體,1M固定頻寬,20G SSD磁碟)。初始化主機選擇centos7.2系統,可同時在後臺初始化的時候設定好root初始密碼。 需要注意的是,該級別的ECS是屬於彈性網路,即公網IP和ECS是分離的,在ECS上 ifconfig並不能看到公網IP,只能看到內網IP;阿里雲會通過自己內網的路由功能將阿里雲後臺上看到的公網IP對映到具體的ECS上,所以在這樣的機器上部署程式是不能繫結公網IP的,程式只能繫結內網IP。當然也可以選購的時候選擇阿里雲的經典網路,保持主機公網和內網IP都是繫結在ECS上,不過價格會稍微貴一點。
域名
有了雲伺服器之後,就有一個地方可以部署部落格程式,也有了一個公網IP可以訪問到這個機器,但是不能每次訪問都輸入晦澀難記的IP來進行,需要一個方便易用的域名來代替。域名可以通過萬網(已經被併入了阿里),godaddy等域名服務商購買。 我選擇在godaddy上購買,選擇一個沒有被註冊的購買即可,不同域名價格不一樣,選擇一個合適自己的。2018年1月1日實行的新規,只有國內域名服務商購買的域名才能備案。因為我的域名是在godaddy上, 所以需要轉移到國內服務商後,再備案。
有了域名之後,需要用到DNS服務將域名解析到IP,因為我是在godaddy上購買的域名,預設是使用godaddy的DNS服務。但是伺服器在阿里雲,為了以後操作方便(godaddy有時候國內訪問不穩定),準備使用阿里雲的域名解析服務。先在godday的後臺將新域名的DNS伺服器設定成阿里雲的DNS伺服器ns1.alidns.com和ns2.alidns.com;然後就可以再阿里雲的控制檯中“雲解析DNS”裡,將新域名的A記錄指向申請的ECS的公網IP,這樣就可以通過域名直接訪問到伺服器。 好景不長,因為域名是要實名備案的,沒有備案的域名,會被block掉。一般新域名使用1-2天就會被block掉,除非進行實名備案。幸好阿里雲有專門的備案系統,在阿里雲主頁右上角的“備案”裡面就可以找到。域名備案需要實名制,需要用到身份證照片,手機號,個人照片,家庭住址等資訊,還需要填寫域名網站的基本資訊,總之按照阿里雲備案系統的嚮導一步一步走即可。
系統軟體環境
主要軟體環境:
- 系統centos7.2
- git2.9+
- golang1.8+
- mysql5.7
- 部落格程式: wbog
其中git2.9採用原始碼安裝,下載地址 為了支援https,原始碼安裝git之前,先yum安裝curl curl-devel之後,再手動安裝git。
關於部落格開源程式,比較後選擇了 wbog,這套程式純golang開發,簡單易懂且可塑性強,安裝環境依賴小。wblog的安裝參照github的安裝說明即可簡單安裝。 另外需要說明的是,為了mysql能夠支援emoji表情儲存,mysql特地安裝了5.7版本,安裝參考, 簡單總結步驟如下:
- wget http://repo.mysql.com/mysql57-community-release-el7-8.noarch.rpm
- rpm -ivh mysql57-community-release-el7-8.noarch.rpm
- yum install mysql-server mysql-client mysql-devel
部署執行
程式的編譯執行很簡單,只需要在wblog的原碼目錄編譯成功後(go build),即可直接執行啟動(./wblog執行);程式預設是8090埠,需要自行修改,且在iptables上開啟對應埠,以及在阿里雲後臺將ECS的安全策略組中開放對應的埠即可。 我安裝了supervisor,將wblog託管其中,方便管理維護。
wblog幾處修改
wblog總體上基本滿足了個人部落格的各種基本功能,能夠發帖,評論,增刪改等,且只是markdown格式編輯,不過自帶的markdown編輯器使用起來不太好用,可以考慮之後優化一下。在安裝部署除錯過程中,對原始wblog庫做了幾點小調整,具體如下
1.修改儲存引擎
wblog預設使用sqlite3,修改成了連結mysql資料庫,需要在配置檔案conf/conf.yaml中修改儲存配置:
dsn: mysql:mysql@tcp(127.0.0.1:3306)/wblog?charset=utf8&parseTime=True&loc=Local
且修改db初始化程式碼models.go:InitDB():
db, err := gorm.Open("mysql", system.GetConfiguration().DSN)
conf中的mysql地區配置這裡有一點小坑,預設採用的loc=Asia/Shanghai, 啟動wblog會報錯:
[main.go:45] [main.main] err open databasesdefault addr for network '/wblog?charset=utf8&parseTime=True&loc=Asia' unknown
分析原因後是因為Loc的value裡面有一個反斜槓‘/’,導致啟動引數判讀出現錯誤,暫時通過修改loc=Local修改後正常執行。
2.emoji支援
為了未來支援emoji,mysql資料庫需要支援utf8mb4的5.7版本,程式orm自動生成資料庫表和建立資料庫都需要制定utf8mb4格式,資料庫建立:
create database wblog default character set utf8mb4;
程式修改models.go.InitDB():
db.Set("gorm:table_options", "CHARSET=utf8mb4").AutoMigrate(&Page{}, &Post{}, &Tag{}, &PostTag{}, &User{}, &Comment{}, &Subscriber{}, &Link{})
3.orm mysql table string型別
wblog中資料庫表結構中字串型別string,對映後的預設長度是256位元組。部分場景下這個長度是合適的,但是在post表中的部落格內容欄位,顯然256肯定不夠,需要手動修改成對映text型別欄位。修改models.go中的Post結構體:
type Post struct {
BaseModel
Title string // title
Body string `sql:"type:text;"`//---指定對映成text型別
View int // view count
IsPublished bool // published or not
Tags []*Tag `gorm:"-"` // tags of post
Comments []*Comment `gorm:"-"` // comments of post
}
4.主頁文章列表增加閱讀數
wblog預設在主頁的文章列表的摘要資訊中只顯示了文章title和建立時間。為了在主頁一目瞭然瞭解文章的訪問情況,在建立時間旁邊增加了閱讀數量限制。在Post表中的view欄位已經儲存了閱讀量,只需要在index模板中顯示出來即可。
{{range $postkey,$postvalue:=.posts}}
<div class="articleInfo">
<span>
<a class="articleTitle" href="/post/{{$postvalue.ID}}">
{{$length := len $postvalue.Title}} {{if ge $length 40}} {{truncate $postvalue.Title 40}}... {{else}} {{$postvalue.Title}}
{{end}}
</a>
</span>
<span class="createdTime" style="margin-right: 10px;">
閱讀({{$postvalue.View}}) {{dateFormat $postvalue.CreatedAt "06-01-02 15:04"}}
</span>
</div>
<div class="articleBody">
{{$length := len $postvalue.Body}} {{if ge $length 100}} {{truncate $postvalue.Body 100}}... {{else}} {{$postvalue.Body}}
{{end}}
</div>
相關文章
- hexo搭建個人網站部落格完全教程Hexo網站
- 如何搭建個人獨立部落格網站?網站
- 從零搭建一個基於Istio的服務網格
- 基於阿里雲、七牛雲、寶塔皮膚,從零開始用Halo搭建個人部落格網站阿里網站
- 基於mkdocs-material搭建個人靜態部落格
- 從零開始搭建一個 hexo 部落格。Hexo
- 基於 GitBook 搭建個人部落格Git
- 從零開始的個人技術部落格
- 基於SpringBoot從零構建部落格網站 - 開發設定主頁標識和修改個人資訊功能Spring Boot網站
- VuePress從零開始搭建自己的部落格Vue
- 從零到一快速搭建個人部落格網站(域名備案 + https免費證書)(一)網站HTTP
- 搭建個人音樂網站!一個基於 SpringBoot + Vue 的音樂網站!網站Spring BootVue
- 從零開始搭建屬於自己的網站網站
- 基於Vue搭建自己的部落格Vue
- 基於SpringBoot從零構建部落格網站 - 整合editor.md開發釋出文章功能Spring Boot網站
- 基於SpringBoot從零構建部落格網站 - 整合ehcache和開發註冊登入功能Spring Boot網站
- 教程|阿里雲+wordpress搭建個人部落格網站阿里網站
- 利用Github+Jeklly搭建個人部落格網站Github網站
- 從零開始搭建部落格系列
- Django搭建個人部落格:基於類的檢視Django
- WordPress 搭建個人部落格/站點
- 基於 Hexo + GitHub Pages 搭建個人部落格(三)HexoGithub
- 個人網站遷移之旅:從部落格到知識庫,從 Hexo 到 Docusaurus網站Hexo
- 使用 github 和 Deno Deploy 搭建一個部落格網站Github網站
- 基於ThinkPHP搭建的仿Wordpres個人部落格系統PHP
- 個人部落格如何搭建 用什麼系統好?學網站建設從開發一個部落格開始網站
- 部落格,休閒個人站點
- 基於ECS搭建雲上部落格
- 基於Hexo搭建靜態部落格Hexo
- TP5 極簡類部落格個人網站網站
- ThinkerBlog個人部落格網站網站
- 從零開始教你用vuepress搭建自己的部落格(1)—基礎篇Vue
- 基於Ubuntu搭建個人網盤Ubuntu
- 部落格網站網站
- 個人部落格網站升級網站
- 從零開始設計一個部落格
- 怎麼樣零程式碼零成本搭建個人網站?網站
- GitHub Pages + Hexo搭建個人部落格網站-github風格-採坑記錄GithubHexo網站