Restore non-sensitive configuration files
This commit is contained in:
parent
e7e53c5c7e
commit
f79174ff0b
800
app/dify/.env
Normal file
800
app/dify/.env
Normal file
@ -0,0 +1,800 @@
|
||||
# ------------------------------
|
||||
# Environment Variables for API service & worker
|
||||
# ------------------------------
|
||||
# https://docs.dify.ai/zh-hans/getting-started/install-self-hosted/environments
|
||||
DIFY_DATA=./volumes
|
||||
|
||||
# ------------------------------
|
||||
# Common Variables
|
||||
# ------------------------------
|
||||
|
||||
# The backend URL of the console API,
|
||||
# used to concatenate the authorization callback.
|
||||
# If empty, it is the same domain.
|
||||
# Example: https://api.console.dify.ai
|
||||
CONSOLE_API_URL=
|
||||
|
||||
# The front-end URL of the console web,
|
||||
# used to concatenate some front-end addresses and for CORS configuration use.
|
||||
# If empty, it is the same domain.
|
||||
# Example: https://console.dify.ai
|
||||
CONSOLE_WEB_URL=
|
||||
|
||||
# Service API Url,
|
||||
# used to display Service API Base Url to the front-end.
|
||||
# If empty, it is the same domain.
|
||||
# Example: https://api.dify.ai
|
||||
SERVICE_API_URL=
|
||||
|
||||
# WebApp API backend Url,
|
||||
# used to declare the back-end URL for the front-end API.
|
||||
# If empty, it is the same domain.
|
||||
# Example: https://api.app.dify.ai
|
||||
APP_API_URL=
|
||||
|
||||
# WebApp Url,
|
||||
# used to display WebAPP API Base Url to the front-end.
|
||||
# If empty, it is the same domain.
|
||||
# Example: https://app.dify.ai
|
||||
APP_WEB_URL=
|
||||
|
||||
# File preview or download Url prefix.
|
||||
# used to display File preview or download Url to the front-end or as Multi-model inputs;
|
||||
# Url is signed and has expiration time.
|
||||
FILES_URL=
|
||||
|
||||
# ------------------------------
|
||||
# Server Configuration
|
||||
# ------------------------------
|
||||
|
||||
# The log level for the application.
|
||||
# Supported values are `DEBUG`, `INFO`, `WARNING`, `ERROR`, `CRITICAL`
|
||||
LOG_LEVEL=INFO
|
||||
# Log file path
|
||||
LOG_FILE=/app/logs/server.log
|
||||
# Log file max size, the unit is MB
|
||||
LOG_FILE_MAX_SIZE=20
|
||||
# Log file max backup count
|
||||
LOG_FILE_BACKUP_COUNT=5
|
||||
# Log dateformat
|
||||
LOG_DATEFORMAT=%Y-%m-%d %H:%M:%S
|
||||
# Log Timezone
|
||||
LOG_TZ=UTC
|
||||
|
||||
# Debug mode, default is false.
|
||||
# It is recommended to turn on this configuration for local development
|
||||
# to prevent some problems caused by monkey patch.
|
||||
DEBUG=false
|
||||
|
||||
# Flask debug mode, it can output trace information at the interface when turned on,
|
||||
# which is convenient for debugging.
|
||||
FLASK_DEBUG=false
|
||||
|
||||
# A secret key that is used for securely signing the session cookie
|
||||
# and encrypting sensitive information on the database.
|
||||
# You can generate a strong key using `openssl rand -base64 42`.
|
||||
SECRET_KEY=your-secret-key-placeholder
|
||||
|
||||
# Password for admin user initialization.
|
||||
# If left unset, admin user will not be prompted for a password
|
||||
# when creating the initial admin account.
|
||||
# The length of the password cannot exceed 30 characters.
|
||||
INIT_PASSWORD=
|
||||
|
||||
# Deployment environment.
|
||||
# Supported values are `PRODUCTION`, `TESTING`. Default is `PRODUCTION`.
|
||||
# Testing environment. There will be a distinct color label on the front-end page,
|
||||
# indicating that this environment is a testing environment.
|
||||
DEPLOY_ENV=PRODUCTION
|
||||
|
||||
# Whether to enable the version check policy.
|
||||
# If set to empty, https://updates.dify.ai will be called for version check.
|
||||
CHECK_UPDATE_URL=https://updates.dify.ai
|
||||
|
||||
# Used to change the OpenAI base address, default is https://api.openai.com/v1.
|
||||
# When OpenAI cannot be accessed in China, replace it with a domestic mirror address,
|
||||
# or when a local model provides OpenAI compatible API, it can be replaced.
|
||||
OPENAI_API_BASE=https://api.openai.com/v1
|
||||
|
||||
# When enabled, migrations will be executed prior to application startup
|
||||
# and the application will start after the migrations have completed.
|
||||
MIGRATION_ENABLED=true
|
||||
|
||||
# File Access Time specifies a time interval in seconds for the file to be accessed.
|
||||
# The default value is 300 seconds.
|
||||
FILES_ACCESS_TIMEOUT=300
|
||||
|
||||
# Access token expiration time in minutes
|
||||
ACCESS_TOKEN_EXPIRE_MINUTES=60
|
||||
|
||||
# Refresh token expiration time in days
|
||||
REFRESH_TOKEN_EXPIRE_DAYS=30
|
||||
|
||||
# The maximum number of active requests for the application, where 0 means unlimited, should be a non-negative integer.
|
||||
APP_MAX_ACTIVE_REQUESTS=0
|
||||
APP_MAX_EXECUTION_TIME=1200
|
||||
|
||||
# ------------------------------
|
||||
# Container Startup Related Configuration
|
||||
# Only effective when starting with docker image or docker-compose.
|
||||
# ------------------------------
|
||||
|
||||
# API service binding address, default: 0.0.0.0, i.e., all addresses can be accessed.
|
||||
DIFY_BIND_ADDRESS=0.0.0.0
|
||||
|
||||
# API service binding port number, default 5001.
|
||||
DIFY_PORT=5001
|
||||
|
||||
# The number of API server workers, i.e., the number of workers.
|
||||
# Formula: number of cpu cores x 2 + 1 for sync, 1 for Gevent
|
||||
# Reference: https://docs.gunicorn.org/en/stable/design.html#how-many-workers
|
||||
SERVER_WORKER_AMOUNT=1
|
||||
|
||||
# Defaults to gevent. If using windows, it can be switched to sync or solo.
|
||||
SERVER_WORKER_CLASS=gevent
|
||||
|
||||
# Default number of worker connections, the default is 10.
|
||||
SERVER_WORKER_CONNECTIONS=10
|
||||
|
||||
# Similar to SERVER_WORKER_CLASS.
|
||||
# If using windows, it can be switched to sync or solo.
|
||||
CELERY_WORKER_CLASS=
|
||||
|
||||
# Request handling timeout. The default is 200,
|
||||
# it is recommended to set it to 360 to support a longer sse connection time.
|
||||
GUNICORN_TIMEOUT=360
|
||||
|
||||
# The number of Celery workers. The default is 1, and can be set as needed.
|
||||
CELERY_WORKER_AMOUNT=
|
||||
|
||||
# Flag indicating whether to enable autoscaling of Celery workers.
|
||||
#
|
||||
# Autoscaling is useful when tasks are CPU intensive and can be dynamically
|
||||
# allocated and deallocated based on the workload.
|
||||
#
|
||||
# When autoscaling is enabled, the maximum and minimum number of workers can
|
||||
# be specified. The autoscaling algorithm will dynamically adjust the number
|
||||
# of workers within the specified range.
|
||||
#
|
||||
# Default is false (i.e., autoscaling is disabled).
|
||||
#
|
||||
# Example:
|
||||
# CELERY_AUTO_SCALE=true
|
||||
CELERY_AUTO_SCALE=false
|
||||
|
||||
# The maximum number of Celery workers that can be autoscaled.
|
||||
# This is optional and only used when autoscaling is enabled.
|
||||
# Default is not set.
|
||||
CELERY_MAX_WORKERS=
|
||||
|
||||
# The minimum number of Celery workers that can be autoscaled.
|
||||
# This is optional and only used when autoscaling is enabled.
|
||||
# Default is not set.
|
||||
CELERY_MIN_WORKERS=
|
||||
|
||||
# API Tool configuration
|
||||
API_TOOL_DEFAULT_CONNECT_TIMEOUT=10
|
||||
API_TOOL_DEFAULT_READ_TIMEOUT=60
|
||||
|
||||
|
||||
# ------------------------------
|
||||
# Database Configuration
|
||||
# The database uses PostgreSQL. Please use the public schema.
|
||||
# It is consistent with the configuration in the 'db' service below.
|
||||
# ------------------------------
|
||||
|
||||
DB_USERNAME=postgres
|
||||
DB_PASSWORD=your-db-password
|
||||
DB_HOST=db
|
||||
DB_PORT=5432
|
||||
DB_DATABASE=dify
|
||||
# The size of the database connection pool.
|
||||
# The default is 30 connections, which can be appropriately increased.
|
||||
SQLALCHEMY_POOL_SIZE=30
|
||||
# Database connection pool recycling time, the default is 3600 seconds.
|
||||
SQLALCHEMY_POOL_RECYCLE=3600
|
||||
# Whether to print SQL, default is false.
|
||||
SQLALCHEMY_ECHO=false
|
||||
|
||||
# Maximum number of connections to the database
|
||||
# Default is 100
|
||||
#
|
||||
# Reference: https://www.postgresql.org/docs/current/runtime-config-connection.html#GUC-MAX-CONNECTIONS
|
||||
POSTGRES_MAX_CONNECTIONS=100
|
||||
|
||||
# Sets the amount of shared memory used for postgres's shared buffers.
|
||||
# Default is 128MB
|
||||
# Recommended value: 25% of available memory
|
||||
# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-SHARED-BUFFERS
|
||||
POSTGRES_SHARED_BUFFERS=128MB
|
||||
|
||||
# Sets the amount of memory used by each database worker for working space.
|
||||
# Default is 4MB
|
||||
#
|
||||
# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-WORK-MEM
|
||||
POSTGRES_WORK_MEM=4MB
|
||||
|
||||
# Sets the amount of memory reserved for maintenance activities.
|
||||
# Default is 64MB
|
||||
#
|
||||
# Reference: https://www.postgresql.org/docs/current/runtime-config-resource.html#GUC-MAINTENANCE-WORK-MEM
|
||||
POSTGRES_MAINTENANCE_WORK_MEM=64MB
|
||||
|
||||
# Sets the planner's assumption about the effective cache size.
|
||||
# Default is 4096MB
|
||||
#
|
||||
# Reference: https://www.postgresql.org/docs/current/runtime-config-query.html#GUC-EFFECTIVE-CACHE-SIZE
|
||||
POSTGRES_EFFECTIVE_CACHE_SIZE=4096MB
|
||||
|
||||
# ------------------------------
|
||||
# Redis Configuration
|
||||
# This Redis configuration is used for caching and for pub/sub during conversation.
|
||||
# ------------------------------
|
||||
|
||||
REDIS_HOST=redis
|
||||
REDIS_PORT=6379
|
||||
REDIS_USERNAME=
|
||||
REDIS_PASSWORD=your-redis-password
|
||||
REDIS_USE_SSL=false
|
||||
REDIS_DB=0
|
||||
|
||||
# Whether to use Redis Sentinel mode.
|
||||
# If set to true, the application will automatically discover and connect to the master node through Sentinel.
|
||||
REDIS_USE_SENTINEL=false
|
||||
|
||||
# List of Redis Sentinel nodes. If Sentinel mode is enabled, provide at least one Sentinel IP and port.
|
||||
# Format: `<sentinel1_ip>:<sentinel1_port>,<sentinel2_ip>:<sentinel2_port>,<sentinel3_ip>:<sentinel3_port>`
|
||||
REDIS_SENTINELS=
|
||||
REDIS_SENTINEL_SERVICE_NAME=
|
||||
REDIS_SENTINEL_USERNAME=
|
||||
REDIS_SENTINEL_PASSWORD=
|
||||
REDIS_SENTINEL_SOCKET_TIMEOUT=0.1
|
||||
|
||||
# List of Redis Cluster nodes. If Cluster mode is enabled, provide at least one Cluster IP and port.
|
||||
# Format: `<Cluster1_ip>:<Cluster1_port>,<Cluster2_ip>:<Cluster2_port>,<Cluster3_ip>:<Cluster3_port>`
|
||||
REDIS_USE_CLUSTERS=false
|
||||
REDIS_CLUSTERS=
|
||||
REDIS_CLUSTERS_PASSWORD=
|
||||
|
||||
# ------------------------------
|
||||
# Celery Configuration
|
||||
# ------------------------------
|
||||
|
||||
# Use redis as the broker, and redis db 1 for celery broker.
|
||||
# Format as follows: `redis://<redis_username>:<redis_password>@<redis_host>:<redis_port>/<redis_database>`
|
||||
# Example: redis://:difyai123456@redis:6379/1
|
||||
# If use Redis Sentinel, format as follows: `sentinel://<sentinel_username>:<sentinel_password>@<sentinel_host>:<sentinel_port>/<redis_database>`
|
||||
# Example: sentinel://localhost:26379/1;sentinel://localhost:26380/1;sentinel://localhost:26381/1
|
||||
CELERY_BROKER_URL=redis://:difyai123456@redis:6379/1
|
||||
BROKER_USE_SSL=false
|
||||
|
||||
# If you are using Redis Sentinel for high availability, configure the following settings.
|
||||
CELERY_USE_SENTINEL=false
|
||||
CELERY_SENTINEL_MASTER_NAME=
|
||||
CELERY_SENTINEL_SOCKET_TIMEOUT=0.1
|
||||
|
||||
# ------------------------------
|
||||
# CORS Configuration
|
||||
# Used to set the front-end cross-domain access policy.
|
||||
# ------------------------------
|
||||
|
||||
# Specifies the allowed origins for cross-origin requests to the Web API,
|
||||
# e.g. https://dify.app or * for all origins.
|
||||
WEB_API_CORS_ALLOW_ORIGINS=*
|
||||
|
||||
# Specifies the allowed origins for cross-origin requests to the console API,
|
||||
# e.g. https://cloud.dify.ai or * for all origins.
|
||||
CONSOLE_CORS_ALLOW_ORIGINS=*
|
||||
|
||||
# ------------------------------
|
||||
# File Storage Configuration
|
||||
# ------------------------------
|
||||
|
||||
# The type of storage to use for storing user files.
|
||||
STORAGE_TYPE=opendal
|
||||
|
||||
# Apache OpenDAL Configuration
|
||||
# The configuration for OpenDAL consists of the following format: OPENDAL_<SCHEME_NAME>_<CONFIG_NAME>.
|
||||
# You can find all the service configurations (CONFIG_NAME) in the repository at: https://github.com/apache/opendal/tree/main/core/src/services.
|
||||
# Dify will scan configurations starting with OPENDAL_<SCHEME_NAME> and automatically apply them.
|
||||
# The scheme name for the OpenDAL storage.
|
||||
OPENDAL_SCHEME=fs
|
||||
# Configurations for OpenDAL Local File System.
|
||||
OPENDAL_FS_ROOT=storage
|
||||
|
||||
# S3 Configuration
|
||||
#
|
||||
S3_ENDPOINT=
|
||||
S3_REGION=us-east-1
|
||||
S3_BUCKET_NAME=difyai
|
||||
S3_ACCESS_KEY=
|
||||
S3_SECRET_KEY=
|
||||
# Whether to use AWS managed IAM roles for authenticating with the S3 service.
|
||||
# If set to false, the access key and secret key must be provided.
|
||||
S3_USE_AWS_MANAGED_IAM=false
|
||||
|
||||
# Azure Blob Configuration
|
||||
#
|
||||
AZURE_BLOB_ACCOUNT_NAME=difyai
|
||||
AZURE_BLOB_ACCOUNT_KEY=difyai
|
||||
AZURE_BLOB_CONTAINER_NAME=difyai-container
|
||||
AZURE_BLOB_ACCOUNT_URL=https://<your_account_name>.blob.core.windows.net
|
||||
|
||||
# Google Storage Configuration
|
||||
#
|
||||
GOOGLE_STORAGE_BUCKET_NAME=your-bucket-name
|
||||
GOOGLE_STORAGE_SERVICE_ACCOUNT_JSON_BASE64=
|
||||
|
||||
# The Alibaba Cloud OSS configurations,
|
||||
#
|
||||
ALIYUN_OSS_BUCKET_NAME=your-bucket-name
|
||||
ALIYUN_OSS_ACCESS_KEY=your-access-key
|
||||
ALIYUN_OSS_SECRET_KEY=your-secret-key
|
||||
ALIYUN_OSS_ENDPOINT=https://oss-ap-southeast-1-internal.aliyuncs.com
|
||||
ALIYUN_OSS_REGION=ap-southeast-1
|
||||
ALIYUN_OSS_AUTH_VERSION=v4
|
||||
# Don't start with '/'. OSS doesn't support leading slash in object names.
|
||||
ALIYUN_OSS_PATH=your-path
|
||||
|
||||
# Tencent COS Configuration
|
||||
#
|
||||
TENCENT_COS_BUCKET_NAME=your-bucket-name
|
||||
TENCENT_COS_SECRET_KEY=your-secret-key
|
||||
TENCENT_COS_SECRET_ID=your-secret-id
|
||||
TENCENT_COS_REGION=your-region
|
||||
TENCENT_COS_SCHEME=your-scheme
|
||||
|
||||
# Oracle Storage Configuration
|
||||
#
|
||||
OCI_ENDPOINT=https://your-object-storage-namespace.compat.objectstorage.us-ashburn-1.oraclecloud.com
|
||||
OCI_BUCKET_NAME=your-bucket-name
|
||||
OCI_ACCESS_KEY=your-access-key
|
||||
OCI_SECRET_KEY=your-secret-key
|
||||
OCI_REGION=us-ashburn-1
|
||||
|
||||
# Huawei OBS Configuration
|
||||
#
|
||||
HUAWEI_OBS_BUCKET_NAME=your-bucket-name
|
||||
HUAWEI_OBS_SECRET_KEY=your-secret-key
|
||||
HUAWEI_OBS_ACCESS_KEY=your-access-key
|
||||
HUAWEI_OBS_SERVER=your-server-url
|
||||
|
||||
# Volcengine TOS Configuration
|
||||
#
|
||||
VOLCENGINE_TOS_BUCKET_NAME=your-bucket-name
|
||||
VOLCENGINE_TOS_SECRET_KEY=your-secret-key
|
||||
VOLCENGINE_TOS_ACCESS_KEY=your-access-key
|
||||
VOLCENGINE_TOS_ENDPOINT=your-server-url
|
||||
VOLCENGINE_TOS_REGION=your-region
|
||||
|
||||
# Baidu OBS Storage Configuration
|
||||
#
|
||||
BAIDU_OBS_BUCKET_NAME=your-bucket-name
|
||||
BAIDU_OBS_SECRET_KEY=your-secret-key
|
||||
BAIDU_OBS_ACCESS_KEY=your-access-key
|
||||
BAIDU_OBS_ENDPOINT=your-server-url
|
||||
|
||||
# Supabase Storage Configuration
|
||||
#
|
||||
SUPABASE_BUCKET_NAME=your-bucket-name
|
||||
SUPABASE_API_KEY=your-access-key
|
||||
SUPABASE_URL=your-server-url
|
||||
|
||||
# ------------------------------
|
||||
# Vector Database Configuration
|
||||
# ------------------------------
|
||||
|
||||
# The type of vector store to use.
|
||||
# Supported values are `weaviate`, `qdrant`, `milvus`, `myscale`, `relyt`, `pgvector`, `pgvecto-rs`, `chroma`, `opensearch`, `tidb_vector`, `oracle`, `tencent`, `elasticsearch`, `elasticsearch-ja`, `analyticdb`, `couchbase`, `vikingdb`, `oceanbase`, `opengauss`, `tablestore`.
|
||||
VECTOR_STORE=weaviate
|
||||
|
||||
# The Weaviate endpoint URL. Only available when VECTOR_STORE is `weaviate`.
|
||||
WEAVIATE_ENDPOINT=http://weaviate:8080
|
||||
WEAVIATE_API_KEY=your-weaviate-api-key
|
||||
|
||||
# The Qdrant endpoint URL. Only available when VECTOR_STORE is `qdrant`.
|
||||
QDRANT_URL=http://qdrant:6333
|
||||
QDRANT_API_KEY=your-qdrant-api-key
|
||||
QDRANT_CLIENT_TIMEOUT=20
|
||||
QDRANT_GRPC_ENABLED=false
|
||||
QDRANT_GRPC_PORT=6334
|
||||
|
||||
# Milvus configuration. Only available when VECTOR_STORE is `milvus`.
|
||||
# The milvus uri.
|
||||
MILVUS_URI=http://host.docker.internal:19530
|
||||
MILVUS_TOKEN=
|
||||
MILVUS_USER=
|
||||
MILVUS_PASSWORD=
|
||||
MILVUS_ENABLE_HYBRID_SEARCH=False
|
||||
|
||||
# MyScale configuration, only available when VECTOR_STORE is `myscale`
|
||||
# For multi-language support, please set MYSCALE_FTS_PARAMS with referring to:
|
||||
# https://myscale.com/docs/en/text-search/#understanding-fts-index-parameters
|
||||
MYSCALE_HOST=myscale
|
||||
MYSCALE_PORT=8123
|
||||
MYSCALE_USER=default
|
||||
MYSCALE_PASSWORD=
|
||||
MYSCALE_DATABASE=dify
|
||||
MYSCALE_FTS_PARAMS=
|
||||
|
||||
# Couchbase configurations, only available when VECTOR_STORE is `couchbase`
|
||||
# The connection string must include hostname defined in the docker-compose file (couchbase-server in this case)
|
||||
COUCHBASE_CONNECTION_STRING=couchbase://couchbase-server
|
||||
COUCHBASE_USER=Administrator
|
||||
COUCHBASE_PASSWORD=password
|
||||
COUCHBASE_BUCKET_NAME=Embeddings
|
||||
COUCHBASE_SCOPE_NAME=_default
|
||||
|
||||
# pgvector configurations, only available when VECTOR_STORE is `pgvector`
|
||||
PGVECTOR_HOST=pgvector
|
||||
PGVECTOR_PORT=5432
|
||||
PGVECTOR_USER=postgres
|
||||
PGVECTOR_PASSWORD=your-pgvector-password
|
||||
PGVECTOR_DATABASE=dify
|
||||
PGVECTOR_MIN_CONNECTION=1
|
||||
PGVECTOR_MAX_CONNECTION=5
|
||||
PGVECTOR_PG_BIGM=false
|
||||
PGVECTOR_PG_BIGM_VERSION=1.2-20240606
|
||||
|
||||
# pgvecto-rs configurations, only available when VECTOR_STORE is `pgvecto-rs`
|
||||
PGVECTO_RS_HOST=pgvecto-rs
|
||||
PGVECTO_RS_PORT=5432
|
||||
PGVECTO_RS_USER=postgres
|
||||
PGVECTO_RS_PASSWORD=your-pgvecto-rs-password
|
||||
PGVECTO_RS_DATABASE=dify
|
||||
|
||||
# analyticdb configurations, only available when VECTOR_STORE is `analyticdb`
|
||||
ANALYTICDB_KEY_ID=your-ak
|
||||
ANALYTICDB_KEY_SECRET=your-sk
|
||||
ANALYTICDB_REGION_ID=cn-hangzhou
|
||||
ANALYTICDB_INSTANCE_ID=gp-ab123456
|
||||
ANALYTICDB_ACCOUNT=testaccount
|
||||
ANALYTICDB_PASSWORD=testpassword
|
||||
ANALYTICDB_NAMESPACE=dify
|
||||
ANALYTICDB_NAMESPACE_PASSWORD=difypassword
|
||||
ANALYTICDB_HOST=gp-test.aliyuncs.com
|
||||
ANALYTICDB_PORT=5432
|
||||
ANALYTICDB_MIN_CONNECTION=1
|
||||
ANALYTICDB_MAX_CONNECTION=5
|
||||
|
||||
# TiDB vector configurations, only available when VECTOR_STORE is `tidb`
|
||||
TIDB_VECTOR_HOST=tidb
|
||||
TIDB_VECTOR_PORT=4000
|
||||
TIDB_VECTOR_USER=
|
||||
TIDB_VECTOR_PASSWORD=
|
||||
TIDB_VECTOR_DATABASE=dify
|
||||
|
||||
# Tidb on qdrant configuration, only available when VECTOR_STORE is `tidb_on_qdrant`
|
||||
TIDB_ON_QDRANT_URL=http://127.0.0.1
|
||||
TIDB_ON_QDRANT_API_KEY=dify
|
||||
TIDB_ON_QDRANT_CLIENT_TIMEOUT=20
|
||||
TIDB_ON_QDRANT_GRPC_ENABLED=false
|
||||
TIDB_ON_QDRANT_GRPC_PORT=6334
|
||||
TIDB_PUBLIC_KEY=dify
|
||||
TIDB_PRIVATE_KEY=dify
|
||||
TIDB_API_URL=http://127.0.0.1
|
||||
TIDB_IAM_API_URL=http://127.0.0.1
|
||||
TIDB_REGION=regions/aws-us-east-1
|
||||
TIDB_PROJECT_ID=dify
|
||||
TIDB_SPEND_LIMIT=100
|
||||
|
||||
# Chroma configuration, only available when VECTOR_STORE is `chroma`
|
||||
CHROMA_HOST=127.0.0.1
|
||||
CHROMA_PORT=8000
|
||||
CHROMA_TENANT=default_tenant
|
||||
CHROMA_DATABASE=default_database
|
||||
CHROMA_AUTH_PROVIDER=chromadb.auth.token_authn.TokenAuthClientProvider
|
||||
CHROMA_AUTH_CREDENTIALS=
|
||||
|
||||
# Oracle configuration, only available when VECTOR_STORE is `oracle`
|
||||
ORACLE_USER=dify
|
||||
ORACLE_PASSWORD=dify
|
||||
ORACLE_DSN=oracle:1521/FREEPDB1
|
||||
ORACLE_CONFIG_DIR=/app/api/storage/wallet
|
||||
ORACLE_WALLET_LOCATION=/app/api/storage/wallet
|
||||
ORACLE_WALLET_PASSWORD=dify
|
||||
ORACLE_IS_AUTONOMOUS=false
|
||||
|
||||
# relyt configurations, only available when VECTOR_STORE is `relyt`
|
||||
RELYT_HOST=db
|
||||
RELYT_PORT=5432
|
||||
RELYT_USER=postgres
|
||||
RELYT_PASSWORD=your-relyt-password
|
||||
RELYT_DATABASE=postgres
|
||||
|
||||
# open search configuration, only available when VECTOR_STORE is `opensearch`
|
||||
OPENSEARCH_HOST=opensearch
|
||||
OPENSEARCH_PORT=9200
|
||||
OPENSEARCH_USER=admin
|
||||
OPENSEARCH_PASSWORD=admin
|
||||
OPENSEARCH_SECURE=true
|
||||
|
||||
# tencent vector configurations, only available when VECTOR_STORE is `tencent`
|
||||
TENCENT_VECTOR_DB_URL=http://127.0.0.1
|
||||
TENCENT_VECTOR_DB_API_KEY=dify
|
||||
TENCENT_VECTOR_DB_TIMEOUT=30
|
||||
TENCENT_VECTOR_DB_USERNAME=dify
|
||||
TENCENT_VECTOR_DB_DATABASE=dify
|
||||
TENCENT_VECTOR_DB_SHARD=1
|
||||
TENCENT_VECTOR_DB_REPLICAS=2
|
||||
|
||||
# ElasticSearch configuration, only available when VECTOR_STORE is `elasticsearch`
|
||||
ELASTICSEARCH_HOST=0.0.0.0
|
||||
ELASTICSEARCH_PORT=9200
|
||||
ELASTICSEARCH_USERNAME=elastic
|
||||
ELASTICSEARCH_PASSWORD=elastic
|
||||
KIBANA_PORT=5601
|
||||
|
||||
# baidu vector configurations, only available when VECTOR_STORE is `baidu`
|
||||
BAIDU_VECTOR_DB_ENDPOINT=http://127.0.0.1:5287
|
||||
BAIDU_VECTOR_DB_CONNECTION_TIMEOUT_MS=30000
|
||||
BAIDU_VECTOR_DB_ACCOUNT=root
|
||||
BAIDU_VECTOR_DB_API_KEY=dify
|
||||
BAIDU_VECTOR_DB_DATABASE=dify
|
||||
BAIDU_VECTOR_DB_SHARD=1
|
||||
BAIDU_VECTOR_DB_REPLICAS=3
|
||||
|
||||
# VikingDB configurations, only available when VECTOR_STORE is `vikingdb`
|
||||
VIKINGDB_ACCESS_KEY=your-ak
|
||||
VIKINGDB_SECRET_KEY=your-sk
|
||||
VIKINGDB_REGION=cn-shanghai
|
||||
VIKINGDB_HOST=api-vikingdb.xxx.volces.com
|
||||
VIKINGDB_SCHEMA=http
|
||||
VIKINGDB_CONNECTION_TIMEOUT=30
|
||||
VIKINGDB_SOCKET_TIMEOUT=30
|
||||
|
||||
# Lindorm configuration, only available when VECTOR_STORE is `lindorm`
|
||||
LINDORM_URL=http://lindorm:30070
|
||||
LINDORM_USERNAME=lindorm
|
||||
LINDORM_PASSWORD=lindorm
|
||||
|
||||
# OceanBase Vector configuration, only available when VECTOR_STORE is `oceanbase`
|
||||
OCEANBASE_VECTOR_HOST=oceanbase
|
||||
OCEANBASE_VECTOR_PORT=2881
|
||||
OCEANBASE_VECTOR_USER=root@test
|
||||
OCEANBASE_VECTOR_PASSWORD=your-oceanbase-password
|
||||
OCEANBASE_VECTOR_DATABASE=test
|
||||
OCEANBASE_CLUSTER_NAME=difyai
|
||||
OCEANBASE_MEMORY_LIMIT=6G
|
||||
OCEANBASE_ENABLE_HYBRID_SEARCH=false
|
||||
|
||||
# opengauss configurations, only available when VECTOR_STORE is `opengauss`
|
||||
OPENGAUSS_HOST=opengauss
|
||||
OPENGAUSS_PORT=6600
|
||||
OPENGAUSS_USER=postgres
|
||||
OPENGAUSS_PASSWORD=Dify@123
|
||||
OPENGAUSS_DATABASE=dify
|
||||
OPENGAUSS_MIN_CONNECTION=1
|
||||
OPENGAUSS_MAX_CONNECTION=5
|
||||
OPENGAUSS_ENABLE_PQ=false
|
||||
|
||||
# Upstash Vector configuration, only available when VECTOR_STORE is `upstash`
|
||||
UPSTASH_VECTOR_URL=https://xxx-vector.upstash.io
|
||||
UPSTASH_VECTOR_TOKEN=dify
|
||||
|
||||
# TableStore Vector configuration
|
||||
# (only used when VECTOR_STORE is tablestore)
|
||||
TABLESTORE_ENDPOINT=https://instance-name.cn-hangzhou.ots.aliyuncs.com
|
||||
TABLESTORE_INSTANCE_NAME=instance-name
|
||||
TABLESTORE_ACCESS_KEY_ID=xxx
|
||||
TABLESTORE_ACCESS_KEY_SECRET=xxx
|
||||
|
||||
# ------------------------------
|
||||
# Knowledge Configuration
|
||||
# ------------------------------
|
||||
|
||||
# Upload file size limit, default 15M.
|
||||
UPLOAD_FILE_SIZE_LIMIT=15
|
||||
|
||||
# The maximum number of files that can be uploaded at a time, default 5.
|
||||
UPLOAD_FILE_BATCH_LIMIT=5
|
||||
|
||||
# ETL type, support: `dify`, `Unstructured`
|
||||
# `dify` Dify's proprietary file extraction scheme
|
||||
# `Unstructured` Unstructured.io file extraction scheme
|
||||
ETL_TYPE=dify
|
||||
|
||||
# Unstructured API path and API key, needs to be configured when ETL_TYPE is Unstructured
|
||||
# Or using Unstructured for document extractor node for pptx.
|
||||
# For example: http://unstructured:8000/general/v0/general
|
||||
UNSTRUCTURED_API_URL=
|
||||
UNSTRUCTURED_API_KEY=
|
||||
SCARF_NO_ANALYTICS=true
|
||||
|
||||
# ------------------------------
|
||||
# Model Configuration
|
||||
# ------------------------------
|
||||
|
||||
# The maximum number of tokens allowed for prompt generation.
|
||||
# This setting controls the upper limit of tokens that can be used by the LLM
|
||||
# when generating a prompt in the prompt generation tool.
|
||||
# Default: 512 tokens.
|
||||
PROMPT_GENERATION_MAX_TOKENS=512
|
||||
|
||||
# The maximum number of tokens allowed for code generation.
|
||||
# This setting controls the upper limit of tokens that can be used by the LLM
|
||||
# when generating code in the code generation tool.
|
||||
# Default: 1024 tokens.
|
||||
CODE_GENERATION_MAX_TOKENS=1024
|
||||
|
||||
# ------------------------------
|
||||
# Multi-modal Configuration
|
||||
# ------------------------------
|
||||
|
||||
# The format of the image/video/audio/document sent when the multi-modal model is input,
|
||||
# the default is base64, optional url.
|
||||
# The delay of the call in url mode will be lower than that in base64 mode.
|
||||
# It is generally recommended to use the more compatible base64 mode.
|
||||
# If configured as url, you need to configure FILES_URL as an externally accessible address so that the multi-modal model can access the image/video/audio/document.
|
||||
MULTIMODAL_SEND_FORMAT=base64
|
||||
# Upload image file size limit, default 10M.
|
||||
UPLOAD_IMAGE_FILE_SIZE_LIMIT=10
|
||||
# Upload video file size limit, default 100M.
|
||||
UPLOAD_VIDEO_FILE_SIZE_LIMIT=100
|
||||
# Upload audio file size limit, default 50M.
|
||||
UPLOAD_AUDIO_FILE_SIZE_LIMIT=50
|
||||
|
||||
# ------------------------------
|
||||
# Sentry Configuration
|
||||
# Used for application monitoring and error log tracking.
|
||||
# ------------------------------
|
||||
SENTRY_DSN=
|
||||
|
||||
# API Service Sentry DSN address, default is empty, when empty,
|
||||
# all monitoring information is not reported to Sentry.
|
||||
# If not set, Sentry error reporting will be disabled.
|
||||
API_SENTRY_DSN=
|
||||
# API Service The reporting ratio of Sentry events, if it is 0.01, it is 1%.
|
||||
API_SENTRY_TRACES_SAMPLE_RATE=1.0
|
||||
# API Service The reporting ratio of Sentry profiles, if it is 0.01, it is 1%.
|
||||
API_SENTRY_PROFILES_SAMPLE_RATE=1.0
|
||||
|
||||
# Web Service Sentry DSN address, default is empty, when empty,
|
||||
# all monitoring information is not reported to Sentry.
|
||||
# If not set, Sentry error reporting will be disabled.
|
||||
WEB_SENTRY_DSN=
|
||||
|
||||
# ------------------------------
|
||||
# Notion Integration Configuration
|
||||
# Variables can be obtained by applying for Notion integration: https://www.notion.so/my-integrations
|
||||
# ------------------------------
|
||||
|
||||
# Configure as "public" or "internal".
|
||||
# Since Notion's OAuth redirect URL only supports HTTPS,
|
||||
# if deploying locally, please use Notion's internal integration.
|
||||
NOTION_INTEGRATION_TYPE=public
|
||||
# Notion OAuth client secret (used for public integration type)
|
||||
NOTION_CLIENT_SECRET=
|
||||
# Notion OAuth client id (used for public integration type)
|
||||
NOTION_CLIENT_ID=
|
||||
# Notion internal integration secret.
|
||||
# If the value of NOTION_INTEGRATION_TYPE is "internal",
|
||||
# you need to configure this variable.
|
||||
NOTION_INTERNAL_SECRET=
|
||||
|
||||
# ------------------------------
|
||||
# Mail related configuration
|
||||
# ------------------------------
|
||||
|
||||
# Mail type, support: resend, smtp
|
||||
MAIL_TYPE=resend
|
||||
|
||||
# Default send from email address, if not specified
|
||||
MAIL_DEFAULT_SEND_FROM=
|
||||
|
||||
# API-Key for the Resend email provider, used when MAIL_TYPE is `resend`.
|
||||
RESEND_API_URL=https://api.resend.com
|
||||
RESEND_API_KEY=your-resend-api-key
|
||||
|
||||
|
||||
# SMTP server configuration, used when MAIL_TYPE is `smtp`
|
||||
SMTP_SERVER=
|
||||
SMTP_PORT=465
|
||||
SMTP_USERNAME=
|
||||
SMTP_PASSWORD=
|
||||
SMTP_USE_TLS=true
|
||||
SMTP_OPPORTUNISTIC_TLS=false
|
||||
|
||||
# ------------------------------
|
||||
# Others Configuration
|
||||
# ------------------------------
|
||||
|
||||
# Maximum length of segmentation tokens for indexing
|
||||
INDEXING_MAX_SEGMENTATION_TOKENS_LENGTH=4000
|
||||
|
||||
# Member invitation link valid time (hours),
|
||||
# Default: 72.
|
||||
INVITE_EXPIRY_HOURS=72
|
||||
|
||||
# Reset password token valid time (minutes),
|
||||
RESET_PASSWORD_TOKEN_EXPIRY_MINUTES=5
|
||||
|
||||
# The sandbox service endpoint.
|
||||
CODE_EXECUTION_ENDPOINT=http://sandbox:8194
|
||||
CODE_EXECUTION_API_KEY=dify-sandbox
|
||||
CODE_MAX_NUMBER=9223372036854775807
|
||||
CODE_MIN_NUMBER=-9223372036854775808
|
||||
CODE_MAX_DEPTH=5
|
||||
CODE_MAX_PRECISION=20
|
||||
CODE_MAX_STRING_LENGTH=80000
|
||||
CODE_MAX_STRING_ARRAY_LENGTH=30
|
||||
CODE_MAX_OBJECT_ARRAY_LENGTH=30
|
||||
CODE_MAX_NUMBER_ARRAY_LENGTH=1000
|
||||
CODE_EXECUTION_CONNECT_TIMEOUT=10
|
||||
CODE_EXECUTION_READ_TIMEOUT=60
|
||||
CODE_EXECUTION_WRITE_TIMEOUT=10
|
||||
TEMPLATE_TRANSFORM_MAX_LENGTH=80000
|
||||
|
||||
# Workflow runtime configuration
|
||||
WORKFLOW_MAX_EXECUTION_STEPS=500
|
||||
WORKFLOW_MAX_EXECUTION_TIME=1200
|
||||
WORKFLOW_CALL_MAX_DEPTH=5
|
||||
MAX_VARIABLE_SIZE=204800
|
||||
WORKFLOW_PARALLEL_DEPTH_LIMIT=3
|
||||
WORKFLOW_FILE_UPLOAD_LIMIT=10
|
||||
|
||||
# HTTP request node in workflow configuration
|
||||
HTTP_REQUEST_NODE_MAX_BINARY_SIZE=10485760
|
||||
HTTP_REQUEST_NODE_MAX_TEXT_SIZE=1048576
|
||||
HTTP_REQUEST_NODE_SSL_VERIFY=True
|
||||
|
||||
# SSRF Proxy server HTTP URL
|
||||
SSRF_PROXY_HTTP_URL=http://ssrf_proxy:3128
|
||||
# SSRF Proxy server HTTPS URL
|
||||
SSRF_PROXY_HTTPS_URL=http://ssrf_proxy:3128
|
||||
|
||||
# Maximum loop count in the workflow
|
||||
LOOP_NODE_MAX_COUNT=100
|
||||
|
||||
# The maximum number of tools that can be used in the agent.
|
||||
MAX_TOOLS_NUM=10
|
||||
|
||||
# Maximum number of Parallelism branches in the workflow
|
||||
MAX_PARALLEL_LIMIT=10
|
||||
|
||||
# The maximum number of iterations for agent setting
|
||||
MAX_ITERATIONS_NUM=5
|
||||
|
||||
# ------------------------------
|
||||
# Environment Variables for web Service
|
||||
# ------------------------------
|
||||
|
||||
# The timeout for the text generation in millisecond
|
||||
TEXT_GENERATION_TIMEOUT_MS=60000
|
||||
|
||||
# ------------------------------
|
||||
# Environment Variables for db Service
|
||||
# ------------------------------
|
||||
|
||||
PGUSER=${DB_USERNAME}
|
||||
# The password for the default postgres user.
|
||||
POSTGRES_PASSWORD=${DB_PASSWORD}
|
||||
# The name of the default postgres database.
|
||||
POSTGRES_DB=${DB_DATABASE}
|
||||
# postgres data directory
|
||||
PGDATA=/var/lib/postgresql/data/pgdata
|
||||
|
||||
# ------------------------------
|
||||
# Environment Variables for sandbox Service
|
||||
# ------------------------------
|
||||
|
||||
# The API key for the sandbox service
|
||||
SANDBOX_API_KEY=dify-sandbox
|
||||
# The mode in which the Gin framework runs
|
||||
SANDBOX_GIN_MODE=release
|
||||
# The timeout for the worker in seconds
|
||||
SANDBOX_WORKER_TIMEOUT=15
|
||||
# Enable network for the sandbox service
|
||||
SANDBOX_ENABLE_NETWORK=true
|
||||
# HTTP proxy URL for SSRF protection
|
||||
SANDBOX_HTTP_PROXY=http://ssrf_proxy:3128
|
||||
# HTTPS proxy URL for SSRF protection
|
||||
SANDBOX_HTTPS_PROXY=http://ssrf_proxy:3128
|
||||
# The port on which the sandbox service runs
|
||||
SANDBOX_PORT=8194
|
||||
|
||||
# ------------------------------
|
||||
# Environment Variables for weaviate Service
|
||||
# (only used when VECTOR_STORE is weaviate)
|
||||
# ------------------------------
|
||||
WEAVIATE_PERSISTENCE_DATA_PATH=/var/lib/weaviate
|
||||
122
app/dify/README.md
Normal file
122
app/dify/README.md
Normal file
@ -0,0 +1,122 @@
|
||||
# Dify
|
||||
|
||||
Dify: https://dify.ai/
|
||||
|
||||
The Innovation Engine for GenAI Applications, Dify is an open-source LLM app development platform. Orchestrate LLM apps from agents to complex AI workflows, with an RAG engine.
|
||||
|
||||
- [Self-Hosting Dify](https://pigsty.io/docs/app/dify)
|
||||
- [GitHub: langgenius/Dify](https://github.com/langgenius/dify/)
|
||||
- [Pigsty: Dify Docker Compose Template](https://github.com/pgsty/pigsty/tree/master/app/dify)
|
||||
|
||||
|
||||
```bash
|
||||
curl -fsSL https://repo.pigsty.io/get | bash; cd ~/pigsty
|
||||
cd ~/pigsty
|
||||
./bootstrap # prepare local repo & ansible
|
||||
./configure -c app/dify # IMPORTANT: CHANGE CREDENTIALS!!
|
||||
./deploy.yml # install pigsty & pgsql & minio
|
||||
./redis.yml # install extra redis instances
|
||||
./docker.yml # install docker & docker-compose
|
||||
./app.yml # install dify with docker compose
|
||||
```
|
||||
|
||||
------
|
||||
|
||||
## Get Started
|
||||
|
||||
Define & Create required PostgreSQL and Docker resources with Pigsty:
|
||||
|
||||
```yaml
|
||||
all:
|
||||
children:
|
||||
|
||||
# the dify application (default username & password: admin/admin)
|
||||
dify:
|
||||
hosts: { 10.10.10.10: {} }
|
||||
vars:
|
||||
app: dify # specify app name to be installed (in the apps)
|
||||
apps: # define all applications
|
||||
dify: # app name, should have corresponding ~/app/dify folder
|
||||
conf: # override /opt/dify/.env config file
|
||||
# A secret key for signing and encryption, gen with `openssl rand -base64 42` (CHANGE PASSWORD!)
|
||||
SECRET_KEY: your-secret-key-placeholder
|
||||
DB_USERNAME: dify
|
||||
DB_PASSWORD: your-db-password
|
||||
DB_HOST: 10.10.10.10
|
||||
DB_PORT: 5432
|
||||
DB_DATABASE: dify
|
||||
VECTOR_STORE: pgvector
|
||||
PGVECTOR_HOST: 10.10.10.10
|
||||
PGVECTOR_PORT: 5432
|
||||
PGVECTOR_USER: dify
|
||||
PGVECTOR_PASSWORD: your-pgvector-password
|
||||
PGVECTOR_DATABASE: dify
|
||||
PGVECTOR_MIN_CONNECTION: 2
|
||||
PGVECTOR_MAX_CONNECTION: 10
|
||||
NGINX_SERVER_NAME: localhost
|
||||
DIFY_PORT: 5001 # expose DIFY nginx service with port 5001 by default
|
||||
#STORAGE_TYPE: s3
|
||||
#S3_ENDPOINT: 'https://sss.pigsty'
|
||||
#S3_BUCKET_NAME: 'dify'
|
||||
#S3_ACCESS_KEY: 'dify'
|
||||
#S3_SECRET_KEY: 'S3User.Dify'
|
||||
#S3_REGION: 'us-east-1'
|
||||
|
||||
pg-meta:
|
||||
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
|
||||
vars:
|
||||
pg_cluster: pg-meta
|
||||
pg_users:
|
||||
- { name: dify ,password: your-pg-password ,pgbouncer: true ,roles: [ dbrole_admin ] ,superuser: true ,comment: dify superuser }
|
||||
pg_databases:
|
||||
- { name: dify ,owner: dify ,revokeconn: true ,comment: dify main database }
|
||||
pg_hba_rules:
|
||||
- { user: dify ,db: all ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow dify access from local docker network' }
|
||||
- { user: dbuser_view , db: all ,addr: infra ,auth: pwd ,title: 'allow grafana dashboard access cmdb from infra nodes' }
|
||||
|
||||
infra: { hosts: { 10.10.10.10: { infra_seq: 1 } } }
|
||||
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
|
||||
minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }
|
||||
```
|
||||
|
||||
|
||||
------
|
||||
|
||||
## Expose Dify Web Service
|
||||
|
||||
Change `infra_portal` in `pigsty.yml`, with the new `dify` line:
|
||||
|
||||
```yaml
|
||||
infra_portal: # infra services exposed via portal
|
||||
home : { domain: i.pigsty } # default domain name
|
||||
|
||||
dify : { domain: dify.pigsty ,endpoint: "10.10.10.10:8001", websocket: true }
|
||||
```
|
||||
|
||||
Then expose dify web service via Pigsty's Nginx server:
|
||||
|
||||
```bash
|
||||
./infra.yml -t nginx
|
||||
```
|
||||
|
||||
Don't forget to add `dify.pigsty` to your DNS or local `/etc/hosts` / `C:\Windows\System32\drivers\etc\hosts` to access via domain name.
|
||||
|
||||
If you are using a public domain, consider using [Certbot](https://pigsty.io/docs/infra/admin/cert) to get a free SSL certificate.
|
||||
|
||||
```bash
|
||||
certbot --nginx --agree-tos --email your@email.com -n -d dify.your.domain # replace with your email & dify domain
|
||||
```
|
||||
|
||||
Then add `certbot` field to the `dify` entry:
|
||||
|
||||
```yaml
|
||||
infra_portal:
|
||||
#...
|
||||
dify : { domain: dify.pigsty.cc ,endpoint: "10.10.10.10:8001", websocket: true , certbot: 'dify.pigsty.cc' }
|
||||
```
|
||||
|
||||
To take over nginx config back to pigsty:
|
||||
|
||||
```bash
|
||||
./infra.yml -t nginx_config # regenerate nginx config align with certbot modification
|
||||
```
|
||||
74
app/electric/.env
Normal file
74
app/electric/.env
Normal file
@ -0,0 +1,74 @@
|
||||
# https://electric-sql.com/docs/api/config
|
||||
|
||||
# A user with REPLICATION privileges is required
|
||||
DATABASE_URL: 'postgresql://replicator:DBUser.Replicator@10.10.10.10:5432/meta?sslmode=require'
|
||||
|
||||
# Port that the HTTP API is exposed on.
|
||||
ELECTRIC_PORT: 8002
|
||||
|
||||
# Postgres connection string. Used to connect to the Postgres database for anything but the replication, will default to the same as DATABASE_URL if not provided.
|
||||
#ELECTRIC_QUERY_DATABASE_URL
|
||||
|
||||
# How many connections Electric opens as a pool for handling shape queries. 20 by default
|
||||
#ELECTRIC_DB_POOL_SIZE: 20
|
||||
|
||||
# Suffix for the logical replication publication and slot name.
|
||||
#ELECTRIC_REPLICATION_STREAM_ID: default
|
||||
|
||||
# When set to true, runs Electric in insecure mode and does not require an ELECTRIC_SECRET. Use with caution.
|
||||
# API requests are unprotected and may risk exposing your database. Good for development environments.
|
||||
ELECTRIC_INSECURE: true
|
||||
|
||||
# Secret for shape requests to the HTTP API. This is required unless ELECTRIC_INSECURE is set to true.
|
||||
# By default, the Electric API is public and authorises all shape requests against this secret.
|
||||
#ELECTRIC_SECRET: your_electric_secret_here
|
||||
|
||||
# A unique identifier for the Electric instance. Defaults to a randomly generated UUID.
|
||||
#ELECTRIC_INSTANCE_ID: Electric.Utils.uuid4()
|
||||
|
||||
#Name of the electric service. Used as a resource identifier and namespace.
|
||||
#ELECTRIC_SERVICE_NAME: electric
|
||||
|
||||
#Expose some unsafe operations that faciliate integration testing. Do not enable this in production.
|
||||
#ELECTRIC_ENABLE_INTEGRATION_TESTING: false
|
||||
|
||||
#ELECTRIC_LISTEN_ON_IPV6: false
|
||||
|
||||
# Limit the maximum size of a shape log response, to ensure they are cached by upstream caches. Defaults to 10MB (10 * 1024 * 1024).
|
||||
#ELECTRIC_SHAPE_CHUNK_BYTES_THRESHOLD: 10485760
|
||||
|
||||
# Where to store shape metadata. Defaults to storing on the filesystem. If provided must be one of MEMORY or FILE.
|
||||
# ELECTRIC_PERSISTENT_STATE: FILE
|
||||
|
||||
# Where to store shape logs. Defaults to storing on the filesystem. If provided must be one of MEMORY or FILE.
|
||||
#ELECTRIC_STORAGE: ./persistent
|
||||
|
||||
# Path to root folder for storing data on the filesystem.
|
||||
#ELECTRIC_STORAGE_DIR: ./persistent
|
||||
|
||||
# Set an OpenTelemetry endpoint URL to enable telemetry.
|
||||
#ELECTRIC_OTLP_ENDPOINT
|
||||
|
||||
# Debug tracing by printing spans to stdout, without batching.
|
||||
#ELECTRIC_OTEL_DEBUG: false
|
||||
|
||||
# Honeycomb.io api key. Specify along with HNY_DATASET to export traces directly to Honeycomb, without the need to run an OpenTelemetry Collector.
|
||||
#ELECTRIC_HNY_API_KEY
|
||||
|
||||
# Name of your Honeycomb Dataset.
|
||||
#ELECTRIC_HNY_DATASET
|
||||
|
||||
# Expose a prometheus reporter for telemetry data on the specified port.
|
||||
ELECTRIC_PROMETHEUS_PORT: 8003
|
||||
|
||||
# Verbosity of Electric's log output. Available levels, in the order of increasing verbosity: debug info warning error
|
||||
# ELECTRIC_LOG_LEVEL: info
|
||||
|
||||
# Enable or disable ANSI coloring of Electric's log output.
|
||||
#ELECTRIC_LOG_COLORS: false
|
||||
|
||||
# Enable OTP SASL reporting at runtime.
|
||||
# ELECTRIC_LOG_OTP_REPORTS false
|
||||
|
||||
# Configure anonymous usage data about the instance being sent to a central checkpoint service. Collected information is anonymised and doesn't contain any information from the replicated data.
|
||||
ELECTRIC_USAGE_REPORTING: false
|
||||
140
app/supabase/.env
Normal file
140
app/supabase/.env
Normal file
@ -0,0 +1,140 @@
|
||||
#==============================================================#
|
||||
# File : .env
|
||||
# Desc : supabase docker configuration entries
|
||||
# Ctime : 2023-09-19
|
||||
# Mtime : 2025-07-01
|
||||
# Path : app/supabase/.env
|
||||
# License : Apache-2.0 @ https://pigsty.io/docs/about/license/
|
||||
# Copyright : 2018-2026 Ruohang Feng / Vonng (rh@vonng.com)
|
||||
#==============================================================#
|
||||
# https://github.com/supabase/supabase/blob/master/docker/.env.example
|
||||
|
||||
############
|
||||
# Secrets
|
||||
# YOU MUST CHANGE THESE BEFORE GOING INTO PRODUCTION
|
||||
############
|
||||
# IMPORTANT: https://supabase.com/docs/guides/self-hosting/docker#securing-your-services
|
||||
|
||||
POSTGRES_PASSWORD=DBUser.Supa # supabase dbsu password (shared by multiple supabase biz users)
|
||||
JWT_SECRET=your-super-secret-jwt-token-with-at-least-32-characters-long
|
||||
ANON_KEY=your-anon-key-here
|
||||
SERVICE_ROLE_KEY=your-service-role-key-here
|
||||
SECRET_KEY_BASE=your-secret-key-base
|
||||
PG_META_CRYPTO_KEY=your-encryption-key-32-chars-min
|
||||
|
||||
DASHBOARD_USERNAME=supabase # change to your own username
|
||||
DASHBOARD_PASSWORD=pigsty # change to your own password
|
||||
|
||||
|
||||
############
|
||||
# Database - You can change these to any PostgreSQL database that has logical replication enabled.
|
||||
############
|
||||
POSTGRES_HOST=10.10.10.10 # change to Pigsty managed PostgreSQL cluster/instance VIP/IP
|
||||
POSTGRES_PORT=5432 # you can use other service port such as 5433, 5436, 6432, etc...
|
||||
POSTGRES_DB=postgres # change to supabase database name, `supa` by default in pigsty
|
||||
POSTGRES_DOMAIN=pg-meta # in case you want to use domain name in database URL
|
||||
|
||||
############
|
||||
# Domain
|
||||
# YOU MUST CHANGE THESE WHEN ACCESS VIA DOMAIN NAME
|
||||
############
|
||||
# replace if you intend to use Studio outside of localhost
|
||||
SUPABASE_PUBLIC_URL=http://supa.pigsty
|
||||
API_EXTERNAL_URL=http://supa.pigsty
|
||||
SITE_URL=http://supa.pigsty
|
||||
|
||||
|
||||
############
|
||||
# API Proxy - Configuration for the Kong Reverse proxy.
|
||||
############
|
||||
KONG_HTTP_PORT=8000
|
||||
KONG_HTTPS_PORT=8443
|
||||
|
||||
|
||||
############
|
||||
# API - Configuration for PostgREST.
|
||||
############
|
||||
PGRST_DB_SCHEMAS=public,storage,graphql_public
|
||||
|
||||
|
||||
############
|
||||
# Auth - Configuration for the GoTrue authentication server.
|
||||
############
|
||||
|
||||
## General
|
||||
ADDITIONAL_REDIRECT_URLS=
|
||||
JWT_EXPIRY=3600
|
||||
DISABLE_SIGNUP=false
|
||||
|
||||
## Mailer Config
|
||||
MAILER_URLPATHS_CONFIRMATION="/auth/v1/verify"
|
||||
MAILER_URLPATHS_INVITE="/auth/v1/verify"
|
||||
MAILER_URLPATHS_RECOVERY="/auth/v1/verify"
|
||||
MAILER_URLPATHS_EMAIL_CHANGE="/auth/v1/verify"
|
||||
|
||||
## Email auth
|
||||
ENABLE_EMAIL_SIGNUP=true
|
||||
ENABLE_EMAIL_AUTOCONFIRM=true
|
||||
|
||||
SMTP_ADMIN_EMAIL=admin@example.com
|
||||
SMTP_HOST=supabase-mail
|
||||
SMTP_PORT=2500
|
||||
SMTP_USER=fake_mail_user
|
||||
SMTP_PASS=fake_mail_password
|
||||
SMTP_SENDER_NAME=fake_sender
|
||||
ENABLE_ANONYMOUS_USERS=false
|
||||
|
||||
## Phone auth
|
||||
ENABLE_PHONE_SIGNUP=true
|
||||
ENABLE_PHONE_AUTOCONFIRM=true
|
||||
|
||||
|
||||
############
|
||||
# Studio - Configuration for the Dashboard
|
||||
############
|
||||
|
||||
STUDIO_PORT=3000
|
||||
STUDIO_DEFAULT_PROJECT=Pigsty
|
||||
STUDIO_DEFAULT_ORGANIZATION=Pigsty
|
||||
|
||||
# Enable webp support
|
||||
IMGPROXY_ENABLE_WEBP_DETECTION=true
|
||||
|
||||
# Add your OpenAI API key to enable SQL Editor Assistant
|
||||
OPENAI_API_KEY=
|
||||
|
||||
############
|
||||
# Storage - Use external s3 or minio
|
||||
############
|
||||
S3_BUCKET=supa
|
||||
S3_ENDPOINT=https://sss.pigsty:9000
|
||||
S3_ACCESS_KEY=supabase
|
||||
S3_SECRET_KEY=S3User.Supabase
|
||||
S3_FORCE_PATH_STYLE=true
|
||||
S3_PROTOCOL=https
|
||||
S3_REGION=stub
|
||||
MINIO_DOMAIN_IP=10.10.10.10
|
||||
|
||||
############
|
||||
# Realtime - Configuration for Realtime
|
||||
############
|
||||
SECRET_KEY_BASE=your-secret-key-base
|
||||
|
||||
############
|
||||
# Functions - Configuration for Functions
|
||||
############
|
||||
# NOTE: VERIFY_JWT applies to all functions. Per-function VERIFY_JWT is not supported yet.
|
||||
FUNCTIONS_VERIFY_JWT=false
|
||||
|
||||
############
|
||||
# Logs - Configuration for Analytics
|
||||
# Please refer to https://supabase.com/docs/reference/self-hosting-analytics/introduction
|
||||
############
|
||||
|
||||
# use 32~64 character long random string for each key, the keys must be different
|
||||
LOGFLARE_PUBLIC_ACCESS_TOKEN=your-logflare-public-token-here
|
||||
LOGFLARE_PRIVATE_ACCESS_TOKEN=your-logflare-private-token-here
|
||||
LOGFLARE_LOG_LEVEL=error
|
||||
|
||||
# Docker socket location - this value will differ depending on your OS
|
||||
DOCKER_SOCKET_LOCATION=/var/run/docker.sock
|
||||
43
app/supabase/client.html
Normal file
43
app/supabase/client.html
Normal file
@ -0,0 +1,43 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<title>Supabase Demo</title>
|
||||
<script src="https://unpkg.com/@supabase/supabase-js@2"></script>
|
||||
</head>
|
||||
<body>
|
||||
<h1>Supabase: the Hello World Demo</h1>
|
||||
<h3>Javascript Snippet Demo</h3>
|
||||
<code>
|
||||
<p>const supabaseUrl = 'http://supa.pigsty';</p>
|
||||
<p>const supabaseKey = 'your-anon-key-here';</p>
|
||||
<p>const client = supabase.createClient(supabaseUrl, supabaseKey);</p>
|
||||
</code>
|
||||
<h3>Create sample table in supabase console</h3>
|
||||
<code><p>create table countries (id int8 primary key, name text); insert into countries (id, name) values (1, 'USA'); -- do this in supabase console</p><br></code>
|
||||
|
||||
<h3>Async Fetch Results</h3>
|
||||
<div id="data"></div>
|
||||
<script>
|
||||
const supabaseUrl = 'http://supa.pigsty';
|
||||
const supabaseKey = 'your-anon-key-here';
|
||||
|
||||
const sb = supabase.createClient(supabaseUrl, supabaseKey);
|
||||
async function fetchData() {
|
||||
try {
|
||||
const { data, error } = await sb.from('countries').select();
|
||||
if (error) {
|
||||
console.error('Error:', error);
|
||||
document.getElementById('data').textContent = 'Error fetching data';
|
||||
} else {
|
||||
document.getElementById('data').textContent = JSON.stringify(data, null, 2);
|
||||
}
|
||||
} catch (err) {
|
||||
console.error('Unexpected error:', err);
|
||||
document.getElementById('data').textContent = 'Unexpected error occurred';
|
||||
}
|
||||
}
|
||||
fetchData();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
115
conf/app/electric.yml
Normal file
115
conf/app/electric.yml
Normal file
@ -0,0 +1,115 @@
|
||||
---
|
||||
#==============================================================#
|
||||
# File : electric.yml
|
||||
# Desc : pigsty config for running 1-node electric app
|
||||
# Ctime : 2025-03-29
|
||||
# Mtime : 2025-12-12
|
||||
# Docs : https://pigsty.io/docs/app/odoo
|
||||
# License : Apache-2.0 @ https://pigsty.io/docs/about/license/
|
||||
# Copyright : 2018-2026 Ruohang Feng / Vonng (rh@vonng.com)
|
||||
#==============================================================#
|
||||
|
||||
# tutorial: https://pigsty.io/docs/app/electric
|
||||
# quick start: https://electric-sql.com/docs/quickstart
|
||||
# how to use this template:
|
||||
#
|
||||
# curl -fsSL https://repo.pigsty.io/get | bash; cd ~/pigsty
|
||||
# ./bootstrap # prepare local repo & ansible
|
||||
# ./configure -c app/electric # use this dify config template
|
||||
# vi pigsty.yml # IMPORTANT: CHANGE CREDENTIALS!!
|
||||
# ./deploy.yml # install pigsty & pgsql & minio
|
||||
# ./docker.yml # install docker & docker-compose
|
||||
# ./app.yml # install dify with docker-compose
|
||||
|
||||
all:
|
||||
children:
|
||||
# infra cluster for proxy, monitor, alert, etc..
|
||||
infra:
|
||||
hosts: { 10.10.10.10: { infra_seq: 1 } }
|
||||
vars:
|
||||
|
||||
app: electric
|
||||
apps: # define all applications
|
||||
electric: # app name, should have corresponding ~/pigsty/app/electric folder
|
||||
conf: # override /opt/electric/.env config file : https://electric-sql.com/docs/api/config
|
||||
DATABASE_URL: 'postgresql://electric:DBUser.Electric@10.10.10.10:5432/electric?sslmode=require'
|
||||
ELECTRIC_PORT: 8002
|
||||
ELECTRIC_PROMETHEUS_PORT: 8003
|
||||
ELECTRIC_INSECURE: true
|
||||
#ELECTRIC_SECRET: your_electric_secret_here
|
||||
|
||||
# etcd cluster for ha postgres
|
||||
etcd: { hosts: { 10.10.10.10: { etcd_seq: 1 } }, vars: { etcd_cluster: etcd } }
|
||||
|
||||
# minio cluster, s3 compatible object storage
|
||||
#minio: { hosts: { 10.10.10.10: { minio_seq: 1 } }, vars: { minio_cluster: minio } }
|
||||
|
||||
# postgres example cluster: pg-meta
|
||||
pg-meta:
|
||||
hosts: { 10.10.10.10: { pg_seq: 1, pg_role: primary } }
|
||||
vars:
|
||||
pg_cluster: pg-meta
|
||||
pg_users:
|
||||
- {name: electric ,password: DBUser.Electric ,pgbouncer: true , replication: true ,roles: [dbrole_admin] ,comment: electric main user }
|
||||
pg_databases: [{ name: electric , owner: electric }]
|
||||
pg_hba_rules:
|
||||
- { user: electric , db: replication ,addr: infra ,auth: ssl ,title: 'allow electric intranet/docker ssl access' }
|
||||
|
||||
#==============================================================#
|
||||
# Global Parameters
|
||||
#==============================================================#
|
||||
vars:
|
||||
|
||||
#----------------------------------#
|
||||
# Meta Data
|
||||
#----------------------------------#
|
||||
version: v4.0.0 # pigsty version string
|
||||
admin_ip: 10.10.10.10 # admin node ip address
|
||||
region: default # upstream mirror region: default|china|europe
|
||||
node_tune: oltp # node tuning specs: oltp,olap,tiny,crit
|
||||
pg_conf: oltp.yml # pgsql tuning specs: {oltp,olap,tiny,crit}.yml
|
||||
|
||||
docker_enabled: true # enable docker on app group
|
||||
#docker_registry_mirrors: ["https://docker.1panel.live","https://docker.1ms.run","https://docker.xuanyuan.me","https://registry-1.docker.io"]
|
||||
|
||||
proxy_env: # global proxy env when downloading packages
|
||||
no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn"
|
||||
# http_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
|
||||
# https_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
|
||||
# all_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
|
||||
infra_portal: # domain names and upstream servers
|
||||
home : { domain: i.pigsty }
|
||||
electric:
|
||||
domain: elec.pigsty
|
||||
endpoint: "${admin_ip}:8002"
|
||||
websocket: true # apply free ssl cert with certbot: make cert
|
||||
certbot: odoo.pigsty # <----- replace with your own domain name!
|
||||
|
||||
#----------------------------------#
|
||||
# Safe Guard
|
||||
#----------------------------------#
|
||||
# you can enable these flags after bootstrap, to prevent purging running etcd / pgsql instances
|
||||
etcd_safeguard: false # prevent purging running etcd instance?
|
||||
pg_safeguard: false # prevent purging running postgres instance? false by default
|
||||
|
||||
#----------------------------------#
|
||||
# Repo, Node, Packages
|
||||
#----------------------------------#
|
||||
repo_enabled: false
|
||||
node_repo_modules: node,infra,pgsql
|
||||
pg_version: 18 # default postgres version
|
||||
#pg_extensions: [ pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
|
||||
|
||||
#----------------------------------------------#
|
||||
# PASSWORD : https://pigsty.io/docs/setup/security/
|
||||
#----------------------------------------------#
|
||||
grafana_admin_password: pigsty
|
||||
grafana_view_password: DBUser.Viewer
|
||||
pg_admin_password: DBUser.DBA
|
||||
pg_monitor_password: DBUser.Monitor
|
||||
pg_replication_password: DBUser.Replicator
|
||||
patroni_password: Patroni.API
|
||||
haproxy_admin_password: pigsty
|
||||
minio_secret_key: S3User.MinIO
|
||||
etcd_root_password: Etcd.Root
|
||||
...
|
||||
305
conf/app/supa.yml
Normal file
305
conf/app/supa.yml
Normal file
@ -0,0 +1,305 @@
|
||||
---
|
||||
#==============================================================#
|
||||
# File : supabase.yml
|
||||
# Desc : Pigsty configuration for self-hosting supabase
|
||||
# Ctime : 2023-09-19
|
||||
# Mtime : 2026-01-20
|
||||
# Docs : https://pigsty.io/docs/conf/supabase
|
||||
# License : Apache-2.0 @ https://pigsty.io/docs/about/license/
|
||||
# Copyright : 2018-2026 Ruohang Feng / Vonng (rh@vonng.com)
|
||||
#==============================================================#
|
||||
|
||||
# supabase is available on el8/el9/u22/u24/d12 with pg15,16,17,18
|
||||
# tutorial: https://pigsty.io/docs/app/supabase
|
||||
# Usage:
|
||||
# curl https://repo.pigsty.io/get | bash # install pigsty
|
||||
# ./configure -c supabase # use this supabase conf template
|
||||
# ./deploy.yml # install pigsty & pgsql & minio
|
||||
# ./docker.yml # install docker & docker compose
|
||||
# ./app.yml # launch supabase with docker compose
|
||||
|
||||
all:
|
||||
children:
|
||||
|
||||
|
||||
#----------------------------------------------#
|
||||
# INFRA : https://pigsty.io/docs/infra
|
||||
#----------------------------------------------#
|
||||
infra:
|
||||
hosts:
|
||||
10.10.10.10: { infra_seq: 1 }
|
||||
vars:
|
||||
repo_enabled: false # disable local repo
|
||||
|
||||
#----------------------------------------------#
|
||||
# ETCD : https://pigsty.io/docs/etcd
|
||||
#----------------------------------------------#
|
||||
etcd:
|
||||
hosts:
|
||||
10.10.10.10: { etcd_seq: 1 }
|
||||
vars:
|
||||
etcd_cluster: etcd
|
||||
etcd_safeguard: false # enable to prevent purging running etcd instance
|
||||
|
||||
#----------------------------------------------#
|
||||
# MINIO : https://pigsty.io/docs/minio
|
||||
#----------------------------------------------#
|
||||
minio:
|
||||
hosts:
|
||||
10.10.10.10: { minio_seq: 1 }
|
||||
vars:
|
||||
minio_cluster: minio
|
||||
minio_users: # list of minio user to be created
|
||||
- { access_key: pgbackrest ,secret_key: S3User.Backup ,policy: pgsql }
|
||||
- { access_key: s3user_meta ,secret_key: S3User.Meta ,policy: meta }
|
||||
- { access_key: s3user_data ,secret_key: S3User.Data ,policy: data }
|
||||
|
||||
#----------------------------------------------#
|
||||
# PostgreSQL cluster for Supabase self-hosting
|
||||
#----------------------------------------------#
|
||||
pg-meta:
|
||||
hosts:
|
||||
10.10.10.10: { pg_seq: 1, pg_role: primary }
|
||||
vars:
|
||||
pg_cluster: pg-meta
|
||||
pg_users:
|
||||
# supabase roles: anon, authenticated, dashboard_user
|
||||
- { name: anon ,login: false }
|
||||
- { name: authenticated ,login: false }
|
||||
- { name: dashboard_user ,login: false ,replication: true ,createdb: true ,createrole: true }
|
||||
- { name: service_role ,login: false ,bypassrls: true }
|
||||
# supabase users: please use the same password
|
||||
- { name: supabase_admin ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: true ,roles: [ dbrole_admin ] ,superuser: true ,replication: true ,createdb: true ,createrole: true ,bypassrls: true }
|
||||
- { name: authenticator ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false ,roles: [ dbrole_admin, authenticated ,anon ,service_role ] }
|
||||
- { name: supabase_auth_admin ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false ,roles: [ dbrole_admin ] ,createrole: true }
|
||||
- { name: supabase_storage_admin ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false ,roles: [ dbrole_admin, authenticated ,anon ,service_role ] ,createrole: true }
|
||||
- { name: supabase_functions_admin ,password: 'DBUser.Supa' ,pgbouncer: true ,inherit: false ,roles: [ dbrole_admin ] ,createrole: true }
|
||||
- { name: supabase_replication_admin ,password: 'DBUser.Supa' ,replication: true ,roles: [ dbrole_admin ]}
|
||||
- { name: supabase_etl_admin ,password: 'DBUser.Supa' ,replication: true ,roles: [ pg_read_all_data, dbrole_readonly ]}
|
||||
- { name: supabase_read_only_user ,password: 'DBUser.Supa' ,bypassrls: true ,roles: [ pg_read_all_data, dbrole_readonly ]}
|
||||
pg_databases:
|
||||
- name: postgres
|
||||
baseline: supabase.sql
|
||||
owner: supabase_admin
|
||||
comment: supabase postgres database
|
||||
schemas: [ extensions ,auth ,realtime ,storage ,graphql_public ,supabase_functions ,_analytics ,_realtime ]
|
||||
extensions:
|
||||
- { name: pgcrypto ,schema: extensions } # cryptographic functions
|
||||
- { name: pg_net ,schema: extensions } # async HTTP
|
||||
- { name: pgjwt ,schema: extensions } # json web token API for postgres
|
||||
- { name: uuid-ossp ,schema: extensions } # generate universally unique identifiers (UUIDs)
|
||||
- { name: pgsodium ,schema: extensions } # pgsodium is a modern cryptography library for Postgres.
|
||||
- { name: supabase_vault ,schema: extensions } # Supabase Vault Extension
|
||||
- { name: pg_graphql ,schema: extensions } # pg_graphql: GraphQL support
|
||||
- { name: pg_jsonschema ,schema: extensions } # pg_jsonschema: Validate json schema
|
||||
- { name: wrappers ,schema: extensions } # wrappers: FDW collections
|
||||
- { name: http ,schema: extensions } # http: allows web page retrieval inside the database.
|
||||
- { name: pg_cron ,schema: extensions } # pg_cron: Job scheduler for PostgreSQL
|
||||
- { name: timescaledb ,schema: extensions } # timescaledb: Enables scalable inserts and complex queries for time-series data
|
||||
- { name: pg_tle ,schema: extensions } # pg_tle: Trusted Language Extensions for PostgreSQL
|
||||
- { name: vector ,schema: extensions } # pgvector: the vector similarity search
|
||||
- { name: pgmq ,schema: extensions } # pgmq: A lightweight message queue like AWS SQS and RSMQ
|
||||
- { name: supabase ,owner: supabase_admin ,comment: supabase analytics database ,schemas: [ extensions, _analytics ] }
|
||||
|
||||
# supabase required extensions
|
||||
pg_libs: 'timescaledb, pgsodium, plpgsql, plpgsql_check, pg_cron, pg_net, pg_stat_statements, auto_explain, pg_wait_sampling, pg_tle, plan_filter'
|
||||
pg_extensions: [ pg18-main ,pg18-time ,pg18-gis ,pg18-rag ,pg18-fts ,pg18-olap ,pg18-feat ,pg18-lang ,pg18-type ,pg18-util ,pg18-func ,pg18-admin ,pg18-stat ,pg18-sec ,pg18-fdw ,pg18-sim ,pg18-etl]
|
||||
pg_parameters: { cron.database_name: postgres }
|
||||
pg_hba_rules: # supabase hba rules, require access from docker network
|
||||
- { user: all ,db: postgres ,addr: intra ,auth: pwd ,title: 'allow supabase access from intranet' ,order: 50 }
|
||||
- { user: all ,db: postgres ,addr: 172.17.0.0/16 ,auth: pwd ,title: 'allow access from local docker network' ,order: 50 }
|
||||
pg_crontab:
|
||||
- '00 01 * * * /pg/bin/pg-backup full' # make a full backup every 1am
|
||||
- '* * * * * /pg/bin/supa-kick' # kick supabase _analytics lag per minute: https://github.com/pgsty/pigsty/issues/581
|
||||
|
||||
#----------------------------------------------#
|
||||
# Supabase
|
||||
#----------------------------------------------#
|
||||
# ./docker.yml
|
||||
# ./app.yml
|
||||
|
||||
# the supabase stateless containers (default username & password: supabase/pigsty)
|
||||
supabase:
|
||||
hosts:
|
||||
10.10.10.10: {}
|
||||
vars:
|
||||
docker_enabled: true # enable docker on this group
|
||||
#docker_registry_mirrors: ["https://docker.1panel.live","https://docker.1ms.run","https://docker.xuanyuan.me","https://registry-1.docker.io"]
|
||||
app: supabase # specify app name (supa) to be installed (in the apps)
|
||||
apps: # define all applications
|
||||
supabase: # the definition of supabase app
|
||||
conf: # override /opt/supabase/.env
|
||||
|
||||
# IMPORTANT: CHANGE JWT_SECRET AND REGENERATE CREDENTIAL ACCORDING!!!!!!!!!!!
|
||||
# https://supabase.com/docs/guides/self-hosting/docker#securing-your-services
|
||||
JWT_SECRET: your-super-secret-jwt-token-with-at-least-32-characters-long
|
||||
ANON_KEY: your-anon-key-here
|
||||
SERVICE_ROLE_KEY: your-service-role-key-here
|
||||
PG_META_CRYPTO_KEY: your-encryption-key-32-chars-min
|
||||
|
||||
DASHBOARD_USERNAME: supabase
|
||||
DASHBOARD_PASSWORD: pigsty
|
||||
|
||||
# 32~64 random characters string for logflare
|
||||
LOGFLARE_PUBLIC_ACCESS_TOKEN: your-logflare-public-token-here
|
||||
LOGFLARE_PRIVATE_ACCESS_TOKEN: your-logflare-private-token-here
|
||||
|
||||
# postgres connection string (use the correct ip and port)
|
||||
POSTGRES_HOST: 10.10.10.10 # point to the local postgres node
|
||||
POSTGRES_PORT: 5436 # access via the 'default' service, which always route to the primary postgres
|
||||
POSTGRES_DB: postgres # the supabase underlying database
|
||||
POSTGRES_PASSWORD: DBUser.Supa # password for supabase_admin and multiple supabase users
|
||||
|
||||
# expose supabase via domain name
|
||||
SITE_URL: https://supa.pigsty # <------- Change This to your external domain name
|
||||
API_EXTERNAL_URL: https://supa.pigsty # <------- Otherwise the storage api may not work!
|
||||
SUPABASE_PUBLIC_URL: https://supa.pigsty # <------- DO NOT FORGET TO PUT IT IN infra_portal!
|
||||
|
||||
# if using s3/minio as file storage
|
||||
S3_BUCKET: data
|
||||
S3_ENDPOINT: https://sss.pigsty:9000
|
||||
S3_ACCESS_KEY: s3user_data
|
||||
S3_SECRET_KEY: S3User.Data
|
||||
S3_FORCE_PATH_STYLE: true
|
||||
S3_PROTOCOL: https
|
||||
S3_REGION: stub
|
||||
MINIO_DOMAIN_IP: 10.10.10.10 # sss.pigsty domain name will resolve to this ip statically
|
||||
|
||||
# if using SMTP (optional)
|
||||
#SMTP_ADMIN_EMAIL: admin@example.com
|
||||
#SMTP_HOST: supabase-mail
|
||||
#SMTP_PORT: 2500
|
||||
#SMTP_USER: fake_mail_user
|
||||
#SMTP_PASS: fake_mail_password
|
||||
#SMTP_SENDER_NAME: fake_sender
|
||||
#ENABLE_ANONYMOUS_USERS: false
|
||||
|
||||
|
||||
#==============================================================#
|
||||
# Global Parameters
|
||||
#==============================================================#
|
||||
vars:
|
||||
|
||||
#----------------------------------------------#
|
||||
# INFRA : https://pigsty.io/docs/infra
|
||||
#----------------------------------------------#
|
||||
version: v4.0.0 # pigsty version string
|
||||
admin_ip: 10.10.10.10 # admin node ip address
|
||||
region: default # upstream mirror region: default|china|europe
|
||||
proxy_env: # global proxy env when downloading packages
|
||||
no_proxy: "localhost,127.0.0.1,10.0.0.0/8,192.168.0.0/16,*.pigsty,*.aliyun.com,mirrors.*,*.myqcloud.com,*.tsinghua.edu.cn"
|
||||
# http_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
|
||||
# https_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
|
||||
# all_proxy: # set your proxy here: e.g http://user:pass@proxy.xxx.com
|
||||
certbot_sign: false # enable certbot to sign https certificate for infra portal
|
||||
certbot_email: your@email.com # replace your email address to receive expiration notice
|
||||
infra_portal: # infra services exposed via portal
|
||||
home : { domain: i.pigsty } # default domain name
|
||||
pgadmin : { domain: adm.pigsty ,endpoint: "${admin_ip}:8885" }
|
||||
bytebase : { domain: ddl.pigsty ,endpoint: "${admin_ip}:8887" }
|
||||
#minio : { domain: m.pigsty ,endpoint: "${admin_ip}:9001" ,scheme: https ,websocket: true }
|
||||
|
||||
# Nginx / Domain / HTTPS : https://pigsty.io/docs/infra/admin/portal
|
||||
supa : # nginx server config for supabase
|
||||
domain: supa.pigsty # REPLACE IT WITH YOUR OWN DOMAIN!
|
||||
endpoint: "10.10.10.10:8000" # supabase service endpoint: IP:PORT
|
||||
websocket: true # add websocket support
|
||||
certbot: supa.pigsty # certbot cert name, apply with `make cert`
|
||||
|
||||
#----------------------------------------------#
|
||||
# NODE : https://pigsty.io/docs/node/param
|
||||
#----------------------------------------------#
|
||||
nodename_overwrite: false # do not overwrite node hostname on single node mode
|
||||
node_tune: oltp # node tuning specs: oltp,olap,tiny,crit
|
||||
node_etc_hosts: # add static domains to all nodes /etc/hosts
|
||||
- 10.10.10.10 i.pigsty sss.pigsty supa.pigsty
|
||||
node_repo_modules: node,pgsql,infra # use pre-made local repo rather than install from upstream
|
||||
node_repo_remove: true # remove existing node repo for node managed by pigsty
|
||||
#node_packages: [openssh-server] # packages to be installed current nodes with latest version
|
||||
#node_timezone: Asia/Hong_Kong # overwrite node timezone
|
||||
|
||||
#----------------------------------------------#
|
||||
# PGSQL : https://pigsty.io/docs/pgsql/param
|
||||
#----------------------------------------------#
|
||||
pg_version: 18 # default postgres version
|
||||
pg_conf: oltp.yml # pgsql tuning specs: {oltp,olap,tiny,crit}.yml
|
||||
pg_safeguard: false # prevent purging running postgres instance?
|
||||
pg_default_schemas: [ monitor, extensions ] # add new schema: exxtensions
|
||||
pg_default_extensions: # default extensions to be created
|
||||
- { name: pg_stat_statements ,schema: monitor }
|
||||
- { name: pgstattuple ,schema: monitor }
|
||||
- { name: pg_buffercache ,schema: monitor }
|
||||
- { name: pageinspect ,schema: monitor }
|
||||
- { name: pg_prewarm ,schema: monitor }
|
||||
- { name: pg_visibility ,schema: monitor }
|
||||
- { name: pg_freespacemap ,schema: monitor }
|
||||
- { name: pg_wait_sampling ,schema: monitor }
|
||||
# move default extensions to `extensions` schema for supabase
|
||||
- { name: postgres_fdw ,schema: extensions }
|
||||
- { name: file_fdw ,schema: extensions }
|
||||
- { name: btree_gist ,schema: extensions }
|
||||
- { name: btree_gin ,schema: extensions }
|
||||
- { name: pg_trgm ,schema: extensions }
|
||||
- { name: intagg ,schema: extensions }
|
||||
- { name: intarray ,schema: extensions }
|
||||
- { name: pg_repack ,schema: extensions }
|
||||
|
||||
#----------------------------------------------#
|
||||
# BACKUP : https://pigsty.io/docs/pgsql/backup
|
||||
#----------------------------------------------#
|
||||
minio_endpoint: https://sss.pigsty:9000 # explicit overwrite minio endpoint with haproxy port
|
||||
pgbackrest_method: minio # pgbackrest repo method: local,minio,[user-defined...]
|
||||
pgbackrest_repo: # pgbackrest repo: https://pgbackrest.org/configuration.html#section-repository
|
||||
local: # default pgbackrest repo with local posix fs
|
||||
path: /pg/backup # local backup directory, `/pg/backup` by default
|
||||
retention_full_type: count # retention full backups by count
|
||||
retention_full: 2 # keep 2, at most 3 full backups when using local fs repo
|
||||
minio: # optional minio repo for pgbackrest
|
||||
type: s3 # minio is s3-compatible, so s3 is used
|
||||
s3_endpoint: sss.pigsty # minio endpoint domain name, `sss.pigsty` by default
|
||||
s3_region: us-east-1 # minio region, us-east-1 by default, useless for minio
|
||||
s3_bucket: pgsql # minio bucket name, `pgsql` by default
|
||||
s3_key: pgbackrest # minio user access key for pgbackrest
|
||||
s3_key_secret: S3User.Backup # minio user secret key for pgbackrest <------------------ HEY, DID YOU CHANGE THIS?
|
||||
s3_uri_style: path # use path style uri for minio rather than host style
|
||||
path: /pgbackrest # minio backup path, default is `/pgbackrest`
|
||||
storage_port: 9000 # minio port, 9000 by default
|
||||
storage_ca_file: /etc/pki/ca.crt # minio ca file path, `/etc/pki/ca.crt` by default
|
||||
block: y # Enable block incremental backup
|
||||
bundle: y # bundle small files into a single file
|
||||
bundle_limit: 20MiB # Limit for file bundles, 20MiB for object storage
|
||||
bundle_size: 128MiB # Target size for file bundles, 128MiB for object storage
|
||||
cipher_type: aes-256-cbc # enable AES encryption for remote backup repo
|
||||
cipher_pass: pgBackRest # AES encryption password, default is 'pgBackRest' <----- HEY, DID YOU CHANGE THIS?
|
||||
retention_full_type: time # retention full backup by time on minio repo
|
||||
retention_full: 14 # keep full backup for the last 14 days
|
||||
s3: # you can use cloud object storage as backup repo
|
||||
type: s3 # Add your object storage credentials here!
|
||||
s3_endpoint: oss-cn-beijing-internal.aliyuncs.com
|
||||
s3_region: oss-cn-beijing
|
||||
s3_bucket: <your_bucket_name>
|
||||
s3_key: <your_access_key>
|
||||
s3_key_secret: <your_secret_key>
|
||||
s3_uri_style: host
|
||||
path: /pgbackrest
|
||||
bundle: y # bundle small files into a single file
|
||||
bundle_limit: 20MiB # Limit for file bundles, 20MiB for object storage
|
||||
bundle_size: 128MiB # Target size for file bundles, 128MiB for object storage
|
||||
cipher_type: aes-256-cbc # enable AES encryption for remote backup repo
|
||||
cipher_pass: pgBackRest # AES encryption password, default is 'pgBackRest'
|
||||
retention_full_type: time # retention full backup by time on minio repo
|
||||
retention_full: 14 # keep full backup for the last 14 days
|
||||
|
||||
#----------------------------------------------#
|
||||
# PASSWORD : https://pigsty.io/docs/setup/security/
|
||||
#----------------------------------------------#
|
||||
grafana_admin_password: pigsty
|
||||
grafana_view_password: DBUser.Viewer
|
||||
pg_admin_password: DBUser.DBA
|
||||
pg_monitor_password: DBUser.Monitor
|
||||
pg_replication_password: DBUser.Replicator
|
||||
patroni_password: Patroni.API
|
||||
haproxy_admin_password: pigsty
|
||||
minio_secret_key: S3User.MinIO
|
||||
etcd_root_password: Etcd.Root
|
||||
...
|
||||
Loading…
Reference in New Issue
Block a user