本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或從新修改使用,但須要註明來源。 署名 4.0 國際 (CC BY 4.0)html
本文做者: 蘇洋java
建立時間: 2020年03月06日 統計字數: 7821字 閱讀時間: 16分鐘閱讀 本文連接: soulteary.com/2020/03/06/…mysql
以前寫過三篇如何使用「容器化方案來搭建 Confluence」,本文將基於最近最新推出的 Confluence 7.3 來演示如何使用新版的軟件。web
若是你想要給公司團隊或者我的搭建 Wiki,能夠參考以前關於如何搭建 Wiki 的實戰文章,裏面記錄瞭如何高效完成搭建,並避過踩坑的方法。sql
以往已經上車使用的用戶,也能夠參考本文進行升級。docker
在獨立運行維護多個 Confluence 實例一年多以後,經歷了屢次的升級維護,確認了使用容器比宿主機直接安裝是更爲有效的維護方式。數據庫
由於首先,你的操做可以都被版本化的記錄下來,如同管理代碼通常;其次,須要去維護和管理的內容,只是極少一部分變量,而非整個環境。apache
官方對於容器是積極可是還不夠嚴謹,從過往一年來看:編程
雖然問題多多,可是整體而言,仍是很值得期待的畢竟高頻率的周更/月更,加活躍的社區和市場,支持「mb4字符集」,構建出了一個能夠碾壓任何同類的商業化 Wiki 產品。ubuntu
對於我的而言,只須要每一年付費 10$ ,就能知足一個10人初期團隊的使用,而且在 2020 年,使用 2G 內存的服務器也能愉快的運行 Confluence 了。
固然,我更推薦 4G及以上的配置。
https://hub.docker.com/r/atlassian/confluence-server/tags
7.3
https://dev.mysql.com/downloads/connector/j/5.1.html
simsun.ttc
、simkai.ttf
等,若是你須要使用「導出文檔爲 PDF、Word」功能,而且文檔包含中文,爲了渲染正常,你須要提供一些中文字體。參考去年寫的文章《使用 Docker 搭建 Confluence》、以及今年「Traefik 2.x 版本升級」的文章指引,不難寫出下面的基礎配置。
version: '3'
services:
confluence:
image: atlassian/confluence-server:7.3.2-ubuntu
container_name: confluence-app
expose:
- 8090
- 8091
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.wiki-web.middlewares=https-redirect@file"
- "traefik.http.routers.wiki-web.entrypoints=http"
- "traefik.http.routers.wiki-web.rule=Host(`wiki.lab.com`)"
- "traefik.http.routers.wiki-ssl.middlewares=content-compress@file"
- "traefik.http.routers.wiki-ssl.entrypoints=https"
- "traefik.http.routers.wiki-ssl.tls=true"
- "traefik.http.routers.wiki-ssl.rule=Host(`wiki.lab.com`)"
- "traefik.http.services.wiki-backend.loadbalancer.server.scheme=http"
- "traefik.http.services.wiki-backend.loadbalancer.server.port=8090"
environment:
- 'CATALINA_OPTS=-Duser.timezone=GMT+08 -Dconfluence.document.conversion.fontpath=/usr/local/share/fonts/'
- 'JVM_MINIMUM_MEMORY=1024m'
- 'JVM_MAXIMUM_MEMORY=2048m'
volumes:
- ./data:/var/atlassian/application-data/confluence
- ./deps/confluence/mysql-connector-java-5.1.47.jar:/opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-java-5.1.47.jar
- ./fonts:/usr/local/share/fonts
- /etc/localtime:/etc/localtime:ro
extra_hosts:
- 'wiki.lab.com:127.0.0.1'
networks:
traefik:
external: true
複製代碼
上面的配置幾乎完美,將上面的內容保存爲 docker-compose.yml 後,使用 docker-compose up -d
啓動應用,你就可以獲得一個新版本的 Confluence 了。
可是這樣運行起來的 Confluence 會遇到一些問題:
接下來,咱們就來解決這些問題。
這個問題經常出如今使用了反向代理、負載均衡給 Confluence 掛載證書的狀況下,在以往的版本中,咱們須要添加 server.xml
並進行文件只讀鎖定,來解決這個問題。
官方文檔稍顯陳舊,可是也記錄過這個問題:《Can't check base URL warning in Confluence 6.6 or later》。
可是在新版本中,咱們能夠經過設置容器運行環境變量來解決這個問題,不過這裏有一個 Tricks 的事情,若是你不建立並掛載 server.xml
這個文件,你將沒法解決這個問題。
首先建立 server.xml
文件:
<?xml version="1.0" encoding="utf-8"?>
<Server port="8000"
shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
<Listener className="org.apache.catalina.core.AprLifecycleListener"
SSLEngine="on"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<Service name="Catalina">
<Connector port="8090"
maxThreads="100"
minSpareThreads="10"
connectionTimeout="20000"
enableLookups="false"
protocol="HTTP/1.1"
redirectPort="8443"
acceptCount="10"
secure="false"
scheme="https"
proxyName="wiki.lab.com"
proxyPort="443"
relaxedPathChars="[]|"
relaxedQueryChars="[]|{}^`"<>"
bindOnInit="false"
maxHttpHeaderSize="8192"
useBodyEncodingForURI="true"
disableUploadTimeout="true" />
<Engine name="Standalone"
defaultHost="localhost"
debug="0">
<Host name="localhost"
debug="0"
appBase="webapps"
unpackWARs="true"
autoDeploy="false"
startStopThreads="4">
<Context path=""
docBase="../confluence"
debug="0"
reloadable="false"
useHttpOnly="true">
<!-- Logging configuration for Confluence is specified in confluence/WEB-INF/classes/log4j.properties -->
<Manager pathname=""/>
<Valve className="org.apache.catalina.valves.StuckThreadDetectionValve"
threshold="60"/>
</Context>
<Context path="${confluence.context.path}/synchrony-proxy"
docBase="../synchrony-proxy"
debug="0"
reloadable="false"
useHttpOnly="true">
<Valve className="org.apache.catalina.valves.StuckThreadDetectionValve"
threshold="60"/>
</Context>
</Host>
</Engine>
</Service>
</Server>
複製代碼
接着在容器編排文件中添加掛載命令:
volumes:
- ./deps/confluence/server.xml:/opt/atlassian/confluence/conf/server.xml
複製代碼
最後,在編排文件中添加環境變量:
environment:
- 'CATALINA_CONNECTOR_PROXYNAME=wiki.lab.com'
- 'CATALINA_CONNECTOR_PROXYPORT=443'
- 'CATALINA_CONNECTOR_SCHEME=https'
複製代碼
最後,重啓你的應用就行了。
這個問題其實挺麻煩的,我實際運行的時候,主進程沒有報任何錯誤,可是根據以往封裝鏡像的經驗,判斷是 JRE 證書信任問題,找到了官方相關的一些資料
這個問題其實應該說是一個老問題了,從2012 年、2014 年以及以後頻出。而上面這些標記爲 7.3
版本使用的資料其實只是一個線索,不能直接使用。
想要知道緣由嗎?且往下看。
想信任新的證書,先得先獲取新的證書文件,使用 openssl
工具將證書保存爲文件。
openssl s_client -connect marketplace.atlassian.com:443 < /dev/null | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > marketplace.atlassian.com.crt
複製代碼
以往的文章,針對的是老版本的 JDK(低於10),使用 keytool
導入證書就好了。
keytool -import -trustcacerts -alias proxy_root -file marketplace.atlassian.com.crt -keystore $JAVA_HOME/jre/lib/security/cacerts -storepass changeit -noprompt
複製代碼
上面的操做,能夠解決 confluence 5.x / 6.x 的問題,而在 confluence 7.x 中,JDK 升級爲了 11,儲存位置有了變化。Oracle 官方博客有記錄《OpenJDK 10 Now Includes Root CA Certificates》這個變動。因此命令須要變動爲:
keytool -import -trustcacerts -alias proxy_root -file marketplace.atlassian.com.crt -keystore $JAVA_HOME/lib/security/cacerts -storepass changeit -noprompt
複製代碼
若是是宿主機安裝的話,執行上面的操做,而後重啓進程就行了。
可是咱們使用的是運行過程「無狀態」的容器,對於官方容器做出任何改變,並重啓,這些「變動」會天然而然的隨着容器沙盒銷燬而銷燬。(若是沒有使用特殊的 daemon 進程方案的話)
因此這裏須要基於官方鏡像,定製一個補丁鏡像,內容很簡單。
FROM atlassian/confluence-server:7.3.2-ubuntu
LABEL maintainer="soulteary@gmail.com"
USER root
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
USER confluence
複製代碼
使用 docker build -t confluence-server:7.3.2-ubuntu-fix .
將新的容器鏡像命名爲 ** confluence-server:7.3.2-ubuntu-fix**。
而後在編排文件中,替換鏡像名稱,再次啓動容器,插件市場就能正常訪問了。
image: confluence-server:7.3.2-ubuntu-fix
複製代碼
爲了方便使用,這樣提供一個完整的配置文件。
version: '3'
services:
confluence:
image: confluence-server:7.3.2-ubuntu-fix
container_name: confluence-app
expose:
- 8090
- 8091
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.docker.network=traefik"
- "traefik.http.routers.wiki-web.middlewares=https-redirect@file"
- "traefik.http.routers.wiki-web.entrypoints=http"
- "traefik.http.routers.wiki-web.rule=Host(`wiki.lab.com`)"
- "traefik.http.routers.wiki-ssl.middlewares=content-compress@file"
- "traefik.http.routers.wiki-ssl.entrypoints=https"
- "traefik.http.routers.wiki-ssl.tls=true"
- "traefik.http.routers.wiki-ssl.rule=Host(`wiki.lab.com`)"
- "traefik.http.services.wiki-backend.loadbalancer.server.scheme=http"
- "traefik.http.services.wiki-backend.loadbalancer.server.port=8090"
environment:
- 'CATALINA_OPTS=-Duser.timezone=GMT+08 -Dconfluence.document.conversion.fontpath=/usr/local/share/fonts/'
- 'JVM_MINIMUM_MEMORY=1024m'
- 'JVM_MAXIMUM_MEMORY=2048m'
- 'CATALINA_CONNECTOR_PROXYNAME=wiki.lab.com'
- 'CATALINA_CONNECTOR_PROXYPORT=443'
- 'CATALINA_CONNECTOR_SCHEME=https'
volumes:
- ./data:/var/atlassian/application-data/confluence
- ./deps/confluence/mysql-connector-java-5.1.47.jar:/opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-java-5.1.47.jar
- ./fonts:/usr/local/share/fonts
- ./deps/confluence/server.xml:/opt/atlassian/confluence/conf/server.xml
- /etc/localtime:/etc/localtime:ro
extra_hosts:
- 'wiki.lab.com:127.0.0.1'
networks:
traefik:
external: true
複製代碼
我我的建議做爲生產環境使用,務必使用雲服務商的雲數據,安全性和可靠性更好,可是若是我的使用,本地啓動一個數據庫容器實例,也不是不可,參考官方建議文檔,能夠將數據庫啓動參數調整爲:
command: --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
複製代碼
另外,若是你遇到了中文文件不能正常渲染的問題,能夠參考下面這篇文章進行緩存清理:
每次升級調整 Confluence 的過程,都是一種花式踩坑的過程,過程雖然很麻煩,可是踩過以後,依舊會忍不住的感嘆,我的使用每一年 10$ 花的真值。
--EOF
我如今有一個小小的折騰羣,裏面彙集了一些喜歡折騰的小夥伴。
在不發廣告的狀況下,咱們在裏面會一塊兒聊聊軟件、HomeLab、編程上的一些問題,也會在羣裏不按期的分享一些技術沙龍的資料。
喜歡折騰的小夥伴歡迎掃碼添加好友。(請註明來源和目的,不然不會經過審覈)