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

可以浏览http://blog.liabio.cn查看我的博客。

主页效果:

image.png

后台管理发布文章界面:

image.png

自带管理功能,使用github账号登陆即可。

Solo是一款小而美Java编写的博客系统,功能丰富,插件化,皮肤可选可定制,管理方便,社区活跃。

image.png


本文章介绍利用Solo开源博客系统在云服务器上搭建自己的博客,让我开始吧。

前提,把需要公网IP访问的端口,需要在阿里云控制台加到安全组里放行。

docker搭建

第一步就是安装docker

  1. yum install docker.x86_64 -y

安装完成后启动docker

  1. systemctl start docker

安装mysql:
参考历史文章:mysql镜像安装:
https://mp.weixin.qq.com/s/K0d70ZI-q92P01-4-J8hLA

image.png

image.png

比如用上面几行命令部署mysql,把容器内3306端口映射到宿主机的3307端口。到时候就可以用{阿里云公网IP:3307访问数据库},mysql部署好后,先手动建库(库名 solo,字符集使用 utf8mb4,排序规则 utf8mb4_general_ci

启动容器

然后启动容器:

  1. docker run --detach --name solo --network=host \
  2. --env RUNTIME_DB="MYSQL" \
  3. --env JDBC_USERNAME="root" \
  4. --env JDBC_PASSWORD="123456" \
  5. --env JDBC_DRIVER="com.mysql.cj.jdbc.Driver" \
  6. --env JDBC_URL="jdbc:mysql://47.91.6.217:3307/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC" \
  7. 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访问:

image.png

k8s集群中部署

思路:mysql和solo都使用pod方式部署,分别创建mysql deployment管理pod,mysql service提供service clusterIP供solo调用;创建solo deployment管理solo服务,solo service提供简单的服务发现,solo ingress提供域名配置,入口负载均衡。如果没有域名,可以直接通过NodePort service暴露端口。

mysql的deploy:

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: mysql
  5. spec:
  6. replicas: 1
  7. template:
  8. metadata:
  9. labels:
  10. name: mysql
  11. spec:
  12. containers:
  13. - name: mysql
  14. image: mysql:5.7.28
  15. imagePullPolicy: IfNotPresent
  16. ports:
  17. - containerPort: 3306
  18. env:
  19. - name: MYSQL_ROOT_PASSWORD
  20. value: "password"

mysql的service:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: mysql
  5. labels:
  6. name: mysql
  7. spec:
  8. type: ClusterIP
  9. ports:
  10. - port: 3306
  11. protocol: TCP
  12. targetPort: 3306
  13. name: http
  14. selector:
  15. name: mysql

solo的deploy:

  1. apiVersion: extensions/v1beta1
  2. kind: Deployment
  3. metadata:
  4. name: solo
  5. spec:
  6. replicas: 1
  7. template:
  8. metadata:
  9. labels:
  10. name: solo
  11. spec:
  12. containers:
  13. - name: solo
  14. image: b3log/solo
  15. imagePullPolicy: IfNotPresent
  16. args: ["--server_scheme=http", "--server_host=blog.liabio.cn"]
  17. ports:
  18. - containerPort: 8080
  19. env:
  20. - name: RUNTIME_DB
  21. value: MYSQL
  22. - name: JDBC_USERNAME
  23. value: solo
  24. - name: JDBC_PASSWORD
  25. value: solo-liabio
  26. - name: JDBC_DRIVER
  27. value: "com.mysql.cj.jdbc.Driver"
  28. - name: JDBC_URL
  29. value: "jdbc:mysql://10.100.133.125:3306/solo?useUnicode=yes&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC"

solo的service:

  1. apiVersion: v1
  2. kind: Service
  3. metadata:
  4. name: solo
  5. labels:
  6. name: solo
  7. spec:
  8. type: ClusterIP
  9. ports:
  10. - port: 8080
  11. protocol: TCP
  12. targetPort: 8080
  13. name: http
  14. selector:
  15. name: solo

这里我用到的是ClusterIP的service,没有用到NodePort的service,是因为准备用ingress-nginx做负载。
ingress-nginx的部署方式可以参考历史文章:
k8s中负载均衡器【ingress-nginx】部署
https://mp.weixin.qq.com/s/RmN6NTRPU1GYaKZvg2gwkg

solo的ingress:

  1. apiVersion: extensions/v1beta1
  2. kind: Ingress
  3. metadata:
  4. name: solo
  5. spec:
  6. rules:
  7. - host: blog.liabio.cn
  8. http:
  9. paths:
  10. - backend:
  11. serviceName: solo
  12. servicePort: 8080
  13. path: /

image.png

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