博客:
除了悶頭專研技術之外,程序員還需要不斷地寫作進行技術積累,寫博客是其中最重要的方式之一。商業博客平臺不少,但是更符合程序員背景的方案,是自己開發一個博客平臺或者使用開源的博客平臺。
開源的博客平臺多如牛毛,而且不乏優秀之作,如 Hexo、Octopress、Jekyll、Wordpress。本系列文章將分享如何利用各種博客引擎在雲端搭建屬於自己的個人博客。今天這一篇,介紹如何在快速部署一個國人用 Java 開發的博客系統。
序
Tail地址 : https://gold.xitu.io/post/58b17cf31b69e60058a90a37
前幾天,在社區看到有國人開發者開源了用 Java 寫的一個博客系統 Tale。從作者放出的 Demo 站點來看,效果還是不錯的。正好最近在整理一些好用的博客引擎,今天正好研究了一下如何部署 Tale。
作者王爵在 Github 提供了一份簡單的部署指南,主要包括安裝 JDK8、安裝 MySQL、創建數據庫、下載並運行 Tale 等步驟。但是實際在部署時,發現這份指南缺少許多細節,而且也會碰到一些問題。我們一步一步來看。
前提條件
在部署一個博客網站之前,你必須要有一臺雲服務器,否則只能在本地嚐嚐鮮,無法真正使用。筆者經常使用的是騰訊雲提供的 CVM 雲服務器,推薦給大家。
操作系統建議安裝 Ubuntu 14.04。下文將以該系統爲例,介紹具體的部署過程。
安裝 JDK8
Tale 是用 Java 語言編寫的博客系統,因此必須先安裝 JDK8。雲服務器的系統是 Ubuntu 14.04,你可以選擇直接從 Oracle 的網站下載針對 Linux 的安裝包,但筆者推薦一個更加簡便的方法:通過 PPA 安裝。
首先,添加 webupd8team/java PPA 倉庫到系統中,然後再通過 apt 安裝 Java 8。具體命令如下:
$ java -version
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update
$ sudo apt-get install oracle-java8-installer
安裝結束之後,我們驗證是否成功:
$ java -version
如果出現類似如下輸出,說明成功安裝:
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode, sharing)
然後,還需要配置一下 Java 環境。在上文安裝 Java 8的過程中,應該已經安裝了 oracle-java8-set-default 包。我們運行如下命令確保已經安裝成功:
$ sudo apt-get install oracle-java8-set-default
最後,配置一些相關的環境變量:
$ export JAVA_HOME=/usr/lib/jvm/java-8-oracle
$ export JRE_HOME=/usr/lib/jvm/java-8-oracle/jre
安裝 MySQL
根據官方的指南,Tale 使用的是 MySQL 數據庫,所以第二步就是在雲服務器上自建建一個 MySQL 數據庫。如果你希望更強大的數據庫性能,可以選擇雲廠商提供的雲數據庫:CDB for MySQL。
自建 MySQL 還是比較簡單的,只要依次執行如下命令,就可以安裝好 MySQL 並完成安全設置。
$ sudo apt-get update
$ sudo apt-get install mysql-server
$ sudo mysql_secure_installation
$ sudo mysql_install_db
在安裝的過程中,注意設置好 root 用戶的密碼。爲了方便,此次部署博客過程中直接使用 root 用戶。在最後的 tale 安裝過程中,要求填寫 MySQL 數據庫的 IP 和用戶名及密碼。
創建數據庫
第三步,我們以 root 用戶身份連接到 MySQL,然後創建名爲 tale 的數據庫。
$ mysql -u root -p
Server version: 5.5.54-0ubuntu0.14.04.1 (Ubuntu)
Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> create database `tale` default character set utf8 collate utf8_general_ci;
創建數據庫的命令爲:create databasetaledefault character set utf8 collate utf8_general_ci;。
#下載並安裝 Tale 接下來,可以下載 Tale 的源代碼了。
$ wget http://7xls9k.dl1.z0.glb.clouddn.com/tale.zip
$ unzip tale.zip
tale 目錄下包含以下文件:
drwxr-xr-x 2 ubuntu ubuntu 4096 Feb 27 02:24 lib
drwxrwxr-x 2 ubuntu ubuntu 4096 Feb 27 19:08 logs
drwxr-xr-x 5 ubuntu ubuntu 4096 Feb 27 16:42 resources
-rw-r--r-- 1 ubuntu ubuntu 173386 Feb 27 02:24 tale-1.0.jar
通過 java 命令運行 tale-1.0.jar 文件,即可啓動博客系統。
$ cd tale
$ java -jar tale-1.0.jar
成功運行以上命令後 ,輸出大致如下:
...
...
[tale] 2017-02-27 20:57:42,032 INFO [main] org.eclipse.jetty.server.AbstractConnector | Started ServerConnector@67765770{HTTP/1.1,[http/1.1]}{127.0.0.1:9000}
[tale] 2017-02-27 20:57:42,033 INFO [main] org.eclipse.jetty.server.Server | Started @3086ms
[tale] 2017-02-27 20:57:42,033 INFO [main] com.blade.embedd.EmbedJettyServer | Blade Server Listen on 127.0.0.1:9000
最後一行顯示,Tale 博客使用的 Blade 服務器正在監聽 127.0.0.1:9000。但是,我們怎樣才能訪問雲服務器上的這個地址呢?
安裝並配置 Nginx
從第五步開始,是 Tale 的作者沒有在 Github 的指南中說明的。接下來,我們使用 Nginx 作爲一個反向代理服務器,來訪問 Tale。
我們修改 Nginx 的 default 設置:
sudo vim /etc/nginx/sites-available/default
修改其中的 location / 部分,並註釋掉某些行,具體見下面的示例:
server {
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;
#root /usr/share/nginx/html;
#index index.html index.htm;
# Make site accessible from http://localhost/
server_name localhost;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
# try_files $uri $uri/ =404;
proxy_pass http://127.0.0.1:9000;
# Uncomment to enable naxsi on this location
# include /etc/nginx/naxsi.rules
}
}
保存並退出文件。然後重啓 Nginx 服務即可。
sudo service nginx restart 現在我們訪問雲服務器的 IP 地址時,就會進入 Tale 的安裝頁面。 http://127.0.0.1 #首頁,初次打開時安裝 http://127.0.0.1/admin #管理員登錄頁面
創建系統啓動腳本
如果手動執行 java -jar tale-1.0.jar 命令,那麼結束終端會話時就必須要退出 tale 進程。爲了讓網站能夠長時間訪問,我們需要讓該命令一直在後臺自動運行,最好是支持系統重啓時自動啓動。因此,我們可以將 tale 變成一個系統服務。
創建 /etc/init/tale.conf 文件,寫入如下內容:
start on runlevel [2345]
stop on runlevel [!2345]
setuid ubuntu
setgid ubuntu
chdir /home/ubuntu/tale
exec java -jar tale-1.0.jar
上面定義了該服務在 runlevel 爲 2、3、4、5 時啓動,而在非這幾個 runlevel 時停止該服務。
運行級別0:系統停機狀態,系統默認運行級別不能設爲0,否則不能正常啓動
運行級別1:單用戶工作狀態,root權限,用於系統維護,禁止遠程登陸
運行級別2:多用戶狀態(沒有NFS)
運行級別3:完全的多用戶狀態(有NFS),登陸後進入控制檯命令行模式
運行級別4:系統未使用,保留
運行級別5:X11控制檯,登陸後進入圖形GUI模式
運行級別6:系統正常關閉並重啓,默認運行級別不能設爲6,否則不能正常啓動
配置好了 tale.conf 文件之後,就能夠通過如下命令啓動、停止和重啓 tale 博客了:
sudo start tale # 啓動 tale
sudo stop/restart tale # 停止/重啓 tale
sudo status tale # 查看 tale 的狀態
結語
至此,就完成了在雲服務器(或雲主機)上部署 Tale 開源博客系統的整個過程。
簡單體驗了下前後臺,博客基本的功能都具備了,而且速度上確實挺快的。不過目前的主題樣式還比較單一,需要社區其他開發者的貢獻。 另外反饋一個問題給作者:博客後臺的系統設置中,有關閉「允許重新安裝」的選項,這個默認設置爲「關閉」了。但是實際還是能夠進入安裝頁面,如果有網友能夠猜出博主的數據庫用戶名和密碼的話,估計就能把對方的博客給一鍋端了。
參考資料
https://github.com/otale/tale/wiki/1.how-to-use-tale
http://tecadmin.net/install-oracle-java-8-jdk-8-ubuntu-via-ppa/
https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-14-04
https://www.digitalocean.com/community/tutorials/a-basic-mysql-tutorial