1. 简介

容器的自定义操作参考自行创建 Docker 镜像

Confluence 的安装配置操作步骤繁琐,有很多需要注意的地方。不同版本间的配置都存在差异。利用 Docker 的功能实现配置项目的整合

2. 创建新镜像

2.1. 生成合适的版本

cat > opt/wiki/Dockfile << EOF
FROM atlassian/confluence-server
RUN openssl s_client -connect marketplace.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace.atlassian.com.crt
RUN keytool -import -trustcacerts -alias proxy_root -file /tmp/marketplace.atlassian.com.crt -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -noprompt
COPY --chown=confluence:confluence ./deps/mysql-connector-java-5.1.49.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/
COPY --chown=confluence:confluence ./deps/mysql-connector-java-8.0.28.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/
COPY ./deps/atlassian-agent.jar /var/atlassian/
RUN chmod +x /var/atlassian/atlassian-agent.jar
COPY ./deps/simsun.ttc /usr/local/share/fonts/simsun.ttc
RUN mv /opt/atlassian/confluence/bin/setenv.sh  /tmp
COPY ./deps/setenv.sh /opt/atlassian/confluence/bin/
EOF
docker build -t confluence:7.7 .
FROM atlassian/confluence:latest
RUN openssl s_client -connect marketplace.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace.atlassian.com.crt
RUN openssl s_client -connect marketplace-cdn.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace-cdn.atlassian.com.crt
RUN openssl s_client -connect api.media.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/api.atlassian.com.crt
RUN keytool -importcert -alias marketplace.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace.atlassian.com.crt
RUN keytool -importcert -alias marketplace-cdn.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace-cdn.atlassian.com.crt
RUN keytool -importcert -alias api.media.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/api.atlassian.com.crt
ENV JAVA_OPTS="-javaagent:/var/atlassian/atlassian-agent.jar ${JAVA_OPTS}"
USER root
COPY ./deps/atlassian-agent.jar /var/atlassian/
RUN chmod 755 /var/atlassian/atlassian-agent.jar
COPY ./deps/simsun.ttc /usr/local/share/fonts/simsun.ttc

2.2. 解决时间戳不正确

默认 Confluence 使用的是东一区(零时区)的时间制式,想解决时区问题,需要先在 environment 字段内指定 CATALINA_OPTS 参数内容。也可以把对应的参数整合到 setenv.sh 文件中

environment:
    - 'CATALINA_OPTS= -Duser.timezone=GMT+08'

另外,为了避免容器和宿主机时间不一致,可以将本机的 localtime 挂载到容器中。

volumes:
  - /etc/localtime:/etc/localtime:ro

2.3. 解决应用卡顿

之前的完整配置将会使用 Confluence 默认资源运行服务,程序最大使用内存是 1GB,当团队人数和内容多了之后,由于资源不足,会让服务运行变慢,最简单的解决方案就是增加资源。只需要在 environment 字段内声明下面内容即可。

environment:
    - 'JVM_MINIMUM_MEMORY=4096m'
    - 'JVM_MAXIMUM_MEMORY=8192m'

2.4. 解决中文文档不能预览

由于默认容器镜像不包含中文字体,当我们想预览一个中文文档的时候,得到的结果会是一堆“口口口”方块。

解决这个问题的第一步是为镜像系统安装中文字体,下载一些中文字体 ( ttf/ttc ),比如宋体、楷体,将文件命名为:simsun.ttf、simkai.ttc,然后保存在 fonts 文件夹中,然后挂载到容器系统中。

environment:
  - 'CATALINA_OPTS= -Duser.timezone=GMT+08 -Dconfluence.document.conversion.fontpath=/usr/local/share/fonts/ '

2.5. 解决应用市场不能访问

keytool -import -trustcacerts -alias proxy_root -file marketplace.atlassian.com.crt -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -noprompt

2.6. 解决 graphviz 无法显示

apt install graphviz

2.7. 解决 PlantUML 的中文乱码问题

原因是缺少中文字体,安装好中文字体即可。可以直接引用添加的中文字体 /var/confluence/fonts/simsun.ttc

