如何利用solo搭建自己的博客

主頁效果

在這裏插入圖片描述

後臺管理髮布文章界面:
在這裏插入圖片描述
自帶管理功能,使用github賬號登陸即可。
Solo是一款小而美Java編寫的博客系統,功能豐富,插件化,皮膚可選可定製,管理方便,社區活躍。
在這裏插入圖片描述

本文章介紹利用Solo開源博客系統在雲服務器上搭建自己的博客,讓我開始吧。

前提,把需要公網IP訪問的端口,需要在控制檯加到安全組裏放行。

docker搭建

第一步就是安裝docker

yum install docker.x86_64 -y

安裝完成後啓動docker

systemctl start docker

安裝mysql

參考歷史文章:
mysql鏡像安裝
在這裏插入圖片描述
在這裏插入圖片描述
比如用上面幾行命令部署mysql,把容器內3306端口映射到宿主機的3307端口。到時候就可以用{雲服務器公網IP:3307訪問數據庫},mysql部署好後,先手動建庫(庫名 solo,字符集使用 utf8mb4,排序規則 utf8mb4_general_ci)

啓動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://47.91.6.217:3307/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
    b3log/solo --listen_port=8080 --server_scheme=http --server_host=47.91.6.217
  • –detach即-d參數指定後臺運行,
  • –name指定容器名稱,
  • –env指定solo系統運行數據庫參數,
  • –listen_port:進程監聽端口
  • –server_scheme:最終訪問協議,如果反代服務啓用了 HTTPS 這裏也需要改爲 https
  • –server_host:最終訪問域名或公網 IP,不要帶端口
  • –server_port:最終訪問端口,使用瀏覽器默認的 80 或者 443 的話值留空即可

使用的鏡像是b3log/solo最新版,這裏比如,47.91.6.217是我服務器公網IP,用47.91.6.217:8080訪問:
在這裏插入圖片描述

k8s集羣中部署

mysql和solo都使用pod方式部署,分別創建mysql deployment管理pod,mysql service提供service clusterIP供solo調用;創建solo deployment管理solo服務,solo service提供簡單的服務發現,solo ingress提供域名配置,入口負載均衡。如果沒有域名,可以直接通過NodePort service暴露端口。

mysql的deploy:
apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: mysql
spec:
  replicas: 1
  template: 
    metadata:
      labels:
        name: mysql
    spec:
      containers:
      - name: mysql 
        image: mysql:5.7.28 
        imagePullPolicy: IfNotPresent
        ports:
        - containerPort: 3306
        env:
        - name: MYSQL_ROOT_PASSWORD
          value: "password"

mysql的service:

apiVersion: v1
kind: Service
metadata:
  name: mysql
  labels: 
    name: mysql
spec:
  type: ClusterIP
  ports:
  - port: 3306
    protocol: TCP
    targetPort: 3306
    name: http
  selector:
    name: mysql

solo的deploy:

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: solo
spec:
  replicas: 1
  template: 
    metadata:
      labels:
        name: solo
    spec:
      containers:
      - name: solo
        image: b3log/solo 
        imagePullPolicy: IfNotPresent
        args: ["--server_scheme=http", "--server_host=blog.liabio.cn"]
        ports:
        - containerPort: 8080
        env:
        - name: RUNTIME_DB
          value: MYSQL
        - name: JDBC_USERNAME
          value: solo
        - name: JDBC_PASSWORD
          value: solo-liabio
        - name: JDBC_DRIVER
          value: "com.mysql.cj.jdbc.Driver"
        - name: JDBC_URL
          value: "jdbc:mysql://10.100.133.125:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"

solo的service:

apiVersion: v1
kind: Service
metadata:
  name: solo
  labels: 
    name: solo
spec:
  type: ClusterIP
  ports:
  - port: 8080
    protocol: TCP
    targetPort: 8080
    name: http
  selector:
    name: solo

這裏我用到的是ClusterIP的service,沒有用到NodePort的service,是因爲準備用ingress-nginx做負載。

ingress-nginx的部署方式可以參考歷史文章:
k8s中負載均衡器【ingress-nginx】部署

solo的ingress:

apiVersion: extensions/v1beta1
kind: Ingress
metadata:
  name: solo
spec:
  rules:
    - host: blog.liabio.cn
      http:
        paths:
          - backend:
              serviceName: solo
              servicePort: 8080
            path: /

在這裏插入圖片描述
由於ingress-nginx組件使用hostNetwork方式部署,所以可以通過公網IP:80端口訪問。

備註:如果要部署k8s,1核2G可能扛不住,至少得2核4G

作者簡潔

作者:小碗湯,一位熱愛、認真寫作的小夥,目前維護原創公衆號:『我的小碗湯』,專注於寫golang、docker、kubernetes等知識等提升硬實力的文章,期待你的關注。 轉載說明:務必註明來源(註明:來源於公衆號:我的小碗湯, 作者:小碗湯)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章