zammad / zammad-docker-compose

Zammad Docker images for docker-compose
https://hub.docker.com/r/zammad/zammad-docker-compose/
GNU Affero General Public License v3.0
268 stars 207 forks source link

HTTP parse error, malformed request (): #<Puma::HttpParserError: Invalid HTTP format, parsing fails.> #397

Closed 1Shiroyuuki1 closed 7 months ago

1Shiroyuuki1 commented 7 months ago

Infos

Not sure if this is a Bug or a possible Report for the Community.

Expected behavior

Actual behavior

waiting for init container to finish install or update...
waiting for init container to finish install or update...
waiting for init container to finish install or update...
waiting for init container to finish install or update...
waiting for init container to finish install or update...
waiting for init container to finish install or update...
waiting for init container to finish install or update...
starting railsserver... with WEB_CONCURRENCY=0
Puma starting in single mode...
* Puma version: 6.4.0 (ruby 3.1.3-p185) ("The Eagle of Durango")
*  Min threads: 5
*  Max threads: 30
*  Environment: production
*          PID: 1
I, [2024-02-01T22:23:12.976533 #1]  INFO -- : ActionCable is using the redis instance at redis://zammad-redis:6379.
I, [2024-02-01T22:23:13.185236#1-6780]  INFO -- : Using memcached as Rails cache store.
I, [2024-02-01T22:23:13.185638#1-6780]  INFO -- : Using the Redis back end for Zammad's web socket session store.
W, [2024-02-01T22:23:13.627383#1-6780]  WARN -- : Setting "timezone_default" is empty. Using UTC instead. Please set system timezone.
* Listening on http://[::]:3000/
Use Ctrl-C to stop
2024-02-01 22:23:39 +0000 HTTP parse error, malformed request: #<Puma::HttpParserError: Invalid HTTP format, parsing fails. Are you trying to open an SSL connection to a non-SSL Puma?>

Steps to reproduce the behavior

docker-compose.yml:

version: '3.8'
networks:
  zammad:
      name: zammad
x-shared:
  zammad-service: &zammad-service
    environment: &zammad-environment
      MEMCACHE_SERVERS: ${MEMCACHE_SERVERS}
      POSTGRESQL_DB: ${POSTGRES_DB}
      POSTGRESQL_HOST: ${POSTGRES_HOST}
      POSTGRESQL_USER: ${POSTGRES_USER}
      POSTGRESQL_PASS: ${POSTGRES_PASS}
      POSTGRESQL_PORT: ${POSTGRES_PORT}
      REDIS_URL: ${REDIS_URL}
      # Allow passing in these variables via .env:
      AUTOWIZARD_JSON:
      AUTOWIZARD_RELATIVE_PATH:
      ELASTICSEARCH_ENABLED:
      ELASTICSEARCH_HOST:
      ELASTICSEARCH_PORT:
      ELASTICSEARCH_SCHEMA:
      ELASTICSEARCH_NAMESPACE:
      ELASTICSEARCH_REINDEX:
      ELASTICSEARCH_SSL_VERIFY:
      NGINX_PORT: 8080
      NGINX_SERVER_NAME:
      NGINX_SERVER_SCHEME: https
      POSTGRESQL_DB_CREATE:
      POSTGRESQL_OPTIONS:
      RAILS_TRUSTED_PROXIES:
      ZAMMAD_WEB_CONCURRENCY:
      ZAMMAD_SESSION_JOBS:
      ZAMMAD_PROCESS_SCHEDULED:
      ZAMMAD_PROCESS_DELAYED_JOBS_WORKERS:
      HTTP_PROXY: "http://myproxy.intern:8080"
      HTTPS_PROXY: "http://myproxy.intern:8080"
      NO_PROXY: "localhost"
    image: ${IMAGE_REPO}:${VERSION}
    restart: ${RESTART}
    volumes:
      - zammad-storage:/opt/zammad/storage
      - zammad-var:/opt/zammad/var
    depends_on:
      - zammad-memcached
      - zammad-postgresql
      - zammad-redis

services:
  zammad-backup:
    command: ["zammad-backup"]
    depends_on:
      - zammad-railsserver
      - zammad-postgresql
    entrypoint: /usr/local/bin/backup.sh
    environment:
      <<: *zammad-environment
      BACKUP_TIME: "03:00"
      HOLD_DAYS: "10"
      TZ: Europe/Berlin
    image: postgres:${POSTGRES_VERSION}
    restart: ${RESTART}
    volumes:
      - zammad-backup:/var/tmp/zammad
      - zammad-storage:/opt/zammad/storage:ro
      - zammad-var:/opt/zammad/var:ro
      - ./scripts/backup.sh:/usr/local/bin/backup.sh:ro
    networks:
      - zammad

  zammad-elasticsearch:
    environment:
      - discovery.type=single-node
      - ingest.geoip.downloader.enabled=false
      - "ES_JAVA_OPTS=-Xms4192m -Xmx4192m"
    image: bitnami/elasticsearch:${ELASTICSEARCH_VERSION}
    restart: ${RESTART}
    volumes:
      - elasticsearch-data:/bitnami/elasticsearch/data
    networks:
      - zammad

  zammad-init:
    <<: *zammad-service
    command: ["zammad-init"]
    depends_on:
      - zammad-postgresql
    restart: on-failure
    user: 0:0
    volumes:
      - zammad-storage:/opt/zammad/storage
      - zammad-var:/opt/zammad/var
    networks:
      - zammad

  zammad-memcached:
    command: memcached -m 256M
    image: memcached:${MEMCACHE_VERSION}
    restart: ${RESTART}
    networks:
      - zammad

  zammad-nginx:
    <<: *zammad-service
    command: ["zammad-nginx"]
    expose:
      - "8080"
    depends_on:
      - zammad-railsserver
    labels:
        - "traefik.enable=true"
        - "traefik.http.routers.zammad.entrypoints=websecure"
        - "traefik.http.routers.zammad.rule=Host(`my-zammad.de`)"
        - "traefik.http.middlewares.zammad-https-redirect.redirectscheme.scheme=https"
        - "traefik.http.routers.zammad.middlewares=zammad-https-redirect"
        - "traefik.http.routers.zammad-secure.entrypoints=websecure"
        - "traefik.http.routers.zammad-secure.rule=Host(`my-zammad.de`)"
        - "traefik.http.routers.zammad-secure.tls=true"
        - "traefik.http.routers.zammad-secure.tls.certresolver=letsencrypt"
        - "traefik.http.routers.zammad-secure.service=zammad"
        - "traefik.http.services.zammad.loadbalancer.server.port=8080"
        - "traefik.docker.network=zammad"
    volumes:
      - zammad-var:/opt/zammad/var:ro # required for the zammad-ready check file
    networks:
      - zammad

  zammad-postgresql:
    environment:
      POSTGRES_DB: ${POSTGRES_DB}
      POSTGRES_USER: ${POSTGRES_USER}
      POSTGRES_PASSWORD: ${POSTGRES_PASS}
    image: postgres:${POSTGRES_VERSION}
    restart: ${RESTART}
    volumes:
      - postgresql-data:/var/lib/postgresql/data
    networks:
      - zammad

  zammad-railsserver:
    <<: *zammad-service
    command: ["zammad-railsserver"]
    networks:
      - zammad

  zammad-redis:
    image: redis:${REDIS_VERSION}
    restart: ${RESTART}
    volumes:
      - redis-data:/data
    networks:
      - zammad

  zammad-scheduler:
    <<: *zammad-service
    command: ["zammad-scheduler"]
    networks:
      - zammad

  zammad-websocket:
    <<: *zammad-service
    command: ["zammad-websocket"]
    networks:
      - zammad

volumes:
  elasticsearch-data:
    driver: local
  postgresql-data:
    driver: local
  redis-data:
    driver: local
  zammad-backup:
    driver: local
  zammad-storage:
    driver: local
  zammad-var:
    driver: local

I tried to follow https://docs.zammad.org/en/latest/install/docker-compose.html but before i could reach step 1) Connect Zammad with Elasticsearch the Railserver already throwed that Error

1Shiroyuuki1 commented 7 months ago

Traefik handles incoming HTTPS Requests before in earlierer versions with Lets Encrypt being used for SSL certificate

1Shiroyuuki1 commented 7 months ago

Issue resolved I have added also traefik labels to the zammad-railserver service which allows Traefik to able to handle SSL and redirect http to the puma railserver since he can't manage SSL Connection.

  zammad-railsserver:
    <<: *zammad-service
    command: ["zammad-railsserver"]
    labels:
        - "traefik.enable=true"
        - "traefik.http.routers.zammad.entrypoints=websecure"
        - "traefik.http.routers.zammad.service=zammad"
    networks:
      - zammad 
llama0815 commented 4 months ago

do you mind sharing additional configurations? e.g. you've listed additional HTTP_PROXY/HTTPS_PROXY/NO_PROXY env which aren't documented do you use the same router for zammad-nginx and zammad-railserver?

I can't get it to work. Traefik runs well with various services, but Zammad has unusual peculiarities

MrGeneration commented 4 months ago

Please don't hijack issues with your technical questions. For technical questions, please consult the Zammad-Community: https://community.zammad.org

Thank you.