makeplane / plane

🔥 🔥 🔥 Open Source JIRA, Linear, Monday, and Asana Alternative. Plane helps you track your issues, epics, and product roadmaps in the simplest way possible.
http://plane.so
GNU Affero General Public License v3.0
29.37k stars 1.61k forks source link

[bug]: Can't get my uploaded images or attachements. #5680

Open saadsb20 opened 1 day ago

saadsb20 commented 1 day ago

Is there an existing issue for this?

Current behavior

When I upload a profile image, It's being uploaded successfully, I can see it from the minio backet, but I can't see it from the web application. After inspecting I observed that the localhost value is hardcoded, And I can't change to my domain even with setting a different value to the WEB_URL env variable. image

Here's my docker compose file:

x-app-env: &app-env
  environment:
    - NGINX_PORT=${NGINX_PORT:-99}
    - DEBUG=${DEBUG:-0}
    - SENTRY_DSN=${SENTRY_DSN}
    - SENTRY_ENVIRONMENT=${SENTRY_ENVIRONMENT:-"production"}
    - CORS_ALLOWED_ORIGINS=${CORS_ALLOWED_ORIGINS}
    # Gunicorn Workers
    - GUNICORN_WORKERS=${GUNICORN_WORKERS:-1}
    #DB SETTINGS
    - PGHOST=${PGHOST:-plane-db}
    - PGDATABASE=${PGDATABASE:-plane}
    - POSTGRES_USER=${POSTGRES_USER:-plane}
    - POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-plane}
    - POSTGRES_DB=${POSTGRES_DB:-plane}
    - POSTGRES_PORT=${POSTGRES_PORT:-5432}
    - PGDATA=${PGDATA:-/var/lib/postgresql/data}
    - DATABASE_URL=${DATABASE_URL:-postgresql://plane:plane@plane-db/plane}
    # REDIS SETTINGS
    - REDIS_HOST=${REDIS_HOST:-plane-redis}
    - REDIS_PORT=${REDIS_PORT:-6379}
    - REDIS_URL=${REDIS_URL:-redis://plane-redis:6379/}
    # Application secret
    - SECRET_KEY=${SECRET_KEY:-60gp0byfz2dvffa45cxl20p1scy9xbpf6d8c5y0geejgkyp1b5}
    # DATA STORE SETTINGS
    - USE_MINIO=${USE_MINIO:-1}
    - AWS_REGION=${AWS_REGION:-""}
    - AWS_ACCESS_KEY_ID=minioadmin
    - AWS_SECRET_ACCESS_KEY=minioadmin
    - AWS_S3_ENDPOINT_URL=${AWS_S3_ENDPOINT_URL:-http://plane-minio:9000}
    - AWS_S3_BUCKET_NAME=${AWS_S3_BUCKET_NAME:-uploads}
    - MINIO_ROOT_USER=minioadmin
    - MINIO_ROOT_PASSWORD=minioadmin
    - BUCKET_NAME=${BUCKET_NAME:-uploads}
    - FILE_SIZE_LIMIT=${FILE_SIZE_LIMIT:-5242880}
    # Admin and Space URLs
    - WEB_URL=${WEB_URL:-"https://plane.example.ma"}
    - APP_BASE_URL=${WEB_URL:-"https://plane.example.ma"}
    - ADMIN_BASE_URL=${WEB_URL:-"https://plane.example.ma"}
    - SPACE_BASE_URL=${WEB_URL:-"https://plane.example.ma"}

services:
  web:
    <<: *app-env
    image: ${DOCKERHUB_USER:-makeplane}/plane-frontend:${APP_RELEASE:-stable}
    platform: ${DOCKER_PLATFORM:-}
    pull_policy: ${PULL_POLICY:-always}
    restart: unless-stopped
    command: node web/server.js web
    deploy:
      replicas: ${WEB_REPLICAS:-1}
    depends_on:
      - api
      - worker

  space:
    <<: *app-env
    image: ${DOCKERHUB_USER:-makeplane}/plane-space:${APP_RELEASE:-stable}
    platform: ${DOCKER_PLATFORM:-}
    pull_policy: ${PULL_POLICY:-always}
    restart: unless-stopped
    command: node space/server.js space
    deploy:
      replicas: ${SPACE_REPLICAS:-1}
    depends_on:
      - api
      - worker
      - web

  admin:
    <<: *app-env
    image: ${DOCKERHUB_USER:-makeplane}/plane-admin:${APP_RELEASE:-stable}
    platform: ${DOCKER_PLATFORM:-}
    pull_policy: ${PULL_POLICY:-always}
    restart: unless-stopped
    command: node admin/server.js admin
    deploy:
      replicas: ${ADMIN_REPLICAS:-1}
    depends_on:
      - api
      - web

  api:
    <<: *app-env
    image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable}
    platform: ${DOCKER_PLATFORM:-}
    pull_policy: ${PULL_POLICY:-always}
    restart: unless-stopped
    command: ./bin/docker-entrypoint-api.sh
    deploy:
      replicas: ${API_REPLICAS:-1}
    volumes:
      - logs_api:/code/plane/logs
    depends_on:
      - plane-db
      - plane-redis

  worker:
    <<: *app-env
    image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable}
    platform: ${DOCKER_PLATFORM:-}
    pull_policy: ${PULL_POLICY:-always}
    restart: unless-stopped
    command: ./bin/docker-entrypoint-worker.sh
    volumes:
      - logs_worker:/code/plane/logs
    depends_on:
      - api
      - plane-db
      - plane-redis

  beat-worker:
    <<: *app-env
    image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable}
    platform: ${DOCKER_PLATFORM:-}
    pull_policy: ${PULL_POLICY:-always}
    restart: unless-stopped
    command: ./bin/docker-entrypoint-beat.sh
    volumes:
      - logs_beat-worker:/code/plane/logs
    depends_on:
      - api
      - plane-db
      - plane-redis

  migrator:
    <<: *app-env
    image: ${DOCKERHUB_USER:-makeplane}/plane-backend:${APP_RELEASE:-stable}
    platform: ${DOCKER_PLATFORM:-}
    pull_policy: ${PULL_POLICY:-always}
    restart: "no"
    command: ./bin/docker-entrypoint-migrator.sh
    volumes:
      - logs_migrator:/code/plane/logs
    depends_on:
      - plane-db
      - plane-redis

  plane-db:
    <<: *app-env
    image: postgres:15.5-alpine
    pull_policy: if_not_present
    restart: unless-stopped
    command: postgres -c 'max_connections=1000'
    volumes:
      - pgdata:/var/lib/postgresql/data

  plane-redis:
    <<: *app-env
    image: valkey/valkey:7.2.5-alpine
    pull_policy: if_not_present
    restart: unless-stopped
    volumes:
      - redisdata:/data

  plane-minio:
    <<: *app-env
    image: minio/minio:latest
    pull_policy: if_not_present
    restart: unless-stopped
    ports:
      - 9090:9090
    command: server /export --console-address ":9090"
    volumes:
      - uploads:/export

  # Comment this if you already have a reverse proxy running
  proxy:
    <<: *app-env
    image: ${DOCKERHUB_USER:-makeplane}/plane-proxy:${APP_RELEASE:-stable}
    platform: ${DOCKER_PLATFORM:-}
    pull_policy: ${PULL_POLICY:-always}
    ports:
      - ${NGINX_PORT}:80
    depends_on:
      - web
      - api
      - space

volumes:
  pgdata:
  redisdata:
  uploads:
  logs_api:
  logs_worker:
  logs_beat-worker:
  logs_migrator:

Steps to reproduce

  1. use the master branch.
  2. navigate to deploy/self-host/docker-compose.yaml
  3. change the WEB_URL env variable value. 4 docker compose up --build.
  4. navigate to your profile and change the profile picture and inspect.

Environment

Production

Browser

Google Chrome

Variant

Self-hosted

Version

v0.22.0

alexsanderp commented 4 hours ago

Same problem here, looks like the plane is using AWS_S3_ENDPOINT_URL to assemble the URL instead of WEB_URL...

Problem URL: https://storage.googleapis.com/hurb_plane_stg/c68bc313-94af-4d75-8fda-aa3c273cadc0/b1e3cbcb6c3c4786b399639fecc06f4d-icons8-youtube-64-_OGkUTrK.png

Correct URL: https://plane-stg.hurb-data.com/hurb_plane_stg/c68bc313-94af-4d75-8fda-aa3c273cadc0/b1e3cbcb6c3c4786b399639fecc06f4d-icons8-youtube-64-_OGkUTrK.png

alexsanderp commented 4 hours ago

image

The upload is being done correctly, but the GET of the file is not.

alexsanderp commented 4 hours ago

This happens not only with profile images, but with images in issue comments and attachments in issues.