分类:笔记 日期:2023-12-19 作者:caocaofff 浏览:692
使用docker搭建confluence的教程非常多,这里写一下使用k8s部署的方法。
本教程仅供学习使用。
k8s 版本:1.23.0 (master+node,两个节点)
docker 版本:20.10.6
mysql 版本:5.7.44
mysql使用docker运行(也可以写deployment),数据和my.cnf持久化:
docker run -d --name=mysql-server -p 13306:3306 --restart=always -v /opt/mysql-data/my.cnf:/etc/my.cnf -v /opt/mysql-data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql:5.7.44
my.cnf使用下面的配置:
[mysqld]
character-set-server=utf8mb4
collation-server=utf8mb4_bin
default-storage-engine=INNODB
max_allowed_packet=256M
innodb_log_file_size=2GB
transaction-isolation=READ-COMMITTED
binlog_format=row
log-bin-trust-function-creators = 1
提前创建数据库:
create database confluence character set 'utf8mb4' collate 'utf8mb4_bin' ;
use confluence;
SET GLOBAL TRANSACTION ISOLATION LEVEL READ COMMITTED;
从官方仓库下载你需要的版本,这里示例是7.13.20版本
docker pull atlassian/confluence-server:7.13.20
网上的教程是需要加入中文字体,但实测不需要,默认支持中文语言,而且上传中文名称的图片也显示正常。
破解包源自GitHub,但我编译后无法正常破解,所以又在网上找到了v1.3.1的jar包:atlassian-agent-v1.3.1.zip,实测正常破解(破解后就不要使用官网来生成试用授权了,会提示无效)。
还需要从官网下载MySQL的驱动,这个根据你使用的数据库版本来选择,我使用了高版本,所以后面使用kubectl logs查看pod日志时会有告警,但不影响:https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-j-8.2.0.tar.gz
以下是Dockerfile文件内容
FROM atlassian/confluence-server:7.13.20
USER root
# 将代理破解包加入容器
COPY "atlassian-agent-v1.3.1.jar" /opt/atlassian/confluence/
# mysql驱动
COPY "mysql-connector-j-8.2.0.jar" /opt/atlassian/confluence/confluence/WEB-INF/lib/
# 设置启动加载代理包
RUN mkdir /opt/share && apt update -y && apt install -y busybox && apt clean && busybox --install && echo "" >> /opt/atlassian/confluence/bin/setenv.sh && echo 'export CATALINA_OPTS="-javaagent:$LOGBASEABS/atlassian-agent-v1.3.1.jar ${CATALINA_OPTS}"' >> /opt/atlassian/confluence/bin/setenv.sh
因为confluence官方docker镜像使用的基础镜像是Ubuntu22.04,而且缺少一些常用命令(比如vi、netstat),所以我直接安装了busybox来代替这些命令。
如果直接追加jar包到setenv.sh,会出现追加到注释后面而失效的问题,所以加了echo先打印一个换行。
docker build -t 192.168.1.129/public/confluence-crack:7.13.20 .
构造过程中安装软件的过程省略。
查看构建好的镜像:docker images|grep conf
推送到harbor仓库:docker push 192.168.1.129/public/confluence-crack:7.13.20
我使用了nfs来做持久化存储,加了就绪检查。本来是准备做集群模式的,但发现这在单个deployment下无法实现,所以只能单副本(或者你可以使用StatefulSet)。
实际只需要/var/atlassian/application-data/confluence目录持久化就足够了,pod重启不影响授权和用户数据。
注意:如果你更新镜像,按k8s默认部署方式是先创建新资源后删除旧资源,但因为加入了就绪检查,新pod在running时会一直不ready,访问/status会返回500,所以要先删除旧资源。(这个是confluence部署的问题,因为使用了相同的数据目录和数据库,所以同一时间只能运行一个副本,建议你更新镜像时先把副本数缩0、再更新镜像、再扩成1)
apiVersion: apps/v1
kind: Deployment
metadata:
name: confluence
spec:
replicas: 1
selector:
matchLabels:
app: confluence
template:
metadata:
labels:
app: confluence
spec:
containers:
- name: confluence
image: 192.168.1.129/public/confluence-crack:7.13.20
imagePullPolicy: IfNotPresent
volumeMounts:
- name: confluence-data
mountPath: /var/atlassian/application-data/confluence
- name: confluence-share
mountPath: /opt/share
env:
- name: TZ
value: "Asia/Shanghai"
ports:
- containerPort: 8090
name: http
- containerPort: 8091
resources:
limits:
cpu: "4"
memory: 8Gi
requests:
cpu: "2"
memory: 4Gi
readinessProbe:
httpGet:
path: /status
port: http
initialDelaySeconds: 150
periodSeconds: 30
successThreshold: 1
timeoutSeconds: 1
volumes:
- name: confluence-data
nfs:
path: /opt/nfs/confluence/data
server: 192.168.1.130
- name: confluence-share
nfs:
path: /opt/nfs/confluence/share
server: 192.168.1.130
svc文件内容:
apiVersion: v1
kind: Service
metadata:
name: confluence-service
labels:
name: confluence-service
app: confluence
spec:
type: NodePort
ports:
- port: 8090
targetPort: 8090
protocol: TCP
nodePort: 30090
selector:
app: confluence
kubectl apply -f confluence-crack-*.yaml
kubectl get po,svc -l app=confluence
根据svc地址,在浏览器访问IP加端口,开始进行安装。
破解步骤
安装时会提示让你输入license,你可以进入pod,然后执行:
java -jar /opt/atlassian/confluence/atlassian-agent-v1.3.1.jar -d -m admin@test.com -o test -p 'conf' -s `cat /var/atlassian/application-data/confluence/confluence.cfg.xml |grep confluence.setup.server.id|awk -F">" '{print $2}'|awk -F"<" '{print $1}'`
这样会生成跟你server id相匹配的license,复制到输入框就行了。
安装步骤很简单,网络上都有教程,我就不细说了。
找到要升级的版本,重新构建镜像,可以使用下面命令直接更新:
kubectl set image deploy/confluence confluence=192.168.1.129/public/confluence-crack:8.5.4 --record=true
但是我不建议这样做,因为上面已经对相关数据做了持久化,所以跑多个pod时就绪检查会报错,正确做法应该这样:
#副本数缩小为0
kubectl scale deploy confluence --replicas=0
然后再更新镜像,这时就能正常执行健康检查了。
CC版权: 本篇博文采用《CC 协议》,转载必须注明作者和本文链接