Created
November 25, 2019 16:06
-
-
Save jon4syth/829a3f69e54ff43ba8a9f775ea81e7ae to your computer and use it in GitHub Desktop.
Bash Script to setup Postgres Docker container
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
set -e | |
SQL_SCHEMA='production_schema.sql' | |
if [ 'postgres' = "$(docker container ps | awk '{print $NF}' | grep postgres)" ] | |
then | |
echo 'Stop container named:' | |
docker stop postgres | |
echo | |
fi | |
# Remove the volume if it exists | |
if [ -n "$(docker volume ls | grep postgres_data)" ] | |
then | |
echo 'Stop volume named:' | |
docker volume rm postgres_data | |
echo | |
fi | |
echo 'Create volume named:' | |
docker volume create postgres_data | |
echo | |
docker run --rm --name postgres -p ${DATA_PORT}:5432 \ | |
-e POSTGRES_PASSWORD=postgres \ | |
--mount source=postgres_data,target=/var/lib/postgresql/data \ | |
-d postgres:9.6.15-alpine | |
echo 'Waiting for postgres server to start...' | |
sleep 3 # needed delay for server to startup | |
# Create postgres superuser | |
if [ ! ${DATA_USERNAME} = 'postgres' ] | |
then | |
echo 'Creating super user\n' | |
sleep 1 | |
docker exec postgres psql -U postgres \ | |
-c "CREATE ROLE ${DATA_USERNAME} \ | |
WITH SUPERUSER CREATEDB BYPASSRLS \ | |
CREATEROLE REPLICATION \ | |
LOGIN PASSWORD '${DATA_PASSWORD}'"; | |
fi | |
# Create development database if it doesn't exist | |
if [ ! 'postgres' = "$(docker exec postgres psql --user ${DATA_USERNAME} -c '\list' | grep backend_dev)" ] | |
then | |
docker exec postgres createdb --user ${DATA_USERNAME} backend_dev | |
fi | |
# Create test database if it doesn't exist | |
if [ ! -n "$(docker exec postgres psql --user ${DATA_USERNAME} -c '\list' | grep backend_test)" ] | |
then | |
docker exec postgres createdb --user ${DATA_USERNAME} backend_test | |
fi | |
docker cp ./${SQL_SCHEMA} postgres:/ && \ | |
echo "Populating backend_dev with empty postgres schema.\n" &&\ | |
sleep 1 | |
docker exec postgres psql --user ${DATA_USERNAME} -d backend_dev -f /${SQL_SCHEMA} && \ | |
echo "Populating backend_test with empty postgres schema.\n" && \ | |
sleep 1 | |
docker exec postgres psql --user ${DATA_USERNAME} -d backend_test -f /${SQL_SCHEMA} && \ | |
echo '\nPostgres container is running with name `postgres`.' | |
exit 0; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment