Composer Project -Synology NAS上的Redash + Redis + Postgres

8ehkhllq  于 2023-10-15  发布在  Redis
关注(0)|答案(1)|浏览(157)

我只是在深入研究容器的工作原理,并且已经走得很远了,但是当将一些图像编排到一个项目的yml文件中时,我在绕圈子。
所以我有以下图片:

  1. redash/redash:latest <--主应用程序.
  2. redis:latest
  3. postgres:latest
    我为每个服务打开了所有的端口,并测试了我可以在同一个容器中从adminer:latest登录到postgres数据库。
    我使用了gitrepos和其他堆栈文章中的一些不同示例来构建bellow yml文件,并得到了@大卫迷宫的帮助。
    我现在相信我缺少Redash的数据库设置文件。与我的数据库交互的scheduler给了我:ProgrammingError: (psycopg2.ProgrammingError) relation “queries” does not exist
    我发现这篇文章:discuss.redash.io;海报在同一点上。一个答复者说:“你创建了数据库表吗?“
    看起来我需要从一个Redash服务器控制台运行这个命令:docker-compose run --rm server create_db但我使用的是Synology的ContainerManager,而不是Docker。
    我需要一个卷来连接到server create_db命令吗?
    该网站上的登录被禁用,否则我会尝试在那里问这个问题。
    以下是我更新的YML:
version: "3.1"

x-redash-service: &redash-service
  image: redash/redash:latest
  depends_on:
    - db
    - cache
  restart: always

x-redash-env: &redash-env
  PYTHONUNBUFFERED: 0
  REDASH_LOG_LEVEL: "INFO"
  REDASH_REDIS_URL: "redis://cache:6379/0"
  REDASH_DATABASE_URL: "postgresql://postgres:postgresPassword@db/postgres"

services:
  redash:
    <<: *redash-service
    command: server
    ports:
      - "5003:5000"
    environment:
      <<: *redash-env
      REDASH_WEB_WORKERS: 4

  adhoc_worker:
    <<: *redash-service
    command: worker
    environment:
      <<: *redash-env
      QUEUES: "queries"
      WORKERS_COUNT: 2

  scheduler:
    <<: *redash-service
    command: scheduler
    environment:
      <<: *redash-env
      QUEUES: "celery"
      WORKERS_COUNT: 1

  scheduled_worker:
    <<: *redash-service
    command: worker
    environment:
      <<: *redash-env
      QUEUES: "scheduled_queries,schemas"
      WORKERS_COUNT: 1

  db:
    image: postgres:latest
    restart: always
    ports:
      - "5433:5432"
    volumes:
      - ./postgres/data:/var/lib/postgresql/data:rw
    environment:
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgresPassword
      POSTGRES_DB: postgresDatabase
    #command: "create_db"

  nginx:
    image: redash/nginx:latest
    ports:
      - "2501:80"
    depends_on:
      - redash
    restart: always

  cache:
    image: redis:latest
    restart: always
    depends_on:
      - db
    ports:
      - "6379:6379"
    volumes:
      - ./redis/data:/data:rw

再次感谢!
请让我知道我是否应该提供进一步的细节。

EDIT_1:Update yml composition and status of build
EDIT_2:Update yml composition and status of build && Narrowed scope of issue.

wko9yo5t

wko9yo5t1#

如您所示,Compose文件中有两个值得注意的问题。
目前尚不清楚IP地址192.168.x.x来自何处,但您不需要IP地址来在容器之间建立连接。Compose服务名(如dbcache)可直接用作主机名。容器之间的连接根本不使用或考虑ports:,因此您需要为这些服务使用标准端口号(如果您不需要从Docker外部连接到其他服务,则可以删除其他服务的ports:)。

environment:
  REDASH_REDIS_URL: redis://cache:6379/0
  REDASH_DATABASE_URL: postgresql://db:5432/0

另一个问题是,您的数据存储在单独的redis_net上,但您的应用程序和工作线程却不在。Compose创建一个名为default的网络,并将容器连接到该网络。由于redash容器仅在default网络上,而db仅在redis_net网络上,因此它们不共享网络,无法相互通信。
最简单的解决方案是删除文件中所有的networks:块。一切都将使用Compose提供的default网络。
这两个主题将在Docker文档的Networking in Compose中进一步讨论。

相关问题