Проблема
Установка и активация Confluence Server 6.14.0 на докер контейнер.
Статья рассчитана на пользователей, которые базово ориентируются в Docker и Docker-Compose
Решение
Берем за пример следующие статьи:
https://ealebed.github.io/posts/2017/установка-и-активация-atlassian-confluence-6.3.4/
https://github.com/ealebed/docker_atlassian_stack
также под коврик: http://gallery.ru-board.com/topic.cgi?forum=35&topic=29693&start=420
Для загрузки docker-образа Confluence, буду использовать готовый Dockerfile разработчика https://github.com/cptactionhank/, но для успешной активации его нужно изменить:
FROM openjdk:8-alpine # Setup useful environment variables ENV CONF_HOME /var/atlassian/confluence ENV CONF_INSTALL /opt/atlassian/confluence ENV CONF_VERSION 6.14.0 ENV JAVA_CACERTS $JAVA_HOME/jre/lib/security/cacerts ENV CERTIFICATE $CONF_HOME/certificate # Install Atlassian Confluence and helper tools and setup initial home # directory structure. RUN set -x \ && apk --no-cache add curl xmlstarlet bash ttf-dejavu libc6-compat gcompat mc nano\ && mkdir -p "${CONF_HOME}" \ && chmod -R 700 "${CONF_HOME}" \ && chown daemon:daemon "${CONF_HOME}" \ && mkdir -p "${CONF_INSTALL}/conf" \ && curl -Ls "https://www.atlassian.com/software/confluence/downloads/binary/atlassian-confluence-${CONF_VERSION}.tar.gz" | tar -xz --directory "${CONF_INSTALL}" --strip-components=1 --no-same-owner \ && curl -Ls "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-5.1.44.tar.gz" | tar -xz --directory "${CONF_INSTALL}/confluence/WEB-INF/lib" --strip-components=1 --no-same-owner "mysql-connector-java-5.1.44/mysql-connector-java-5.1.44-bin.jar" \ && chmod -R 700 "${CONF_INSTALL}/conf" \ && chmod -R 700 "${CONF_INSTALL}/temp" \ && chmod -R 700 "${CONF_INSTALL}/logs" \ && chmod -R 700 "${CONF_INSTALL}/work" \ && chown -R daemon:daemon "${CONF_INSTALL}/conf" \ && chown -R daemon:daemon "${CONF_INSTALL}/temp" \ && chown -R daemon:daemon "${CONF_INSTALL}/logs" \ && chown -R daemon:daemon "${CONF_INSTALL}/work" \ && echo -e "\nconfluence.home=$CONF_HOME" >> "${CONF_INSTALL}/confluence/WEB-INF/classes/confluence-init.properties" \ && xmlstarlet ed --inplace \ --delete "Server/@debug" \ --delete "Server/Service/Connector/@debug" \ --delete "Server/Service/Connector/@useURIValidationHack" \ --delete "Server/Service/Connector/@minProcessors" \ --delete "Server/Service/Connector/@maxProcessors" \ --delete "Server/Service/Engine/@debug" \ --delete "Server/Service/Engine/Host/@debug" \ --delete "Server/Service/Engine/Host/Context/@debug" \ "${CONF_INSTALL}/conf/server.xml" \ && touch -d "@0" "${CONF_INSTALL}/conf/server.xml" \ && chown daemon:daemon "${JAVA_CACERTS}" # Use the default unprivileged account. This could be considered bad practice # on systems where multiple processes end up being executed by 'daemon' but # here we only ever run one process anyway. USER daemon:daemon # Expose default HTTP connector port. EXPOSE 8090 8091 # Set volume mount points for installation and home directory. Changes to the # home directory needs to be persisted as well as parts of the installation # directory due to eg. logs. VOLUME ["/var/atlassian/confluence", "/opt/atlassian/confluence/logs"] ####Вносим изменения: добавляем следующие строчки. НО ОБЯЗАТЕЛЬНО перед первым запуском эти строки нужно закоментировать!!!! COPY atlassian-universal-plugin-manager-plugin-3.0.jar /opt/atlassian/confluence/confluence/WEB-INF/atlassian-bundled-plugins/atlassian-universal-plugin-manager-plugin-3.0.jar COPY atlassian-extras-api-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-api-3.4.1.jar COPY atlassian-extras-common-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-common-3.4.1.jar COPY atlassian-extras-core-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-core-3.4.1.jar COPY atlassian-extras-decoder-api-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-api-3.4.1.jar COPY atlassian-extras-decoder-v2-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.4.1.jar COPY atlassian-extras-legacy-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-legacy-3.4.1.jar ####### конец изменений # Set the default working directory as the Confluence home directory. WORKDIR /var/atlassian/confluence COPY docker-entrypoint.sh / ENTRYPOINT ["/docker-entrypoint.sh"] # Run Atlassian Confluence as a foreground process by default. CMD ["/opt/atlassian/confluence/bin/start-confluence.sh", "-fg"]
Именно эти файлы мы будем активировать:
/opt/atlassian/confluence/confluence/WEB-INF/atlassian-bundled-plugins/atlassian-universal-plugin-manager-plugin-3.0.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-api-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-common-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-core-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-api-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.4.1.jar /opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-legacy-3.4.1.jar
Рядом с файлом Dockerfile сохраняем файл docker-entrypoint.sh, делаем его исполняемым:
#!/bin/bash # check if the `server.xml` file has been changed since the creation of this # Docker image. If the file has been changed the entrypoint script will not # perform modifications to the configuration file. if [ "$(stat -c "%Y" "${CONF_INSTALL}/conf/server.xml")" -eq "0" ]; then if [ -n "${X_PROXY_NAME}" ]; then xmlstarlet ed --inplace --pf --ps --insert '//Connector[@port="8090"]' --type "attr" --name "proxyName" --value "${X_PROXY_NAME}" "${CONF_INSTALL}/conf/server.xml" fi if [ -n "${X_PROXY_PORT}" ]; then xmlstarlet ed --inplace --pf --ps --insert '//Connector[@port="8090"]' --type "attr" --name "proxyPort" --value "${X_PROXY_PORT}" "${CONF_INSTALL}/conf/server.xml" fi if [ -n "${X_PROXY_SCHEME}" ]; then xmlstarlet ed --inplace --pf --ps --insert '//Connector[@port="8090"]' --type "attr" --name "scheme" --value "${X_PROXY_SCHEME}" "${CONF_INSTALL}/conf/server.xml" fi if [ -n "${X_PROXY_SECURE}" ]; then xmlstarlet ed --inplace --pf --ps --insert '//Connector[@port="8090"]' --type "attr" --name "secure" --value "${X_PROXY_SECURE}" "${CONF_INSTALL}/conf/server.xml" fi if [ -n "${X_PATH}" ]; then xmlstarlet ed --inplace --pf --ps --update '//Context[@docBase="../confluence"]/@path' --value "${X_PATH}" "${CONF_INSTALL}/conf/server.xml" fi fi if [ -f "${CERTIFICATE}" ]; then keytool -noprompt -storepass changeit -keystore ${JAVA_CACERTS} -import -file ${CERTIFICATE} -alias CompanyCA fi exec "$@"
Для начала комментирем строки COPY, запускаем конейнер, ждем запуска.
Заходим на WEB-интерфейс сервиса Confluence, и убеждаемся в работоспособности сервера:
http://HOST:8090
Если Вы используете проксирующий сервер, например NGINX, нужно указать переменные запуска контейнера:
X_PROXY_NAME=domain.com.ua X_PROXY_PORT=443 X_PROXY_SCHEME=https
И запустить контейнер с указанием этих переменных.
Если Вы успешно зашли на Web-интерфейс, переходим на пункт "Production Installation", и копируем Server-ID.
Теперь нужно вытащить файлы с контейнера на хостовую машину:
- выполним docker ps, для просмотра под каким CONTAINER ID был запущен контейнер Confluence, у меня он d88d6c28731a
- запускаем копирование командами:
docker cp d88d6c28731a:/opt/atlassian/confluence/confluence/WEB-INF/atlassian-bundled-plugins/atlassian-universal-plugin-manager-plugin-3.0.jar ./ docker cp d88d6c28731a:/opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-api-3.4.1.jar ./ docker cp d88d6c28731a:/opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-common-3.4.1.jar ./ docker cp d88d6c28731a:/opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-core-3.4.1.jar ./ docker cp d88d6c28731a:/opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-api-3.4.1.jar ./ docker cp d88d6c28731a:/opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-decoder-v2-3.4.1.jar ./ docker cp d88d6c28731a:/opt/atlassian/confluence/confluence/WEB-INF/lib/atlassian-extras-legacy-3.4.1.jar ./
- В каталоге, где мы находимся, создались 7 файлов, их нужно скопировать на свой компьютер для активации.
- Качаем Atlassian_Keygen_V2.1.6-exp (пароль к архиву 1111)
- Запускаем Atlassian_tablet_V2_1_6-exp.jar:
- В поле Template выбираем "Confluence"
- Поля User Name, Organization, Email — заполняем на свой вкус
- Server ID — устанавливаем ранее скопированный при установке.
- Остальное не трогаем.
- Жмем кнопку GENERATE, и сохраняем ключ.
- Жмем кнопку Patch, и выбираем каталог, куда мы скачали файлы atlassian-extras-*.jar и atlassian-universal-plugin-manager-plugin-3.0.jar
- Ждем, пока файлы пропатчаться.
- Перезаписываем файлы на сервере.
Таким образом, у нас есть Server ID, Key, пропатченные файлы активации.
Убираем знак комментария напротив команды копирования файлов в Dockerfile, останавливаем и запускаем конейнер.
Заходим в Web-интерфейс -> перезагружаем страницу -> переходим на пункт "Production Installation", Server ID должен совпадать, указываем Key, если пропустило на следующий шаг — радуемся)
Я также заметил, что даже если Server ID не совпадает, но у Вас есть ключ, и пропатченые файлы — Confluence активируется.
Шамиль Комодов
Храни Вас Бог