mirror of
https://github.com/ONLYOFFICE/Docker-DocumentServer.git
synced 2026-02-10 20:45:40 +08:00
Add MSSQL support (#728)
This commit is contained in:
10
Dockerfile
10
Dockerfile
@ -12,9 +12,12 @@ ARG ONLYOFFICE_VALUE=onlyoffice
|
|||||||
RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
|
RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
|
||||||
apt-get -y update && \
|
apt-get -y update && \
|
||||||
apt-get -yq install wget apt-transport-https gnupg locales lsb-release && \
|
apt-get -yq install wget apt-transport-https gnupg locales lsb-release && \
|
||||||
|
wget -q -O /etc/apt/sources.list.d/mssql-release.list https://packages.microsoft.com/config/ubuntu/22.04/prod.list && \
|
||||||
|
wget -q -O - https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \
|
||||||
|
apt-get -y update && \
|
||||||
locale-gen en_US.UTF-8 && \
|
locale-gen en_US.UTF-8 && \
|
||||||
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections && \
|
echo ttf-mscorefonts-installer msttcorefonts/accepted-mscorefonts-eula select true | debconf-set-selections && \
|
||||||
apt-get -yq install \
|
ACCEPT_EULA=Y apt-get -yq install \
|
||||||
adduser \
|
adduser \
|
||||||
apt-utils \
|
apt-utils \
|
||||||
bomstrip \
|
bomstrip \
|
||||||
@ -22,6 +25,7 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
|
|||||||
cron \
|
cron \
|
||||||
curl \
|
curl \
|
||||||
htop \
|
htop \
|
||||||
|
libaio1 \
|
||||||
libasound2 \
|
libasound2 \
|
||||||
libboost-regex-dev \
|
libboost-regex-dev \
|
||||||
libcairo2 \
|
libcairo2 \
|
||||||
@ -34,6 +38,7 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
|
|||||||
libxml2 \
|
libxml2 \
|
||||||
libxss1 \
|
libxss1 \
|
||||||
libxtst6 \
|
libxtst6 \
|
||||||
|
mssql-tools18 \
|
||||||
mysql-client \
|
mysql-client \
|
||||||
nano \
|
nano \
|
||||||
net-tools \
|
net-tools \
|
||||||
@ -48,6 +53,7 @@ RUN echo "#!/bin/sh\nexit 0" > /usr/sbin/policy-rc.d && \
|
|||||||
sudo \
|
sudo \
|
||||||
supervisor \
|
supervisor \
|
||||||
ttf-mscorefonts-installer \
|
ttf-mscorefonts-installer \
|
||||||
|
unixodbc-dev \
|
||||||
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 ]; \
|
||||||
@ -94,6 +100,8 @@ RUN PACKAGE_FILE="${COMPANY_NAME}-${PRODUCT_NAME}${PRODUCT_EDITION}${PACKAGE_VER
|
|||||||
sed "s/COMPANY_NAME/${COMPANY_NAME}/g" -i /etc/supervisor/conf.d/*.conf && \
|
sed "s/COMPANY_NAME/${COMPANY_NAME}/g" -i /etc/supervisor/conf.d/*.conf && \
|
||||||
service supervisor stop && \
|
service supervisor stop && \
|
||||||
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/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/*
|
||||||
|
|||||||
@ -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` or `mysql`. Defaults to `postgres`.
|
- **DB_TYPE**: The database type. Supported values are `postgres`, `mariadb`, `mysql` or `mssql`. 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.
|
||||||
|
|||||||
@ -177,6 +177,9 @@ read_setting(){
|
|||||||
"dameng")
|
"dameng")
|
||||||
DB_PORT=${DB_PORT:-"5236"}
|
DB_PORT=${DB_PORT:-"5236"}
|
||||||
;;
|
;;
|
||||||
|
"mssql")
|
||||||
|
DB_PORT=${DB_PORT:-"1433"}
|
||||||
|
;;
|
||||||
"")
|
"")
|
||||||
DB_PORT=${DB_PORT:-${POSTGRESQL_SERVER_PORT:-$(${JSON} services.CoAuthoring.sql.dbPort)}}
|
DB_PORT=${DB_PORT:-${POSTGRESQL_SERVER_PORT:-$(${JSON} services.CoAuthoring.sql.dbPort)}}
|
||||||
;;
|
;;
|
||||||
@ -397,6 +400,12 @@ create_postgresql_db(){
|
|||||||
sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_USER;"
|
sudo -u postgres psql -c "CREATE DATABASE $DB_NAME OWNER $DB_USER;"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
create_mssql_db(){
|
||||||
|
MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT"
|
||||||
|
|
||||||
|
$MSSQL -U $DB_USER -P "$DB_PWD" -C -Q "IF NOT EXISTS (SELECT * FROM sys.databases WHERE name = '$DB_NAME') BEGIN CREATE DATABASE $DB_NAME; END"
|
||||||
|
}
|
||||||
|
|
||||||
create_db_tbl() {
|
create_db_tbl() {
|
||||||
case $DB_TYPE in
|
case $DB_TYPE in
|
||||||
"postgres")
|
"postgres")
|
||||||
@ -405,6 +414,9 @@ create_db_tbl() {
|
|||||||
"mariadb"|"mysql")
|
"mariadb"|"mysql")
|
||||||
create_mysql_tbl
|
create_mysql_tbl
|
||||||
;;
|
;;
|
||||||
|
"mssql")
|
||||||
|
create_mssql_tbl
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -416,6 +428,9 @@ upgrade_db_tbl() {
|
|||||||
"mariadb"|"mysql")
|
"mariadb"|"mysql")
|
||||||
upgrade_mysql_tbl
|
upgrade_mysql_tbl
|
||||||
;;
|
;;
|
||||||
|
"mssql")
|
||||||
|
upgrade_mssql_tbl
|
||||||
|
;;
|
||||||
esac
|
esac
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,6 +453,14 @@ upgrade_mysql_tbl() {
|
|||||||
$MYSQL $DB_NAME < "$APP_DIR/server/schema/mysql/createdb.sql" >/dev/null 2>&1
|
$MYSQL $DB_NAME < "$APP_DIR/server/schema/mysql/createdb.sql" >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
upgrade_mssql_tbl() {
|
||||||
|
CONN_PARAMS="-U $DB_USER -P "$DB_PWD" -C"
|
||||||
|
MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT $CONN_PARAMS"
|
||||||
|
|
||||||
|
$MSSQL < "$APP_DIR/server/schema/mssql/removetbl.sql" >/dev/null 2>&1
|
||||||
|
$MSSQL < "$APP_DIR/server/schema/mssql/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
|
||||||
@ -457,6 +480,15 @@ create_mysql_tbl() {
|
|||||||
$MYSQL $DB_NAME < "$APP_DIR/server/schema/mysql/createdb.sql" >/dev/null 2>&1
|
$MYSQL $DB_NAME < "$APP_DIR/server/schema/mysql/createdb.sql" >/dev/null 2>&1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
create_mssql_tbl() {
|
||||||
|
create_mssql_db
|
||||||
|
|
||||||
|
CONN_PARAMS="-U $DB_USER -P "$DB_PWD" -C"
|
||||||
|
MSSQL="/opt/mssql-tools18/bin/sqlcmd -S $DB_HOST,$DB_PORT $CONN_PARAMS"
|
||||||
|
|
||||||
|
$MSSQL < "$APP_DIR/server/schema/mssql/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/mssql/README.md
Normal file
17
tests/mssql/README.md
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
## Stand Documentserver with mssql
|
||||||
|
|
||||||
|
### 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
|
||||||
|
```
|
||||||
32
tests/mssql/create_db_user.sh
Executable file
32
tests/mssql/create_db_user.sh
Executable file
@ -0,0 +1,32 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
#generate SA password
|
||||||
|
SYMBOLS='!#$%&*+,-.:;=?@^_~'
|
||||||
|
for (( i=1; i <= 20; i++ )); do
|
||||||
|
PASS=$(tr -dc "A-Za-z0-9$SYMBOLS" </dev/urandom | head -c 15)
|
||||||
|
if [[ $PASS == *[0-9]* &&
|
||||||
|
$PASS != $(echo "$PASS" | tr [:upper:] ' ') &&
|
||||||
|
$PASS != $(echo "$PASS" | tr [:lower:] ' ') &&
|
||||||
|
$PASS != $(echo "$PASS" | tr "$SYMBOLS" ' ') ]]; then
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
export MSSQL_SA_PASSWORD=$PASS
|
||||||
|
|
||||||
|
CONNECTION_STR="/opt/mssql-tools/bin/sqlcmd -S localhost,1433 -U SA -P "$MSSQL_SA_PASSWORD" -C -Q"
|
||||||
|
|
||||||
|
#start db
|
||||||
|
/opt/mssql/bin/sqlservr &
|
||||||
|
|
||||||
|
#wait for db up
|
||||||
|
for (( i=1; i <= 10; i++ )); do
|
||||||
|
RES=$($CONNECTION_STR "SELECT @@VERSION;" 2>/dev/null | grep "affected" | wc -l)
|
||||||
|
if [ "$RES" -eq "1" ]; then
|
||||||
|
echo "Database is ready"
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
sleep 10
|
||||||
|
done
|
||||||
|
|
||||||
|
#create new db user
|
||||||
|
$CONNECTION_STR "IF NOT EXISTS (SELECT * FROM sys.sql_logins WHERE name = '$MSSQL_USER') BEGIN CREATE LOGIN $MSSQL_USER WITH PASSWORD = '$MSSQL_PASSWORD' , CHECK_POLICY = OFF; ALTER SERVER ROLE [dbcreator] ADD MEMBER [$MSSQL_USER]; END"
|
||||||
38
tests/mssql/docker-compose.yml
Normal file
38
tests/mssql/docker-compose.yml
Normal file
@ -0,0 +1,38 @@
|
|||||||
|
version: '2.1'
|
||||||
|
services:
|
||||||
|
onlyoffice-documentserver:
|
||||||
|
container_name: onlyoffice-documentserver
|
||||||
|
build:
|
||||||
|
context: ../../.
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
depends_on:
|
||||||
|
- onlyoffice-mssql
|
||||||
|
environment:
|
||||||
|
- DB_TYPE=${DB_TYPE:-mssql}
|
||||||
|
- DB_HOST=${DB_HOST:-onlyoffice-mssql}
|
||||||
|
- DB_PORT=${DB_PORT:-1433}
|
||||||
|
- DB_NAME=${DB_NAME:-onlyoffice}
|
||||||
|
- DB_USER=${DB_USER:-onlyoffice}
|
||||||
|
- DB_PWD=${DB_PWD:-onlyoffice}
|
||||||
|
stdin_open: true
|
||||||
|
restart: always
|
||||||
|
ports:
|
||||||
|
- '80:80'
|
||||||
|
|
||||||
|
onlyoffice-mssql:
|
||||||
|
container_name: onlyoffice-mssql
|
||||||
|
build:
|
||||||
|
context: .
|
||||||
|
dockerfile: mssql.Dockerfile
|
||||||
|
args:
|
||||||
|
- MSSQL_DATABASE=${DB_NAME:-onlyoffice}
|
||||||
|
- MSSQL_USER=${DB_USER:-onlyoffice}
|
||||||
|
- MSSQL_PASSWORD=${DB_PWD:-onlyoffice}
|
||||||
|
restart: always
|
||||||
|
volumes:
|
||||||
|
- mssql_data:/var/opt/mssql
|
||||||
|
expose:
|
||||||
|
- '1433'
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
mssql_data:
|
||||||
9
tests/mssql/mssql.Dockerfile
Normal file
9
tests/mssql/mssql.Dockerfile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
FROM mcr.microsoft.com/mssql/server:2022-latest as onlyoffice-mssql
|
||||||
|
|
||||||
|
ENV ACCEPT_EULA=Y
|
||||||
|
|
||||||
|
SHELL ["/bin/bash", "-c"]
|
||||||
|
|
||||||
|
COPY create_db_user.sh /tmp/create_db_user.sh
|
||||||
|
|
||||||
|
RUN bash /tmp/create_db_user.sh
|
||||||
Reference in New Issue
Block a user