build-mysql.sh 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. #!/bin/bash
  2. . mailcow.conf
  3. ./build-network.sh
  4. NAME="mysql-mailcow"
  5. reconf() {
  6. echo "Installing database schema (this will not overwrite existing data)"
  7. echo "It may take a while for MySQL to warm up, please wait..."
  8. until docker exec ${NAME} /bin/bash -c "mysql -u'${DBUSER}' -p'${DBPASS}' ${DBNAME} < /assets/init.sql"; do
  9. echo "Trying again in 2 seconds..."
  10. sleep 2
  11. done
  12. echo "Done."
  13. }
  14. insert_admin() {
  15. echo 'Setting mailcow UI admin login to "admin:moohoo"...'
  16. echo "It may take a while for MySQL to warm up, please wait..."
  17. until docker exec ${NAME} /bin/bash -c "mysql -u'${DBUSER}' -p'${DBPASS}' ${DBNAME} < /assets/pw.sql"; do
  18. echo "Trying again in 2 seconds..."
  19. sleep 2
  20. done
  21. echo "Done."
  22. }
  23. client() {
  24. echo "==============================="
  25. echo "DB: ${DBNAME} - USER: ${DBUSER}"
  26. echo "==============================="
  27. docker exec -it ${NAME} /bin/bash -c "mysql -u'${DBUSER}' -p'${DBPASS}' ${DBNAME}"
  28. }
  29. if [[ ${1} == "--init-schema" ]]; then
  30. reconf
  31. exit 0
  32. elif [[ ${1} == "--client" ]]; then
  33. client
  34. exit 0
  35. elif [[ ${1} == "--reset-admin" ]]; then
  36. insert_admin
  37. exit 0
  38. fi
  39. echo "Stopping and removing containers with name tag ${NAME}..."
  40. if [[ ! -z $(docker ps -af "name=${NAME}" -q) ]]; then
  41. docker stop $(docker ps -af "name=${NAME}" -q)
  42. docker rm $(docker ps -af "name=${NAME}" -q)
  43. fi
  44. if [[ ! -z "$(docker images -q mysql:${DBVERS})" ]]; then
  45. read -r -p "Found image locally. Rebuild anyway? [y/N] " response
  46. response=${response,,}
  47. if [[ $response =~ ^(yes|y)$ ]]; then
  48. docker rmi mysql:${DBVERS}
  49. fi
  50. fi
  51. docker run \
  52. -v ${PWD}/data/db/mysql/:/var/lib/mysql/ \
  53. -v ${PWD}/data/conf/mysql/:/etc/mysql/conf.d/ \
  54. -v ${PWD}/data/assets/mysql:/assets \
  55. --name=${NAME} \
  56. --network=${DOCKER_NETWORK} \
  57. -h mysql \
  58. --network-alias mysql \
  59. -e MYSQL_ROOT_PASSWORD=${DBROOT} \
  60. -e MYSQL_DATABASE=${DBNAME} \
  61. -e MYSQL_USER=${DBUSER} \
  62. -e MYSQL_PASSWORD=${DBPASS} \
  63. -d mysql:${DBVERS}
  64. reconf
  65. read -r -p "Do you want to reset mailcow admin to admin:moohoo? [y/N] " response
  66. response=${response,,}
  67. if [[ $response =~ ^(yes|y)$ ]]; then
  68. insert_admin
  69. fi