大家都知道最近阿里云服务器很便宜火爆,于是小编也入手了一台3年的,配置:1核2G内存,40G硬盘,买了不能闲置着,可以搭建自己的网站、博客、代码仓库等,用处广泛着呢!有很多朋友问怎么搭建网站,怎么用?应小伙伴们的需求,今天来学习一下最简单的网站搭建,只需要5分钟,就可以轻松搭建!
可以浏览http://blog.liabio.cn查看我的博客。
主页效果:

后台管理发布文章界面:

自带管理功能,使用github账号登陆即可。
Solo是一款小而美Java编写的博客系统,功能丰富,插件化,皮肤可选可定制,管理方便,社区活跃。

本文章介绍利用Solo开源博客系统在云服务器上搭建自己的博客,让我开始吧。
前提,把需要公网IP访问的端口,需要在阿里云控制台加到安全组里放行。
docker搭建
第一步就是安装docker
yum install docker.x86_64 -y
安装完成后启动docker
systemctl start docker
安装mysql:
参考历史文章:mysql镜像安装:
https://mp.weixin.qq.com/s/K0d70ZI-q92P01-4-J8hLA


比如用上面几行命令部署mysql,把容器内3306端口映射到宿主机的3307端口。到时候就可以用{阿里云公网IP:3307访问数据库},mysql部署好后,先手动建库(库名 solo,字符集使用 utf8mb4,排序规则 utf8mb4_general_ci)
启动容器
然后启动容器:
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/v1beta1kind: Deploymentmetadata:name: mysqlspec:replicas: 1template:metadata:labels:name: mysqlspec:containers:- name: mysqlimage: mysql:5.7.28imagePullPolicy: IfNotPresentports:- containerPort: 3306env:- name: MYSQL_ROOT_PASSWORDvalue: "password"
mysql的service:
apiVersion: v1kind: Servicemetadata:name: mysqllabels:name: mysqlspec:type: ClusterIPports:- port: 3306protocol: TCPtargetPort: 3306name: httpselector:name: mysql
solo的deploy:
apiVersion: extensions/v1beta1kind: Deploymentmetadata:name: solospec:replicas: 1template:metadata:labels:name: solospec:containers:- name: soloimage: b3log/soloimagePullPolicy: IfNotPresentargs: ["--server_scheme=http", "--server_host=blog.liabio.cn"]ports:- containerPort: 8080env:- name: RUNTIME_DBvalue: MYSQL- name: JDBC_USERNAMEvalue: solo- name: JDBC_PASSWORDvalue: solo-liabio- name: JDBC_DRIVERvalue: "com.mysql.cj.jdbc.Driver"- name: JDBC_URLvalue: "jdbc:mysql://10.100.133.125:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"
solo的service:
apiVersion: v1kind: Servicemetadata:name: sololabels:name: solospec:type: ClusterIPports:- port: 8080protocol: TCPtargetPort: 8080name: httpselector:name: solo
这里我用到的是ClusterIP的service,没有用到NodePort的service,是因为准备用ingress-nginx做负载。
ingress-nginx的部署方式可以参考历史文章:
k8s中负载均衡器【ingress-nginx】部署
https://mp.weixin.qq.com/s/RmN6NTRPU1GYaKZvg2gwkg
solo的ingress:
apiVersion: extensions/v1beta1kind: Ingressmetadata:name: solospec:rules:- host: blog.liabio.cnhttp:paths:- backend:serviceName: soloservicePort: 8080path: /

由于ingress-nginx组件使用hostNetwork方式部署,所以可以通过公网IP:80端口访问。
