2024-12-24 03:14:44 +00:00
|
|
|
#!/bin/sh
|
|
|
|
### CRIMSON --- A simple PHP framework.
|
|
|
|
### Copyright © 2024 Freya Murphy <contact@freyacat.org>
|
|
|
|
###
|
|
|
|
### This file is part of CRIMSON.
|
|
|
|
###
|
|
|
|
### CRIMSON is free software; you can redistribute it and/or modify it
|
|
|
|
### under the terms of the GNU General Public License as published by
|
|
|
|
### the Free Software Foundation; either version 3 of the License, or (at
|
|
|
|
### your option) any later version.
|
|
|
|
###
|
|
|
|
### CRIMSON is distributed in the hope that it will be useful, but
|
|
|
|
### WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
### GNU General Public License for more details.
|
|
|
|
###
|
|
|
|
### You should have received a copy of the GNU General Public License
|
|
|
|
### along with CRIMSON. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
# `compose`
|
|
|
|
# This script will provide a docker compose interface with all the CRIMSON
|
|
|
|
# environment setup. This script may request root privilages since it needs all
|
|
|
|
# docker containers to run with user 1000:1000. If you are not user 1000:1000,
|
|
|
|
# root privlage is required to create volume folders with uid/gid 1000.
|
|
|
|
|
|
|
|
# Make sure errors fail to avoid nasal demons
|
|
|
|
set -e
|
|
|
|
|
|
|
|
# ========================================================= PERMISSION CHECK ==
|
|
|
|
# Make sure we are either root or user 1000:1000. This is required for crimson.
|
|
|
|
|
|
|
|
args="$@"
|
|
|
|
command="$0 $args"
|
|
|
|
|
|
|
|
uid=$(id -u)
|
|
|
|
gid=$(id -g)
|
|
|
|
|
|
|
|
if [[ $uid -eq 1000 ]] && [[ $gid -eq 1000 ]]; then
|
|
|
|
true # all set
|
|
|
|
elif [[ $uid -eq 0 ]] && [[ $gid -eq 0 ]]; then
|
|
|
|
true # all set
|
|
|
|
else
|
|
|
|
# root required (1000:1000 may not exist)
|
|
|
|
exec sudo -E $command
|
|
|
|
fi
|
|
|
|
|
|
|
|
# ========================================================= LOAD ENVIRONMENT ==
|
|
|
|
# We need to load the environment variables provided by crimson and the user
|
|
|
|
# making the project.
|
|
|
|
SCRIPT_DIR="$(dirname "$0")"
|
|
|
|
source "$SCRIPT_DIR/setup_env"
|
|
|
|
|
|
|
|
# ================================================================ BOOTSTRAP ==
|
|
|
|
# Choose which docker compose files are to be loaded, and setup which arguemnts
|
|
|
|
# to pass into docker compose.
|
|
|
|
|
|
|
|
docker_args=""
|
|
|
|
|
|
|
|
# add env files to docker args
|
|
|
|
|
|
|
|
docker_env_args=$(echo "$ENV_FILES" | tr ':' '\n' | sed 's/^/--env-file /' | tr '\n' ' ')
|
|
|
|
docker_args="$docker_args $docker_env_args"
|
|
|
|
|
|
|
|
# get list of env files for docker containers
|
|
|
|
|
|
|
|
docker_env_files="[$(echo "$ENV_FILES" | tr ':' "\n" | sed 's/.*/"&"/' | tr '\n' ',')]"
|
|
|
|
|
|
|
|
# add compose files to docker args
|
|
|
|
|
|
|
|
function include_docker {
|
|
|
|
local name src dest bool
|
2024-12-25 15:58:01 +00:00
|
|
|
name="$(basename "$1")"
|
|
|
|
src="$1"
|
2024-12-24 03:14:44 +00:00
|
|
|
dest="/tmp/crimson/docker/$name"
|
|
|
|
|
|
|
|
bool="$2"
|
2024-12-25 15:58:01 +00:00
|
|
|
if [[ "$bool" == "true" ]] && [[ -f "$src" ]]; then
|
2024-12-24 03:14:44 +00:00
|
|
|
|
|
|
|
mkdir -p "$(dirname "$dest")"
|
|
|
|
sed "s#DOCKER_ENV_FILES#$docker_env_files#" "$src" > "$dest"
|
|
|
|
|
|
|
|
docker_args="$docker_args -f $dest"
|
|
|
|
fi
|
|
|
|
}
|
|
|
|
|
2024-12-27 01:59:42 +00:00
|
|
|
include_docker "$CRIMSON_ROOT/docker/docker-compose.base.yml" "true"
|
|
|
|
include_docker "$CRIMSON_ROOT/docker/docker-compose.db.yml" "$POSTGRES_ENABLED"
|
|
|
|
include_docker "$CRIMSON_ROOT/docker/docker-compose.api.yml" "$API_ENABLED"
|
|
|
|
include_docker "$PROJECT_ROOT/conf/docker-compose.override.yml" "true"
|
2024-12-24 03:14:44 +00:00
|
|
|
|
|
|
|
# set project name
|
|
|
|
|
|
|
|
docker_args="$docker_args -p $PROJECT_NAME"
|
|
|
|
|
|
|
|
# source check
|
|
|
|
|
|
|
|
if [ ! -d "$PROJECT_SOURCE" ]; then
|
|
|
|
printf "fatal: cannot find PROJECT_SOURCE: '$PROJECT_SOURCE'\n" > /dev/stderr
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
|
|
|
|
# data check
|
|
|
|
|
|
|
|
if [ ! -d "$PROJECT_DATA" ]; then
|
|
|
|
mkdir -p "$PROJECT_DATA"
|
|
|
|
mkdir -p "$PROJECT_DATA/schemas"
|
|
|
|
mkdir -p "$PROJECT_DATA/crimson"
|
|
|
|
chown -R 1000:1000 "$PROJECT_DATA"
|
|
|
|
fi
|
|
|
|
|
|
|
|
# run docker compose
|
|
|
|
|
|
|
|
exec -a docker -- docker compose $docker_args "$@"
|