-
Notifications
You must be signed in to change notification settings - Fork 13
Expand file tree
/
Copy pathcommands
More file actions
executable file
·134 lines (117 loc) · 4.98 KB
/
commands
File metadata and controls
executable file
·134 lines (117 loc) · 4.98 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#!/bin/bash
#set -e;
APP=$2
OLDHOME=$HOME
HOME="$DOKKU_ROOT/.postgresql"
check_exists() {
if [[ ! -d "$DOKKU_ROOT/$APP" ]]; then
echo "App must exist before creating postgresql storage for it"
exit 1
fi
}
check_app() {
if [[ -z "$APP" ]]; then
echo "You must specify an app name"
exit 1
fi
}
check_container() {
if [[ -z "$id" ]]; then
echo "Postgresql container not started cannot continue. Start with dokku postgresql:start"
exit 1
fi
}
admin_pass=$(cat "$DOKKU_ROOT/.postgresql/admin_pw")
postgresql_database="${APP}_production"
db_image=jeffutter/postgresql
id=$(docker ps | grep "$db_image":latest | awk '{print $1}')
if [[ -n "$id" ]]; then
postgresql_public_ip=$(docker port ${id} 5432 | awk '{split($0,a,":"); print a[1]}')
postgresql_private_ip=$(docker inspect ${id} | grep IPAddress | awk '{ print $2 }' | tr -d ',"')
postgresql_port=$(docker port ${id} 5432 | awk '{split($0,a,":"); print a[2]}')
if [[ $postgresql_public_ip = "0.0.0.0" ]]; then
postgresql_public_ip=localhost
fi
fi
case "$1" in
postgresql:admin_console)
check_container
PGPASSWORD=$(cat "$DOKKU_ROOT/.postgresql/admin_pw") PGUSER=root psql -p "$postgresql_port" -h localhost postgres
;;
postgresql:console)
check_container
check_app
check_exists
PGPASSWORD=$(cat "$DOKKU_ROOT/.postgresql/pass_$APP") PGUSER="$APP" psql -p "$postgresql_port" -h localhost "$postgresql_database"
;;
postgresql:create)
check_container
check_app
check_exists
postgresql_password=$(openssl rand -base64 32|base64)
echo $postgresql_password > "$DOKKU_ROOT/.postgresql/pass_$APP"
admin_pw=$(cat "$DOKKU_ROOT/.postgresql/admin_pw")
PGPASSWORD="$admin_pw" PGUSER=root psql -h "$postgresql_public_ip" -p "$postgresql_port" -w template1 <<< "CREATE USER \"${APP}\" WITH PASSWORD '${postgresql_password}';"
PGPASSWORD="$admin_pw" PGUSER=root psql -h "$postgresql_public_ip" -p "$postgresql_port" -w template1 <<< "CREATE DATABASE \"${postgresql_database}\";"
PGPASSWORD="$admin_pw" PGUSER=root psql -h "$postgresql_public_ip" -p "$postgresql_port" -w template1 <<< "GRANT ALL PRIVILEGES ON DATABASE \"${postgresql_database}\" to \"${APP}\";"
postgresql_port=5432
dokku config:set "$APP" DATABASE_URL="postgres://${APP}:${postgresql_password}@${postgresql_private_ip}:${postgresql_port}/${postgresql_database}"
;;
postgresql:delete)
check_container
check_app
check_exists
admin_pw=$(cat "$DOKKU_ROOT/.postgresql/admin_pw")
PGPASSWORD="$admin_pw" PGUSER=root psql -h "$postgresql_public_ip" -p "$postgresql_port" -w template1 <<< "DROP DATABASE \"${postgresql_database}\";"
PGPASSWORD="$admin_pw" PGUSER=root psql -h "$postgresql_public_ip" -p "$postgresql_port" -w template1 <<< "DROP USER \"${APP}\";"
dokku config:unset "$APP" DATABASE_URL
;;
postgresql:list)
check_container
admin_pw=$(cat "$DOKKU_ROOT/.postgresql/admin_pw")
PGPASSWORD="$admin_pw" PGUSER=root psql -h "$postgresql_public_ip" -p "$postgresql_port" -w template1 <<< "\list"
;;
postgresql:start)
if [[ "$id" != "" ]]; then
echo "Postgresql container already running with ID: ${id}"
else
[[ $(docker run --rm=true "$db_image" lsb_release -cs) = 'trusty' ]] && docker_psql_version="9.3" || docker_psql_version="9.1"
docker run -p 5432:5432 -d -v "$DOKKU_ROOT/.postgresql/data":"/var/lib/postgresql/$docker_psql_version/main" "$db_image" bash -c "chown -R postgres:postgres /var/lib/postgresql/$docker_psql_version/main; su postgres -c \"/usr/lib/postgresql/$docker_psql_version/bin/postgres -D /var/lib/postgresql/$docker_psql_version/main -c config_file=/etc/postgresql/$docker_psql_version/main/postgresql.conf\""
fi
;;
postgresql:stop)
check_container
docker stop ${id}
;;
postgresql:status)
if [[ "$id" != "" ]]; then
echo "Postgresql container running with ID: ${id}"
else
echo "Postgresql container not running"
fi
;;
postgresql:dump)
check_container
check_app
check_exists
PGPASSWORD=$(cat "$DOKKU_ROOT/.postgresql/pass_$APP") PGUSER="$APP" pg_dump -p "$postgresql_port" -h localhost "$postgresql_database"
;;
postgresql:dump_all)
check_container
PGPASSWORD=$(cat "$DOKKU_ROOT/.postgresql/admin_pw") PGUSER=root pg_dumpall -p "$postgresql_port" -h localhost
;;
help)
cat && cat<<EOF
postgresql:admin_console Launch a postgresql console as admin user
postgresql:console <app> Launch a postgresql console for a given app
postgresql:create <app> Create a Postgresql database
postgresql:delete <app> Delete specified Postgresql database
postgresql:start Start the Postgresql docker container if it isn't running
postgresql:stop Stop the Postgresql docker container
postgresql:status Shows status of Postgresql
postgresql:list List all databases
postgresql:dump <app> Dump <app> database to standard out
postgresql:dump_all Dump all databases to standard out
EOF
;;
esac