-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdocker-entrypoint.sh
executable file
·99 lines (90 loc) · 2.75 KB
/
docker-entrypoint.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
#!/bin/bash
#
# Project EmeRails - Codename Ocarina
#
# Copyright (c) 2008, 2017 Claudio Procida
# http://www.emeraldion.it
#
#
set -euo pipefail
# usage: file_env VAR [DEFAULT]
# ie: file_env 'XYZ_DB_PASSWORD' 'example'
# (will allow for "$XYZ_DB_PASSWORD_FILE" to fill in the value of
# "$XYZ_DB_PASSWORD" from a file, especially for Docker's secrets feature)
file_env() {
local var="$1"
local fileVar="${var}_FILE"
local def="${2:-}"
if [ "${!var:-}" ] && [ "${!fileVar:-}" ]; then
echo >&2 "error: both $var and $fileVar are set (but are exclusive)"
exit 1
fi
local val="$def"
if [ "${!var:-}" ]; then
val="${!var}"
elif [ "${!fileVar:-}" ]; then
val="$(< "${!fileVar}")"
fi
export "$var"="$val"
unset "$fileVar"
}
if [[ "$1" == apache2* ]] || [ "$1" == php-fpm ]; then
file_env 'EMERAILS_DB_HOST' 'mysql'
# if we're linked to MySQL and thus have credentials already, let's use them
file_env 'EMERAILS_DB_USER' "${MYSQL_ENV_MYSQL_USER:-root}"
if [ "$EMERAILS_DB_USER" = 'root' ]; then
file_env 'EMERAILS_DB_PASSWORD' "${MYSQL_ENV_MYSQL_ROOT_PASSWORD:-}"
else
file_env 'EMERAILS_DB_PASSWORD' "${MYSQL_ENV_MYSQL_PASSWORD:-}"
fi
file_env 'EMERAILS_DB_NAME' "${MYSQL_ENV_MYSQL_DATABASE:-emerails}"
if [ -z "$EMERAILS_DB_PASSWORD" ]; then
echo >&2 'error: missing required EMERAILS_DB_PASSWORD environment variable'
echo >&2 ' Did you forget to -e EMERAILS_DB_PASSWORD=... ?'
echo >&2
echo >&2 ' (Also of interest might be EMERAILS_DB_USER and EMERAILS_DB_NAME.)'
exit 1
fi
if ! [ -e router.php ]; then
echo >&2 "error: EmeRails not found in $(pwd)"
exit 1
fi
export DB_HOST="$EMERAILS_DB_HOST"
export DB_USER="$EMERAILS_DB_USER"
export DB_PASS="$EMERAILS_DB_PASSWORD"
export DB_NAME="$EMERAILS_DB_NAME"
file_env 'EMERAILS_DEBUG'
if [ "$EMERAILS_DEBUG" ]; then
set_config 'DB_DEBUG' 1 boolean
fi
TERM=dumb php -- "$EMERAILS_DB_HOST" "$EMERAILS_DB_USER" "$EMERAILS_DB_PASSWORD" "$EMERAILS_DB_NAME" <<'EOPHP'
<?php
// database might not exist, so let's try creating it (just to be safe)
$stderr = fopen('php://stderr', 'w');
list($host, $socket) = explode(':', $argv[1], 2);
$port = 0;
if (is_numeric($socket)) {
$port = (int) $socket;
$socket = null;
}
$maxTries = 10;
do {
$mysql = new mysqli($host, $argv[2], $argv[3], '', $port, $socket);
if ($mysql->connect_error) {
fwrite($stderr, "\n" . 'MySQL Connection Error: (' . $mysql->connect_errno . ') ' . $mysql->connect_error . "\n");
--$maxTries;
if ($maxTries <= 0) {
exit(1);
}
sleep(3);
}
} while ($mysql->connect_error);
if (!$mysql->query('CREATE DATABASE IF NOT EXISTS `' . $mysql->real_escape_string($argv[4]) . '`')) {
fwrite($stderr, "\n" . 'MySQL "CREATE DATABASE" Error: ' . $mysql->error . "\n");
$mysql->close();
exit(1);
}
$mysql->close();
EOPHP
fi
exec "$@"