從零開始搭建solo個人博客系統



自己個人博客系統從搭建運行至今已然過去一月,整個搭建過程可以說是踩坑無數。因此將整個搭建過程以及踩過的坑寫到此處,希望可以給搭建個人博客系統的朋友提供一些幫助。整個過程教程包括服務器選購、域名申請與備案、安裝 solo、nginx 進行反向代理以及 ssl 證書的申請與使用,好了廢話說少馬上開始。

1.博客系統的搭建流程

為了讓大家更好的了解整個博客系統搭建的邏輯,因此我將其搭建流程做成一個流程圖,希望能給大家以直觀的感受;大家在看流程圖要注意有些環節是可選。

2.服務器選購

首先要有自己的服務器,如果有可以直接跳過這一步。如果沒有的話,可以有好多服務器提供商可選:國內的有阿里雲騰訊雲華為雲百度雲等,國外的有 AWSvultr 等,具體選型可以根據自己的業務需求來定。我們這里以阿里雲服務器的購買為例:

2.1 阿里雲學生主機

針對在校學生阿里雲提供了學生優惠,可以通過雲翼計划來購買可以節省一大筆費用。具體的購買流程可以參考官方教程:阿里雲學生機購買指南說明。對於系統的選擇個人推薦 centos

2.2 普通雲主機

普通阿里雲主機的購買可能涉及到選配置的問題,但是一般來說入門級的服務器就足夠使用,當然如有特殊需要另當他論。此處附上 ECS 雲服務器的購買地址當然對於系統的選擇個人推薦 centos

3.域名購買與備案(可選)

3.1 域名購買

如果條件允許盡量買個域名,因為通過 ip 訪問一方面不方便,另一方面可能會被封禁而且不能進行 SEO 優化,而且現在非熱門域名(熱門域名包括。com、.cn、.net 等)也並不是很貴如我自己購買的。top 域名三年才 43 塊錢。具體購買方式跟購買服務器類似,一般雲服務器提供商順帶都提供域名購買服務。這里我們提供一個阿里雲的域名購買地址:阿里雲域名購買

3.2 域名服務器備案

如果域名或者服務器是國外的一般不需要備案,但是如果說是國內的按照當前國內政策所有域名現在都需備案。一般來說我們可以通過域名購買的服務商域名備案系統來進行備案,當然也可以通過工業與信息化部的 ICP/IP 地址/域名信息備案管理系統來進行備案,這里建議通過前者,因為官方的備案系統進度是很慢的遠遠沒有第三方的備案系統進度快。這里我們以阿里雲的域名備案系統為例,詳細說明域名備案的流程:

第一步:進入域名備案系統
第二步:填寫信息和驗信資料

第三步:等待阿里雲初審
這一步大約會耗時一天左右,如果你第二步資料填寫均符合要求,那么第二天阿里雲客服會給你打來電話,告訴你信息已經通過,將會提交至工信部。如果說資料不符合要求,那么客服會給你打電話並發郵件告訴你資料的不規范之處,更改完成之后重新提交,再次進行阿里雲初審。這個過程一般耗時兩到三天。
第四步:管局審核
這一步是最耗時間的,首先在初審過了之后會有一個工信部短信驗證,也就是確定備案手機號是否可以使用。通過之后信息會正式提供給管局。從提供管局信息到得到反饋一般是 7 到 20 天不等(這個就看當地管局心情了),如果管局信息通過不出意外,你會收到一個備案號和密碼。此時域名備案便完成了。

3.3 域名服務器解析

這一步是所有過程中最輕松的,登陸域名服務商的的域名管理平台,將域名的解析地址指向所購買服務器的 ip,大約兩分鍾之后設置便會生效。

當然我們可以通過 ping 命令來看解析是否生效:

4.solo 安裝

到這一步算是正式進入正題,根據官網提供的安裝方式有兩種分為本地使用Docker 部署

4.1 本地試用

下載最新的 Solo 包解壓,進入解壓目錄執行以下命令:

  • Windows: java -cp "WEB-INF/lib/*;WEB-INF/classes" org.b3log.solo.Starter
  • Linux: java -cp "WEB-INF/lib/*:WEB-INF/classes" org.b3log.solo.Starter
    注意:官方是不太推薦通過 war 包發布或者源碼構建部署,因為這樣的部署方式不利於后續新版本發布時的升級和更新。

4.2 Docker 部署

第一步 獲取最新鏡像:

docker pull b3log/solo

運行結果:

第二步 安裝 MySQL

我們既可以直接在服務器上直接安裝也可以通過 docker 方式在 docker 容器中安裝
方式一:docker 安裝

# 安裝mysql:5.6,直接docker run 他會自動去官方鏡想下載
# MYSQL_ROOT_PASSWORD=[的數據庫密碼,此處寫的是123456
docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6
# docker安裝的mysql默認允許遠程連接,可以使用Navicat等軟件連接數據庫
# 進入容器mysql
docker exec -it mysql bash

# 進入數據庫 p后面跟你的密碼
mysql -uroot -p123456

# 創建數據庫(數據庫名:solo;字符集utf8mb4;排序規則utf8mb4_general_ci)
create database solo DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
# 出現Query OK, 1 row affected (0.00 sec)表示成功
#退出數據庫
exit
#退出容器
exit

運行結果如下:

方式二:物理機上直接安裝
由於配置稍顯繁瑣,可以參考下邊這篇博客:
Centos 安裝 mysql(YUM 源方式)

第三步 安裝 solo

運行如下命令:

docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://127.0.0.1:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
b3log/solo --listen_port=8080 --server_scheme=http --server_host=www.vcjmhg.top
  • --detach: 這個選項告訴 Docker 在啟動后將程序與控制台分離,使其進入“后台”運行。
  • --name solo: solo 是容器的名字,也可以改成自己喜歡的名字如 mysolo,這個無所謂
  • RUNTIME_DB="MYSQL": 指明我們此處使用的數據庫為 MYSQL,如果使用,H2 Database,將 MYSQL 改成 org.h2.Driver 即可
  • JDBC_USERNAME="root": 指明 MYSQL 數據連接時使用的用戶名,默認都是 root
  • JDBC_PASSWORD="123456": 指明 MySQL 數據庫連接時用戶密碼,使用時注意將 123456 替換成自己在上一步所設置的密碼
  • env JDBC_DRIVER="com.mysql.cj.jdbc.Driver":數據庫連接驅動包,如果使用,H2 Database,將 om.mysql.cj.jdbc.Driver 改成 H2 即可
  • --server_host=www.vcjmhg.top: 個人域名,如果沒有可設置為自己的服務器 ip
  • --env JDBC_URL=...:
  • --listen_port=8080:指明 solo 監聽的端口此處使用的是 8080,如果不想配置 nginx 此處可以換成 80

命令運行結果:

命令執行完成之后沒有報錯的話,通過 docker ps 查看當前當前容器列表中是否有名字叫 solo 的容器,如果有證明啟動成功了,此時可以通過 個人域名/ip+:8080 來進行訪問,類似 http://192.168.217.132:8080,如果不想配置 nginx 可以將 8080 換成 80,可以直接通過域名/ip 來直接進行訪問,類似 vcjmhg 的博客--https://vcjmhg.top。不出意外會出現如下界面(如果出現不能訪問的情況考慮是否是防火牆配置有問題,查看是否開發 8080 或者 80 端口):

由於后邊我們需要配置 nginx 進行反向代理以及配置 ssl 證書來實現 https 方式訪問,因此在看到 solo 啟動正常之后,此處創建的 solo 鏡像需要刪除,等配置完 nginx 之后重新在創建一個。
刪除 solo 容器直接執行下邊命令

docker kill --name solo
docker rm --name solo

命令執行結果如下:

5.安裝 nginx(可選)

安裝之前為了后續配置 nginx 方便,我們需要在本地創建幾個文件,用來掛載 nginx 的配置文件

# 切換到服務器根目錄
cd /
# 創建主目錄
mkdir dockerData
# 創建文件
mkdir dockerData/nginx dockerData/nginx/conf dockerData/nginx/logs dockerData/nginx/www dockerData/nginx/ssl

上邊的文件目錄名稱可以任意,此處我使用 dockerDate

  • dockerData/nginx 用於存放 dockernginx 自定義文件
  • dockerData/nginx/conf 存放 nginx 配置文件
  • dockerData/nginx/log 存放 nginx 日志文件
  • dockerData/nginx/www:存放 nginx 訪問的資源文件
  • dockerData/nginx/ssl 存放 ssl 證書
    命令執行結果如下:

啟動 nginx

docker run --name nginx -p 80:80 -d nginx

命令執行結果如下:

如果沒有備案,80 端口可能是禁止訪問的,因此可以可以將上邊的 80:80 換成 8080:80。命令執行完成之后,沒有報錯的話可以通過 docker ps 來看 nginx 是否正常運行,在運行的情況下訪問的域名加上端口號查看是否正常安裝,如果使用的 80 端口默認可以省略。出現如下界面表示安裝成功。

導出配置文件:

docker cp nginx:/etc/nginx/nginx.conf /dockerData/nginx/conf/nginx.conf  #導出配置文件nginx.conf
docker cp nginx:/etc/nginx/conf.d /dockerData/nginx/conf/conf.d  #導出conf.d
cd /dockerData/nginx/ 
ls conf/   #查看配置文件是否導出成功
docker stop nginx  #刪除剛才創建的nginx容器
docker rm nginx

命令執行結果:

重新創建一個 nginx 容器,掛載剛才本地導出的配置文件,便於后續更改 nginx 的配置信息

docker run -d -p 80:80 --name nginx \
-v /dockerData/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /dockerData/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /dockerData/nginx/www:/usr/share/nginx/html \
-v /dockerData/nginx/logs:/var/log/nginx nginx
  • -v /dockerData/nginx/conf/nginx.conf:/etc/nginx/nginx.conf : 掛載配置文件 nginx.conf
  • -v /dockerData/nginx/conf/conf.d:/etc/nginx/conf.d : 掛載配置文件 default.conf
  • -v /dockerData/nginx/www:/usr/share/nginx/html : 掛載項目文件
  • -v /dockerData/nginx/logs:/var/log/nginx : 掛載配置文件

命令執行結果如下:

注意: 我自己在搭建過程中發現執行 docker ps 命令后發現 nginx 並沒有被啟動,使用命令 docker logs nginx 發現掛載文件時權限不足,果斷在創建 nginx 容器是加上 --privileged=true 參數(如果沒有出現該問題可不加上述參數)。

即執行如下命令

docker run -d -p 80:80 --name nginx --privileged true \
-v /dockerData/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \·
-v /dockerData/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /dockerData/nginx/www:/usr/share/nginx/html \
-v /dockerData/nginx/logs:/var/log/nginx nginx

執行 docker ps -a 此時容器運行正常

容器創建完成之后重新訪問在瀏覽器訪問可能會出現如下界面:

此時你可以在 www 目錄下創建一個 html 文件,也可以先不用管,等后續配置完成之后自然會消失。

6. 配置 ssl 證書(可選)

從 http 升級到 https 只需要在 nginx 中配置一個證書即可,一般性的 ssl 證書是可以免費申請的

6.1 證書選購

阿里雲或者騰訊雲都提供證書申請服務,這里以阿里雲的證書申請為例:
第一步: 進入阿里雲的證書購買地址 https://www.aliyun.com/product/cas

第二步: 進入購買頁面,選擇 免費型DV SSL

第三步: 支付

第四步: 進入控制台,進行證書下載

6.2 配置 nginx 配置文件

下載之后會得到一個名字類似於 2793667_www.vcjmhg.top_nginx.zip 的文件,將其上傳到服務器 /dockerData/nginx/ssl 目錄中,解壓后(通過 unzip 命令)會得到如下兩個文件

大家可以參考我的配置文件進行配置,配置自己的 default.conf 文件。

server {
    listen       443;
    server_name  localhost;
    ssl on;
    ssl_certificate /ssl/2793667_www.vcjmhg.top.pem;  # ssl 證書目錄
    ssl_certificate_key /ssl/2793667_www.vcjmhg.top.key;
    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;  

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location / {
       #root   /usr/share/nginx/html;
       # index  index.html index.htm;
       # 官方博客上此處用的是域名,但配置時發現不好使,所以我用的是服務器ip
       proxy_pass http://39.105.61.192:8080;
    }

    #error_page  404              /404.html;

    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
}
server{
  listen 80;
  server_name www.vcjmhg.top;
  rewrite ^(.*) https://$host$1 permanent;
}

注意:上邊的配置文件只是參考,要根據自己的服務器做出相應更改。
由於我們現在用的 nginx 容器並未監聽 443 端口,所以需要刪除現在的容器,重新啟動一個新的 nginx 容器

#先刪除原來的nginx容器
docker stop nginx;
docker rm nginx;
#創建新的nginx容器
docker run -d -p 80:80 -p 443:443 --name nginxs \
-v /dockerData/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /dockerData/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /dockerData/nginx/ssl:/ssl/ \
-v /dockerData/nginx/www:/usr/share/nginx/html \
-v /dockerData/nginx/logs:/var/log/nginx nginx

#創建新的solo容器並映射到8080端口,用上邊的nginx進行反向代理
docker run --detach --name solo --network=host \
--env RUNTIME_DB="MYSQL" \
--env JDBC_USERNAME="root" \
--env JDBC_PASSWORD="123456" \
--env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
--env JDBC_URL="jdbc:mysql://192.168.217.132:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
b3log/solo --listen_port=8080 --server_scheme=https --server_host=www.vcjmhg.top --server_port=
  • --server_scheme=http 換成 --server_scheme=https 即可
  • --server_port:最終訪問端口,使用瀏覽器默認的 80 或者 443 的話值留空即可
  • 如果出現權限不足問題,啟動時加上 -privileged true 參數即可

重啟 nginx,docker restart nginx,然后用瀏覽器訪問 https://域名 類似於 https://www.vcjmhg.top,登陸 github 賬戶后出現如下界面

后記

首先官方已經給了一些安裝的教程,一位叫 墨殤 的博主也已經給了特別詳細的安裝教程(地址,點這里),但是我自己在配置過程中出現了好多問題,因此我在這里寫下來這篇博客,希望能給他人提供一些幫助。當然可能個人水平有限,中間難免會出現一些錯誤,如若發現懇請指出,不勝賜教。如果按照本教程在配置過程中遇到什么問題,歡迎在博客下邊留言,我若看到的話一定第一時間回復,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM