add default project, supports userland docker-compose

This commit is contained in:
Rodolfo Berrios
2022-10-16 11:24:22 -03:00
parent 7dfff5e8e6
commit d2cf348f10
2 changed files with 119 additions and 66 deletions

119
Makefile
View File

@@ -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

66
default.yml Normal file
View File

@@ -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: