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 就行了。
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 文件也要改一下对应的容器镜像。再重新启动容器,刷新网页缓存即可。
效果图
总结
总体来说,这个github的脚本已经把所有操作都帮我们完成了,我们只需要做一些类似nginx之类的配置就可以了,我这用的单点部署,需要做异地备份,不然一旦挂掉就没了。