diff --git a/12/mysql-tomcat/.env b/12/mysql-tomcat/.env new file mode 100644 index 0000000000000000000000000000000000000000..5c2df1456453d4baa23fb4fcd6ad3a0cace568d1 --- /dev/null +++ b/12/mysql-tomcat/.env @@ -0,0 +1,6 @@ +# Default environment values +XWIKI_VERSION=12.0 +DB_USER=xwiki +DB_PASSWORD=xwiki +DB_DATABASE=xwiki +MYSQL_ROOT_PASSWORD=xwiki diff --git a/12/mysql-tomcat/Dockerfile b/12/mysql-tomcat/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..34e4408440563af97ba2a475059e220932ae8539 --- /dev/null +++ b/12/mysql-tomcat/Dockerfile @@ -0,0 +1,103 @@ +# --------------------------------------------------------------------------- +# See the NOTICE file distributed with this work for additional +# information regarding copyright ownership. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# --------------------------------------------------------------------------- +FROM tomcat:8-jdk11-adoptopenjdk-hotspot + +# ____ ____ ____ ____ _ __ _ +# |_ _||_ _||_ _| |_ _|(_) [ | _ (_) +# \ \ / / \ \ /\ / / __ | | / ] __ +# > `' < \ \/ \/ / [ | | '' < [ | +# _/ /'`\ \_ \ /\ / | | | |`\ \ | | +# |____||____| \/ \/ [___][__| \_][___] + +MAINTAINER Vincent Massol <vincent@massol.net> + +# Note: when using docker-compose, the ENV values below are overridden from the .env file. + +# Install LibreOffice + other tools +# Note that procps is required to get ps which is used by JODConverter to start LibreOffice +RUN apt-get update && \ + apt-get --no-install-recommends -y install \ + curl \ + libreoffice \ + unzip \ + procps \ + libmysql-java && \ + rm -rf /var/lib/apt/lists/* + +# Install XWiki as the ROOT webapp context in Tomcat +# Create the Tomcat temporary directory +# Configure the XWiki permanent directory +ENV XWIKI_VERSION=12.0 +ENV XWIKI_URL_PREFIX "https://maven.xwiki.org/releases/org/xwiki/platform/xwiki-platform-distribution-war/${XWIKI_VERSION}" +ENV XWIKI_DOWNLOAD_SHA256 da57110002c76001dc9ca16eb217ea0d6c81a2b4bd3d8ad26a6fc5efe96c776d +RUN rm -rf /usr/local/tomcat/webapps/* && \ + mkdir -p /usr/local/tomcat/temp && \ + mkdir -p /usr/local/xwiki/data && \ + curl -fSL "${XWIKI_URL_PREFIX}/xwiki-platform-distribution-war-${XWIKI_VERSION}.war" -o xwiki.war && \ + echo "$XWIKI_DOWNLOAD_SHA256 xwiki.war" | sha256sum -c - && \ + unzip -d /usr/local/tomcat/webapps/ROOT xwiki.war && \ + rm -f xwiki.war + +# Copy the JDBC driver in the XWiki webapp +RUN cp /usr/share/java/mysql-connector-java-*.jar /usr/local/tomcat/webapps/ROOT/WEB-INF/lib/ + +# Configure Tomcat. For example set the memory for the Tomcat JVM since the default value is too small for XWiki +COPY tomcat/setenv.sh /usr/local/tomcat/bin/ + +# Setup the XWiki Hibernate configuration +COPY xwiki/hibernate.cfg.xml /usr/local/tomcat/webapps/ROOT/WEB-INF/hibernate.cfg.xml + +# Set a specific distribution id in XWiki for this docker packaging. +RUN sed -i 's/<id>org.xwiki.platform:xwiki-platform-distribution-war/<id>org.xwiki.platform:xwiki-platform-distribution-docker/' \ + /usr/local/tomcat/webapps/ROOT/META-INF/extension.xed + +# Add scripts required to make changes to XWiki configuration files at execution time +# Note: we don't run CHMOD since 1) it's not required since the executabe bit is already set in git and 2) running +# CHMOD after a COPY will sometimes fail, depending on different host-specific factors (especially on AUFS). +COPY xwiki/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh + +# Make the XWiki directory (the permanent directory is included in it) persist on the host (so that it's not recreated +# across runs) +VOLUME /usr/local/xwiki + +# At this point the image is done and what remains below are the runtime configuration used by the user to configure +# the container that will be created out of the image. Namely the user can override some environment variables with +# docker run -e "var1=val1" -e "var2=val2" ... +# The supported environment variables that can be overridden are: +# - DB_USER: the name of the user configured for XWiki in the DB. Default is "xwiki". This is used to configure +# xwiki's hibernate.cfg.xml file. +# - DB_PASSWORD: the password for the user configured for XWiki in the DB. Default is "xwiki". This is used to +# configure xwiki's hibernate.cfg.xml file. +# - DB_DATABASE: the name of the database to use. Default is "xwiki". This is used to configure xwiki's +# hibernate.cfg.xml file. +# - DB_HOST: The name of the host (or docker container) containing the database. Default is "db". This is used to +# configure xwiki's hibernate.cfg.xml file. +# - CONTEXT_PATH: The name of the context path under which XWiki will be deployed in Tomcat. If not specified then it'll +# be deployed as ROOT. + +# Example: +# docker run -it -e "DB_USER=xwiki" -e "DB_PASSWORD=xwiki" <imagename> + +# Starts XWiki by starting Tomcat. All options passed to "docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]" +# are also passed to docker-entrypoint.sh. If "xwiki" is passed then XWiki will be configured the first time the +# container executes and Tomcat will be started. If some other parameter is passed then it'll be executed to comply +# with best practices defined at https://github.com/docker-library/official-images#consistency. +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["xwiki"] diff --git a/12/mysql-tomcat/docker-compose.yml b/12/mysql-tomcat/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..61c9748af8707be831e8ef2e5d04078c4797bb58 --- /dev/null +++ b/12/mysql-tomcat/docker-compose.yml @@ -0,0 +1,73 @@ +# --------------------------------------------------------------------------- +# See the NOTICE file distributed with this work for additional +# information regarding copyright ownership. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# --------------------------------------------------------------------------- +version: '2' +networks: + bridge: + driver: bridge +services: + # The container that runs XWiki + Tomcat + web: + build: . + container_name: xwiki-mysql-tomcat-web + depends_on: + - db + ports: + - "8080:8080" + # Default values defined in .env file. + # The DB_USER/DB_PASSWORD/DB_DATABASE/DB_HOST variables are used in the hibernate.cfg.xml file. + environment: + - XWIKI_VERSION=${XWIKI_VERSION} + - DB_USER=${DB_USER} + - DB_PASSWORD=${DB_PASSWORD} + - DB_DATABASE=${DB_DATABASE} + - DB_HOST=xwiki-mysql-db + # Provide a name instead of an auto-generated id for xwiki data (the permanent directory in included in it) + # configured in the Dockerfile, to make it simpler to identify in 'docker volume ls'. + volumes: + - xwiki-data:/usr/local/xwiki + networks: + - bridge + # The container that runs the database (mysql) + db: + image: "mysql:5.7" + container_name: xwiki-mysql-db + # - We provide a xwiki.cnf file in order to configure the mysql db to support UTF8 and be case-insensitive + # We have to do it here since we use an existing image and that's how this image allows customizations. + # See https://hub.docker.com/_/mysql/ for more details. + # - Provide a name instead of an auto-generated id for the mysql data, to make it simpler to identify in + # 'docker volume ls' + volumes: + - ./mysql/xwiki.cnf:/etc/mysql/conf.d/xwiki.cnf + - mysql-data:/var/lib/mysql + - ./mysql/init.sql:/docker-entrypoint-initdb.d/init.sql + + # Configure the MySQL database and create a user with provided name/password. + # See https://hub.docker.com/_/mysql/ for more details. + # Default values defined in .env file. + environment: + - MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PASSWORD} + - MYSQL_USER=${DB_USER} + - MYSQL_PASSWORD=${DB_PASSWORD} + - MYSQL_DATABASE=${DB_DATABASE} + networks: + - bridge +volumes: + mysql-data: {} + xwiki-data: {} diff --git a/12/mysql-tomcat/mysql/init.sql b/12/mysql-tomcat/mysql/init.sql new file mode 100644 index 0000000000000000000000000000000000000000..a72a02c66dca79fe7be06a8aef179a381fcbf8f3 --- /dev/null +++ b/12/mysql-tomcat/mysql/init.sql @@ -0,0 +1 @@ +grant all privileges on *.* to xwiki@'%' identified by 'xwiki' \ No newline at end of file diff --git a/12/mysql-tomcat/mysql/xwiki.cnf b/12/mysql-tomcat/mysql/xwiki.cnf new file mode 100644 index 0000000000000000000000000000000000000000..9c14b16285ad030ffb8b0db6ca85728d1486410d --- /dev/null +++ b/12/mysql-tomcat/mysql/xwiki.cnf @@ -0,0 +1,31 @@ +# --------------------------------------------------------------------------- +# See the NOTICE file distributed with this work for additional +# information regarding copyright ownership. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# --------------------------------------------------------------------------- + +[client] +default-character-set = utf8 + +[mysqld] +character-set-server = utf8 +collation-server = utf8_bin +explicit_defaults_for_timestamp = 1 + +[mysql] +default-character-set = utf8 + diff --git a/12/mysql-tomcat/tomcat/setenv.sh b/12/mysql-tomcat/tomcat/setenv.sh new file mode 100755 index 0000000000000000000000000000000000000000..755f260ef22e6b02f80c92ae6a07d47610cec7b4 --- /dev/null +++ b/12/mysql-tomcat/tomcat/setenv.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# --------------------------------------------------------------------------- +# See the NOTICE file distributed with this work for additional +# information regarding copyright ownership. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# --------------------------------------------------------------------------- + +# We're making the following changes to the default: +# * Adding more memory (default is 512MB which is not enough for XWiki) +# * By default, Tomcat does not allow the usage of encoded slash '%2F' and backslash '%5C' in URLs, as noted in +# https://tomcat.apache.org/security-6.html#Fixed_in_Apache_Tomcat_6.0.10. We want to allow for them as it's useful to +# be able to have '/' and '' in wiki page names. +# * On some system /dev/random is slow to init leading to a slow Tomcat and thus Xwiki startup. + +# Users can override these values by setting the JAVA_OPTS environment variable. For example: +# -e JAVA_OPTS="-Xmx2048m" + +XMX="-Xmx1024m" +ALLOW_ENCODED_SLASH="-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true" +ALLOW_BACKSLASH="-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true" +SECURERANDOM="-Djava.security.egd=file:/dev/./urandom" + +if [[ ! -z "$JAVA_OPTS" ]]; then + if [[ ! $JAVA_OPTS =~ .*-Xmx[0-9]+.* ]]; then + JAVA_OPTS="$JAVA_OPTS $XMX" + fi + if [[ ! $JAVA_OPTS =~ .*ALLOW_ENCODED_SLASH.* ]]; then + JAVA_OPTS="$JAVA_OPTS $ALLOW_ENCODED_SLASH" + fi + if [[ ! $JAVA_OPTS =~ .*ALLOW_BACKSLASH.* ]]; then + JAVA_OPTS="$JAVA_OPTS $ALLOW_BACKSLASH" + fi + if [[ ! $JAVA_OPTS =~ .*java\.security\.egd.* ]]; then + JAVA_OPTS="$JAVA_OPTS $SECURERANDOM" + fi +else + JAVA_OPTS="$XMX $ALLOW_ENCODED_SLASH $ALLOW_BACKSLASH $SECURERANDOM" +fi + +export JAVA_OPTS diff --git a/12/mysql-tomcat/xwiki/docker-entrypoint.sh b/12/mysql-tomcat/xwiki/docker-entrypoint.sh new file mode 100755 index 0000000000000000000000000000000000000000..8f8685abb67724b9d16cadb18cf4ab7dc7006ce4 --- /dev/null +++ b/12/mysql-tomcat/xwiki/docker-entrypoint.sh @@ -0,0 +1,174 @@ +#!/bin/bash +# --------------------------------------------------------------------------- +# See the NOTICE file distributed with this work for additional +# information regarding copyright ownership. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# --------------------------------------------------------------------------- + +set -e + +function first_start() { + configure + touch /usr/local/tomcat/webapps/$CONTEXT_PATH/.first_start_completed +} + +function other_starts() { + mkdir -p /usr/local/xwiki/data + restoreConfigurationFile 'hibernate.cfg.xml' + restoreConfigurationFile 'xwiki.cfg' + restoreConfigurationFile 'xwiki.properties' +} + +# $1 - the path to xwiki.[cfg|properties] +# $2 - the setting/property to set +# $3 - the new value +function xwiki_replace() { + sed -i s~"\#\? \?$2 \?=.*"~"$2=$3"~g "$1" +} + +# $1 - the setting/property to set +# $2 - the new value +function xwiki_set_cfg() { + xwiki_replace /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/xwiki.cfg "$1" "$2" +} + +# $1 - the setting/property to set +# $2 - the new value +function xwiki_set_properties() { + xwiki_replace /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/xwiki.properties "$1" "$2" +} + +# usage: file_env VAR [DEFAULT] +# ie: file_env 'XYZ_DB_PASSWORD' 'example' +# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of +# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) +file_env() { + local var="$1" + local fileVar="${var}_FILE" + local def="${2:-}" + if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then + echo >&2 "error: both $var and $fileVar are set (but are exclusive)" + exit 1 + fi + local val="$def" + if [ "${!var:-}" ]; then + val="${!var}" + elif [ "${!fileVar:-}" ]; then + val="$(< "${!fileVar}")" + fi + export "$var"="$val" + unset "$fileVar" +} + +# Allows to use sed but with user input which can contain special sed characters such as \, / or &. +# $1 - the text to search for +# $2 - the replacement text +# $3 - the file in which to do the search/replace +function safesed { + sed -i "s/$(echo $1 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')/$(echo $2 | sed -e 's/[\/&]/\\&/g')/g" $3 +} + +# $1 - the config file name found in WEB-INF (e.g. "xwiki.cfg") +function saveConfigurationFile() { + if [ -f "/usr/local/xwiki/data/$1" ]; then + echo " Reusing existing config file $1..." + cp "/usr/local/xwiki/data/$1" "/usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/$1" + else + echo " Saving config file $1..." + cp "/usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/$1" "/usr/local/xwiki/data/$1" + fi +} + +# $1 - the config file name to restore in WEB-INF (e.g. "xwiki.cfg") +function restoreConfigurationFile() { + if [ -f "/usr/local/xwiki/data/$1" ]; then + echo " Synchronizing config file $1..." + cp "/usr/local/xwiki/data/$1" "/usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/$1" + else + echo " No config file $1 found, using default from container..." + cp "/usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/$1" "/usr/local/xwiki/data/$1" + fi +} + +function configure() { + echo 'Configuring XWiki...' + + echo 'Setting environment variables' + file_env 'DB_USER' 'xwiki' + file_env 'DB_PASSWORD' 'xwiki' + file_env 'DB_HOST' 'db' + file_env 'DB_DATABASE' 'xwiki' + file_env 'INDEX_HOST' 'localhost' + file_env 'INDEX_PORT' '8983' + + echo " Deploying XWiki in the '$CONTEXT_PATH' context" + if [ "$CONTEXT_PATH" == "ROOT" ]; then + xwiki_set_cfg 'xwiki.webapppath' '' + else + mv /usr/local/tomcat/webapps/ROOT /usr/local/tomcat/webapps/$CONTEXT_PATH + fi + + echo 'Replacing environment variables in files' + safesed "replaceuser" $DB_USER /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/hibernate.cfg.xml + safesed "replacepassword" $DB_PASSWORD /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/hibernate.cfg.xml + safesed "replacecontainer" $DB_HOST /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/hibernate.cfg.xml + safesed "replacedatabase" $DB_DATABASE /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/hibernate.cfg.xml + + echo ' Generating authentication validation and encryption keys...' + xwiki_set_cfg 'xwiki.authentication.validationKey' "$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" + xwiki_set_cfg 'xwiki.authentication.encryptionKey' "$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" + + echo ' Setting permanent directory...' + xwiki_set_properties 'environment.permanentDirectory' '/usr/local/xwiki/data' + echo ' Configure libreoffice...' + xwiki_set_properties 'openoffice.autoStart' 'true' + + if [ $INDEX_HOST != 'localhost' ]; then + echo ' Configuring remote Solr Index' + xwiki_set_properties 'solr.type' 'remote' + xwiki_set_properties 'solr.remote.url' "http://$INDEX_HOST:$INDEX_PORT/solr/xwiki" + fi + + # If the files already exist then copy them to the XWiki's WEB-INF directory. Otherwise copy the default config + # files to the permanent directory so that they can be easily modified by the user. They'll be synced at the next + # start. + mkdir -p /usr/local/xwiki/data + saveConfigurationFile 'hibernate.cfg.xml' + saveConfigurationFile 'xwiki.cfg' + saveConfigurationFile 'xwiki.properties' +} + +# This if will check if the first argument is a flag but only works if all arguments require a hyphenated flag +# -v; -SL; -f arg; etc will work, but not arg1 arg2 +if [ "${1:0:1}" = '-' ]; then + set -- xwiki "$@" +fi + +# Check for the expected command +if [ "$1" = 'xwiki' ]; then + file_env 'CONTEXT_PATH' 'ROOT' + if [[ ! -f /usr/local/tomcat/webapps/$CONTEXT_PATH/.first_start_completed ]]; then + first_start + else + other_starts + fi + shift + set -- catalina.sh run "$@" +fi + +# Else default to run whatever the user wanted like "bash" +exec "$@" diff --git a/12/mysql-tomcat/xwiki/hibernate.cfg.xml b/12/mysql-tomcat/xwiki/hibernate.cfg.xml new file mode 100644 index 0000000000000000000000000000000000000000..880670af73590d71364a51c404b98277aeac79b9 --- /dev/null +++ b/12/mysql-tomcat/xwiki/hibernate.cfg.xml @@ -0,0 +1,105 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. +--> + +<!DOCTYPE hibernate-configuration PUBLIC + "-//Hibernate/Hibernate Configuration DTD//EN" + "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> +<hibernate-configuration> + <session-factory> + + <!-- Please refer to the installation guide on + https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Installation/ for configuring your + database. You'll need to do 2 things: + 1) Copy your database driver JAR in WEB-INF/lib or in some shared lib directory + 2) Uncomment the properties below for your specific DB (and comment the default + database configuration if it doesn't match your DB) + --> + + <!-- Generic parameters common to all Databases --> + + <property name="show_sql">false</property> + <property name="use_outer_join">true</property> + + <!-- Without it, some queries fail in MS SQL. XWiki doesn't need scrollable result sets, anyway. --> + <property name="jdbc.use_scrollable_resultset">false</property> + + <!-- DBCP Connection Pooling configuration. Only some properties are shown. All available properties can be found + at https://commons.apache.org/proper/commons-dbcp/configuration.html + --> + <property name="dbcp.defaultAutoCommit">false</property> + <property name="dbcp.maxTotal">50</property> + <property name="dbcp.maxIdle">5</property> + <property name="dbcp.maxWaitMillis">30000</property> + <property name="connection.provider_class">com.xpn.xwiki.store.DBCPConnectionProvider</property> + + <!-- Setting "dbcp.poolPreparedStatements" to true and "dbcp.maxOpenPreparedStatements" will tell DBCP to cache + Prepared Statements (it's off by default). Note that for backward compatibility the "dbcp.ps.maxActive" is also + supported and when set it'll set "dbcp.poolPreparedStatements" to true and "dbcp.maxOpenPreparedStatements" to + value of "dbcp.ps.maxActive". + + Note 1: When using HSQLDB for example, it's important to NOT cache prepared statements because HSQLDB + Prepared Statements (PS) contain the schema on which they were initially created and thus when switching + schema if the same PS is reused it'll execute on the wrong schema! Since HSQLDB does internally cache + prepared statement there's no performance loss by not caching Prepared Statements at the DBCP level. + See https://jira.xwiki.org/browse/XWIKI-1740. + Thus we recommend not turning on this configuration for HSQLDB unless you know what you're doing :) + + Note 2: The same applies to PostGreSQL. + --> + + <!-- BoneCP Connection Pooling configuration. + <property name="bonecp.idleMaxAgeInMinutes">240</property> + <property name="bonecp.idleConnectionTestPeriodInMinutes">60</property> + <property name="bonecp.partitionCount">3</property> + <property name="bonecp.acquireIncrement">10</property> + <property name="bonecp.maxConnectionsPerPartition">60</property> + <property name="bonecp.minConnectionsPerPartition">20</property> + <property name="bonecp.statementsCacheSize">50</property> + <property name="bonecp.releaseHelperThreads">3</property> + <property name="connection.provider_class">com.xpn.xwiki.store.DBCPConnectionProvider</property> + --> + + <!-- MySQL configuration. + Notes: + - if you want the main wiki database to be different than "xwiki" + you will also have to set the property xwiki.db in xwiki.cfg file + --> + <property name="connection.url">jdbc:mysql://replacecontainer/replacedatabase?useSSL=false</property> + <property name="connection.username">replaceuser</property> + <property name="connection.password">replacepassword</property> + <property name="connection.driver_class">com.mysql.jdbc.Driver</property> + <property name="dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property> + <property name="dbcp.poolPreparedStatements">true</property> + <property name="dbcp.maxOpenPreparedStatements">20</property> + + <property name="hibernate.connection.charSet">UTF-8</property> + <property name="hibernate.connection.useUnicode">true</property> + <property name="hibernate.connection.characterEncoding">utf8</property> + + <mapping resource="xwiki.hbm.xml"/> + <mapping resource="feeds.hbm.xml"/> + <mapping resource="instance.hbm.xml"/> + <mapping resource="notification-filter-preferences.hbm.xml"/> + <mapping resource="mailsender.hbm.xml"/> + <mapping resource="activitystream.hbm.xml"/> + </session-factory> +</hibernate-configuration> diff --git a/12/postgres-tomcat/.env b/12/postgres-tomcat/.env new file mode 100644 index 0000000000000000000000000000000000000000..5d172cf6258249527a75a10e3ae681cf68bfaca1 --- /dev/null +++ b/12/postgres-tomcat/.env @@ -0,0 +1,6 @@ +# Default environment values +XWIKI_VERSION=12.0 +DB_USER=xwiki +DB_PASSWORD=xwiki +DB_DATABASE=xwiki +POSTGRES_ROOT_PASSWORD=xwiki diff --git a/12/postgres-tomcat/Dockerfile b/12/postgres-tomcat/Dockerfile new file mode 100644 index 0000000000000000000000000000000000000000..a87a1bd202ea80c9d575b0e31d193234e0b3eee4 --- /dev/null +++ b/12/postgres-tomcat/Dockerfile @@ -0,0 +1,103 @@ +# --------------------------------------------------------------------------- +# See the NOTICE file distributed with this work for additional +# information regarding copyright ownership. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# --------------------------------------------------------------------------- +FROM tomcat:8-jdk11-adoptopenjdk-hotspot + +# ____ ____ ____ ____ _ __ _ +# |_ _||_ _||_ _| |_ _|(_) [ | _ (_) +# \ \ / / \ \ /\ / / __ | | / ] __ +# > `' < \ \/ \/ / [ | | '' < [ | +# _/ /'`\ \_ \ /\ / | | | |`\ \ | | +# |____||____| \/ \/ [___][__| \_][___] + +MAINTAINER Vincent Massol <vincent@massol.net> + +# Note: when using docker-compose, the ENV values below are overridden from the .env file. + +# Install LibreOffice + other tools +# Note that procps is required to get ps which is used by JODConverter to start LibreOffice +RUN apt-get update && \ + apt-get --no-install-recommends -y install \ + curl \ + libreoffice \ + unzip \ + procps \ + libpostgresql-jdbc-java && \ + rm -rf /var/lib/apt/lists/* + +# Install XWiki as the ROOT webapp context in Tomcat +# Create the Tomcat temporary directory +# Configure the XWiki permanent directory +ENV XWIKI_VERSION=12.0 +ENV XWIKI_URL_PREFIX "https://maven.xwiki.org/releases/org/xwiki/platform/xwiki-platform-distribution-war/${XWIKI_VERSION}" +ENV XWIKI_DOWNLOAD_SHA256 da57110002c76001dc9ca16eb217ea0d6c81a2b4bd3d8ad26a6fc5efe96c776d +RUN rm -rf /usr/local/tomcat/webapps/* && \ + mkdir -p /usr/local/tomcat/temp && \ + mkdir -p /usr/local/xwiki/data && \ + curl -fSL "${XWIKI_URL_PREFIX}/xwiki-platform-distribution-war-${XWIKI_VERSION}.war" -o xwiki.war && \ + echo "$XWIKI_DOWNLOAD_SHA256 xwiki.war" | sha256sum -c - && \ + unzip -d /usr/local/tomcat/webapps/ROOT xwiki.war && \ + rm -f xwiki.war + +# Copy the JDBC driver in the XWiki webapp +RUN cp /usr/share/java/postgresql-jdbc4.jar /usr/local/tomcat/webapps/ROOT/WEB-INF/lib/ + +# Configure Tomcat. For example set the memory for the Tomcat JVM since the default value is too small for XWiki +COPY tomcat/setenv.sh /usr/local/tomcat/bin/ + +# Setup the XWiki Hibernate configuration +COPY xwiki/hibernate.cfg.xml /usr/local/tomcat/webapps/ROOT/WEB-INF/hibernate.cfg.xml + +# Set a specific distribution id in XWiki for this docker packaging. +RUN sed -i 's/<id>org.xwiki.platform:xwiki-platform-distribution-war/<id>org.xwiki.platform:xwiki-platform-distribution-docker/' \ + /usr/local/tomcat/webapps/ROOT/META-INF/extension.xed + +# Add scripts required to make changes to XWiki configuration files at execution time +# Note: we don't run CHMOD since 1) it's not required since the executabe bit is already set in git and 2) running +# CHMOD after a COPY will sometimes fail, depending on different host-specific factors (especially on AUFS). +COPY xwiki/docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh + +# Make the XWiki directory (the permanent directory is included in it) persist on the host (so that it's not recreated +# across runs) +VOLUME /usr/local/xwiki + +# At this point the image is done and what remains below are the runtime configuration used by the user to configure +# the container that will be created out of the image. Namely the user can override some environment variables with +# docker run -e "var1=val1" -e "var2=val2" ... +# The supported environment variables that can be overridden are: +# - DB_USER: the name of the user configured for XWiki in the DB. Default is "xwiki". This is used to configure +# xwiki's hibernate.cfg.xml file. +# - DB_PASSWORD: the password for the user configured for XWiki in the DB. Default is "xwiki". This is used to +# configure xwiki's hibernate.cfg.xml file. +# - DB_DATABASE: the name of the database to use. Default is "xwiki". This is used to configure xwiki's +# hibernate.cfg.xml file. +# - DB_HOST: The name of the host (or docker container) containing the database. Default is "db". This is used to +# configure xwiki's hibernate.cfg.xml file. +# - CONTEXT_PATH: The name of the context path under which XWiki will be deployed in Tomcat. If not specified then it'll +# be deployed as ROOT. + +# Example: +# docker run -it -e "DB_USER=xwiki" -e "DB_PASSWORD=xwiki" <imagename> + +# Starts XWiki by starting Tomcat. All options passed to "docker run [OPTIONS] IMAGE[:TAG|@DIGEST] [COMMAND] [ARG...]" +# are also passed to docker-entrypoint.sh. If "xwiki" is passed then XWiki will be configured the first time the +# container executes and Tomcat will be started. If some other parameter is passed then it'll be executed to comply +# with best practices defined at https://github.com/docker-library/official-images#consistency. +ENTRYPOINT ["docker-entrypoint.sh"] +CMD ["xwiki"] diff --git a/12/postgres-tomcat/docker-compose.yml b/12/postgres-tomcat/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..65369cf889e2eb0ea5a68a48f43ce963e510f8c9 --- /dev/null +++ b/12/postgres-tomcat/docker-compose.yml @@ -0,0 +1,63 @@ +# --------------------------------------------------------------------------- +# See the NOTICE file distributed with this work for additional +# information regarding copyright ownership. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# --------------------------------------------------------------------------- +version: '2' +networks: + bridge: + driver: bridge +services: + # The container that runs XWiki + Tomcat + web: + build: . + container_name: xwiki-postgres-tomcat-web + depends_on: + - db + ports: + - "8080:8080" + # Default values defined in .env file. + # The DB_USER/DB_PASSWORD/DB_DATABASE/DB_HOST variables are used in the hibernate.cfg.xml file. + environment: + - XWIKI_VERSION=${XWIKI_VERSION} + - DB_USER=${DB_USER} + - DB_PASSWORD=${DB_PASSWORD} + - DB_DATABASE=${DB_DATABASE} + - DB_HOST=xwiki-postgres-db + # Provide a name instead of an auto-generated id for xwiki data (the permanent directory in included in it) + # configured in the Dockerfile, to make it simpler to identify in 'docker volume ls'. + volumes: + - xwiki-data:/usr/local/xwiki + networks: + - bridge + # The container that runs the database (postgres) + db: + image: "postgres:12.1-alpine" + container_name: xwiki-postgres-db + volumes: + - postgres-data:/var/lib/postgresql/data + environment: + - POSTGRES_ROOT_PASSWORD=${POSTGRES_ROOT_PASSWORD} + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_USER=${DB_USER} + - POSTGRES_DB=${DB_DATABASE} + - POSTGRES_INITDB_ARGS="--encoding=UTF8" + networks: + - bridge +volumes: + postgres-data: {} + xwiki-data: {} diff --git a/12/postgres-tomcat/tomcat/setenv.sh b/12/postgres-tomcat/tomcat/setenv.sh new file mode 100755 index 0000000000000000000000000000000000000000..755f260ef22e6b02f80c92ae6a07d47610cec7b4 --- /dev/null +++ b/12/postgres-tomcat/tomcat/setenv.sh @@ -0,0 +1,54 @@ +#!/bin/bash +# --------------------------------------------------------------------------- +# See the NOTICE file distributed with this work for additional +# information regarding copyright ownership. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# --------------------------------------------------------------------------- + +# We're making the following changes to the default: +# * Adding more memory (default is 512MB which is not enough for XWiki) +# * By default, Tomcat does not allow the usage of encoded slash '%2F' and backslash '%5C' in URLs, as noted in +# https://tomcat.apache.org/security-6.html#Fixed_in_Apache_Tomcat_6.0.10. We want to allow for them as it's useful to +# be able to have '/' and '' in wiki page names. +# * On some system /dev/random is slow to init leading to a slow Tomcat and thus Xwiki startup. + +# Users can override these values by setting the JAVA_OPTS environment variable. For example: +# -e JAVA_OPTS="-Xmx2048m" + +XMX="-Xmx1024m" +ALLOW_ENCODED_SLASH="-Dorg.apache.tomcat.util.buf.UDecoder.ALLOW_ENCODED_SLASH=true" +ALLOW_BACKSLASH="-Dorg.apache.catalina.connector.CoyoteAdapter.ALLOW_BACKSLASH=true" +SECURERANDOM="-Djava.security.egd=file:/dev/./urandom" + +if [[ ! -z "$JAVA_OPTS" ]]; then + if [[ ! $JAVA_OPTS =~ .*-Xmx[0-9]+.* ]]; then + JAVA_OPTS="$JAVA_OPTS $XMX" + fi + if [[ ! $JAVA_OPTS =~ .*ALLOW_ENCODED_SLASH.* ]]; then + JAVA_OPTS="$JAVA_OPTS $ALLOW_ENCODED_SLASH" + fi + if [[ ! $JAVA_OPTS =~ .*ALLOW_BACKSLASH.* ]]; then + JAVA_OPTS="$JAVA_OPTS $ALLOW_BACKSLASH" + fi + if [[ ! $JAVA_OPTS =~ .*java\.security\.egd.* ]]; then + JAVA_OPTS="$JAVA_OPTS $SECURERANDOM" + fi +else + JAVA_OPTS="$XMX $ALLOW_ENCODED_SLASH $ALLOW_BACKSLASH $SECURERANDOM" +fi + +export JAVA_OPTS diff --git a/12/postgres-tomcat/xwiki/docker-entrypoint.sh b/12/postgres-tomcat/xwiki/docker-entrypoint.sh new file mode 100755 index 0000000000000000000000000000000000000000..8f8685abb67724b9d16cadb18cf4ab7dc7006ce4 --- /dev/null +++ b/12/postgres-tomcat/xwiki/docker-entrypoint.sh @@ -0,0 +1,174 @@ +#!/bin/bash +# --------------------------------------------------------------------------- +# See the NOTICE file distributed with this work for additional +# information regarding copyright ownership. +# +# This is free software; you can redistribute it and/or modify it +# under the terms of the GNU Lesser General Public License as +# published by the Free Software Foundation; either version 2.1 of +# the License, or (at your option) any later version. +# +# This software is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +# Lesser General Public License for more details. +# +# You should have received a copy of the GNU Lesser General Public +# License along with this software; if not, write to the Free +# Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA +# 02110-1301 USA, or see the FSF site: http://www.fsf.org. +# --------------------------------------------------------------------------- + +set -e + +function first_start() { + configure + touch /usr/local/tomcat/webapps/$CONTEXT_PATH/.first_start_completed +} + +function other_starts() { + mkdir -p /usr/local/xwiki/data + restoreConfigurationFile 'hibernate.cfg.xml' + restoreConfigurationFile 'xwiki.cfg' + restoreConfigurationFile 'xwiki.properties' +} + +# $1 - the path to xwiki.[cfg|properties] +# $2 - the setting/property to set +# $3 - the new value +function xwiki_replace() { + sed -i s~"\#\? \?$2 \?=.*"~"$2=$3"~g "$1" +} + +# $1 - the setting/property to set +# $2 - the new value +function xwiki_set_cfg() { + xwiki_replace /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/xwiki.cfg "$1" "$2" +} + +# $1 - the setting/property to set +# $2 - the new value +function xwiki_set_properties() { + xwiki_replace /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/xwiki.properties "$1" "$2" +} + +# usage: file_env VAR [DEFAULT] +# ie: file_env 'XYZ_DB_PASSWORD' 'example' +# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of +# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature) +file_env() { + local var="$1" + local fileVar="${var}_FILE" + local def="${2:-}" + if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then + echo >&2 "error: both $var and $fileVar are set (but are exclusive)" + exit 1 + fi + local val="$def" + if [ "${!var:-}" ]; then + val="${!var}" + elif [ "${!fileVar:-}" ]; then + val="$(< "${!fileVar}")" + fi + export "$var"="$val" + unset "$fileVar" +} + +# Allows to use sed but with user input which can contain special sed characters such as \, / or &. +# $1 - the text to search for +# $2 - the replacement text +# $3 - the file in which to do the search/replace +function safesed { + sed -i "s/$(echo $1 | sed -e 's/\([[\/.*]\|\]\)/\\&/g')/$(echo $2 | sed -e 's/[\/&]/\\&/g')/g" $3 +} + +# $1 - the config file name found in WEB-INF (e.g. "xwiki.cfg") +function saveConfigurationFile() { + if [ -f "/usr/local/xwiki/data/$1" ]; then + echo " Reusing existing config file $1..." + cp "/usr/local/xwiki/data/$1" "/usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/$1" + else + echo " Saving config file $1..." + cp "/usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/$1" "/usr/local/xwiki/data/$1" + fi +} + +# $1 - the config file name to restore in WEB-INF (e.g. "xwiki.cfg") +function restoreConfigurationFile() { + if [ -f "/usr/local/xwiki/data/$1" ]; then + echo " Synchronizing config file $1..." + cp "/usr/local/xwiki/data/$1" "/usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/$1" + else + echo " No config file $1 found, using default from container..." + cp "/usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/$1" "/usr/local/xwiki/data/$1" + fi +} + +function configure() { + echo 'Configuring XWiki...' + + echo 'Setting environment variables' + file_env 'DB_USER' 'xwiki' + file_env 'DB_PASSWORD' 'xwiki' + file_env 'DB_HOST' 'db' + file_env 'DB_DATABASE' 'xwiki' + file_env 'INDEX_HOST' 'localhost' + file_env 'INDEX_PORT' '8983' + + echo " Deploying XWiki in the '$CONTEXT_PATH' context" + if [ "$CONTEXT_PATH" == "ROOT" ]; then + xwiki_set_cfg 'xwiki.webapppath' '' + else + mv /usr/local/tomcat/webapps/ROOT /usr/local/tomcat/webapps/$CONTEXT_PATH + fi + + echo 'Replacing environment variables in files' + safesed "replaceuser" $DB_USER /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/hibernate.cfg.xml + safesed "replacepassword" $DB_PASSWORD /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/hibernate.cfg.xml + safesed "replacecontainer" $DB_HOST /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/hibernate.cfg.xml + safesed "replacedatabase" $DB_DATABASE /usr/local/tomcat/webapps/$CONTEXT_PATH/WEB-INF/hibernate.cfg.xml + + echo ' Generating authentication validation and encryption keys...' + xwiki_set_cfg 'xwiki.authentication.validationKey' "$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" + xwiki_set_cfg 'xwiki.authentication.encryptionKey' "$(cat /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w 32 | head -n 1)" + + echo ' Setting permanent directory...' + xwiki_set_properties 'environment.permanentDirectory' '/usr/local/xwiki/data' + echo ' Configure libreoffice...' + xwiki_set_properties 'openoffice.autoStart' 'true' + + if [ $INDEX_HOST != 'localhost' ]; then + echo ' Configuring remote Solr Index' + xwiki_set_properties 'solr.type' 'remote' + xwiki_set_properties 'solr.remote.url' "http://$INDEX_HOST:$INDEX_PORT/solr/xwiki" + fi + + # If the files already exist then copy them to the XWiki's WEB-INF directory. Otherwise copy the default config + # files to the permanent directory so that they can be easily modified by the user. They'll be synced at the next + # start. + mkdir -p /usr/local/xwiki/data + saveConfigurationFile 'hibernate.cfg.xml' + saveConfigurationFile 'xwiki.cfg' + saveConfigurationFile 'xwiki.properties' +} + +# This if will check if the first argument is a flag but only works if all arguments require a hyphenated flag +# -v; -SL; -f arg; etc will work, but not arg1 arg2 +if [ "${1:0:1}" = '-' ]; then + set -- xwiki "$@" +fi + +# Check for the expected command +if [ "$1" = 'xwiki' ]; then + file_env 'CONTEXT_PATH' 'ROOT' + if [[ ! -f /usr/local/tomcat/webapps/$CONTEXT_PATH/.first_start_completed ]]; then + first_start + else + other_starts + fi + shift + set -- catalina.sh run "$@" +fi + +# Else default to run whatever the user wanted like "bash" +exec "$@" diff --git a/12/postgres-tomcat/xwiki/hibernate.cfg.xml b/12/postgres-tomcat/xwiki/hibernate.cfg.xml new file mode 100644 index 0000000000000000000000000000000000000000..348d39850be10a0c1e0f3c7cbce829ff4b7c4525 --- /dev/null +++ b/12/postgres-tomcat/xwiki/hibernate.cfg.xml @@ -0,0 +1,109 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<!-- + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. +--> + +<!DOCTYPE hibernate-configuration PUBLIC + "-//Hibernate/Hibernate Configuration DTD//EN" + "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> +<hibernate-configuration> + <session-factory> + + <!-- Please refer to the installation guide on + https://www.xwiki.org/xwiki/bin/view/Documentation/AdminGuide/Installation/ for configuring your + database. You'll need to do 2 things: + 1) Copy your database driver JAR in WEB-INF/lib or in some shared lib directory + 2) Uncomment the properties below for your specific DB (and comment the default + database configuration if it doesn't match your DB) + --> + + <!-- Generic parameters common to all Databases --> + + <property name="show_sql">false</property> + <property name="use_outer_join">true</property> + + <!-- Without it, some queries fail in MS SQL. XWiki doesn't need scrollable result sets, anyway. --> + <property name="jdbc.use_scrollable_resultset">false</property> + + <!-- DBCP Connection Pooling configuration. Only some properties are shown. All available properties can be found + at https://commons.apache.org/proper/commons-dbcp/configuration.html + --> + <property name="dbcp.defaultAutoCommit">false</property> + <property name="dbcp.maxTotal">50</property> + <property name="dbcp.maxIdle">5</property> + <property name="dbcp.maxWaitMillis">30000</property> + <property name="connection.provider_class">com.xpn.xwiki.store.DBCPConnectionProvider</property> + + <!-- Setting "dbcp.poolPreparedStatements" to true and "dbcp.maxOpenPreparedStatements" will tell DBCP to cache + Prepared Statements (it's off by default). Note that for backward compatibility the "dbcp.ps.maxActive" is also + supported and when set it'll set "dbcp.poolPreparedStatements" to true and "dbcp.maxOpenPreparedStatements" to + value of "dbcp.ps.maxActive". + + Note 1: When using HSQLDB for example, it's important to NOT cache prepared statements because HSQLDB + Prepared Statements (PS) contain the schema on which they were initially created and thus when switching + schema if the same PS is reused it'll execute on the wrong schema! Since HSQLDB does internally cache + prepared statement there's no performance loss by not caching Prepared Statements at the DBCP level. + See https://jira.xwiki.org/browse/XWIKI-1740. + Thus we recommend not turning on this configuration for HSQLDB unless you know what you're doing :) + + Note 2: The same applies to PostGreSQL. + --> + + <!-- BoneCP Connection Pooling configuration. + <property name="bonecp.idleMaxAgeInMinutes">240</property> + <property name="bonecp.idleConnectionTestPeriodInMinutes">60</property> + <property name="bonecp.partitionCount">3</property> + <property name="bonecp.acquireIncrement">10</property> + <property name="bonecp.maxConnectionsPerPartition">60</property> + <property name="bonecp.minConnectionsPerPartition">20</property> + <property name="bonecp.statementsCacheSize">50</property> + <property name="bonecp.releaseHelperThreads">3</property> + <property name="connection.provider_class">com.xpn.xwiki.store.DBCPConnectionProvider</property> + --> + + <!-- PostgreSQL configuration. + Notes: + - "jdbc.use_streams_for_binary" needs to be set to "false", + see https://community.jboss.org/wiki/HibernateCoreMigrationGuide36 + - "xwiki.virtual_mode" can be set to either "schema" or "database". Note that currently the database mode + doesn't support database creation (see https://jira.xwiki.org/browse/XWIKI-8753) + - if you want the main wiki database to be different than "xwiki" (or "public" in schema mode) + you will also have to set the property xwiki.db in xwiki.cfg file + --> + <property name="connection.url">jdbc:postgresql://replacecontainer:5432/replacedatabase</property> + <property name="connection.username">replaceuser</property> + <property name="connection.password">replacepassword</property> + <property name="connection.driver_class">org.postgresql.Driver</property> + <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property> + <property name="jdbc.use_streams_for_binary">false</property> + <property name="xwiki.virtual_mode">schema</property> + + <property name="hibernate.connection.charSet">UTF-8</property> + <property name="hibernate.connection.useUnicode">true</property> + <property name="hibernate.connection.characterEncoding">utf8</property> + + <mapping resource="xwiki.postgresql.hbm.xml"/> + <mapping resource="feeds.hbm.xml"/> + <mapping resource="instance.hbm.xml"/> + <mapping resource="notification-filter-preferences.hbm.xml"/> + <mapping resource="mailsender.hbm.xml"/> + <mapping resource="activitystream.hbm.xml"/> + </session-factory> +</hibernate-configuration> diff --git a/template/docker-compose.yml b/template/docker-compose.yml index cb74678c621408ac9ed2aff150fd0a998a9c30c2..09c7cae1fd691455ff628a68a598715ea8c8c507 100644 --- a/template/docker-compose.yml +++ b/template/docker-compose.yml @@ -67,7 +67,7 @@ services: - MYSQL_PASSWORD=\${DB_PASSWORD} - MYSQL_DATABASE=\${DB_DATABASE}''' - else if (db == 'postgres') print '''image: "postgres:12.1-alpine" + else if (db == 'postgres') print '''image: "postgres:12-alpine" container_name: xwiki-postgres-db volumes: - postgres-data:/var/lib/postgresql/data