init
This commit is contained in:
commit
61d20d8f14
3 files changed
+175
No files matched your search
@@ -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"]
|
||||
@@ -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
@@ -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
|
||||
Reference in new issue
Block a user