-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdatabase
executable file
·104 lines (78 loc) · 2.57 KB
/
database
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
100
101
102
103
104
#!/bin/bash
set -eo pipefail
export PGUSER='mkuser'
export PGPASSWORD='41c5dcd2a'
export PGDATABASE='postgres'
DOCKER_DB_PORT=${DOCKER_DB_PORT:-5432}
CONTAINER_NAME="makroud-db"
CONTAINER_IMAGE="postgres:12"
create_database() {
declare dbname="$1"
echo "[database] create ${dbname} database"
echo "CREATE DATABASE ${dbname} OWNER ${PGUSER} ENCODING 'UTF8';" | docker run --rm -i \
-e PGUSER="${PGUSER}" \
-e PGPASSWORD="${PGPASSWORD}" \
-e PGDATABASE="${PGDATABASE}" \
--link "${CONTAINER_NAME}:postgres" "${CONTAINER_IMAGE}" \
bash -c 'psql -h postgres >/dev/null'
}
do_start() {
if [[ -n "$(docker ps -q -f name="${CONTAINER_NAME}" 2> /dev/null)" ]]; then
echo "[database] ${CONTAINER_NAME} already started. (use --restart otherwise)"
return 0
fi
if [[ -n "$(docker ps -a -q -f name="${CONTAINER_NAME}" 2> /dev/null)" ]]; then
echo "[database] erase previous configuration"
docker stop "${CONTAINER_NAME}" >/dev/null 2>&1 || true
docker rm "${CONTAINER_NAME}" >/dev/null 2>&1 || true
fi
echo "[database] update postgres images"
docker pull ${CONTAINER_IMAGE} || true
echo "[database] start new ${CONTAINER_NAME} container"
docker run --name "${CONTAINER_NAME}" \
-e POSTGRES_USER="${PGUSER}" \
-e POSTGRES_PASSWORD="${PGPASSWORD}" \
-e POSTGRES_DB="${PGDATABASE}" \
-p ${DOCKER_DB_PORT}:5432 -d "${CONTAINER_IMAGE}" >/dev/null
for i in {30..0}; do
echo "SELECT 1;" | docker run --rm -i \
-e PGUSER="${PGUSER}" \
-e PGPASSWORD="${PGPASSWORD}" \
-e PGDATABASE="${PGDATABASE}" \
--link "${CONTAINER_NAME}:postgres" "${CONTAINER_IMAGE}" \
bash -c 'psql -h postgres >/dev/null 2>&1' && break
echo '[database] waiting postgres init...'
sleep 2
done
create_database "makroud_test"
}
do_stop() {
echo "[database] stop ${CONTAINER_NAME} container"
docker stop "${CONTAINER_NAME}" >/dev/null 2>&1 || true
docker rm "${CONTAINER_NAME}" >/dev/null 2>&1 || true
}
do_client() {
echo "[database] use psql on ${CONTAINER_NAME}"
docker run --rm -it \
-e PGUSER="${PGUSER}" \
-e PGPASSWORD="${PGPASSWORD}" \
-e PGDATABASE="makroud_test" \
--link "${CONTAINER_NAME}:postgres" \
"${CONTAINER_IMAGE}" psql -h postgres
}
case "$1" in
--stop)
do_stop
;;
--restart)
do_stop
do_start
;;
--client)
do_client
;;
--start | *)
do_start
;;
esac
exit 0