apt install fontconfig xfonts-utils
mkdir -p /usr/share/fonts/simsun
cd /usr/share/fonts/simsun
cp  /var/confluence/fonts/simsun.ttc ./
mkfontscale
mkfontdir
fc-cache -fv

3. 全新创建 confluence 容器镜像

通过上面方式创建的容器镜像有几个问题:

  • 直接引用官网文件,容器体积较大
  • 只能使用官网自定义的路径
  • 构建文件不够灵活,不同的版本需要调整的内容比较多
  • 需要完成 confluence 后才能使用 docker-compose 配置文件的模式

全新创建的方式更具灵活性,考虑互联网的因素,这里采取先将对应的文件下载好在复制到容器镜像里的方式。同时数据库采用 MySQL 架构

3.1. Dockerfile

FROM openjdk:11-bullseye
  
LABEL maintainer="waringid <waringid@gmail.com>" version="8.8.1"

ARG ATLASSIAN_PRODUCTION=confluence
ARG APP_NAME=confluence
ARG APP_VERSION=8.8.1
ARG AGENT_VERSION=1.3.3
ARG MYSQL_DRIVER_VERSION=8.0.28

ENV CONFLUENCE_HOME=/var/confluence \
    CONFLUENCE_INSTALL=/opt/confluence \
    JVM_MINIMUM_MEMORY=1g \
    JVM_MAXIMUM_MEMORY=3g \
    JVM_CODE_CACHE_ARGS='-XX:InitialCodeCacheSize=1g -XX:ReservedCodeCacheSize=2g' \
    AGENT_PATH=/var/agent \
    AGENT_FILENAME=atlassian-agent.jar \
    LIB_PATH=/confluence/WEB-INF/lib

ENV JAVA_OPTS="-javaagent:${AGENT_PATH}/${AGENT_FILENAME} ${JAVA_OPTS}"

COPY ./deps/${AGENT_FILENAME} ${AGENT_PATH}/
COPY ./deps/atlassian-${ATLASSIAN_PRODUCTION}-${APP_VERSION}.tar.gz /tmp
COPY ./deps/mysql-connector-java-${MYSQL_DRIVER_VERSION}.jar  ${CONFLUENCE_INSTALL}/lib/

RUN openssl s_client -connect marketplace.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace.atlassian.com.crt \
&& openssl s_client -connect marketplace-cdn.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace-cdn.atlassian.com.crt \
&& openssl s_client -connect api.media.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/api.atlassian.com.crt \
&& keytool -importcert -alias marketplace.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace.atlassian.com.crt \
&& keytool -importcert -alias marketplace-cdn.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace-cdn.atlassian.com.crt \
&& keytool -importcert -alias api.media.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/api.atlassian.com.crt

