Skip to content

Instantly share code, notes, and snippets.

@jon4syth
Created November 25, 2019 16:06
Show Gist options
  • Save jon4syth/829a3f69e54ff43ba8a9f775ea81e7ae to your computer and use it in GitHub Desktop.
Save jon4syth/829a3f69e54ff43ba8a9f775ea81e7ae to your computer and use it in GitHub Desktop.
Bash Script to setup Postgres Docker container
#!/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