diff --git a/.env.example b/.env.example new file mode 100644 index 0000000000000000000000000000000000000000..6ff4b7b260dfa2e6a3fcff2f44c0ddc2f9335061 --- /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 c507d542c73733a3bf69b462180eb8ce74d0545a..4cdcba404c0e0924b8cf17331b804debdf9246b0 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 0000000000000000000000000000000000000000..37d2336d0e4a4904bd8eb52d11bcc292e9ea0cb9 --- /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 0000000000000000000000000000000000000000..5f952ef1babde84c88ff3d15611651450e707ad0 --- /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 +