dockware / examples

Here you can find some usefull dockware examples how to use it the easy way for development.
27 stars 33 forks source link

Multi-Environment Setup leads to Error 418 #7

Open FlxHbr opened 1 year ago

FlxHbr commented 1 year ago

Hi to everybody! First of all, thanks for dockware.

However, i am struggling to setup a multi channel shop. I am getting "Error 418 - I'm a teapot", whatever i do. I am developing on Mac (M1, Venutra 13.2.1, so nginx is in opt/homebrew/etc/ngnix).

I start the containers with docker compose, everything runs fine. "make init" runs as well, but after opening "http://shop1.shopware.com/" the Error 418 occurs. etc/hosts is changed and the urls are added. I added the urls to my backend channels as well.

docker-compose-yml:

version: "3"

services:

  proxy:
    container_name: proxy
    image: dockware/proxy:latest
    ports:
      - "80:80"
      - "3306:3306"
      - "22:22"
      - "443:443"
      - "3000:3000"
      - "8888:8888"
      - "9999:9999"
      - "9998:9998"
    depends_on:
      - shop1
      - shop2
    volumes:
      - "db_volume:/var/lib/mysql"
      - "./src:/var/www/html/"
      # ...excluding shopware default directories
      - "/var/www/html/.git/"
      - "/var/www/html/public/build"
      - "/var/www/html/var/cache"
      - "/var/www/html/vendor"
      # ...additional project specific excludes...
      - "/var/www/html/custom/plugins/MyPlugin/src/Resources/app/administration/node_modules/"
      - "/var/www/html/custom/plugins/MyPlugin/src/Resources/app/storefront/node_modules/"
      - "/var/www/html/custom/plugins/MyPlugin/tests/Cypress/"
      - "./proxy/shop-1.conf:/opt/homebrew/etc/nginx/conf.d/shop-1.conf"
      - "./proxy/shop-2.conf:/opt/homebrew/etc/nginx/conf.d/shop-2.conf"
    networks:
      - web
    environment:
      # default = 0, recommended to be OFF for frontend devs
      - XDEBUG_ENABLED=0
  # -----------------------------------------------------------------------
  shop1:
    image: dockware/dev:latest
    container_name: shop1
    ports:
      - "2001:22"
      - "3001:3306"
  shop2:
    image: dockware/dev:latest
    container_name: shop2
    ports:
      - "2002:22"
      - "3002:3306"
volumes:
  db_volume:
    driver: local

networks:
  web:
    external: false

makefile:

.PHONY: help
.DEFAULT_GOAL := help

help:
    @grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-30s\033[0m %s\n", $$1, $$2}'

# ---------------------------------------------------------------------------------------------

init: ## Installs and initializes all environments
    docker exec -i shop1 mysql -uroot -proot shopware < ./database/add-https.sql
    docker exec -it shop1 bash -c 'php bin/console sales-channel:update:domain shop1.shopware.com'
    docker exec -it shop1 bash -c 'php bin/console cache:clear'
    # -----------------------------------------------------------------------------------------------------------
    docker exec -i shop2 mysql -uroot -proot shopware < ./database/add-https.sql
    docker exec -it shop2 bash -c 'php bin/console sales-channel:update:domain shop2.shopware.com'
    docker exec -it shop2 bash -c 'php bin/console cache:clear'
    # -----------------------------------------------------------------------------------------------------------
    open https://shop1.shopware.com
    open https://shop2.shopware.com

download: ## Downloads files from the container to your host
    mkdir -p ../../src/shop1
    mkdir -p ../../src/shop2
    docker cp shop1:/var/www/html/. ../../src/shop1
    docker cp shop2:/var/www/html/. ../../src/shop2

watch-storefront: ## Starts the Storefront Watcher, [make storefront-admin shop=shop1]
    bash -c "trap 'make stop-watch-storefront' EXIT; docker exec -it $(shop) bash -c 'cd /var/www && APP_URL=http://0.0.0.0 make watch-storefront'"

watch-admin: ## Starts the Admin Watcher, [make watch-admin shop=shop1]
    docker exec -it $(shop) bash -c 'cd /var/www && make watch-admin'

shop-1.conf (shop-2.conf is identical, except that "1" is changed of course):

server {
    listen        80;
    server_name   shop1.shopware.com;
    return 301    https://$host$uri$is_args$args;
}

server {
    listen        443 ssl;
    server_name   shop1.shopware.com;

    ssl_certificate /etc/nginx/ssl/selfsigned.crt;
    ssl_certificate_key /etc/nginx/ssl/selfsigned.key;

    location / {
        proxy_pass https://shop1;
        proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}

server {
    listen                    8888 ssl;
    server_name               shop1.shopware.com;

    ssl_certificate /etc/nginx/ssl/selfsigned.crt;
    ssl_certificate_key /etc/nginx/ssl/selfsigned.key;

    location /admin {
        proxy_pass            http://shop1:8888;
        proxy_next_upstream   error timeout invalid_header http_500 http_502 http_503 http_504;
    }
    location /static {
        proxy_pass            http://shop1:8888;
        proxy_next_upstream   error timeout invalid_header http_500 http_502 http_503 http_504;
    }
    location /api {
        proxy_pass            http://shop1;
        proxy_next_upstream   error timeout invalid_header http_500 http_502 http_503 http_504;
    }
    location / {
        proxy_pass            http://shop1:8888;
        proxy_next_upstream   error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}

server {
    listen                    9998;
    server_name               shop1.shopware.com;

    location / {
        proxy_set_header      Host    localhost;
        proxy_pass            http://shop1:9998;
        proxy_next_upstream   error timeout invalid_header http_500 http_502 http_503 http_504;
    }
}

Maybe it is just me misunderstanding or misconfiguring? Thanks a lot!

MinhVu2711 commented 4 months ago

try to remove two ports 3306 and 22 in your proxy service @FlxHbr