Add ORACLE support (#734)

This commit is contained in:
Roman Demidov
2024-05-27 13:57:11 +03:00
committed by GitHub
parent b4e29f9695
commit bbfc86a1e0
8 changed files with 171 additions and 1 deletions

View File

@ -8,6 +8,16 @@ LABEL maintainer Ascensio System SIA <support@onlyoffice.com>
ARG BASE_VERSION ARG BASE_VERSION
ARG PG_VERSION=14 ARG PG_VERSION=14
ENV OC_RELEASE_NUM=21
ENV OC_RU_VER=12
ENV OC_RU_REVISION_VER=0
ENV OC_RESERVED_NUM=0
ENV OC_RU_DATE=0
ENV OC_PATH=${OC_RELEASE_NUM}${OC_RU_VER}000
ENV OC_FILE_SUFFIX=${OC_RELEASE_NUM}.${OC_RU_VER}.${OC_RU_REVISION_VER}.${OC_RESERVED_NUM}.${OC_RU_DATE}${OC_FILE_SUFFIX}dbru
ENV OC_VER_DIR=${OC_RELEASE_NUM}_${OC_RU_VER}
ENV OC_DOWNLOAD_URL=https://download.oracle.com/otn_software/linux/instantclient/${OC_PATH}
ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8 DEBIAN_FRONTEND=noninteractive PG_VERSION=${PG_VERSION} BASE_VERSION=${BASE_VERSION} ENV LANG=en_US.UTF-8 LANGUAGE=en_US:en LC_ALL=en_US.UTF-8 DEBIAN_FRONTEND=noninteractive PG_VERSION=${PG_VERSION} BASE_VERSION=${BASE_VERSION}
ARG ONLYOFFICE_VALUE=onlyoffice ARG ONLYOFFICE_VALUE=onlyoffice
@ -57,6 +67,7 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
supervisor \ supervisor \
ttf-mscorefonts-installer \ ttf-mscorefonts-installer \
unixodbc-dev \ unixodbc-dev \
unzip \
xvfb \ xvfb \
zlib1g && \ zlib1g && \
if [ $(ls -l /usr/share/fonts/truetype/msttcorefonts | wc -l) -ne 61 ]; \ if [ $(ls -l /usr/share/fonts/truetype/msttcorefonts | wc -l) -ne 61 ]; \
@ -68,6 +79,11 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
service postgresql restart && \ service postgresql restart && \
sudo -u postgres psql -c "CREATE USER $ONLYOFFICE_VALUE WITH password '$ONLYOFFICE_VALUE';" && \ sudo -u postgres psql -c "CREATE USER $ONLYOFFICE_VALUE WITH password '$ONLYOFFICE_VALUE';" && \
sudo -u postgres psql -c "CREATE DATABASE $ONLYOFFICE_VALUE OWNER $ONLYOFFICE_VALUE;" && \ sudo -u postgres psql -c "CREATE DATABASE $ONLYOFFICE_VALUE OWNER $ONLYOFFICE_VALUE;" && \
wget -O basic.zip ${OC_DOWNLOAD_URL}/instantclient-basic-linux.x64-${OC_FILE_SUFFIX}.zip && \
wget -O sqlplus.zip ${OC_DOWNLOAD_URL}/instantclient-sqlplus-linux.x64-${OC_FILE_SUFFIX}.zip && \
unzip -d /usr/share basic.zip && \
unzip -d /usr/share sqlplus.zip && \
mv /usr/share/instantclient_${OC_VER_DIR} /usr/share/instantclient && \
service postgresql stop && \ service postgresql stop && \
service redis-server stop && \ service redis-server stop && \
service rabbitmq-server stop && \ service rabbitmq-server stop && \
@ -78,6 +94,7 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
COPY config/supervisor/supervisor /etc/init.d/ COPY config/supervisor/supervisor /etc/init.d/
COPY config/supervisor/ds/*.conf /etc/supervisor/conf.d/ COPY config/supervisor/ds/*.conf /etc/supervisor/conf.d/
COPY run-document-server.sh /app/ds/run-document-server.sh COPY run-document-server.sh /app/ds/run-document-server.sh
COPY oracle/sqlplus /usr/bin/sqlplus
EXPOSE 80 443 EXPOSE 80 443
@ -105,6 +122,8 @@ RUN PACKAGE_FILE="${COMPANY_NAME}-${PRODUCT_NAME}${PRODUCT_EDITION}${PACKAGE_VER
chmod 755 /app/ds/*.sh && \ chmod 755 /app/ds/*.sh && \
printf "\nGO" >> /var/www/onlyoffice/documentserver/server/schema/mssql/createdb.sql && \ printf "\nGO" >> /var/www/onlyoffice/documentserver/server/schema/mssql/createdb.sql && \
printf "\nGO" >> /var/www/onlyoffice/documentserver/server/schema/mssql/removetbl.sql && \ printf "\nGO" >> /var/www/onlyoffice/documentserver/server/schema/mssql/removetbl.sql && \
printf "\nexit" >> /var/www/onlyoffice/documentserver/server/schema/oracle/createdb.sql && \
printf "\nexit" >> /var/www/onlyoffice/documentserver/server/schema/oracle/removetbl.sql && \
rm -f /tmp/$PACKAGE_FILE && \ rm -f /tmp/$PACKAGE_FILE && \
rm -rf /var/log/$COMPANY_NAME && \ rm -rf /var/log/$COMPANY_NAME && \
rm -rf /var/lib/apt/lists/* rm -rf /var/lib/apt/lists/*

View File

@ -179,7 +179,7 @@ Below is the complete list of parameters that can be set using environment varia
- **SSL_DHPARAM_PATH**: The path to the Diffie-Hellman parameter. Defaults to `/var/www/onlyoffice/Data/certs/dhparam.pem`. - **SSL_DHPARAM_PATH**: The path to the Diffie-Hellman parameter. Defaults to `/var/www/onlyoffice/Data/certs/dhparam.pem`.
- **SSL_VERIFY_CLIENT**: Enable verification of client certificates using the `CA_CERTIFICATES_PATH` file. Defaults to `false` - **SSL_VERIFY_CLIENT**: Enable verification of client certificates using the `CA_CERTIFICATES_PATH` file. Defaults to `false`
- **NODE_EXTRA_CA_CERTS**: The [NODE_EXTRA_CA_CERTS](https://nodejs.org/api/cli.html#node_extra_ca_certsfile "Node.js documentation") to extend CAs with the extra certificates for Node.js. Defaults to `/var/www/onlyoffice/Data/certs/extra-ca-certs.pem`. - **NODE_EXTRA_CA_CERTS**: The [NODE_EXTRA_CA_CERTS](https://nodejs.org/api/cli.html#node_extra_ca_certsfile "Node.js documentation") to extend CAs with the extra certificates for Node.js. Defaults to `/var/www/onlyoffice/Data/certs/extra-ca-certs.pem`.
- **DB_TYPE**: The database type. Supported values are `postgres`, `mariadb`, `mysql` or `mssql`. Defaults to `postgres`. - **DB_TYPE**: The database type. Supported values are `postgres`, `mariadb`, `mysql`, `mssql` or `oracle`. Defaults to `postgres`.
- **DB_HOST**: The IP address or the name of the host where the database server is running. - **DB_HOST**: The IP address or the name of the host where the database server is running.
- **DB_PORT**: The database server port number. - **DB_PORT**: The database server port number.
- **DB_NAME**: The name of a database to use. Should be existing on container startup. - **DB_NAME**: The name of a database to use. Should be existing on container startup.

6
oracle/sqlplus Executable file
View File

@ -0,0 +1,6 @@
#!/bin/sh
CLIENTDIR=/usr/share/instantclient
export LD_LIBRARY_PATH=$CLIENTDIR
$CLIENTDIR/sqlplus $@

View File

@ -180,6 +180,9 @@ read_setting(){
"mssql") "mssql")
DB_PORT=${DB_PORT:-"1433"} DB_PORT=${DB_PORT:-"1433"}
;; ;;
"oracle")
DB_PORT=${DB_PORT:-"1521"}
;;
"") "")
DB_PORT=${DB_PORT:-${POSTGRESQL_SERVER_PORT:-$(${JSON} services.CoAuthoring.sql.dbPort)}} DB_PORT=${DB_PORT:-${POSTGRESQL_SERVER_PORT:-$(${JSON} services.CoAuthoring.sql.dbPort)}}
;; ;;
@ -258,8 +261,31 @@ waiting_for_connection(){
done done
} }
waiting_for_db_ready(){
case $DB_TYPE in
"oracle")
PDB="XEPDB1"
ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/$PDB"
DB_TEST="echo \"SELECT version FROM V\$INSTANCE;\" | $ORACLE_SQL 2>/dev/null | grep \"Connected\" | wc -l"
;;
*)
return
;;
esac
for (( i=1; i <= 10; i++ )); do
RES=$(eval $DB_TEST)
if [ "$RES" -ne "0" ]; then
echo "Database is ready"
break
fi
sleep 5
done
}
waiting_for_db(){ waiting_for_db(){
waiting_for_connection $DB_HOST $DB_PORT waiting_for_connection $DB_HOST $DB_PORT
waiting_for_db_ready
} }
waiting_for_amqp(){ waiting_for_amqp(){
@ -427,6 +453,9 @@ create_db_tbl() {
"mssql") "mssql")
create_mssql_tbl create_mssql_tbl
;; ;;
"oracle")
create_oracle_tbl
;;
esac esac
} }
@ -441,6 +470,9 @@ upgrade_db_tbl() {
"mssql") "mssql")
upgrade_mssql_tbl upgrade_mssql_tbl
;; ;;
"oracle")
upgrade_oracle_tbl
;;
esac esac
} }
@ -471,6 +503,14 @@ upgrade_mssql_tbl() {
$MSSQL < "$APP_DIR/server/schema/mssql/createdb.sql" >/dev/null 2>&1 $MSSQL < "$APP_DIR/server/schema/mssql/createdb.sql" >/dev/null 2>&1
} }
upgrade_oracle_tbl() {
PDB="XEPDB1"
ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/$PDB"
$ORACLE_SQL @$APP_DIR/server/schema/oracle/removetbl.sql >/dev/null 2>&1
$ORACLE_SQL @$APP_DIR/server/schema/oracle/createdb.sql >/dev/null 2>&1
}
create_postgresql_tbl() { create_postgresql_tbl() {
if [ -n "$DB_PWD" ]; then if [ -n "$DB_PWD" ]; then
export PGPASSWORD=$DB_PWD export PGPASSWORD=$DB_PWD
@ -499,6 +539,13 @@ create_mssql_tbl() {
$MSSQL < "$APP_DIR/server/schema/mssql/createdb.sql" >/dev/null 2>&1 $MSSQL < "$APP_DIR/server/schema/mssql/createdb.sql" >/dev/null 2>&1
} }
create_oracle_tbl() {
PDB="XEPDB1"
ORACLE_SQL="sqlplus $DB_USER/$DB_PWD@//$DB_HOST:$DB_PORT/$PDB"
$ORACLE_SQL @$APP_DIR/server/schema/oracle/createdb.sql >/dev/null 2>&1
}
update_welcome_page() { update_welcome_page() {
WELCOME_PAGE="${APP_DIR}-example/welcome/docker.html" WELCOME_PAGE="${APP_DIR}-example/welcome/docker.html"
if [[ -e $WELCOME_PAGE ]]; then if [[ -e $WELCOME_PAGE ]]; then

17
tests/oracle/README.md Normal file
View File

@ -0,0 +1,17 @@
## Stand Documentserver with oracle
### How it works
For deploy stand:
**STEP 1**: Build you own images:
```bash
sudo docker-compose build
```
**STEP 2**: Wait build complete and when:
```bash
sudo docker-compose up -d
```

28
tests/oracle/create_db_user.sh Executable file
View File

@ -0,0 +1,28 @@
#!/bin/bash
CONNECTION_STR="sqlplus sys/$ORACLE_PASSWORD@//localhost:1521/$ORACLE_DATABASE as sysdba"
export ORACLE_PWD=$ORACLE_PASSWORD
#start db
/opt/oracle/runOracle.sh &
#wait for db up
for (( i=1; i <= 20; i++ )); do
RES=$(echo "SELECT version FROM V\$INSTANCE;" | $CONNECTION_STR 2>/dev/null | grep "Connected" | wc -l)
if [ "$RES" -ne "0" ]; then
echo "Database is ready"
break
fi
sleep 10
done
sleep 1
#create new db user
$CONNECTION_STR <<EOF
CREATE USER $ORACLE_USER IDENTIFIED BY $ORACLE_PASSWORD;
GRANT CREATE SESSION TO $ORACLE_USER;
GRANT CREATE TABLE TO $ORACLE_USER;
ALTER USER $ORACLE_USER quota unlimited on USERS;
EOF

View File

@ -0,0 +1,38 @@
version: '2.1'
services:
onlyoffice-documentserver:
container_name: onlyoffice-documentserver
build:
context: ../../.
dockerfile: Dockerfile
depends_on:
- onlyoffice-oracle
environment:
- DB_TYPE=${DB_TYPE:-oracle}
- DB_HOST=${DB_HOST:-onlyoffice-oracle}
- DB_PORT=${DB_PORT:-1521}
- DB_NAME=${DB_NAME:-xepdb1}
- DB_USER=${DB_USER:-onlyoffice}
- DB_PWD=${DB_PWD:-onlyoffice}
stdin_open: true
restart: always
ports:
- '80:80'
onlyoffice-oracle:
container_name: onlyoffice-oracle
build:
context: .
dockerfile: oracle.Dockerfile
args:
- ORACLE_DATABASE=${DB_NAME:-xepdb1}
- ORACLE_USER=${DB_USER:-onlyoffice}
- ORACLE_PASSWORD=${DB_PWD:-onlyoffice}
restart: always
volumes:
- oracle_data:/opt/oracle/oradata
expose:
- '1521'
volumes:
oracle_data:

View File

@ -0,0 +1,15 @@
FROM container-registry.oracle.com/database/express:21.3.0-xe as onlyoffice-oracle
ARG ORACLE_DATABASE=
ARG ORACLE_PASSWORD=
ARG ORACLE_USER=
ENV ORACLE_DATABASE=$ORACLE_DATABASE \
ORACLE_PASSWORD=$ORACLE_PASSWORD \
ORACLE_USER=$ORACLE_USER
SHELL ["/bin/bash", "-c"]
COPY create_db_user.sh /tmp/create_db_user.sh
RUN bash /tmp/create_db_user.sh