This commit is contained in:
Benjamin Böhmke committed 2017-09-16 16:51:12 +02:00
commit 61d20d8f14
3 files changed
+175

No files matched your search

+9
View File
@@ -0,0 +1,9 @@
FROM alpine:3.6
MAINTAINER Benjamin Böhmke <benjamin@boehmke.net>
RUN apk add --no-cache mysql-client postgresql-client postgresql-bdr
ADD entrypoint.sh /entrypoint.sh
ENTRYPOINT ["/entrypoint.sh"]
CMD ["app:init"]
+48
View File
@@ -0,0 +1,48 @@
Database Helper
===============
Docker database initialization for MySQL and PostgreSQL.
Usage
-----
Direct usage:
```
docker run --rm \
-e DB_TYPE=postgresql \
-e DB_ROOT_PASSWORD=password \
-e DB_HOST=host_name \
-e DB_DATABASE=database_to_create \
-e DB_USER=user_to_create \
-e DB_PASSWORD=user_password \
bboehmke/db-helper
```
In compose file:
```
services:
db_init:
restart: "no"
image: bboehmke/db-helper
environment:
- DB_TYPE=postgresql
- DB_ROOT_PASSWORD=password
- DB_HOST=host_name
- DB_DATABASE=database_to_create
- DB_USER=user_to_create
- DB_PASSWORD=user_password
```
Available Configuration Parameters
----------------------------------
- **DB_TYPE**: Which type of database should be used: mysql or postgresql
- **DB_HOST**: Host name of database server
- **DB_ROOT_PASSWORD**: Password of root account
- **DB_ROOT_USER**: Name of root account (Default: Database default)
- **DB_PORT**: Port of database server (Default: Database default)
- **DB_DATABASE**: Database to create
- **DB_USER**: User to create with access to `DB_DATABASE`
- **DB_PASSWORD**: Password of `DB_USER`
Executable
+118
View File
@@ -0,0 +1,118 @@
#!/bin/sh
set -e
case ${DB_TYPE} in
postgresql)
DB_ROOT_USER=${DB_ROOT_USER:-postgres}
DB_PORT=${DB_PORT:-5432}
export PGPASSWORD=$DB_ROOT_PASSWORD
;;
mysql)
DB_ROOT_USER=${DB_ROOT_USER:-root}
DB_PORT=${DB_PORT:-3306}
;;
esac
check_database_connection() {
if [[ -z ${DB_HOST} ]] || [[ -z ${DB_ROOT_PASSWORD} ]] || [[ -z ${DB_DATABASE} ]] || [[ -z ${DB_USER} ]] || [[ -z ${DB_PASSWORD} ]]; then
echo
echo "ERROR: "
echo " Please specify DB_HOST, DB_ROOT_PASSWORD, DB_DATABASE, DB_USER & DB_PASSWORD"
echo " Aborting..."
echo
return 1
fi
case ${DB_TYPE} in
mysql)
prog="mysqladmin -h ${DB_HOST} -P ${DB_PORT} -u ${DB_ROOT_USER} -p${DB_ROOT_PASSWORD} status"
;;
postgresql)
prog="pg_isready -h ${DB_HOST} -p ${DB_PORT} -U ${DB_ROOT_USER} -t 1"
;;
*)
echo
echo "ERROR: "
echo " Please specify the database type in use via the DB_TYPE configuration option."
echo " Accepted values are \"postgresql\" or \"mysql\". Aborting..."
echo
return 1
esac
timeout=60
while ! ${prog} >/dev/null 2>&1
do
timeout=$(expr $timeout - 1)
if [[ $timeout -eq 0 ]]; then
echo
echo "Could not connect to database server. Aborting..."
return 1
fi
echo -n "."
sleep 1
done
echo
}
postgresql_init() {
result=`psql -h$DB_HOST -p $DB_PORT -U$DB_ROOT_USER -tc "SELECT datname FROM pg_catalog.pg_database WHERE datname like '$DB_DATABASE';"`
if [ ! $result ]; then
psql -h$DB_HOST -p $DB_PORT -U$DB_ROOT_USER -tc "create database $DB_DATABASE;" > /dev/null
echo "Database \"$DB_DATABASE\" created"
else
echo "Database \"$DB_DATABASE\" already exist"
fi
result=`psql -h$DB_HOST -p $DB_PORT -U$DB_ROOT_USER -tc "SELECT usename FROM pg_catalog.pg_user WHERE usename = '$DB_USER';"`
if [ ! $result ]; then
psql -h$DB_HOST -p $DB_PORT -U$DB_ROOT_USER -c "CREATE ROLE $DB_USER with LOGIN CREATEDB PASSWORD '$DB_PASSWORD';" > /dev/null
echo "User \"$DB_USER\" created"
else
echo "User \"$DB_USER\" already exist"
fi
psql -h$DB_HOST -p $DB_PORT -U$DB_ROOT_USER -tc "GRANT ALL PRIVILEGES ON DATABASE $DB_DATABASE to $DB_USER;" > /dev/null
}
mysql_init() {
result=`mysql -P $DB_PORT -u$DB_ROOT_USER -p$DB_ROOT_PASSWORD -h$DB_HOST -Bse "show databases like '$DB_DATABASE';"`
if [ ! $result ]; then
mysql -P $DB_PORT -u$DB_ROOT_USER -p$DB_ROOT_PASSWORD -h$DB_HOST -Bse "create database $DB_DATABASE;"
echo "Database \"$DB_DATABASE\" created"
else
echo "Database \"$DB_DATABASE\" already exist"
fi
result=`mysql -P $DB_PORT -u$DB_ROOT_USER -p$DB_ROOT_PASSWORD -h$DB_HOST -Bse "SELECT User FROM mysql.user WHERE User = '$DB_USER' AND Host = '%';"`
if [ ! $result ]; then
mysql -P $DB_PORT -u$DB_ROOT_USER -p$DB_ROOT_PASSWORD -h$DB_HOST -Bse "CREATE USER '$DB_USER'@'%' IDENTIFIED BY '$DB_PASSWORD';"
echo "User \"$DB_USER\" created"
else
echo "User \"$DB_USER\" already exist"
fi
mysql -P $DB_PORT -u$DB_ROOT_USER -p$DB_ROOT_PASSWORD -h$DB_HOST -Bse "GRANT ALL PRIVILEGES ON \`$DB_DATABASE\`.* TO '$DB_USER'@'%';"
}
case ${1} in
app:init)
check_database_connection
case ${DB_TYPE} in
postgresql)
postgresql_init
;;
mysql)
mysql_init
;;
esac
;;
*)
exec "$@"
;;
esac