chore: format
This commit is contained in:
@@ -25,7 +25,15 @@ services:
|
||||
cpus: ${BIFROST_CPU_RESERVATION:-0.10}
|
||||
memory: ${BIFROST_MEMORY_RESERVATION:-128M}
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/health"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--no-verbose",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost:8080/health",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
@@ -39,14 +47,22 @@ services:
|
||||
- ./config/prometheus.yml:/etc/prometheus/prometheus.yml
|
||||
- prometheus_data:/prometheus
|
||||
command:
|
||||
- '--config.file=/etc/prometheus/prometheus.yml'
|
||||
- '--storage.tsdb.path=/prometheus'
|
||||
- '--web.console.libraries=/usr/share/prometheus/console_libraries'
|
||||
- '--web.console.templates=/usr/share/prometheus/consoles'
|
||||
- "--config.file=/etc/prometheus/prometheus.yml"
|
||||
- "--storage.tsdb.path=/prometheus"
|
||||
- "--web.console.libraries=/usr/share/prometheus/console_libraries"
|
||||
- "--web.console.templates=/usr/share/prometheus/consoles"
|
||||
ports:
|
||||
- "${PROMETHEUS_PORT:-29090}:9090"
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:9090/-/healthy"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--no-verbose",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost:9090/-/healthy",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
@@ -74,7 +90,15 @@ services:
|
||||
ports:
|
||||
- "${GRAFANA_PORT:-23000}:3000"
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/api/health"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--no-verbose",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost:3000/api/health",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
@@ -25,7 +25,15 @@ services:
|
||||
cpus: ${BOLT_DIY_CPU_RESERVATION:-0.5}
|
||||
memory: ${BOLT_DIY_MEMORY_RESERVATION:-512M}
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5173/"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--no-verbose",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost:5173/",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
@@ -74,7 +74,15 @@ services:
|
||||
redis:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost/health"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--quiet",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost/health",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
@@ -9,7 +9,7 @@ x-defaults: &defaults
|
||||
services:
|
||||
bytebot-desktop:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}bytebot-ai/bytebot-desktop:${BYTEBOT_VERSION:-edge}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/bytebot-ai/bytebot-desktop:${BYTEBOT_VERSION:-edge}
|
||||
ports:
|
||||
- "${BYTEBOT_DESKTOP_PORT_OVERRIDE:-9990}:9990"
|
||||
environment:
|
||||
@@ -32,7 +32,7 @@ services:
|
||||
|
||||
bytebot-agent:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}bytebot-ai/bytebot-agent:${BYTEBOT_VERSION:-edge}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/bytebot-ai/bytebot-agent:${BYTEBOT_VERSION:-edge}
|
||||
depends_on:
|
||||
bytebot-desktop:
|
||||
condition: service_healthy
|
||||
@@ -64,7 +64,7 @@ services:
|
||||
|
||||
bytebot-ui:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}bytebot-ai/bytebot-ui:${BYTEBOT_VERSION:-edge}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/bytebot-ai/bytebot-ui:${BYTEBOT_VERSION:-edge}
|
||||
depends_on:
|
||||
bytebot-agent:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -41,7 +41,11 @@ services:
|
||||
cpus: ${CLICKHOUSE_CPU_RESERVATION:-1.0}
|
||||
memory: ${CLICKHOUSE_MEMORY_RESERVATION:-1G}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1"]
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"wget --no-verbose --tries=1 --spider http://localhost:8123/ping || exit 1",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
@@ -66,7 +66,15 @@ services:
|
||||
elasticsearch:
|
||||
condition: service_healthy
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--quiet", "--tries=1", "--spider", "http://localhost:8080/health"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--quiet",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost:8080/health",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
@@ -93,7 +101,11 @@ services:
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER:-conductor} -d ${POSTGRES_DB:-conductor}"]
|
||||
test:
|
||||
[
|
||||
"CMD-SHELL",
|
||||
"pg_isready -U ${POSTGRES_USER:-conductor} -d ${POSTGRES_DB:-conductor}",
|
||||
]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
@@ -118,7 +130,8 @@ services:
|
||||
volumes:
|
||||
- elasticsearch_data:/usr/share/elasticsearch/data
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1"]
|
||||
test:
|
||||
["CMD-SHELL", "curl -f http://localhost:9200/_cluster/health || exit 1"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
# Dify version
|
||||
DIFY_VERSION="0.18.2"
|
||||
|
||||
# Database configuration
|
||||
POSTGRES_USER="dify"
|
||||
POSTGRES_PASSWORD="difypass"
|
||||
POSTGRES_DB="dify"
|
||||
|
||||
# Redis configuration
|
||||
REDIS_PASSWORD=""
|
||||
|
||||
# Application configuration
|
||||
SECRET_KEY="sk-xxxxxx"
|
||||
LOG_LEVEL="INFO"
|
||||
|
||||
# API URLs
|
||||
DIFY_API_URL="http://localhost:5001"
|
||||
DIFY_APP_URL="http://localhost:3000"
|
||||
|
||||
# Port override
|
||||
DIFY_PORT_OVERRIDE=3000
|
||||
|
||||
# Storage type: local, s3, azure-blob, etc.
|
||||
STORAGE_TYPE="local"
|
||||
|
||||
# Vector store type: weaviate, milvus, qdrant, etc.
|
||||
VECTOR_STORE="weaviate"
|
||||
WEAVIATE_VERSION="1.28.12"
|
||||
@@ -1,84 +0,0 @@
|
||||
# Dify
|
||||
|
||||
[English](./README.md) | [中文](./README.zh.md)
|
||||
|
||||
This service deploys Dify, an LLM app development platform that combines AI workflow, RAG pipeline, agent capabilities, model management, observability features and more.
|
||||
|
||||
## Services
|
||||
|
||||
- `dify-api`: API service for Dify
|
||||
- `dify-worker`: Background worker for async tasks
|
||||
- `dify-web`: Web frontend interface
|
||||
- `dify-db`: PostgreSQL database
|
||||
- `dify-redis`: Redis cache
|
||||
- `dify-weaviate`: Weaviate vector database (optional profile)
|
||||
|
||||
## Environment Variables
|
||||
|
||||
| Variable Name | Description | Default Value |
|
||||
| ------------------ | ------------------------------------------ | ------------- |
|
||||
| DIFY_VERSION | Dify image version | `0.18.2` |
|
||||
| POSTGRES_USER | PostgreSQL username | `dify` |
|
||||
| POSTGRES_PASSWORD | PostgreSQL password | `difypass` |
|
||||
| POSTGRES_DB | PostgreSQL database name | `dify` |
|
||||
| REDIS_PASSWORD | Redis password (empty for no auth) | `""` |
|
||||
| SECRET_KEY | Secret key for encryption | (auto) |
|
||||
| LOG_LEVEL | Log level | `INFO` |
|
||||
| DIFY_PORT_OVERRIDE | Host port mapping for web interface | `3000` |
|
||||
| STORAGE_TYPE | Storage type (local, s3, azure-blob, etc.) | `local` |
|
||||
| VECTOR_STORE | Vector store type (weaviate, milvus, etc.) | `weaviate` |
|
||||
| WEAVIATE_VERSION | Weaviate version (if using weaviate) | `1.28.12` |
|
||||
|
||||
Please modify the `.env` file as needed for your use case.
|
||||
|
||||
## Volumes
|
||||
|
||||
- `dify_storage`: Storage for uploaded files and generated content
|
||||
- `dify_db_data`: PostgreSQL data
|
||||
- `dify_redis_data`: Redis persistence data
|
||||
- `dify_weaviate_data`: Weaviate vector database data
|
||||
|
||||
## Usage
|
||||
|
||||
### Start Dify with Weaviate
|
||||
|
||||
```bash
|
||||
docker compose --profile weaviate up -d
|
||||
```
|
||||
|
||||
### Start Dify without Vector Database
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### Access
|
||||
|
||||
- Web Interface: <http://localhost:3000>
|
||||
- API Docs: <http://localhost:5001/docs>
|
||||
|
||||
### First Time Setup
|
||||
|
||||
1. Open <http://localhost:3000>
|
||||
2. Create an admin account
|
||||
3. Configure your LLM API keys (OpenAI, Azure OpenAI, Anthropic, etc.)
|
||||
4. Start creating your AI applications
|
||||
|
||||
## Notes
|
||||
|
||||
- First startup may take a few minutes for database initialization
|
||||
- Change `SECRET_KEY` in production for security
|
||||
- For production deployment, consider using external PostgreSQL and Redis
|
||||
- Supports multiple LLM providers: OpenAI, Azure OpenAI, Anthropic, Google, local models via Ollama, etc.
|
||||
- Vector database is optional but recommended for RAG capabilities
|
||||
|
||||
## Security
|
||||
|
||||
- Change default passwords in production
|
||||
- Use strong `SECRET_KEY`
|
||||
- Enable authentication on Redis in production
|
||||
- Consider using TLS for API connections in production
|
||||
|
||||
## License
|
||||
|
||||
Dify is licensed under Apache License 2.0. See [Dify GitHub](https://github.com/langgenius/dify) for more information.
|
||||
@@ -1,84 +0,0 @@
|
||||
# Dify
|
||||
|
||||
[English](./README.md) | [中文](./README.zh.md)
|
||||
|
||||
这个服务部署 Dify,一个 LLM 应用开发平台,结合了 AI 工作流、RAG 管道、代理能力、模型管理、可观测性功能等。
|
||||
|
||||
## 服务
|
||||
|
||||
- `dify-api`: Dify API 服务
|
||||
- `dify-worker`: 后台异步任务 Worker
|
||||
- `dify-web`: Web 前端界面
|
||||
- `dify-db`: PostgreSQL 数据库
|
||||
- `dify-redis`: Redis 缓存
|
||||
- `dify-weaviate`: Weaviate 向量数据库(可选 profile)
|
||||
|
||||
## 环境变量
|
||||
|
||||
| 变量名 | 描述 | 默认值 |
|
||||
| ------------------ | --------------------------------- | ---------- |
|
||||
| DIFY_VERSION | Dify 镜像版本 | `0.18.2` |
|
||||
| POSTGRES_USER | PostgreSQL 用户名 | `dify` |
|
||||
| POSTGRES_PASSWORD | PostgreSQL 密码 | `difypass` |
|
||||
| POSTGRES_DB | PostgreSQL 数据库名 | `dify` |
|
||||
| REDIS_PASSWORD | Redis 密码(留空则不需要认证) | `""` |
|
||||
| SECRET_KEY | 加密密钥 | (自动) |
|
||||
| LOG_LEVEL | 日志级别 | `INFO` |
|
||||
| DIFY_PORT_OVERRIDE | Web 界面主机端口映射 | `3000` |
|
||||
| STORAGE_TYPE | 存储类型(local, s3, azure-blob等) | `local` |
|
||||
| VECTOR_STORE | 向量库类型(weaviate, milvus等) | `weaviate` |
|
||||
| WEAVIATE_VERSION | Weaviate 版本(如果使用weaviate) | `1.28.12` |
|
||||
|
||||
请根据您的需求修改 `.env` 文件。
|
||||
|
||||
## 数据卷
|
||||
|
||||
- `dify_storage`: 上传文件和生成内容的存储
|
||||
- `dify_db_data`: PostgreSQL 数据
|
||||
- `dify_redis_data`: Redis 持久化数据
|
||||
- `dify_weaviate_data`: Weaviate 向量数据库数据
|
||||
|
||||
## 使用方法
|
||||
|
||||
### 启动 Dify 与 Weaviate
|
||||
|
||||
```bash
|
||||
docker compose --profile weaviate up -d
|
||||
```
|
||||
|
||||
### 启动 Dify 不含向量数据库
|
||||
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
|
||||
### 访问
|
||||
|
||||
- Web 界面: <http://localhost:3000>
|
||||
- API 文档: <http://localhost:5001/docs>
|
||||
|
||||
### 首次设置
|
||||
|
||||
1. 打开 <http://localhost:3000>
|
||||
2. 创建管理员账户
|
||||
3. 配置您的 LLM API 密钥(OpenAI、Azure OpenAI、Anthropic 等)
|
||||
4. 开始创建您的 AI 应用
|
||||
|
||||
## 注意事项
|
||||
|
||||
- 首次启动可能需要几分钟进行数据库初始化
|
||||
- 生产环境请修改 `SECRET_KEY` 以提高安全性
|
||||
- 生产环境建议使用外部 PostgreSQL 和 Redis
|
||||
- 支持多种 LLM 提供商:OpenAI、Azure OpenAI、Anthropic、Google、通过 Ollama 的本地模型等
|
||||
- 向量数据库是可选的,但建议用于 RAG 功能
|
||||
|
||||
## 安全性
|
||||
|
||||
- 生产环境请修改默认密码
|
||||
- 使用强 `SECRET_KEY`
|
||||
- 生产环境在 Redis 上启用认证
|
||||
- 生产环境考虑为 API 连接使用 TLS
|
||||
|
||||
## 许可证
|
||||
|
||||
Dify 采用 Apache License 2.0 许可。更多信息请参见 [Dify GitHub](https://github.com/langgenius/dify)。
|
||||
@@ -1,185 +0,0 @@
|
||||
x-defaults: &defaults
|
||||
restart: unless-stopped
|
||||
logging:
|
||||
driver: json-file
|
||||
options:
|
||||
max-size: 100m
|
||||
max-file: "3"
|
||||
|
||||
services:
|
||||
dify-api:
|
||||
<<: *defaults
|
||||
image: ${GLOBAL_REGISTRY:-}langgenius/dify-api:${DIFY_VERSION:-0.18.2}
|
||||
depends_on:
|
||||
dify-db:
|
||||
condition: service_healthy
|
||||
dify-redis:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
- MODE=api
|
||||
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
||||
- SECRET_KEY=${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U}
|
||||
- DATABASE_URL=postgresql://${POSTGRES_USER:-dify}:${POSTGRES_PASSWORD:-difypass}@dify-db:5432/${POSTGRES_DB:-dify}
|
||||
- REDIS_HOST=dify-redis
|
||||
- REDIS_PORT=6379
|
||||
- REDIS_DB=0
|
||||
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
||||
- CELERY_BROKER_URL=redis://:${REDIS_PASSWORD:-}@dify-redis:6379/1
|
||||
- STORAGE_TYPE=${STORAGE_TYPE:-local}
|
||||
- VECTOR_STORE=${VECTOR_STORE:-weaviate}
|
||||
- WEAVIATE_ENDPOINT=http://dify-weaviate:8080
|
||||
volumes:
|
||||
- dify_storage:/app/api/storage
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: ${DIFY_API_CPU_LIMIT:-1.0}
|
||||
memory: ${DIFY_API_MEMORY_LIMIT:-2G}
|
||||
reservations:
|
||||
cpus: ${DIFY_API_CPU_RESERVATION:-0.5}
|
||||
memory: ${DIFY_API_MEMORY_RESERVATION:-1G}
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:5001/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
|
||||
dify-worker:
|
||||
<<: *defaults
|
||||
image: ${GLOBAL_REGISTRY:-}langgenius/dify-api:${DIFY_VERSION:-0.18.2}
|
||||
depends_on:
|
||||
dify-db:
|
||||
condition: service_healthy
|
||||
dify-redis:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
- MODE=worker
|
||||
- LOG_LEVEL=${LOG_LEVEL:-INFO}
|
||||
- SECRET_KEY=${SECRET_KEY:-sk-9f73s3ljTXVcMT3Blb3ljTqtsKiGHXVcMT3BlbkFJLK7U}
|
||||
- DATABASE_URL=postgresql://${POSTGRES_USER:-dify}:${POSTGRES_PASSWORD:-difypass}@dify-db:5432/${POSTGRES_DB:-dify}
|
||||
- REDIS_HOST=dify-redis
|
||||
- REDIS_PORT=6379
|
||||
- REDIS_DB=0
|
||||
- REDIS_PASSWORD=${REDIS_PASSWORD:-}
|
||||
- CELERY_BROKER_URL=redis://:${REDIS_PASSWORD:-}@dify-redis:6379/1
|
||||
- STORAGE_TYPE=${STORAGE_TYPE:-local}
|
||||
- VECTOR_STORE=${VECTOR_STORE:-weaviate}
|
||||
- WEAVIATE_ENDPOINT=http://dify-weaviate:8080
|
||||
volumes:
|
||||
- dify_storage:/app/api/storage
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: ${DIFY_WORKER_CPU_LIMIT:-1.0}
|
||||
memory: ${DIFY_WORKER_MEMORY_LIMIT:-2G}
|
||||
reservations:
|
||||
cpus: ${DIFY_WORKER_CPU_RESERVATION:-0.5}
|
||||
memory: ${DIFY_WORKER_MEMORY_RESERVATION:-1G}
|
||||
|
||||
dify-web:
|
||||
<<: *defaults
|
||||
image: ${GLOBAL_REGISTRY:-}langgenius/dify-web:${DIFY_VERSION:-0.18.2}
|
||||
depends_on:
|
||||
dify-api:
|
||||
condition: service_healthy
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
- NEXT_PUBLIC_API_URL=${DIFY_API_URL:-http://localhost:5001}
|
||||
- NEXT_PUBLIC_APP_URL=${DIFY_APP_URL:-http://localhost:3000}
|
||||
ports:
|
||||
- "${DIFY_PORT_OVERRIDE:-3000}:3000"
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: ${DIFY_WEB_CPU_LIMIT:-0.5}
|
||||
memory: ${DIFY_WEB_MEMORY_LIMIT:-512M}
|
||||
reservations:
|
||||
cpus: ${DIFY_WEB_CPU_RESERVATION:-0.25}
|
||||
memory: ${DIFY_WEB_MEMORY_RESERVATION:-256M}
|
||||
|
||||
dify-db:
|
||||
<<: *defaults
|
||||
image: ${GLOBAL_REGISTRY:-}postgres:15-alpine
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
- POSTGRES_USER=${POSTGRES_USER:-dify}
|
||||
- POSTGRES_PASSWORD=${POSTGRES_PASSWORD:-difypass}
|
||||
- POSTGRES_DB=${POSTGRES_DB:-dify}
|
||||
- PGDATA=/var/lib/postgresql/data/pgdata
|
||||
volumes:
|
||||
- dify_db_data:/var/lib/postgresql/data
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: ${DIFY_DB_CPU_LIMIT:-0.5}
|
||||
memory: ${DIFY_DB_MEMORY_LIMIT:-512M}
|
||||
reservations:
|
||||
cpus: ${DIFY_DB_CPU_RESERVATION:-0.25}
|
||||
memory: ${DIFY_DB_MEMORY_RESERVATION:-256M}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
|
||||
dify-redis:
|
||||
<<: *defaults
|
||||
image: ${GLOBAL_REGISTRY:-}redis:7-alpine
|
||||
command: redis-server --requirepass ${REDIS_PASSWORD:-}
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
volumes:
|
||||
- dify_redis_data:/data
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: ${DIFY_REDIS_CPU_LIMIT:-0.25}
|
||||
memory: ${DIFY_REDIS_MEMORY_LIMIT:-256M}
|
||||
reservations:
|
||||
cpus: ${DIFY_REDIS_CPU_RESERVATION:-0.1}
|
||||
memory: ${DIFY_REDIS_MEMORY_RESERVATION:-128M}
|
||||
healthcheck:
|
||||
test: ["CMD", "redis-cli", "ping"]
|
||||
interval: 10s
|
||||
timeout: 3s
|
||||
retries: 3
|
||||
start_period: 5s
|
||||
|
||||
dify-weaviate:
|
||||
<<: *defaults
|
||||
image: ${GLOBAL_REGISTRY:-}semitechnologies/weaviate:${WEAVIATE_VERSION:-1.28.12}
|
||||
profiles:
|
||||
- weaviate
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
- QUERY_DEFAULTS_LIMIT=25
|
||||
- AUTHENTICATION_ANONYMOUS_ACCESS_ENABLED=true
|
||||
- PERSISTENCE_DATA_PATH=/var/lib/weaviate
|
||||
- DEFAULT_VECTORIZER_MODULE=none
|
||||
- CLUSTER_HOSTNAME=node1
|
||||
volumes:
|
||||
- dify_weaviate_data:/var/lib/weaviate
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: ${DIFY_WEAVIATE_CPU_LIMIT:-0.5}
|
||||
memory: ${DIFY_WEAVIATE_MEMORY_LIMIT:-1G}
|
||||
reservations:
|
||||
cpus: ${DIFY_WEAVIATE_CPU_RESERVATION:-0.25}
|
||||
memory: ${DIFY_WEAVIATE_MEMORY_RESERVATION:-512M}
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8080/v1/.well-known/ready"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 30s
|
||||
|
||||
volumes:
|
||||
dify_storage:
|
||||
dify_db_data:
|
||||
dify_redis_data:
|
||||
dify_weaviate_data:
|
||||
@@ -9,7 +9,7 @@ x-defaults: &defaults
|
||||
services:
|
||||
easy-dataset:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}conardli/easy-dataset:${EASY_DATASET_VERSION:-1.5.1}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/conardli/easy-dataset:${EASY_DATASET_VERSION:-1.5.1}
|
||||
ports:
|
||||
- "${EASY_DATASET_PORT_OVERRIDE:-1717}:1717"
|
||||
volumes:
|
||||
|
||||
@@ -39,7 +39,7 @@ x-common-env: &common-env
|
||||
services:
|
||||
playwright-service:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}firecrawl/playwright-service:${PLAYWRIGHT_VERSION:-latest}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/firecrawl/playwright-service:${PLAYWRIGHT_VERSION:-latest}
|
||||
environment:
|
||||
PORT: 3000
|
||||
PROXY_SERVER: ${PROXY_SERVER:-}
|
||||
@@ -57,7 +57,7 @@ services:
|
||||
|
||||
api:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}firecrawl/firecrawl:${FIRECRAWL_VERSION:-latest}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/firecrawl/firecrawl:${FIRECRAWL_VERSION:-latest}
|
||||
environment:
|
||||
<<: *common-env
|
||||
HOST: 0.0.0.0
|
||||
@@ -121,7 +121,7 @@ services:
|
||||
|
||||
nuq-postgres:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}firecrawl/nuq-postgres:${NUQ_POSTGRES_VERSION:-latest}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/firecrawl/nuq-postgres:${NUQ_POSTGRES_VERSION:-latest}
|
||||
environment:
|
||||
POSTGRES_USER: ${POSTGRES_USER:-postgres}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD:-postgres}
|
||||
|
||||
@@ -37,7 +37,15 @@ services:
|
||||
cpus: ${GITEA_CPU_RESERVATION:-0.5}
|
||||
memory: ${GITEA_MEMORY_RESERVATION:-512M}
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--no-verbose",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost:3000/",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
@@ -46,6 +54,8 @@ services:
|
||||
db:
|
||||
<<: *defaults
|
||||
image: ${GLOBAL_REGISTRY:-}postgres:${POSTGRES_VERSION:-17.6}
|
||||
profiles:
|
||||
- ${COMPOSE_PROFILES:-}
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
- POSTGRES_USER=${POSTGRES_USER:-gitea}
|
||||
|
||||
@@ -13,7 +13,7 @@ services:
|
||||
context: .
|
||||
args:
|
||||
target: runtime
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}berriai/litellm:${LITELLM_VERSION:-main-stable}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/berriai/litellm:${LITELLM_VERSION:-main-stable}
|
||||
# Uncomment these lines to start proxy with a config.yaml file
|
||||
# volumes:
|
||||
# - ./config.yaml:/app/config.yaml:ro
|
||||
|
||||
@@ -65,12 +65,19 @@ services:
|
||||
cpus: ${ATTU_CPU_RESERVATION:-0.1}
|
||||
memory: ${ATTU_MEMORY_RESERVATION:-128M}
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--no-verbose",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost:3000/",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
start_period: 10s
|
||||
|
||||
|
||||
volumes:
|
||||
milvus_data:
|
||||
|
||||
@@ -67,7 +67,7 @@ services:
|
||||
image: ${GLOBAL_REGISTRY:-}milvusdb/milvus:${MILVUS_VERSION:-v2.6.7}
|
||||
command: ["milvus", "run", "standalone"]
|
||||
security_opt:
|
||||
- seccomp:unconfined
|
||||
- seccomp:unconfined
|
||||
environment:
|
||||
TZ: ${TZ:-UTC}
|
||||
ETCD_ENDPOINTS: etcd:2379
|
||||
@@ -120,7 +120,15 @@ services:
|
||||
cpus: ${ATTU_CPU_RESERVATION:-0.1}
|
||||
memory: ${ATTU_MEMORY_RESERVATION:-128M}
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:3000/"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--no-verbose",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost:3000/",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
@@ -11,3 +11,9 @@ MINIO_PORT_OVERRIDE_WEBUI=9001
|
||||
|
||||
# Timezone
|
||||
TZ=UTC
|
||||
|
||||
# Resource Limits
|
||||
MINIO_CPU_LIMIT=0.5
|
||||
MINIO_MEMORY_LIMIT=1G
|
||||
MINIO_CPU_RESERVATION=0.25
|
||||
MINIO_MEMORY_RESERVATION=512M
|
||||
|
||||
1
src/minio/.gitignore
vendored
1
src/minio/.gitignore
vendored
@@ -1 +0,0 @@
|
||||
/config
|
||||
@@ -9,7 +9,7 @@ x-defaults: &defaults
|
||||
services:
|
||||
minio:
|
||||
<<: *defaults
|
||||
image: cgr.dev/chainguard/minio:${MINIO_VERSION:-0.20251015}
|
||||
image: ${CGR_DEV_REGISTRY:cgr.dev-}/chainguard/minio:${MINIO_VERSION:-0.20251015}
|
||||
ports:
|
||||
- "${MINIO_PORT_OVERRIDE_API:-9000}:9000"
|
||||
- "${MINIO_PORT_OVERRIDE_WEBUI:-9001}:9001"
|
||||
@@ -29,10 +29,10 @@ services:
|
||||
deploy:
|
||||
resources:
|
||||
limits:
|
||||
cpus: ${MINIO_CPU_LIMIT:-1.0}
|
||||
cpus: ${MINIO_CPU_LIMIT:-0.5}
|
||||
memory: ${MINIO_MEMORY_LIMIT:-1G}
|
||||
reservations:
|
||||
cpus: ${MINIO_CPU_RESERVATION:-0.5}
|
||||
cpus: ${MINIO_CPU_RESERVATION:-0.25}
|
||||
memory: ${MINIO_MEMORY_RESERVATION:-512M}
|
||||
|
||||
|
||||
|
||||
@@ -77,7 +77,7 @@ services:
|
||||
|
||||
mlflow:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}mlflow/mlflow:${MLFLOW_VERSION:-v2.20.2}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/mlflow/mlflow:${MLFLOW_VERSION:-v2.20.2}
|
||||
depends_on:
|
||||
postgres:
|
||||
condition: service_healthy
|
||||
|
||||
@@ -34,7 +34,15 @@ services:
|
||||
cpus: ${ODOO_CPU_RESERVATION:-0.5}
|
||||
memory: ${ODOO_MEMORY_RESERVATION:-1G}
|
||||
healthcheck:
|
||||
test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost:8069/"]
|
||||
test:
|
||||
[
|
||||
"CMD",
|
||||
"wget",
|
||||
"--no-verbose",
|
||||
"--tries=1",
|
||||
"--spider",
|
||||
"http://localhost:8069/",
|
||||
]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 3
|
||||
|
||||
@@ -9,7 +9,7 @@ x-defaults: &defaults
|
||||
services:
|
||||
open_webui:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}open-webui/open-webui:${OPEN_WEBUI_VERSION:-main}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/open-webui/open-webui:${OPEN_WEBUI_VERSION:-main}
|
||||
ports:
|
||||
- "${OPEN_WEBUI_PORT_OVERRIDE:-8080}:8080"
|
||||
volumes:
|
||||
|
||||
@@ -6,11 +6,8 @@ TZ=UTC
|
||||
|
||||
# Pingap Version
|
||||
# Use version-full for production (includes OpenTelemetry, Sentry, image compression plugins)
|
||||
# Available tags: latest, full, 0.12.1, 0.12.1-full
|
||||
PINGAP_VERSION=0.12.1-full
|
||||
|
||||
# Container Name (optional, leave empty for auto-generated name)
|
||||
PINGAP_CONTAINER_NAME=
|
||||
# Available tags: latest, full, 0.12.7, 0.12.7-full
|
||||
PINGAP_VERSION=0.12.7-full
|
||||
|
||||
# Port Overrides
|
||||
# HTTP port - exposed on host
|
||||
@@ -28,7 +25,7 @@ PINGAP_ADMIN_ADDR=0.0.0.0:80/pingap
|
||||
# Admin username
|
||||
PINGAP_ADMIN_USER=admin
|
||||
# Admin password (REQUIRED - set a strong password!)
|
||||
PINGAP_ADMIN_PASSWORD=changeme
|
||||
PINGAP_ADMIN_PASSWORD=password
|
||||
|
||||
# Resource Limits
|
||||
PINGAP_CPU_LIMIT=1.0
|
||||
|
||||
@@ -49,13 +49,13 @@ A high-performance reverse proxy built on Cloudflare Pingora, designed as a more
|
||||
|
||||
| Variable | Description | Default |
|
||||
| ---------------------------- | ------------------------------------------ | ------------------- |
|
||||
| `PINGAP_VERSION` | Image version (recommended: `0.12.1-full`) | `0.12.1-full` |
|
||||
| `PINGAP_VERSION` | Image version (recommended: `0.12.7-full`) | `0.12.7-full` |
|
||||
| `PINGAP_HTTP_PORT_OVERRIDE` | HTTP port on host | `80` |
|
||||
| `PINGAP_HTTPS_PORT_OVERRIDE` | HTTPS port on host | `443` |
|
||||
| `PINGAP_DATA_DIR` | Data directory for persistent storage | `./pingap` |
|
||||
| `PINGAP_ADMIN_ADDR` | Admin interface address | `0.0.0.0:80/pingap` |
|
||||
| `PINGAP_ADMIN_USER` | Admin username | `admin` |
|
||||
| `PINGAP_ADMIN_PASSWORD` | Admin password (REQUIRED) | - |
|
||||
| `PINGAP_ADMIN_PASSWORD` | Admin password | `password` |
|
||||
| `PINGAP_CPU_LIMIT` | CPU limit | `1.0` |
|
||||
| `PINGAP_MEMORY_LIMIT` | Memory limit | `512M` |
|
||||
|
||||
@@ -63,8 +63,8 @@ A high-performance reverse proxy built on Cloudflare Pingora, designed as a more
|
||||
|
||||
- `vicanso/pingap:latest` - Latest development version (not recommended for production)
|
||||
- `vicanso/pingap:full` - Latest development version with all features
|
||||
- `vicanso/pingap:0.12.1` - Stable version without extra dependencies
|
||||
- `vicanso/pingap:0.12.1-full` - **Recommended**: Stable version with OpenTelemetry, Sentry, and image compression
|
||||
- `vicanso/pingap:0.12.7` - Stable version without extra dependencies
|
||||
- `vicanso/pingap:0.12.7-full` - **Recommended**: Stable version with OpenTelemetry, Sentry, and image compression
|
||||
|
||||
### Persistent Storage
|
||||
|
||||
@@ -103,7 +103,7 @@ docker compose down
|
||||
|
||||
### Production Recommendations
|
||||
|
||||
- Use versioned tags (e.g., `0.12.1-full`) instead of `latest` or `full`
|
||||
- Use versioned tags (e.g., `0.12.7-full`) instead of `latest` or `full`
|
||||
- Configure appropriate resource limits based on your traffic
|
||||
- Set up proper monitoring and logging
|
||||
- Enable HTTPS with valid certificates
|
||||
|
||||
@@ -49,13 +49,13 @@
|
||||
|
||||
| 变量名 | 说明 | 默认值 |
|
||||
| ---------------------------- | ------------------------------- | ------------------- |
|
||||
| `PINGAP_VERSION` | 镜像版本(推荐:`0.12.1-full`) | `0.12.1-full` |
|
||||
| `PINGAP_VERSION` | 镜像版本(推荐:`0.12.7-full`) | `0.12.7-full` |
|
||||
| `PINGAP_HTTP_PORT_OVERRIDE` | 主机 HTTP 端口 | `80` |
|
||||
| `PINGAP_HTTPS_PORT_OVERRIDE` | 主机 HTTPS 端口 | `443` |
|
||||
| `PINGAP_DATA_DIR` | 持久化数据目录 | `./pingap` |
|
||||
| `PINGAP_ADMIN_ADDR` | 管理界面地址 | `0.0.0.0:80/pingap` |
|
||||
| `PINGAP_ADMIN_USER` | 管理员用户名 | `admin` |
|
||||
| `PINGAP_ADMIN_PASSWORD` | 管理员密码(必填) | - |
|
||||
| `PINGAP_ADMIN_PASSWORD` | 管理员密码 | `password` |
|
||||
| `PINGAP_CPU_LIMIT` | CPU 限制 | `1.0` |
|
||||
| `PINGAP_MEMORY_LIMIT` | 内存限制 | `512M` |
|
||||
|
||||
@@ -63,8 +63,8 @@
|
||||
|
||||
- `vicanso/pingap:latest` - 最新开发版(不推荐用于生产环境)
|
||||
- `vicanso/pingap:full` - 包含所有功能的最新开发版
|
||||
- `vicanso/pingap:0.12.1` - 不含额外依赖的稳定版
|
||||
- `vicanso/pingap:0.12.1-full` - **推荐**:包含 OpenTelemetry、Sentry 和图片压缩的稳定版
|
||||
- `vicanso/pingap:0.12.7` - 不含额外依赖的稳定版
|
||||
- `vicanso/pingap:0.12.7-full` - **推荐**:包含 OpenTelemetry、Sentry 和图片压缩的稳定版
|
||||
|
||||
### 持久化存储
|
||||
|
||||
@@ -103,7 +103,7 @@ docker compose down
|
||||
|
||||
### 生产环境建议
|
||||
|
||||
- 使用带版本号的标签(如 `0.12.1-full`),而非 `latest` 或 `full`
|
||||
- 使用带版本号的标签(如 `0.12.7-full`),而非 `latest` 或 `full`
|
||||
- 根据流量情况配置适当的资源限制
|
||||
- 设置适当的监控和日志记录
|
||||
- 启用 HTTPS 并使用有效证书
|
||||
|
||||
@@ -12,19 +12,18 @@ x-defaults: &defaults
|
||||
services:
|
||||
pingap:
|
||||
<<: *defaults
|
||||
image: ${GLOBAL_REGISTRY:-}vicanso/pingap:${PINGAP_VERSION:-0.12.1-full}
|
||||
container_name: ${PINGAP_CONTAINER_NAME:-}
|
||||
image: ${GLOBAL_REGISTRY:-}vicanso/pingap:${PINGAP_VERSION:-0.12.7-full}
|
||||
ports:
|
||||
- "${PINGAP_HTTP_PORT_OVERRIDE:-80}:80"
|
||||
- "${PINGAP_HTTPS_PORT_OVERRIDE:-443}:443"
|
||||
volumes:
|
||||
- ${PINGAP_DATA_DIR:-./pingap}:/opt/pingap
|
||||
- pingap_data:/opt/pingap
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
- PINGAP_CONF=/opt/pingap/conf
|
||||
- PINGAP_ADMIN_ADDR=${PINGAP_ADMIN_ADDR:-0.0.0.0:80/pingap}
|
||||
- PINGAP_ADMIN_USER=${PINGAP_ADMIN_USER:-admin}
|
||||
- PINGAP_ADMIN_PASSWORD=${PINGAP_ADMIN_PASSWORD:?PINGAP_ADMIN_PASSWORD must be set}
|
||||
- PINGAP_ADMIN_PASSWORD=${PINGAP_ADMIN_PASSWORD:-password}
|
||||
command:
|
||||
- pingap
|
||||
- --autoreload
|
||||
@@ -42,3 +41,6 @@ services:
|
||||
reservations:
|
||||
cpus: ${PINGAP_CPU_RESERVATION:-0.5}
|
||||
memory: ${PINGAP_MEMORY_RESERVATION:-256M}
|
||||
|
||||
volumes:
|
||||
pingap_data:
|
||||
|
||||
@@ -9,7 +9,7 @@ x-defaults: &defaults
|
||||
services:
|
||||
pocketbase:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}muchobien/pocketbase:${PB_VERSION:-0.30.0}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/muchobien/pocketbase:${PB_VERSION:-0.30.0}
|
||||
environment:
|
||||
TZ: ${TZ:-UTC}
|
||||
# Optional ENCRYPTION (Ensure this is a 32-character long encryption key)
|
||||
|
||||
@@ -9,7 +9,7 @@ x-defaults: &defaults
|
||||
services:
|
||||
stable-diffusion-webui:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}absolutelyludicrous/sdnext:${SD_WEBUI_VERSION:-latest}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/absolutelyludicrous/sdnext:${SD_WEBUI_VERSION:-latest}
|
||||
ports:
|
||||
- "${SD_WEBUI_PORT_OVERRIDE:-7860}:7860"
|
||||
environment:
|
||||
|
||||
@@ -17,7 +17,7 @@ services:
|
||||
|
||||
webapp:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}triggerdotdev/trigger.dev:${TRIGGER_IMAGE_TAG:-v4.2.0}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/triggerdotdev/trigger.dev:${TRIGGER_IMAGE_TAG:-v4.2.0}
|
||||
ports:
|
||||
- "${TRIGGER_PORT:-8030}:3030"
|
||||
environment:
|
||||
@@ -312,7 +312,7 @@ services:
|
||||
|
||||
supervisor:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}triggerdotdev/supervisor:${TRIGGER_IMAGE_TAG:-v4.2.0}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/triggerdotdev/supervisor:${TRIGGER_IMAGE_TAG:-v4.2.0}
|
||||
environment:
|
||||
- TZ=${TZ:-UTC}
|
||||
# Required settings
|
||||
|
||||
@@ -37,7 +37,7 @@ x-defaults: &defaults
|
||||
services:
|
||||
windmill-server:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}windmill-labs/windmill:${WINDMILL_VERSION:-main}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/windmill-labs/windmill:${WINDMILL_VERSION:-main}
|
||||
container_name: windmill-server
|
||||
ports:
|
||||
- "${WINDMILL_PORT_OVERRIDE:-8000}:8000"
|
||||
@@ -82,7 +82,7 @@ services:
|
||||
|
||||
windmill-worker:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}windmill-labs/windmill:${WINDMILL_VERSION:-main}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/windmill-labs/windmill:${WINDMILL_VERSION:-main}
|
||||
container_name: windmill-worker
|
||||
environment:
|
||||
# Database configuration
|
||||
@@ -143,7 +143,7 @@ services:
|
||||
# Optional: LSP service for code intelligence
|
||||
windmill-lsp:
|
||||
<<: *defaults
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io/}windmill-labs/windmill-lsp:${WINDMILL_LSP_VERSION:-latest}
|
||||
image: ${GHCR_IO_REGISTRY:-ghcr.io}/windmill-labs/windmill-lsp:${WINDMILL_LSP_VERSION:-latest}
|
||||
container_name: windmill-lsp
|
||||
profiles:
|
||||
- dev
|
||||
|
||||
Reference in New Issue
Block a user