ONLYOFFICE / Docker-CommunityServer

Collaborative system for managing documents, projects, customer relations and emails in one place
MIT License
482 stars 180 forks source link

Better initialization of database #188

Closed VincentSC closed 1 year ago

VincentSC commented 1 year ago

Hi, got some improvements and I'm too lazy to create a PR.

Instead of the sql-file use a sh-file initdb.sh:

#!/bin/bash
echo "** Creating default DB and users"

mysql -u root -p$MYSQL_ROOT_PASSWORD << EOF
CREATE DATABASE IF NOT EXISTS $MYSQL_DATABASE CHARACTER SET "utf8" COLLATE "utf8_general_ci";
CREATE DATABASE IF NOT EXISTS $MAIL_SERVER_DB_NAME CHARACTER SET "utf8" COLLATE "utf8_general_ci";

CREATE USER IF NOT EXISTS '$MYSQL_SERVER_USER'@'%' IDENTIFIED WITH mysql_native_password BY '$MYSQL_SERVER_PASS';
CREATE USER IF NOT EXISTS '$MAIL_SERVER_DB_USER'@'%' IDENTIFIED WITH mysql_native_password BY '$MAIL_SERVER_DB_PASS';

GRANT ALL PRIVILEGES ON $MYSQL_DATABASE.* TO 'onlyoffice_user'@'%';
GRANT ALL PRIVILEGES ON $MAIL_SERVER_DB_NAME.* TO 'onlyoffice_mailserver_user'@'%';

FLUSH PRIVILEGES;
EOF

This is the part for docker-compose:

  onlyoffice-mysql-server:
    container_name: onlyoffice-mysql-server
    image: mysql:8.0-debian
    cap_add:
      - SYS_NICE  # CAP_SYS_NICE
    environment:
     - MYSQL_ROOT_PASSWORD=${DB_ROOT_PASS}
     - MYSQL_DATABASE=onlyoffice
     - MYSQL_SERVER_USER=${DOCUMENT_DB_USER}
     - MYSQL_SERVER_PASS=${DOCUMENT_DB_PASS}
     - MAIL_SERVER_DB_NAME=onlyoffice_mailserver
     - MAIL_SERVER_DB_USER=${MAIL_SERVER_DB_USER}
     - MAIL_SERVER_DB_PASS=${MAIL_SERVER_DB_PASS}
    networks:
     - onlyoffice
    stdin_open: true
    tty: true
    restart: always
    command: mysqld --default-authentication-plugin=mysql_native_password
    volumes:
     - ./volumes/config/mysql/conf.d:/etc/mysql/conf.d
     - ./initdb.sh:/docker-entrypoint-initdb.d/init.sh
     - ./volumes/mysql_data:/var/lib/mysql
    healthcheck:
      test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", '-u', 'root', '-p$$DB_ROOT_PASSWORD' ]
      timeout: 20s
      retries: 10

Important parts:

I hope this helps

Carazyda commented 1 year ago

Hello @VincentSC please submit a pull request so that our developers can work on it.