From bb024d5e40a54751ddd32c07e16c48be18582324 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vi=CC=81ctor=20Falco=CC=81n?= Date: Fri, 14 Nov 2025 09:09:19 +0100 Subject: [PATCH] Config traefik to serve the web from whispermoney.dev --- .gitignore | 1 + compose.yaml | 27 +++++++++++++++++++++++-- traefik/certs/.gitkeep | 0 traefik/dynamic/whispermoney.yml | 32 ++++++++++++++++++++++++++++++ traefik/generate-certs.sh | 34 ++++++++++++++++++++++++++++++++ 5 files changed, 92 insertions(+), 2 deletions(-) create mode 100644 traefik/certs/.gitkeep create mode 100644 traefik/dynamic/whispermoney.yml create mode 100755 traefik/generate-certs.sh diff --git a/.gitignore b/.gitignore index ea757f2f..e08f740a 100644 --- a/.gitignore +++ b/.gitignore @@ -27,3 +27,4 @@ yarn-error.log /.vscode /.zed .php-cs-fixer.cache +/traefik/certs/*.pem diff --git a/compose.yaml b/compose.yaml index 428aca29..8d8d72b4 100644 --- a/compose.yaml +++ b/compose.yaml @@ -1,8 +1,31 @@ services: + traefik: + image: 'traefik:v3.0' + command: + - '--api.insecure=true' + - '--providers.docker=true' + - '--providers.docker.exposedbydefault=false' + - '--providers.file.directory=/etc/traefik/dynamic' + - '--providers.file.watch=true' + - '--entrypoints.web.address=:80' + - '--entrypoints.websecure.address=:443' + - '--log.level=INFO' + ports: + - '80:80' + - '443:443' + - '8080:8080' + volumes: + - '/var/run/docker.sock:/var/run/docker.sock:ro' + - './traefik/dynamic:/etc/traefik/dynamic:ro' + - './traefik/certs:/etc/traefik/certs:ro' + networks: + - sail + extra_hosts: + - 'host.docker.internal:host-gateway' mysql: image: 'mysql/mysql-server:8.0' ports: - - '${FORWARD_DB_PORT:-3306}:3306' + - '${FORWARD_DB_PORT:-3307}:3306' environment: MYSQL_ROOT_PASSWORD: '${DB_PASSWORD}' MYSQL_ROOT_HOST: '%' @@ -27,7 +50,7 @@ services: redis: image: 'redis:alpine' ports: - - '${FORWARD_REDIS_PORT:-6379}:6379' + - '${FORWARD_REDIS_PORT:-6380}:6379' volumes: - 'sail-redis:/data' networks: diff --git a/traefik/certs/.gitkeep b/traefik/certs/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/traefik/dynamic/whispermoney.yml b/traefik/dynamic/whispermoney.yml new file mode 100644 index 00000000..3c16fb4b --- /dev/null +++ b/traefik/dynamic/whispermoney.yml @@ -0,0 +1,32 @@ +http: + routers: + whispermoney-http: + rule: Host(`whispermoney.test`) + entryPoints: + - web + middlewares: + - redirect-to-https + service: whispermoney + whispermoney-https: + rule: Host(`whispermoney.test`) + entryPoints: + - websecure + service: whispermoney + tls: {} + + middlewares: + redirect-to-https: + redirectScheme: + scheme: https + permanent: true + + services: + whispermoney: + loadBalancer: + servers: + - url: http://host.docker.internal:8000 + +tls: + certificates: + - certFile: /etc/traefik/certs/whispermoney.test.pem + keyFile: /etc/traefik/certs/whispermoney.test-key.pem diff --git a/traefik/generate-certs.sh b/traefik/generate-certs.sh new file mode 100755 index 00000000..391cd654 --- /dev/null +++ b/traefik/generate-certs.sh @@ -0,0 +1,34 @@ +#!/bin/bash + +set -e + +if ! command -v mkcert &> /dev/null; then + echo "mkcert is not installed. Installing..." + + if [[ "$OSTYPE" == "darwin"* ]]; then + if command -v brew &> /dev/null; then + brew install mkcert + brew install nss + else + echo "Please install Homebrew first, then run: brew install mkcert nss" + exit 1 + fi + else + echo "Please install mkcert manually. Visit: https://github.com/FiloSottile/mkcert" + exit 1 + fi +fi + +if [ ! -f "$(mkcert -CAROOT)/rootCA.pem" ]; then + echo "Installing local CA..." + mkcert -install +fi + +echo "Generating certificates for whispermoney.test..." +cd "$(dirname "$0")/certs" +mkcert -key-file whispermoney.test-key.pem -cert-file whispermoney.test.pem whispermoney.test + +echo "Certificates generated successfully!" +echo "Files created:" +echo " - traefik/certs/whispermoney.test.pem" +echo " - traefik/certs/whispermoney.test-key.pem"