目录

docker应用-容器化部署confluence

Docker composer 容器化部署 confluence.

动机

目前公司还没有 wiki 类站点来记录和分享相关文档,有时候协作的文档通过社交软件发来发去,大家分开编辑,很容易文档就乱了,因此部署 confluence 来临时作为多人分享文档的站点使用。

部署方式

我们在 github 上面发现已经有人将部署容器化了。https://github.com/haxqer/confluence

看了他的脚本,除了破解文件,其他的容器镜像用的都是官方的,还是比较放心的。

git 克隆下来后,修改 docker/.env 配置:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
CONFLUENCE_VERSION=8.5.6
 
COMPOSE_PROJECT_NAME=dockerized-confluence
 
JVM_MINIMUM_MEMORY=4096m
JVM_MAXIMUM_MEMORY=4096m
JVM_RESERVED_CODE_CACHE_SIZE=2048m
 
MYSQL_VERSION=8.0.32
MYSQL_ROOT_PASSWORD=DhwZdoxxx
MYSQL_DATABASE=confluence
MYSQL_USER=confluence
MYSQL_PASSWORD=PSiaZihxxx
 
# 不需要代理,请注释掉
# HTTP_PROXY=http://192.168.1.7:1088
# HTTPS_PROXY=http://192.168.1.7:1088
# NO_PROXY='localhost,127.0.0.1,.trac.cn'
 
# 运行在 nginx 后面,需要设置下面参数
# https://hub.docker.com/r/atlassian/jira-software
# https://bitbucket.org/atlassian-docker/docker-atlassian-jira/src/master/
# ATL_PROXY_NAME=kb.trac.cn
# ATL_PROXY_PORT=443
# ATL_TOMCAT_SCHEME=https
# ATL_TOMCAT_SECURE=true

创建 /data/servers/confluence 目录,把 .env 改完复制到该目录下。

在 /data/servers/confluence 目录下创建 docker-compose.yml:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
version: "3"
 
services:
  app:
    build:
      context: "confluence"
      args:
        CONFLUENCE_VERSION: ${CONFLUENCE_VERSION}
        IMAGE_PREFIX: ${IMAGE_PREFIX:-''}
    image: xsharp/confluence:${CONFLUENCE_VERSION}
    container_name: confluence-app
    hostname: "confluenceapp"
    working_dir: "/opt/atlassian/confluence"
    depends_on:
      - db
    ports:
      - "8090:8090"
      - "8091:8091"
    volumes:
      - /data1/storage/confluence:/var/atlassian/application-data/confluence
    restart: always
    env_file:
      - ./.env
    environment:
      - TZ=Asia/Shanghai
      - JVM_MINIMUM_MEMORY=${JVM_MINIMUM_MEMORY}
      - JVM_MAXIMUM_MEMORY=${JVM_MAXIMUM_MEMORY}
      - JVM_RESERVED_CODE_CACHE_SIZE=${JVM_RESERVED_CODE_CACHE_SIZE}
      # 通过 nginx 代理需要配置以下内容
      - ATL_PROXY_NAME=wiki.xxx.com.cn
      - ATL_PROXY_PORT=443
      - ATL_TOMCAT_SCHEME=https
      - ATL_TOMCAT_SECURE=true
         
      # - HTTP_PROXY=${HTTP_PROXY}
      # - HTTPS_PROXY=${HTTPS_PROXY}
      # - NO_PROXY=${NO_PROXY}
    networks:
      - confluence
 
  db:
    image: mysql:${MYSQL_VERSION}
    container_name: confluence-mysql
    hostname: "confluencemysql"
    environment:
      - TZ=Asia/Shanghai
      - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD}
      - MYSQL_DATABASE=${MYSQL_DATABASE}
      - MYSQL_USER=${MYSQL_USER}
      - MYSQL_PASSWORD=${MYSQL_PASSWORD}
    cap_add:
      - SYS_NICE # CAP_SYS_NICE
    command:
      [
        'mysqld',
        '--character-set-server=utf8mb4',
        '--collation-server=utf8mb4_bin',
        '--transaction-isolation=READ-COMMITTED',
        '--innodb_log_file_size=256M',
        '--max_allowed_packet=256M',
        '--log_bin_trust_function_creators=1',
        '--skip-log-bin'
      ]
    volumes:
      - /data1/storage/mysql:/var/lib/mysql
    restart: always
    networks:
      - confluence
 
networks:
  confluence:
    driver: bridge

创建 以下目录作为持久化数据目录。

1
2
3
/data1/storage/confluence
/data1/storage/mysql
docker compose up -d 

因为我们的 mysql 没有对外暴露端口,通过容器桥接的方式启动,所以在配置数据源的时候,hostname 可以直接写 db 就行了。

/docker%E5%BA%94%E7%94%A8-%E5%AE%B9%E5%99%A8%E5%8C%96%E9%83%A8%E7%BD%B2confluence/mysql%E9%85%8D%E7%BD%AE.png
mysql配置

nginx 配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
upstream wiki-8090{
       server  192.168.2.203:8090;
}    
upstream wiki-8091{
       server  192.168.2.203:8091;
}
server {
        #listen       80 ;
        listen 443 ssl;
        server_name wiki.xxx.com.cn;
        ssl_certificate   ssl/xxx.com.cn.pem;
        ssl_certificate_key  ssl/xxx.com.cn.key;
        ssl_session_timeout 5m;
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers AESGCM:ALL:!DH:!EXPORT:!RC4:+HIGH:!MEDIUM:!LOW:!aNULL:!eNULL;
        ssl_prefer_server_ciphers on;
 
    location / {
        client_max_body_size 100m;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://wiki-8090;
    }
    location /synchrony {
        client_max_body_size 100m;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-Forwarded-Server $host;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass  http://wiki-8091/synchrony;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }
 
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
 
    }
server {
       listen       80;
       server_name  wiki.xxx.com.cn;
       rewrite ^ https://$http_host$request_uri? permanent;
}

优化

优化掉插入宏的时候,标题无法显示中文,显示的是小方块乱码。

1
2
3
docker exec -it 容器id bash
apt update
apt install fonts-wyq-zenhei -y

退出容器,把当前在运行的容器重新封装为新的镜像 。

docker commit 容器id yixiu/confluence:8.5.6

然后 docker compose down ,docker-compose.yml 文件也要改一下对应的容器镜像。再重新启动容器,刷新网页缓存即可。

效果图

/docker%E5%BA%94%E7%94%A8-%E5%AE%B9%E5%99%A8%E5%8C%96%E9%83%A8%E7%BD%B2confluence/confluence.png
confluence ui

总结

总体来说,这个github的脚本已经把所有操作都帮我们完成了,我们只需要做一些类似nginx之类的配置就可以了,我这用的单点部署,需要做异地备份,不然一旦挂掉就没了。