From 3c4cf30e7a95a516d6189f34efe41ef95e30492d Mon Sep 17 00:00:00 2001
From: Matthieu Benoist <matthieu.benoist@randstaddigital.fr>
Date: Wed, 16 Apr 2025 10:11:34 +0200
Subject: [PATCH] Adds dev environnment

---
 .env.example       |  4 ++++
 .gitignore         |  1 +
 Makefile           | 46 ++++++++++++++++++++++++++++++++++++++++++++++
 docker-compose.yml | 22 ++++++++++++++++++++++
 4 files changed, 73 insertions(+)
 create mode 100644 .env.example
 create mode 100644 Makefile
 create mode 100644 docker-compose.yml

diff --git a/.env.example b/.env.example
new file mode 100644
index 0000000..6ff4b7b
--- /dev/null
+++ b/.env.example
@@ -0,0 +1,4 @@
+
+PROJECT_NAME=quiz
+PROJECT_HOSTNAME=quiz.grandlyon.localhost
+CERT_SIZE=1
diff --git a/.gitignore b/.gitignore
index c507d54..4cdcba4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -31,6 +31,7 @@ yarn-error.log
 
 # Miscellaneous
 /.angular/cache
+/.env
 .sass-cache/
 /connect.lock
 /coverage
diff --git a/Makefile b/Makefile
new file mode 100644
index 0000000..37d2336
--- /dev/null
+++ b/Makefile
@@ -0,0 +1,46 @@
+
+ifneq (,$(wildcard ./.env))
+	include .env
+endif
+
+.PHONY: config
+config:
+	cp .env.example .env
+
+
+# Docker
+up:
+	docker-compose up -d
+
+down:
+	docker-compose down
+
+ps:
+	docker-compose ps
+
+rebuild:
+	docker-compose down --remove-orphans
+	docker-compose build --no-cache
+	docker-compose up -d
+
+
+# Mkcert
+
+define config_toml
+[[tls.certificates]]
+certFile = "/certs/${PROJECT_HOSTNAME}+${CERT_SIZE}.pem"
+keyFile = "/certs/${PROJECT_HOSTNAME}+${CERT_SIZE}-key.pem"
+endef
+
+export config_toml
+
+npm-install: docker compose run --rm node npm install
+
+certs:
+	mkdir -p ${HOME}/.dockerdev/traefik/certs ${HOME}/.dockerdev/traefik/conf
+	mkcert ${PROJECT_HOSTNAME} *.${PROJECT_HOSTNAME} ${CERT_ALIASES}
+	mv *.pem ~/.dockerdev/traefik/certs
+	@echo "$$config_toml" > ~/.dockerdev/traefik/conf/${PROJECT_NAME}-certs.toml
+
+install: config certs up
+
diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644
index 0000000..5f952ef
--- /dev/null
+++ b/docker-compose.yml
@@ -0,0 +1,22 @@
+services:
+  node:
+    image: trion/ng-cli:17.2.1
+    restart: unless-stopped
+    volumes:
+      - ./:/app
+    working_dir: /app
+    command: ng serve --host 0.0.0.0 --port 4200
+    networks:
+      - webgateway
+    labels:
+      - "traefik.enable=true"
+      - "traefik.http.routers.${PROJECT_NAME}-front.rule=Host(`${PROJECT_HOSTNAME}`)"
+      - "traefik.http.routers.${PROJECT_NAME}-front.tls=true"
+      - "traefik.http.routers.${PROJECT_NAME}-front.entrypoints=websecure"
+      - "traefik.http.services.${PROJECT_NAME}-front.loadbalancer.server.port=4200"
+      - "traefik.http.services.${PROJECT_NAME}-nginx.loadbalancer.server.port=8080"
+
+networks:
+  webgateway:
+    external: true
+
-- 
GitLab