主頁效果
後臺管理髮布文章界面:
自帶管理功能,使用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等知識等提升硬實力的文章,期待你的關注。 轉載說明:務必註明來源(註明:來源於公衆號:我的小碗湯, 作者:小碗湯)