dify
2023 年 11 月 10 日 星期五(已编辑)
这篇文章上次修改于 2023 年 11 月 11 日 星期六,可能部分内容已经不适用,如有疑问可询问作者。
GPT
其中包括3个核心服务:api / worker / web,和6个依赖组件:weaviate / db / redis / nginx / ssrf_proxy / sandbox
git clone https://github.com/langgenius/dify
cd docker
docker-compose up
编辑Nginx的ports映射 3100:80
flowchart LR
0["服务"]
1["redis-(5811:6379)"]
2["nginx-(5810:80)"]
3["postgres-(5812:5432)"]
4["web-langgenius/dify-web"]
5["api-后端服务(5813:5001)"]
6["worker"]
0 --> 1
0 --> 2
0 --> 3
0 --> 4
0 --> 5
0 --> 6
服务
langgenius/dify-api:0.4.4
langgenius/dify-web:0.4.4
postgres:15-alpine # 数据库
redis:6-alpine
semitechnologies/weaviate:1.19.0
nginx:latest
nginx:
image: nginx:latest
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf
- ./nginx/proxy.conf:/etc/nginx/proxy.conf
- ./nginx/conf.d:/etc/nginx/conf.d
depends_on:
- api
- web
ports:
- "5810:80"
minio配置
flowchart LR
0["next 13.3.1"]
注意Nginx反向代理
创建一个.env 文件
修改完成后发布到阿里云容器镜像服务
完整配置如下
获取开源仓库Star
同步环境变量配置(重要)
如果.env.example文件已更新,请务必.env相应地修改本地文件。
根据需要检查并修改文件中的配置项,.env以确保它们与您的实际环境相匹配。您可能需要将任何新变量添加.env.example到.env文件中,并更新任何已更改的值。
\
redis:
image: redis:6-alpine
restart: always
volumes:
- ./volumes/redis/data:/data
command: redis-server --requirepass difyai123456
healthcheck:
test: [ "CMD", "redis-cli", "ping" ]
ports:
- "5811:6379"
cd web
yarn
server {
listen 80;
server_name _;
location /console/api {
proxy_pass http://api:5001;
include proxy.conf;
}
location /api {
proxy_pass http://api:5001;
include proxy.conf;
}
location /v1 {
proxy_pass http://api:5001;
include proxy.conf;
}
location / {
proxy_pass http://web:3000;
include proxy.conf;
}
}
# For production release, change this to PRODUCTION
NEXT_PUBLIC_DEPLOY_ENV=DEVELOPMENT
# The deployment edition, SELF_HOSTED or CLOUD
NEXT_PUBLIC_EDITION=SELF_HOSTED
# The base URL of console application, refers to the Console base URL of WEB service if console domain is
# different from api or web app domain.
# example: http://cloud.dify.ai/console/api
NEXT_PUBLIC_API_PREFIX=http://localhost:5813/console/api
# The URL for Web APP, refers to the Web App base URL of WEB service if web app domain is different from
# console or api domain.
# example: http://udify.app/api
NEXT_PUBLIC_PUBLIC_API_PREFIX=http://localhost:5813/api
# SENTRY
NEXT_PUBLIC_SENTRY_DSN=
"allInOne": "npm run build:docker && npm run tag && npm run push",
"build:docker": "docker build --platform linux/amd64 -f Dockerfile -t t/dify-web .",
"tag": "docker tag t/dify-web registry.cn-hangzhou.aliyuncs.com/taoya7/dify-web:latest",
"push": "docker push registry.cn-hangzhou.aliyuncs.com/taoya7/dify-web:latest"
DEFAULTS = {
'DB_USERNAME': 'postgres',
'DB_PASSWORD': '',
'DB_HOST': 'localhost',
'DB_PORT': '5432',
'DB_DATABASE': 'dify',
'REDIS_HOST': 'localhost',
'REDIS_PORT': '6379',
'REDIS_DB': '0',
'REDIS_USE_SSL': 'False',
'OAUTH_REDIRECT_PATH': '/console/api/oauth/authorize',
'OAUTH_REDIRECT_INDEX_PATH': '/',
'CONSOLE_WEB_URL': 'https://cloud.dify.ai',
'CONSOLE_API_URL': 'https://cloud.dify.ai',
'SERVICE_API_URL': 'https://api.dify.ai',
'APP_WEB_URL': 'https://udify.app',
'APP_API_URL': 'https://udify.app',
'STORAGE_TYPE': 'local',
'STORAGE_LOCAL_PATH': 'storage',
'CHECK_UPDATE_URL': 'https://updates.dify.ai',
'DEPLOY_ENV': 'PRODUCTION',
'SQLALCHEMY_POOL_SIZE': 30,
'SQLALCHEMY_POOL_RECYCLE': 3600,
'SQLALCHEMY_ECHO': 'False',
'SENTRY_TRACES_SAMPLE_RATE': 1.0,
'SENTRY_PROFILES_SAMPLE_RATE': 1.0,
'WEAVIATE_GRPC_ENABLED': 'True',
'WEAVIATE_BATCH_SIZE': 100,
'CELERY_BACKEND': 'database',
'LOG_LEVEL': 'INFO',
'HOSTED_OPENAI_QUOTA_LIMIT': 200,
'HOSTED_OPENAI_ENABLED': 'False',
'HOSTED_OPENAI_PAID_ENABLED': 'False',
'HOSTED_OPENAI_PAID_INCREASE_QUOTA': 1,
'HOSTED_AZURE_OPENAI_ENABLED': 'False',
'HOSTED_AZURE_OPENAI_QUOTA_LIMIT': 200,
'HOSTED_ANTHROPIC_QUOTA_LIMIT': 600000,
'HOSTED_ANTHROPIC_ENABLED': 'False',
'HOSTED_ANTHROPIC_PAID_ENABLED': 'False',
'HOSTED_ANTHROPIC_PAID_INCREASE_QUOTA': 1000000,
'HOSTED_ANTHROPIC_PAID_MIN_QUANTITY': 20,
'HOSTED_ANTHROPIC_PAID_MAX_QUANTITY': 100,
'HOSTED_MODERATION_ENABLED': 'False',
'HOSTED_MODERATION_PROVIDERS': '',
'TENANT_DOCUMENT_COUNT': 100,
'CLEAN_DAY_SETTING': 30,
'UPLOAD_FILE_SIZE_LIMIT': 15,
'UPLOAD_FILE_BATCH_LIMIT': 5,
'OUTPUT_MODERATION_BUFFER_SIZE': 300
}
'use client'
import React, { useEffect, useState } from 'react'
import { Github } from '@/app/components/base/icons/src/public/common'
import type { GithubRepo } from '@/models/common'
const getStar = async () => {
const res = await fetch('https://api.github.com/repos/langgenius/dify')
if (!res.ok)
throw new Error('Failed to fetch data')
return res.json()
}
const GithubStar = () => {
const [githubRepo, setGithubRepo] = useState<GithubRepo>({ stargazers_count: 6000 })
const [isFetched, setIsFetched] = useState(false)
useEffect(() => {
(async () => {
try {
if (process.env.NODE_ENV === 'development')
return
await setGithubRepo(await getStar())
setIsFetched(true)
}
catch (e) {
}
})()
}, [])
if (!isFetched)
return null
return (
<a
href='https://github.com/langgenius/dify'
target='_blank'
className='flex items-center leading-[18px] border border-gray-200 rounded-md text-xs text-gray-700 font-semibold overflow-hidden'>
<div className='flex items-center px-2 py-1 bg-gray-100'>
<Github className='mr-1 w-[18px] h-[18px]' />
Star
</div>
<div className='px-2 py-1 bg-white border-l border-gray-200'>{`${githubRepo.stargazers_count}`.replace(/\B(?=(\d{3})+(?!\d))/g, ',')}</div>
</a>
)
}
export default GithubStar
cd dify/docker
docker compose down
git pull origin main
docker compose pull
docker compose up -d