RUN mkdir -p ${CONFLUENCE_INSTALL} ${CONFLUENCE_HOME} ${AGENT_PATH} ${CONFLUENCE_INSTALL}${LIB_PATH} \
&&  tar zxf /tmp/atlassian-${APP_NAME}-${APP_VERSION}.tar.gz  -C /opt/confluence/ --strip-components 1 \
&& rm -rf /tmp/* \
&& echo "confluence.home = ${CONFLUENCE_HOME}" > ${CONFLUENCE_INSTALL}/${ATLASSIAN_PRODUCTION}/WEB-INF/classes/confluence-init.properties

WORKDIR $CONFLUENCE_INSTALL
EXPOSE 8090

ENTRYPOINT ["/opt/confluence/bin/start-confluence.sh", "-fg"]

├── deps
│   ├── atlassian-agent.jar
│   ├── atlassian-confluence-8.8.1.tar.gz
│   ├── mysql-connector-java-8.0.28.jar
│   └── simsun.ttc
└── Dockerfile

4. Dockerfile-9.0.3

FROM openjdk:17-bullseye
  
LABEL maintainer="waringid <waringid@gmail.com>" version="9.0.3"
  
ARG ATLASSIAN_PRODUCTION=confluence
ARG APP_NAME=confluence
ARG APP_VERSION=9.0.3
ARG AGENT_VERSION=1.3.3
ARG MYSQL_DRIVER_VERSION=8.0.28
  
ENV CONFLUENCE_HOME=/var/confluence \
    CONFLUENCE_INSTALL=/opt/confluence \
    JVM_MINIMUM_MEMORY=1g \
    JVM_MAXIMUM_MEMORY=3g \
    JVM_CODE_CACHE_ARGS='-XX:InitialCodeCacheSize=1g -XX:ReservedCodeCacheSize=2g' \
    AGENT_PATH=/var/agent \
    AGENT_FILENAME=atlassian-agent.jar \
    LIB_PATH=/confluence/WEB-INF/lib
  
ENV JAVA_OPTS="-javaagent:${AGENT_PATH}/${AGENT_FILENAME} ${JAVA_OPTS}"
 
COPY ./deps/${AGENT_FILENAME} ${AGENT_PATH}/
COPY ./deps/atlassian-${ATLASSIAN_PRODUCTION}-${APP_VERSION}.tar.gz /tmp
COPY ./deps/mysql-connector-java-${MYSQL_DRIVER_VERSION}.jar  ${CONFLUENCE_INSTALL}/lib/
 
RUN openssl s_client -connect marketplace.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace.atlassian.com.crt \
&& openssl s_client -connect marketplace-cdn.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace-cdn.atlassian.com.crt \
&& openssl s_client -connect api.media.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/api.atlassian.com.crt \
&& keytool -importcert -alias marketplace.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace.atlassian.com.crt \
&& keytool -importcert -alias marketplace-cdn.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace-cdn.atlassian.com.crt \
&& keytool -importcert -alias api.media.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/api.atlassian.com.crt
  
RUN mkdir -p ${CONFLUENCE_INSTALL} ${CONFLUENCE_HOME} ${AGENT_PATH} ${CONFLUENCE_INSTALL}${LIB_PATH} \
&&  tar zxf /tmp/atlassian-${APP_NAME}-${APP_VERSION}.tar.gz  -C /opt/confluence/ --strip-components 1 \
&& rm -rf /tmp/* \
&& echo "confluence.home = ${CONFLUENCE_HOME}" > ${CONFLUENCE_INSTALL}/${ATLASSIAN_PRODUCTION}/WEB-INF/classes/confluence-init.properties
  
WORKDIR $CONFLUENCE_INSTALL
EXPOSE 8090
  
ENTRYPOINT ["/opt/confluence/bin/start-confluence.sh", "-fg"]

5. Dockerfile-9.2.0

FROM openjdk:17-bullseye
  
LABEL maintainer="waringid <waringid@gmail.com>" version="9.2.0"
  
ARG ATLASSIAN_PRODUCTION=confluence
ARG APP_NAME=confluence
ARG APP_VERSION=9.2.0
ARG AGENT_VERSION=1.3.3
ARG MYSQL_DRIVER_VERSION=8.0.28
  
ENV CONFLUENCE_HOME=/var/confluence \
    CONFLUENCE_INSTALL=/opt/confluence \
    JVM_MINIMUM_MEMORY=1g \
    JVM_MAXIMUM_MEMORY=3g \
    JVM_CODE_CACHE_ARGS='-XX:InitialCodeCacheSize=1g -XX:ReservedCodeCacheSize=2g' \
    AGENT_PATH=/var/agent \
    AGENT_FILENAME=atlassian-agent.jar \
    LIB_PATH=/confluence/WEB-INF/lib
  
ENV JAVA_OPTS="-javaagent:${AGENT_PATH}/${AGENT_FILENAME} ${JAVA_OPTS}"
 
COPY ./deps/${AGENT_FILENAME} ${AGENT_PATH}/
COPY ./deps/atlassian-${ATLASSIAN_PRODUCTION}-${APP_VERSION}.tar.gz /tmp
COPY ./deps/mysql-connector-java-${MYSQL_DRIVER_VERSION}.jar  ${CONFLUENCE_INSTALL}/lib/
 
RUN openssl s_client -connect marketplace.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace.atlassian.com.crt \
&& openssl s_client -connect marketplace-cdn.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace-cdn.atlassian.com.crt \
&& openssl s_client -connect api.media.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/api.atlassian.com.crt \
&& keytool -importcert -alias marketplace.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace.atlassian.com.crt \
&& keytool -importcert -alias marketplace-cdn.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace-cdn.atlassian.com.crt \
&& keytool -importcert -alias api.media.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/api.atlassian.com.crt \
&&  sed -i -e "s/deb.debian.org/mirrors.tuna.tsinghua.edu.cn/" /etc/apt/sources.list \
&& sed -i -e "s/security.debian.org/mirrors.tuna.tsinghua.edu.cn/" /etc/apt/sources.list \
&& apt -y update \
&& apt -y install graphviz
  
RUN mkdir -p ${CONFLUENCE_INSTALL} ${CONFLUENCE_HOME} ${AGENT_PATH} ${CONFLUENCE_INSTALL}${LIB_PATH} \
&&  tar zxf /tmp/atlassian-${APP_NAME}-${APP_VERSION}.tar.gz  -C /opt/confluence/ --strip-components 1 \
&& rm -rf /tmp/* \
&& echo "confluence.home = ${CONFLUENCE_HOME}" > ${CONFLUENCE_INSTALL}/${ATLASSIAN_PRODUCTION}/WEB-INF/classes/confluence-init.properties
  
WORKDIR $CONFLUENCE_INSTALL
EXPOSE 8090
  
ENTRYPOINT ["/opt/confluence/bin/start-confluence.sh", "-fg"]

6. Dockfile-9.5.1

和上一个版本相比,该版本将 Java 环境调整为 Eclipse Temurin 21.0.7.6 ,详细的 Confluence 版本和 Java 版本的对应情况可以参考官网说明。这个 Dockfile 将原有镜像的 OpenJDK 调整为 Temurin 的版本主要有2个原因

  • OpenJDK 的版本没有整合系统字体而 Temurin 的版本有,Confluence 依赖 java 环境的字体
  • OpenJDK 的 java 版本信息只显示 21 的大版本信息(21),没有小版本的记录,Temurin 的 java 展示细致的版本信息(21.0.7.6)。Confluence 的健康检查在使用 OpenJDK 的版本会提示系统版本不兼容的警告

该版本的主要调整了以下内容

  1. 为系统增加了中文字体(simsum.ttc)
  2. 安装了字体配置组件和 graphviz ,确保 graphviz 和 plantUML 的图形展示正常
  3. 将 java 版本由 openjdk 调整为 Temurin

可以直接从这里下载:Dockerfile

7. 版本 9.5.4

9.5.4 承接 9.5.1 版本,和 9.5.1 版本主要的区别在于将相关的环境变量配置到基础镜像中,主要有以下的调整

  • 基础镜像结合启动脚本集成环境变量,所有的调整基于环境变量实现。包括 setenv.sh 和 server.xml 文件的内容
  • 数据库版本更新为 pgsql 17.8
  • 添加 confluence 用户并以该用户运行(之前的版本以 root 用户执行)
  • 增加  xmlstarlet 指令动态调整 server.xml 文件的内容
  • 引入 tini 作为 init 启动的初始化指令(tini 作为 PID 1,能正确处理信号和回收僵尸进程,确保优雅关闭。)
  • 通过自定义脚本的 processCatalinaDefaultConfiguration 将启动参数写入 setenv.sh
  • 添加了 postgresql-client 用于数据库连接管理
  • 增加等待脚本,集成数据库等待功能
  • 增加了证书相关的配置和内容

7.1. Dockerfile-9.5.4

# 使用 Eclipse Temurin JDK 21 基于 Ubuntu Noble
FROM eclipse-temurin:21-noble

LABEL maintainer="waringid <waringid@gmail.com>" version="9.5.4"

ARG ATLASSIAN_PRODUCTION=confluence
ARG APP_NAME=confluence
ARG APP_VERSION=9.5.4
ARG AGENT_VERSION=1.3.3
ARG MYSQL_DRIVER_VERSION=8.0.28

# 用户与组配置
ARG CONTAINER_UID=1001
ARG CONTAINER_GID=1001
ARG CONTAINER_USER=confluence

ENV CONFLUENCE_HOME=/var/confluence \
    CONFLUENCE_INSTALL=/opt/confluence \
    JVM_MINIMUM_MEMORY=1g \
    JVM_MAXIMUM_MEMORY=3g \
    JVM_CODE_CACHE_ARGS='-XX:InitialCodeCacheSize=1g -XX:ReservedCodeCacheSize=2g' \
    AGENT_PATH=/var/agent \
    AGENT_FILENAME=atlassian-agent.jar \
    LIB_PATH=/confluence/WEB-INF/lib \
    # 数据库连接环境变量(用于 wait-for-it)
    CONFLUENCE_DB_HOST=db \
    CONFLUENCE_DB_PORT=5432 \
    # 日志路径自定义
    CONFLUENCE_LOGFILE_LOCATION= \
    # 定义 JRE_HOME 指向 JAVA_HOME(Temurin 镜像中 JAVA_HOME 已设置)
    JRE_HOME=$JAVA_HOME

ENV JAVA_OPTS="-javaagent:${AGENT_PATH}/${AGENT_FILENAME} ${JAVA_OPTS}"

# 创建 confluence 用户和组
RUN addgroup --gid ${CONTAINER_GID} ${CONTAINER_USER} \
    && adduser --uid ${CONTAINER_UID} \
               --gid ${CONTAINER_GID} \
               --home /home/${CONTAINER_USER} \
               --shell /bin/bash \
               --disabled-password \
               --gecos "" ${CONTAINER_USER}

# 复制依赖文件(全部从 deps 目录)
COPY ./deps/${AGENT_FILENAME} ${AGENT_PATH}/
COPY ./deps/atlassian-${ATLASSIAN_PRODUCTION}-${APP_VERSION}.tar.gz /tmp
COPY ./deps/mysql-connector-java-${MYSQL_DRIVER_VERSION}.jar ${CONFLUENCE_INSTALL}/lib/
COPY ./deps/simsun.ttc /usr/share/fonts/simsun/
COPY ./deps/upm.properties /var/atlassian/confluence/upmconfig/upm.properties
COPY ./deps/confluence.cfg.xml.tpl ${CONFLUENCE_HOME}/confluence.cfg.xml
COPY ./deps/docker-entrypoint.sh /home/${CONTAINER_USER}/docker-entrypoint.sh
COPY ./deps/wait-for-it.sh /usr/local/bin/wait-for-it
COPY ./deps/custom_scripts.sh /usr/local/bin/custom_scripts.sh

# 替换 Ubuntu 源为清华源并安装系统依赖
RUN sed -i 's/archive.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list \
    && sed -i 's/security.ubuntu.com/mirrors.tuna.tsinghua.edu.cn/g' /etc/apt/sources.list \
    && apt-get update \
    && apt-get install -y --no-install-recommends \
        graphviz \
        fontconfig \
        xfonts-utils \
        xmlstarlet \
        postgresql-client \
        tini \
        ghostscript \
        ttf-mscorefonts-installer \
        wget \
        curl \
    && fc-cache -f \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 导入 Atlassian 证书(保留 export KEYSTORE 和 SSLPoke 下载)
RUN export KEYSTORE=$JRE_HOME/lib/security/cacerts \
    && wget -O /home/${CONTAINER_USER}/SSLPoke.class https://confluence.atlassian.com/kb/files/779355358/779355357/1/1441897666313/SSLPoke.class \
    && openssl s_client -connect marketplace.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace.atlassian.com.crt \
    && openssl s_client -connect marketplace-cdn.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/marketplace-cdn.atlassian.com.crt \
    && openssl s_client -connect api.media.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /tmp/api.atlassian.com.crt \
    && keytool -importcert -alias marketplace.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace.atlassian.com.crt \
    && keytool -importcert -alias marketplace-cdn.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/marketplace-cdn.atlassian.com.crt \
    && keytool -importcert -alias api.media.atlassian.com -cacerts -storepass changeit -noprompt -file /tmp/api.atlassian.com.crt \
    && rm /tmp/*.crt

# 创建目录并解压 Confluence
RUN mkdir -p ${CONFLUENCE_INSTALL} ${CONFLUENCE_HOME} ${AGENT_PATH} ${CONFLUENCE_INSTALL}${LIB_PATH} /usr/share/fonts/simsun \
    && tar zxf /tmp/atlassian-${APP_NAME}-${APP_VERSION}.tar.gz -C ${CONFLUENCE_INSTALL} --strip-components 1 \
    && rm -rf /tmp/* \
    && echo "confluence.home = ${CONFLUENCE_HOME}" > ${CONFLUENCE_INSTALL}/${ATLASSIAN_PRODUCTION}/WEB-INF/classes/confluence-init.properties

# 配置中文字体
RUN cd /usr/share/fonts/simsun/ \
    && mkfontscale \
    && mkfontdir

# 配置 UPM(插件管理)以允许上传插件(权限已保持 root:root 只读)
RUN mkdir -p /var/atlassian/confluence/upmconfig/ \
    && chown root:root /var/atlassian/confluence/upmconfig
COPY ./deps/upm.properties /var/atlassian/confluence/upmconfig/upm.properties
RUN chmod u=r,g=r,o=r /var/atlassian/confluence/upmconfig/upm.properties \
    && chown root:root /var/atlassian/confluence/upmconfig/upm.properties

# 设置执行权限
RUN chmod +x /home/${CONTAINER_USER}/docker-entrypoint.sh \
    && chmod +x /usr/local/bin/wait-for-it \
    && chmod +x /usr/local/bin/custom_scripts.sh

# 调整目录权限给 confluence 用户
RUN chown -R ${CONTAINER_USER}:${CONTAINER_USER} ${CONFLUENCE_HOME} \
    && chown -R ${CONTAINER_USER}:${CONTAINER_USER} ${CONFLUENCE_INSTALL} \
    && chown -R ${CONTAINER_USER}:${CONTAINER_USER} ${AGENT_PATH} \
    && chown -R ${CONTAINER_USER}:${CONTAINER_USER} /home/${CONTAINER_USER} \
    && chown ${CONTAINER_USER}:${CONTAINER_USER} /usr/local/bin/wait-for-it \
    && chown ${CONTAINER_USER}:${CONTAINER_USER} /usr/local/bin/custom_scripts.sh

# 暴露端口
EXPOSE 8090 8091

# 切换到 confluence 用户
USER ${CONTAINER_USER}

# 设置工作目录
WORKDIR ${CONFLUENCE_HOME}

# 使用 tini 作为 init 系统,并启动入口脚本
ENTRYPOINT ["/usr/bin/tini", "--", "/home/confluence/docker-entrypoint.sh"]

# 默认命令
CMD ["confluence"]

7.2. wiki.yml

version: '3'
services:

  db:
    image: postgres:17.8-alpine
    container_name: postgres
    restart: always
    environment:
      - POSTGRES_USER=confluence
      - POSTGRES_PASSWORD=www.password.com
      - POSTGRES_DB=confluence
      - POSTGRES_ENCODING=UTF8
      - POSTGRES_COLLATE=C
      - POSTGRES_COLLATE_TYPE=C
    volumes:
      - /data/wiki/pgsql:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
    networks:
      - wiki-net

  wiki:
    image: wiki:9.5.4
    container_name: wiki1
    restart: always
    ports:
      - 8090:8090
      - 8091:8091
    environment:
      # 数据库连接(必须)
      - CONFLUENCE_DB_HOST=db
      - CONFLUENCE_DB_PORT=5432
      # 代理配置(如果使用挂载的 server.xml,可不设,但建议保留以便脚本备用)
      - CONFLUENCE_PROXY_NAME=wiki.example.com
      - CONFLUENCE_PROXY_PORT=80
      - CONFLUENCE_PROXY_SCHEME=http
      # JVM 参数(内存、agent、时区、字体路径)
      - CATALINA_OPTS=-XX:ReservedCodeCacheSize=512m -Xms2048m -Xmx4096m -javaagent:/var/agent/atlassian-agent.jar -Duser.timezone=Asia/Shanghai -Dconfluence.document.conversion.fontpath=/var/confluence/fonts/
      # Agent 路径变量(如果镜像默认路径不一致,可覆盖)
      - AGENT_PATH=/var/agent
      - AGENT_FILENAME=atlassian-agent.jar
    volumes:
      - /data/wiki/data:/var/confluence
      - /etc/localtime:/etc/localtime:ro
        #- /data/wiki/deps/server.xml:/opt/confluence/conf/server.xml:ro   # 建议改为 ro
    depends_on:
      - db
    networks:
      - wiki-net

networks:
  wiki-net:
    driver: bridge

7.3. 其它相关文件

构建前确保 /deps/ 目录包含以下文件:

  • atlassian-agent.jar
  • atlassian-confluence-9.5.4.tar.gz
  • mysql-connector-java-8.0.28.jar
  • simsun.ttc
  • upm.properties
  • confluence.cfg.xml.tpl(可从已有 Confluence 安装复制或创建模板)
  • docker-entrypoint.sh
  • wait-for-it.sh
  • custom_scripts.sh

可以点击这里下载完整的文件 wiki-9.5.4.tar.gz

7.4. 启动

首次启用需要配置目录权限为容器用户的权限

sudo mkdir -pv /data/wiki/{data,pgsql}
sudo chown -R 1001:1001 /data/wiki/{data,pgsql}
sudo docker compose -f wiki.yml up -d

8. wiki-9.0.3.yml

version: '3'
services:

  db:
    image: chaitin/safeline-postgres:15.2
#    image: postgres:14.2-alpine
    container_name: postgres
    restart:
      always
    environment:
      - 'POSTGRES_USER=confluence'
      - 'POSTGRES_PASSWORD=passwordcom'
      - 'POSTGRES_DB=confluence'
      - 'POSTGRES_ENCODING=UTF8'
      - 'POSTGRES_COLLATE=C'
      - 'POSTGRES_COLLATE_TYPE=C'
    volumes:
      - /data/wiki/pgsql:/var/lib/postgresql/data
      - /etc/localtime:/etc/localtime:ro
 
  wiki:
    image: wiki:9.0.3
    container_name: wiki1
    restart:
      always
    ports:
      - 8090:8090
      - 8091:8091
    environment:
      - 'CATALINA_CONNECTOR_PROXYNAME=wiki.waringid.me'
      - 'CATALINA_OPTS= -XX:ReservedCodeCacheSize=512m -Xms2048m -Xmx4096m -javaagent:/var/agent/atlassian-agent.jar -Duser.timezone=GMT+08 -Dconfluence.document.conversion.fontpath=/var/confluence/fonts/'
      - 'CATALINA_CONNECTOR_PROXYPORT=443'
      - 'CATALINA_CONNECTOR_SCHEME=https'
    volumes:
      - /data/wiki/data:/var/confluence
      - /etc/localtime:/etc/localtime:ro
      - /data/wiki/deps/server_8.8.1.xml:/opt/confluence/conf/server.xml:rw
    depends_on:
      - db


9. 生成序列号

docker exec wiki1 java -jar /opt/atlassian/confluence/atlassian-agent.jar \
    -p conf  -d \
    -m a@b.com \
    -n name \
    -o http://127.0.0.1:8090 \
    -s BBPJ-TRXY-8MVX-2LDO # 替换为页面上显示的server id

docker exec wiki1 java -jar /opt/atlassian/confluence/atlassian-agent.jar \
    -p com.mxgraph.confluence.plugins.diagramly \
    -d -m a@b.com \
    -n name \
    -o http://127.0.0.1:8090 \
    -s BBPJ-TRXY-8MVX-2LDO # 替换为页面上显示的server id

docker exec wiki1 java -jar /var/agent/atlassian-agent.jar     -p com.tensixtwo.conf.latexmath \
 -d     -m a@b.com     -n name     -o http://127.0.0.1:8090     -s BOOR-9D2Y-X97Z-GG1L

10. 备份数据库

pg_dump -U confluence -d confluence -f db_confluence_backup_2024_01_30.sql

  • 无标签

评论

  1. 匿名用户 发表:

    站长,confluence底部的版本号怎么隐藏?

写评论...