docker-entry.sh 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #!/bin/bash
  2. set -e
  3. WAR_FILE=/target/diaowen.war
  4. WEBAPP_DIR=/usr/local/tomcat/webapps/diaowen
  5. CONF_DIR=${WEBAPP_DIR}/WEB-INF/classes/conf
  6. require_env() {
  7. ENV_NAME="$1"
  8. eval ENV_VALUE=\$$ENV_NAME
  9. if [ -z "$ENV_VALUE" ]; then
  10. echo "Missing required environment variable: $ENV_NAME"
  11. exit 1
  12. fi
  13. }
  14. init_run() {
  15. # check variables required for initialization
  16. require_env MYSQL_HOST
  17. require_env MYSQL_PORT
  18. require_env MYSQL_DATABASE
  19. require_env MYSQL_USER
  20. require_env MYSQL_PASSWORD
  21. echo "Unpacking war ..."
  22. unzip -x "$WAR_FILE" -d "$WEBAPP_DIR"
  23. echo "Configuring dwsurvey ..."
  24. sed -i "s^jdbc.url=.*\$jdbc.url=jdbc:mysql://${MYSQL_HOST}:${MYSQL_PORT}/${MYSQL_DATABASE}?useUnicode=true\&characterEncoding=utf8g;
  25. s^jdbc.username=.*\$jdbc.username=${MYSQL_USER}g;
  26. s^jdbc.password=.*\$jdbc.password=${MYSQL_PASSWORD}g" \
  27. ${CONF_DIR}/application.properties
  28. migrate
  29. }
  30. migrate() {
  31. # TODO We should use some migration mechanism.
  32. # For now, let's do it in a dirty hacky way.
  33. require_env ADMIN_EMAIL
  34. require_env ADMIN_PASSWORD
  35. # DIRTY hack, check if table t_user exist, if exist, skip migration
  36. echo "Checking if table t_user exist ..."
  37. if [[ $(mysql -N -s -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" --password="$MYSQL_PASSWORD" -e \
  38. "SELECT count(*) FROM information_schema.TABLES
  39. WHERE (TABLE_SCHEMA='${MYSQL_DATABASE}') AND (TABLE_NAME='t_user')") \
  40. -eq 1 ]]; then
  41. echo "table t_user exists, skipping migration."
  42. return
  43. fi
  44. local MIGRATION_FILE=/tmp/migrate.sql
  45. cp ${WEBAPP_DIR}/WEB-INF/classes/conf/sql/dwsurvey.sql $MIGRATION_FILE
  46. # remove "CREATE DATABASE" clouse, db should be created outside, so no root db account required
  47. sed -i '/CREATE DATABASE/d' $MIGRATION_FILE
  48. # use the specified database name
  49. sed -i "s/USE \`dwsurvey\`;/USE \`${MYSQL_DATABASE}\`;/g" $MIGRATION_FILE
  50. # remove default user
  51. sed -i '/INSERT INTO `t_user`/d' $MIGRATION_FILE
  52. # apply migration file
  53. echo "Applying migration ..."
  54. mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" --password="$MYSQL_PASSWORD" < $MIGRATION_FILE
  55. rm -f "$MIGRATION_FILE"
  56. # create admin user
  57. local ADMIN_LOGIN=${ADMIN_EMAIL%%@*} # use email prefix for login
  58. local ADMIN_SHA_PASSWORD=$(echo -n "$ADMIN_PASSWORD" | sha1sum | cut -d' ' -f 1)
  59. echo "Creating admin user ..."
  60. mysql -h "$MYSQL_HOST" -P "$MYSQL_PORT" -u "$MYSQL_USER" --password="$MYSQL_PASSWORD" "$MYSQL_DATABASE" -e \
  61. "INSERT INTO \`t_user\`
  62. (id, email, login_name, name, sha_password, status, version)
  63. VALUES (1, '$ADMIN_EMAIL', '$ADMIN_LOGIN', '$ADMIN_LOGIN', '$ADMIN_SHA_PASSWORD', 1, 1);"
  64. }
  65. # if webapp directory does not exist, it's first run
  66. if [ ! -d "$WEBAPP_DIR" ]; then
  67. init_run
  68. fi
  69. # start tomcat
  70. if [ -z "$@" ]; then
  71. catalina.sh run
  72. else
  73. exec "$@"
  74. fi