BUILD_PATH=__build/ DOCKER=docker MKTEMP=mktemp DOMAIN=mcolonna.42.fr SRC_COMPOSE=srcs/ SRC_WWW_MORE=srcs/www/ CERT_PATH=srcs/__cert/ CERT_PATH_FILES=$(addprefix $(CERT_PATH), ca.pem cert.key cert.crt ) .ONESHELL : .SHELLFLAGS = -eu -c .PHONY : run reset re cert_reset cert_re help ### pretty logs #### _ECHO = echoo(){ \ if [ -t 1 ]; then \ echo "\e[30;47;1m$$*\e[0m"; \ else \ echo "$$*"; \ fi; \ } ## Run the compose. run : $(CERT_PATH_FILES) @$(_ECHO) echoo "Running '$(SRC_COMPOSE)'..." cd -- $(SRC_COMPOSE) $(DOCKER) compose up --build cd - ## Remove all content of the website. reset : @$(_ECHO) echoo "Removing all data..." cd -- $(SRC_COMPOSE) docker compose down -v cd - ## 'reset' then 'run' re : reset run @$(_ECHO) echo echo "run \`make\` or \`make run\` to run the docker." ## Create the SSL certificate. cert : $(CERT_PATH_FILES) $(CERT_PATH_FILES) : @$(_ECHO) echoo "Creating SSL certificate files..." mkdir -p $(CERT_PATH) cd $(CERT_PATH) echoo " -> Creating CA..." # Create local CA TMP_CA_KEY=$$($(MKTEMP)) openssl genrsa -out $$TMP_CA_KEY 2048 openssl req -x509 -new -nodes -key $$TMP_CA_KEY -sha256 -days 1825 -out ca.pem echoo " -> Creating certificate for $(DOMAIN)..." # Create certificate for $(DOMAIN) openssl genrsa -out "cert.key" 2048 TMP_CA_CSR=$$($(MKTEMP)) openssl req -new -key cert.key -out $$TMP_CA_CSR TMP_EXT=$$($(MKTEMP)) >>$$TMP_EXT echo "authorityKeyIdentifier=keyid,issuer" >>$$TMP_EXT echo "basicConstraints=CA:FALSE" >>$$TMP_EXT echo "keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment" >>$$TMP_EXT echo "subjectAltName = @alt_names" >>$$TMP_EXT echo "" >>$$TMP_EXT echo "[alt_names]" >>$$TMP_EXT echo "DNS.1 = $(DOMAIN)" openssl x509 -req -in $$TMP_CA_CSR -CA ca.pem -CAkey $$TMP_CA_KEY \ -CAcreateserial -out cert.crt -days 825 -sha256 -extfile $$TMP_EXT rm $$TMP_CA_KEY $$TMP_CA_CSR $$TMP_EXT echo echo "=====" echo "to avoid \"this website was self-signed\" warnings," echo "install $(CERT_PATH)/ca.pem on whatever you need i guess" echo "=====" echo cd - ## Remove the SSL certificate. cert_reset : @$(_ECHO) echoo "Removing SSL certificate files..." rm -rf $(CERT_PATH) ## 'cert_reset' then 'cert' cert_re : cert_reset $(CERT_PATH_FILES) ## Show help help : @$(_ECHO) echo echo "run Run the compose." echo "reset Remove all content of the website." echo "re 'reset' then 'run'." echo echo "cert Create the SSL certificate." echo "cert_reset Remove the SSL certificate." echo "cert_re 'cert_reset' then 'cert'." echo