83 lines
2.7 KiB
Bash
Executable File
83 lines
2.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# import env variables from .env
|
|
set -a
|
|
source .env
|
|
|
|
DB_PASSWORD=$(echo "$DATABASE_URL" | awk -F':' '{print $3}' | awk -F'@' '{print $1}')
|
|
DB_PORT=$(echo "$DATABASE_URL" | awk -F':' '{print $4}' | awk -F'/' '{print $1}')
|
|
DB_NAME=$(echo "$DATABASE_URL" | awk -F'/' '{print $4}')
|
|
DB_CONTAINER_NAME="$DB_NAME-postgres"
|
|
|
|
REDIS_PORT=${REDIS_PORT:-6379}
|
|
REDIS_CONTAINER_NAME="$DB_NAME-redis"
|
|
|
|
if ! [ -x "$(command -v docker)" ] && ! [ -x "$(command -v podman)" ]; then
|
|
echo -e "Docker or Podman is not installed. Please install docker or podman and try again.\nDocker install guide: https://docs.docker.com/engine/install/\nPodman install guide: https://podman.io/getting-started/installation"
|
|
exit 1
|
|
fi
|
|
|
|
# determine which docker command to use
|
|
if [ -x "$(command -v docker)" ]; then
|
|
DOCKER_CMD="docker"
|
|
elif [ -x "$(command -v podman)" ]; then
|
|
DOCKER_CMD="podman"
|
|
fi
|
|
|
|
if ! $DOCKER_CMD info > /dev/null 2>&1; then
|
|
echo "$DOCKER_CMD daemon is not running. Please start $DOCKER_CMD and try again."
|
|
exit 1
|
|
fi
|
|
|
|
# # Check if ports are in use
|
|
# if command -v nc >/dev/null 2>&1; then
|
|
# if nc -z localhost "$DB_PORT" 2>/dev/null; then
|
|
# echo "Port $DB_PORT is already in use."
|
|
# exit 1
|
|
# fi
|
|
# if nc -z localhost "$REDIS_PORT" 2>/dev/null; then
|
|
# echo "Port $REDIS_PORT is already in use."
|
|
# exit 1
|
|
# fi
|
|
# else
|
|
# echo "Warning: Unable to check if ports are in use (netcat not installed)"
|
|
# read -p "Do you want to continue anyway? [y/N]: " -r REPLY
|
|
# if ! [[ $REPLY =~ ^[Yy]$ ]]; then
|
|
# echo "Aborting."
|
|
# exit 1
|
|
# fi
|
|
# fi
|
|
|
|
# Start PostgreSQL if not running
|
|
if [ "$($DOCKER_CMD ps -q -f name=$DB_CONTAINER_NAME)" ]; then
|
|
echo "Database container '$DB_CONTAINER_NAME' already running"
|
|
else
|
|
if [ "$($DOCKER_CMD ps -q -a -f name=$DB_CONTAINER_NAME)" ]; then
|
|
$DOCKER_CMD start "$DB_CONTAINER_NAME"
|
|
echo "Existing database container '$DB_CONTAINER_NAME' started"
|
|
else
|
|
$DOCKER_CMD run -d \
|
|
--name $DB_CONTAINER_NAME \
|
|
-e POSTGRES_USER="postgres" \
|
|
-e POSTGRES_PASSWORD="$DB_PASSWORD" \
|
|
-e POSTGRES_DB="$DB_NAME" \
|
|
-p "$DB_PORT":5432 \
|
|
docker.io/postgres && echo "Database container '$DB_CONTAINER_NAME' was successfully created"
|
|
fi
|
|
fi
|
|
|
|
# Start Redis if not running
|
|
if [ "$($DOCKER_CMD ps -q -f name=$REDIS_CONTAINER_NAME)" ]; then
|
|
echo "Redis container '$REDIS_CONTAINER_NAME' already running"
|
|
else
|
|
if [ "$($DOCKER_CMD ps -q -a -f name=$REDIS_CONTAINER_NAME)" ]; then
|
|
$DOCKER_CMD start "$REDIS_CONTAINER_NAME"
|
|
echo "Existing Redis container '$REDIS_CONTAINER_NAME' started"
|
|
else
|
|
$DOCKER_CMD run -d \
|
|
--name $REDIS_CONTAINER_NAME \
|
|
-p "$REDIS_PORT":6379 \
|
|
docker.io/redis && echo "Redis container '$REDIS_CONTAINER_NAME' was successfully created"
|
|
fi
|
|
fi
|