From d2cf348f10e91f61a4db54b551d18c8783f908f5 Mon Sep 17 00:00:00 2001 From: Rodolfo Berrios <20590102+rodber@users.noreply.github.com> Date: Sun, 16 Oct 2022 11:24:22 -0300 Subject: [PATCH] add default project, supports userland docker-compose --- Makefile | 119 +++++++++++++++++++++++----------------------------- default.yml | 66 +++++++++++++++++++++++++++++ 2 files changed, 119 insertions(+), 66 deletions(-) create mode 100644 default.yml diff --git a/Makefile b/Makefile index dc8995c..9f2df94 100644 --- a/Makefile +++ b/Makefile @@ -1,37 +1,33 @@ +SOURCE ?= ~/git/chevereto/v4 +TARGET ?= prod# prod|dev VERSION ?= 4.0 PHP ?= 8.1 DOCKER_USER ?= www-data HOSTNAME ?= localhost HOSTNAME_PATH ?= / PROTOCOL ?= http - -NAMESPACE ?= local -PROJECT = ${NAMESPACE}_chevereto-build -CONTAINER_BASENAME ?= ${NAMESPACE}_chevereto-build-${VERSION} -TAG_BASENAME ?= ${NAMESPACE}_chevereto-build:${VERSION} - +NAMESPACE ?= chevereto SERVICE ?= php -LICENSE ?= $(shell stty -echo; read -p "Chevereto V4 License key: 🔑" license; stty echo; echo $$license) - -VERSION_DOTLESS = $(shell echo \${VERSION} | tr -d '.') -PHP_DOTLESS = $(shell echo \${PHP} | tr -d '.') PORT ?= 8420 -VERSION_DOTLESS = $(shell echo \${VERSION} | tr -d '.') -FEEDBACK = $(shell echo 👉 V\${VERSION} \${NAMESPACE} [PHP \${PHP}] \(\${DOCKER_USER}\)) -FEEDBACK_SHORT = $(shell echo 👉 V\${VERSION} [PHP \${PHP}] \(\${DOCKER_USER}\)) +URL = ${PROTOCOL}://${HOSTNAME}:${PORT}/ +PROJECT = $(shell [[ \${TARGET} == "prod" ]] && echo \${NAMESPACE}_chevereto || echo \${NAMESPACE}_chevereto-${TARGET}) +CONTAINER_BASENAME ?= ${NAMESPACE}_chevereto-${VERSION} +TAG_BASENAME ?= ${NAMESPACE}_chevereto:${VERSION} -ENDPOINT = ${PROTOCOL}://${HOSTNAME} -ENDPOINT_CONTEXT = ${PORT}${HOSTNAME_PATH} - -URL_PROD = ${ENDPOINT}:${ENDPOINT_CONTEXT} - -PROJECT ?= compose -PROJECT_COMPOSE = projects/${COMPOSE}.yml -COMPOSE_SAMPLE = projects/prod.yml +COMPOSE ?= docker-compose +PROJECT_COMPOSE = ${COMPOSE}.yml +COMPOSE_SAMPLE = default.yml COMPOSE_FILE = $(shell [[ -f \${PROJECT_COMPOSE} ]] && echo \${PROJECT_COMPOSE} || echo \${COMPOSE_SAMPLE}) +FEEDBACK = $(shell echo 👉 \${TARGET} V\${VERSION} \${NAMESPACE} [PHP \${PHP}] \(\${DOCKER_USER}\)) +FEEDBACK_SHORT = $(shell echo 👉 \${TARGET} V\${VERSION} [PHP \${PHP}] \(\${DOCKER_USER}\)) + +LICENSE ?= $(shell stty -echo; read -p "Chevereto V4 License key: 🔑" license; stty echo; echo $$license) + +DOCKER_COMPOSE = $(shell echo docker compose -p \${PROJECT} -f \${COMPOSE_FILE}) + feedback: @./scripts/logo.sh @echo "${FEEDBACK}" @@ -39,12 +35,17 @@ feedback: feedback--short: @echo "${FEEDBACK_SHORT}" -feedback--prod: - @echo "${URL_PROD}" - feedback--compose: @echo "🐋 ${COMPOSE_FILE}" +feedback--url: + @echo "🌎 ${URL}" + +feedback--volumes: + @echo "${PROJECT}_database" + @echo "${PROJECT}_assets" + @echo "${PROJECT}_storage" + # Docker image: feedback--short @@ -52,32 +53,22 @@ image: feedback--short @LICENSE=${LICENSE} \ VERSION=${VERSION} \ ./scripts/chevereto.sh - @echo "* Building httpd image" - @rm -rf ./chevereto/app/vendor - @docker build . \ - -f http.Dockerfile \ - -t ${TAG_BASENAME}_http @echo "* Building PHP image" @docker build . \ - -f php.Dockerfile \ + -f Dockerfile \ -t ${TAG_BASENAME}_php image-custom: feedback--short @echo "* Building PHP image" @docker build . \ - -f php.Dockerfile \ + -f Dockerfile \ -t ${TAG_BASENAME}_php - @echo "* Building httpd image" - @docker build . \ - -f http.Dockerfile \ - -t ${TAG_BASENAME}_http -image-httpd: feedback--short - @echo "👉 Downloading source httpd.conf" - @docker run --rm httpd:2.4 cat /usr/local/apache2/conf/httpd.conf > httpd/httpd.conf - @echo "👉 Adding chevereto.conf to httpd.conf" - @cat httpd/chevereto.conf >> httpd/httpd.conf - @echo "✅ httpd/httpd.conf updated" +volume-cp: + docker run --rm -it -v ${VOLUME_FROM}:/from -v ${VOLUME_TO}:/to alpine ash -c "cd /from ; cp -av . /to" + +volume-rm: + docker volume rm ${VOLUME} bash: feedback @docker exec -it --user ${DOCKER_USER} \ @@ -92,56 +83,52 @@ log-error: feedback # docker compose -up: feedback feedback--compose feedback--prod +up: feedback feedback--compose feedback--url @CONTAINER_BASENAME=${CONTAINER_BASENAME} \ PORT=${PORT} \ TAG_BASENAME=${TAG_BASENAME} \ VERSION=${VERSION} \ HOSTNAME=${HOSTNAME} \ HOSTNAME_PATH=${HOSTNAME_PATH} \ - URL_PROD=${URL_PROD} \ - docker compose \ - -p ${PROJECT} \ - -f ${COMPOSE_FILE} \ - up + URL=${URL} \ + ${DOCKER_COMPOSE} up -up-d: feedback feedback--compose feedback--prod +up-d: feedback feedback--compose feedback--url @CONTAINER_BASENAME=${CONTAINER_BASENAME} \ PORT=${PORT} \ TAG_BASENAME=${TAG_BASENAME} \ VERSION=${VERSION} \ HOSTNAME=${HOSTNAME} \ HOSTNAME_PATH=${HOSTNAME_PATH} \ - URL_PROD=${URL_PROD} \ - docker compose \ - -p ${PROJECT} \ - -f ${COMPOSE_FILE} \ - up -d - @echo "👉 ${URL_PROD}" + URL=${URL} \ + ${DOCKER_COMPOSE} up -d stop: feedback feedback--compose @CONTAINER_BASENAME=${CONTAINER_BASENAME} \ PORT=${PORT} \ VERSION=${VERSION} \ - docker compose \ - -p ${PROJECT} \ - -f ${COMPOSE_FILE} \ - stop + ${DOCKER_COMPOSE} stop + +start: feedback feedback--compose + @CONTAINER_BASENAME=${CONTAINER_BASENAME} \ + PORT=${PORT} \ + VERSION=${VERSION} \ + ${DOCKER_COMPOSE} start + +restart: feedback feedback--compose + @CONTAINER_BASENAME=${CONTAINER_BASENAME} \ + PORT=${PORT} \ + VERSION=${VERSION} \ + ${DOCKER_COMPOSE} restart down: feedback feedback--compose @CONTAINER_BASENAME=${CONTAINER_BASENAME} \ PORT=${PORT} \ VERSION=${VERSION} \ - docker compose \ - -p ${PROJECT} \ - -f ${COMPOSE_FILE} \ - down + ${DOCKER_COMPOSE} down down--volumes: feedback feedback--compose @CONTAINER_BASENAME=${CONTAINER_BASENAME} \ PORT=${PORT} \ VERSION=${VERSION} \ - docker compose \ - -p ${PROJECT} \ - -f ${COMPOSE_FILE} \ - down --volumes + ${DOCKER_COMPOSE} down --volumes diff --git a/default.yml b/default.yml new file mode 100644 index 0000000..74673ab --- /dev/null +++ b/default.yml @@ -0,0 +1,66 @@ +version: "3.8" + +services: + database: + container_name: ${CONTAINER_BASENAME}_database + image: mariadb:jammy + networks: + - chevereto + volumes: + - database:/var/lib/mysql + restart: always + healthcheck: + test: + [ + "CMD", + "mysqladmin", + "ping", + "-u", + "root", + "-p$${MYSQL_ROOT_PASSWORD?REQUIRED}", + ] + interval: 15s + timeout: 30s + retries: 5 + start_period: 15s + environment: + MYSQL_ROOT_PASSWORD: password + MYSQL_DATABASE: chevereto + MYSQL_USER: chevereto + MYSQL_PASSWORD: user_database_password + + php: + container_name: ${CONTAINER_BASENAME}_php + image: ${TAG_BASENAME}_php + depends_on: + database: + condition: service_healthy + networks: + - chevereto + volumes: + - storage:/var/www/html/images/ + - assets:/var/www/html/_assets/ + ports: + - ${PORT}:80 + restart: always + environment: + CHEVERETO_DB_HOST: database + CHEVERETO_DB_USER: chevereto + CHEVERETO_DB_PASS: user_database_password + CHEVERETO_DB_PORT: 3306 + CHEVERETO_DB_NAME: chevereto + CHEVERETO_HOSTNAME: ${HOSTNAME} + CHEVERETO_HOSTNAME_PATH: ${HOSTNAME_PATH} + CHEVERETO_HTTPS: 0 + CHEVERETO_ASSET_STORAGE_TYPE: local + CHEVERETO_ASSET_STORAGE_URL: ${URL}_assets/ + CHEVERETO_ASSET_STORAGE_BUCKET: /var/www/html/_assets/ + CHEVERETO_ENCRYPTION_KEY: yUwfiRh6anwqC/sIx3COCIZeMT9rxdbXkMDdfgyrM2M= + +volumes: + database: + assets: + storage: + +networks: + chevereto: