diff --git a/.env b/.env new file mode 100644 index 0000000..6b4bbc3 --- /dev/null +++ b/.env @@ -0,0 +1,5 @@ +DOCKER_REPO=git.shmyga.ru +DOCKER_GROUP=infernalgames +DOCKER_ROOT="$DOCKER_REPO/$DOCKER_GROUP" +VERSION=$(grep -m 1 'version' ./pyproject.toml | grep -oP 'version\s*=\s*"\K[^"]+') +DOCKER_PROJECTS=("gallery") \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 24965e4..26f4007 100644 --- a/Dockerfile +++ b/Dockerfile @@ -3,9 +3,9 @@ ENV POETRY_HOME="/opt/poetry" ENV PATH="$POETRY_HOME/bin:$PATH" WORKDIR /app RUN curl -sSL https://install.python-poetry.org | python3 - -COPY pyproject.toml poetry.lock ./ +COPY pyproject.toml poetry.lock README.md ./ RUN poetry config virtualenvs.in-project true -RUN poetry install --with app +RUN poetry install --with app --no-root FROM python:3.12-slim ENV PATH="/app/.venv/bin:$PATH" diff --git a/docker-compose-develop.yaml b/docker-compose-develop.yaml new file mode 100644 index 0000000..e978fe0 --- /dev/null +++ b/docker-compose-develop.yaml @@ -0,0 +1,25 @@ +name: gallery + +services: + redis: + container_name: gallery-redis + image: redis:alpine + stop_grace_period: 3s + volumes: + - redis_data:/data + app: + container_name: gallery-app-develop + build: . + environment: + - REDIS_HOST=redis + - DEBUG=1 + ports: + - 8000:80 + develop: + watch: + - action: sync + path: ./gallery + target: /app/gallery + +volumes: + redis_data: diff --git a/docker-compose.yaml b/docker-compose.yaml index 7b47975..7f5c47d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,3 +1,5 @@ +name: gallery + services: redis: container_name: gallery-redis @@ -5,13 +7,13 @@ services: stop_grace_period: 3s volumes: - redis_data:/data - command: [ "redis-server", "--bind", "0.0.0.0", "--port", "6379" ] app: container_name: gallery-app - build: . - # image: shmyga/gallery + image: ${DOCKER_ROOT}/gallery environment: - REDIS_HOST=redis + depends_on: + - redis ports: - 8000:80 diff --git a/docker/develop.sh b/docker/develop.sh new file mode 100755 index 0000000..140a903 --- /dev/null +++ b/docker/develop.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +docker compose -f docker-compose-develop.yaml up --build --watch \ No newline at end of file diff --git a/scripts/docker-action b/scripts/docker-action new file mode 100755 index 0000000..efaf4fb --- /dev/null +++ b/scripts/docker-action @@ -0,0 +1,45 @@ +#!/usr/bin/env bash +set -e +cd "$(dirname $(dirname "$0"))" || exit + +. .env + +build () { + echo "build: $1" + . "$1/.env" + for PROJECT in "${DOCKER_PROJECTS[@]}"; do + IFS=: read -r PROJECT_NAME PROJECT_TARGET <<< "$PROJECT" + ARGS=("build") + for ARG in ${DOCKER_ARGS[@]}; do + ARGS+=("--build-arg" "$ARG") + done + if [ -n "$PROJECT_TARGET" ]; then + ARGS+=("--target" "$PROJECT_TARGET") + fi + ARGS+=("-t" "$DOCKER_GROUP/$PROJECT_NAME" ".") + ARGS+=("-f" "$1/Dockerfile") + echo "${ARGS[@]}" + docker "${ARGS[@]}" + done +} + +publish () { + echo "publish: $1" + . "$1/.env" + for PROJECT in "${DOCKER_PROJECTS[@]}"; do + IFS=: read -r PROJECT_NAME PROJECT_TARGET <<< "$PROJECT" + docker tag $DOCKER_GROUP/$PROJECT_NAME $DOCKER_ROOT/$PROJECT_NAME:$VERSION + docker tag $DOCKER_GROUP/$PROJECT_NAME $DOCKER_ROOT/$PROJECT_NAME:latest + docker push $DOCKER_ROOT/$PROJECT_NAME:$VERSION + docker push $DOCKER_ROOT/$PROJECT_NAME:latest + done +} + +DEFAULT_TARGETS="." +TARGETS="${@-$DEFAULT_TARGETS}" + +DOCKER_ACTION="${DOCKER_ACTION-build}" + +for TARGET in $TARGETS; do + $DOCKER_ACTION "$TARGET" +done