本文使用「署名 4.0 國際 (CC BY 4.0)」許可協議,歡迎轉載、或從新修改使用,但須要註明來源。 署名 4.0 國際 (CC BY 4.0)html
本文做者: 蘇洋java
建立時間: 2019年03月30日 統計字數: 5170字 閱讀時間: 11分鐘閱讀 本文連接: soulteary.com/2019/03/30/…mysql
小型團隊協同,或者想花錢買個省心,Confluence 是比較好的選擇之一。可是最近安裝 Confluence ,發現官方和網上的安裝介紹都比較「落後」低效,因此有了本篇內容。sql
本文將介紹如何使用 Docker Compose 快速搭建 Confluence 、以及如何和 Traefik 一同使用,若是你看過以前的內容,跟隨本文應該能在十分鐘內解決戰鬥。docker
https://hub.docker.com/r/atlassian/confluence-server/tags
6.4
和 6.15
https://dev.mysql.com/downloads/connector/j/5.1.html
先說老版本,若是你只是須要基礎的 Wiki 功能,那麼下面的配置文件應該可以知足你的需求。數據庫
version: '3'
services:
confluence:
image: atlassian/confluence-server:6.4.3-alpine
expose:
- 8090
- 8091
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.port=8090"
- "traefik.frontend.rule=Host:${DOMAIN}"
- "traefik.frontend.entryPoints=http,https"
volumes:
- ./data:/var/atlassian/application-data/confluence
- ./mysql-connector-java-5.1.47.jar:/opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-java-5.1.47.jar
networks:
traefik:
external: true
複製代碼
將上面的文件保存爲 docker-compose.yml 後,咱們建立另外基礎配置文件 **.env **,和上面的配置同樣簡單,文件內容能夠是下面這樣。apache
DOMAIN=wiki.lab.com
複製代碼
將 docker-compose.yml 、.env、mysql-connector-java-5.1.47.jar 放在同一目錄,若是此刻你的 Traefik 已經就緒,那麼執行 docker-compose up
,你的服務便啓動起來了。編程
直接訪問你配置好的域名,好比例子中的 wiki.lab.com
,你就能夠進行 Confluence 的 Web 界面配置啦。若是你還不會使用 Traefik ,那麼能夠翻閱歷史文章,一樣是一些十分鐘之內的教程。後端
若是你選擇將 Confluence 部署在公網,面對天天非常煩人的掃描器,不妨簡單添加 Basic Auth
認證,將這些惡意請求攔截在外面。bash
由於使用了 Traefik ,因此添加這個功能十分簡單,只須要兩步:
第一步,在 docker-compose.yml 的 labels
字段內添加下面的內容。
- "traefik.frontend.auth.basic=${BASIC_AUTH}"
複製代碼
第二步,執行 htpasswd -nb user user
,獲得一段包含用戶名和加密後的密碼的文本字符串,譬如這樣:user:$apr1$MzgRxukq$MhYl/2JidzUNlHfyfIQF41
,接着將內容添加到 .env 中:
BASIC_AUTH=user:$apr1$MzgRxukq$MhYl/2JidzUNlHfyfIQF41
複製代碼
當再有掃描器想直接對應用進行掃描的時候,就會被 Basic Auth 擋在外面啦。
當你安裝完畢,開始使用的時候,會發現界面的右上角會提示一個警告信息。
Can't check base URL
官方知識庫中有提到這個問題,若是你使用的也是低版本(6.6)以前,其實能夠經過配置 Hosts
來解決問題。
好比在 docker-compose.yml 中添加一段聲明,讓應用服務器查找本機上應用地址,而非必定要訪問公網地址的應用,參考配置以下:
version: '3'
services:
confluence:
image: atlassian/confluence-server:6.4.3-alpine
expose:
- 8090
- 8091
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.port=8090"
- "traefik.frontend.rule=Host:${DOMAIN}"
- "traefik.frontend.entryPoints=http,https"
volumes:
- ./data:/var/atlassian/application-data/confluence
- ./mysql-connector-java-5.1.47.jar:/opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-java-5.1.47.jar
extra_hosts:
- "${DOMAIN}:127.0.0.1"
networks:
traefik:
external: true
複製代碼
是否是十分簡單,若是你的需求是基礎使用,上述的配置應該已經可以知足你的需求了。
接着咱們聊聊如何使用最新版本的軟件,由於咱們使用了容器,因此更新版本十分簡單,在配置文件中修改鏡像的版本號就行了。好比,我想將 6.4.3
這個低版升級到其餘版本,只須要將配置中的 6.4.3
改成 6.15.1
便可,例如 atlassian/confluence-server:6.15.1-alpine
。
其餘的基本和老版本軟件使用一致。不過這裏會有幾個小問題,須要額外解決一下。
WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explicitly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate verification.
要解決這個問題,能夠選擇配置加密的 MySQL 鏈接,並更新容器中的證書,也能夠選擇添加參數,關閉強制使用加密鏈接請求,後者更簡單,若是要求不高,能夠這麼作。
編輯 data/confluence.cfg.xml 文件中的 hibernate.connection.url
,在鏈接地址後添加 ?useSSL=false
參數,重啓應用便可。
新版本的軟件邏輯中,有針對請求中帶有 Basic Auth
進行額外處理:若是在上面配置了 Basic Auth ,那麼應用會提示驗證失敗,不能登陸系統。
這個顯然不是咱們添加 Basic Auth 的用意,而且實際使用中,也不推薦直接將 Confluence 的認證接口對外。
解決方案很簡單,在 docker-compose.yml
中添加一行 - "traefik.frontend.auth.basic.removeHeader=true"
,Traefik 的驗證信息將僅針對 Traefik 使用,在反向代理應用的時候,HTTP 請求中的驗證信息會被刪除掉。
一樣的,重啓應用,這個問題就解決了。
由於咱們使用 Traefik 掛載證書,應用實際運行在代理服務器背後,當使用管理員訪問控制檯,會看到一個警告信息。
您的 URL 不匹配
Confluence 的基本URL設置爲http://wiki.lab.com,但您正從https://wiki.lab.com訪問 Confluence。
考慮應用的正常使用,咱們一般會將協議進行修正,好比將站點基礎URL修正爲 https
。可是在修正以後,你會收到另一個警告。
Tomcat 配置不正確
Tomcat server.xml 配置不正確: scheme 應爲 'https' proxyName 應爲 ‘YOUR_DOMAIN_URI’ proxyPort 應爲 '443'
緣由是比較新的版本的應用,健康檢查邏輯附帶了端口和協議判斷,低版本能夠直接使用 Traefik 反代掛載證書的幸福快樂日子一去不復返。
解決問題須要分爲三步。
第一步,將容器內的 Tomcat 運行配置 server.xml
拷貝到本地(da5582a01879 爲 docker ps 獲取的容器PID)。
docker cp da5582a01879:/opt/atlassian/confluence/conf/server.xml .
複製代碼
第二步,將配置中端口爲 8090 的 Connector 的配置更新爲下面的內容(尤爲注意最後一行內容):
<Connector
port="8090"
connectionTimeout="20000"
redirectPort="8443"
maxThreads="48" minSpareThreads="10"
enableLookups="false"
acceptCount="10"
debug="0"
URIEncoding="UTF-8"
protocol="org.apache.coyote.http11.Http11NioProtocol"
proxyName="wiki.lab.com" proxyPort="443" scheme="https"/>
複製代碼
第三步,更新 docker-compose.yml
配置文件。
在 volumes
字段中添加內容:
- ./server.xml:/opt/atlassian/confluence/conf/server.xml
複製代碼
同時刪除 extra_hosts
字段內容。
重啓應用,一切正常。
爲了方便使用,這裏給出完整的參考配置。
version: '3'
services:
confluence:
image: atlassian/confluence-server:6.15.1-alpine
expose:
- 8090
- 8091
networks:
- traefik
labels:
- "traefik.enable=true"
- "traefik.port=8090"
- "traefik.frontend.rule=Host:${DOMAIN}"
- "traefik.frontend.entryPoints=http,https"
- "traefik.frontend.auth.basic.removeHeader=true"
- "traefik.frontend.auth.basic=${BASIC_AUTH}"
volumes:
- ./data:/var/atlassian/application-data/confluence
- ./mysql-connector-java-5.1.47.jar:/opt/atlassian/confluence/confluence/WEB-INF/lib/mysql-connector-java-5.1.47.jar
- ./server.xml:/opt/atlassian/confluence/conf/server.xml
networks:
traefik:
external: true
複製代碼
雖然對於團隊來講 Confluence 是一個不錯的方案,可是實際針對我的/擁有定製能力的團隊而言,使用徹底開源免費的 WordPress 或許會更好,下一篇我將介紹 WordPress 用做知識管理用途的一些定製處理。
我如今有一個小小的折騰羣,裏面彙集了一些喜歡折騰的小夥伴。
在不發廣告的狀況下,咱們在裏面會一塊兒聊聊軟件、HomeLab、編程上的一些問題,也會在羣裏不按期的分享一些技術沙龍的資料。
喜歡折騰的小夥伴歡迎掃碼添加好友。(請註明來源和目的,不然不會經過審覈)