当前位置: 首页 > article >正文

保姆级教程:在Ubuntu 23.10虚拟机上,从零部署Dify源码(含PostgreSQL 17与Redis配置)

保姆级教程Ubuntu 23.10虚拟机环境下的Dify全栈部署实战在开发者的日常工作中本地隔离环境的搭建往往是最容易被忽视却又至关重要的环节。想象一下这样的场景你正在为一个重要客户开发基于大语言模型的智能应用突然某个依赖库的更新导致生产环境出现兼容性问题而你的本地开发环境却因为长期未维护早已无法复现线上问题。这种时候一个干净、可控的虚拟机开发环境就显得尤为珍贵。本文将带你从零开始在VMware Workstation Pro 17.6.0和Ubuntu 23.10构建的虚拟环境中完整部署Dify的全栈开发环境。不同于简单的安装指南我们会深入每个组件的配置细节特别关注高版本Ubuntu下的特殊适配问题确保你能够获得一个真正可用的隔离开发环境。1. 环境准备与系统优化1.1 虚拟机基础配置首先确保你的主机满足以下硬件要求CPU支持虚拟化的64位处理器建议4核以上内存至少8GB推荐16GB磁盘空间50GB以上SSD存储安装VMware Workstation Pro 17.6.0后创建新虚拟机时需特别注意# 检查VMware虚拟化支持 egrep -c (vmx|svm) /proc/cpuinfo # 应返回大于0的数字Ubuntu 23.10安装时建议选择最小化安装并勾选OpenSSH server选项。安装完成后立即执行sudo apt update sudo apt upgrade -y sudo apt install open-vm-tools-desktop -y1.2 系统深度清理Ubuntu默认安装了许多开发者不需要的服务和软件包我们可以通过以下步骤进行精简服务清理清单# 禁用不必要的定时服务 sudo systemctl disable apt-daily-upgrade.timer sudo systemctl disable apt-daily.timer sudo systemctl mask geoclue.service # 移除不需要的软件包 sudo apt purge -y thunderbird libreoffice* ubuntu-report whoopsie磁盘空间优化# 清理旧内核和缓存 sudo apt autoremove --purge sudo apt clean sudo journalctl --vacuum-time3d提示执行清理操作前建议使用snap list查看已安装的snap应用保留必要的开发工具即可。2. 核心依赖安装与配置2.1 PostgreSQL 17与pgvector扩展PostgreSQL 17是部署Dify的关键组件我们需要特别注意权限管理和扩展安装安装步骤# 添加官方源 sudo sh -c echo deb https://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main /etc/apt/sources.list.d/pgdg.list wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - sudo apt update # 安装PostgreSQL 17及pgvector扩展 sudo apt install -y postgresql-17 postgresql-17-pgvector关键配置修改# 允许远程连接 sudo nano /etc/postgresql/17/main/postgresql.conf # 修改以下参数 listen_addresses * max_connections 100 # 配置访问权限 sudo nano /etc/postgresql/17/main/pg_hba.conf # 添加以下行 host all all 0.0.0.0/0 scram-sha-256数据库初始化-- 以postgres用户登录 sudo -u postgres psql -- 创建Dify专用用户和数据库 CREATE USER dify WITH PASSWORD dify123 CREATEDB; CREATE DATABASE dify_db OWNER dify; CREATE DATABASE dify_vector OWNER dify; -- 安装pgvector扩展需超级用户权限 \c dify_vector CREATE EXTENSION vector;2.2 Redis配置优化Redis作为Dify的缓存和消息队列需要调整默认配置以获得更好性能安全配置sudo nano /etc/redis/redis.conf # 修改以下参数 bind 0.0.0.0 protected-mode no maxmemory 1gb maxmemory-policy allkeys-lru性能调优# 启用持久化 appendonly yes appendfsync everysec # 重启服务生效 sudo systemctl restart redis-server验证Redis连接redis-cli 127.0.0.1:6379 PING # 应返回 PONG3. 开发工具链配置3.1 Node.js环境搭建Dify的Web前端基于Next.js需要正确配置Node.js环境安装Node.js 20.xcurl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs # 验证安装 node -v npm -v优化npm配置# 禁用不必要的npm行为 npm config set fund false npm config set audit false npm config set update-notifier false # 安装pnpm npm install -g pnpm3.2 Python工具链Dify后端使用Python开发需要配置隔离的Python环境安装Python 3.11sudo apt install -y python3.11 python3.11-venv python3.11-dev sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1配置uv工具python3 -m pip install --user uv export PATH$PATH:~/.local/bin注意Ubuntu 23.10默认可能已安装Python 3.11但仍需确认pip版本与虚拟环境工具是否正常。4. Dify组件部署与联调4.1 源码获取与准备# 克隆所有必要仓库 git clone https://github.com/langgenius/dify git clone https://github.com/langgenius/dify-plugin-daemon git clone https://github.com/langgenius/dify-sandbox # 创建统一工作目录 mkdir -p ~/dify_workspace mv dify dify-plugin-daemon dify-sandbox ~/dify_workspace/4.2 API服务部署环境配置cd ~/dify_workspace/dify/api cp .env.example .env # 生成安全密钥 SECRET_KEY$(openssl rand -hex 32) sed -i s/SECRET_KEY.*/SECRET_KEY$SECRET_KEY/ .env关键环境变量设置# 数据库配置 DB_USERNAMEdify DB_PASSWORDdify123 DB_HOSTlocalhost DB_DATABASEdify_db # Redis配置 REDIS_HOSTlocalhost REDIS_PASSWORD # 向量存储配置 VECTOR_STOREpgvector PGVECTOR_HOSTlocalhost PGVECTOR_PORT5432 PGVECTOR_USERdify PGVECTOR_PASSWORDdify123 PGVECTOR_DATABASEdify_vector启动服务# 安装依赖 uv sync # 数据库迁移 uv run flask db upgrade # 启动API服务开发模式 uv run flask run --host 0.0.0.0 --port5001 --debug # 另开终端启动Celery worker uv run celery -A app.celery worker -P gevent -c 4 --loglevel INFO -Q dataset,generation,mail4.3 Web前端部署cd ~/dify_workspace/dify/web # 安装依赖 pnpm install --frozen-lockfile # 配置环境变量 cp .env.example .env.local nano .env.local关键前端配置NEXT_PUBLIC_API_PREFIXhttp://localhost:5001 NEXT_PUBLIC_PUBLIC_API_PREFIXhttp://localhost:5001启动命令pnpm build pnpm run start --host0.0.0.04.4 插件守护进程与沙箱插件守护进程cd ~/dify_workspace/dify-plugin-daemon # 安装Go依赖 go mod download # 启动服务 go run ./cmd/server/main.go沙箱环境cd ~/dify_workspace/dify-sandbox # 首次运行 ./install.sh bash build/build_amd64.sh # 后续启动 sudo ./main5. 常见问题排查5.1 权限问题处理pgvector扩展安装失败-- 临时授予超级用户权限 ALTER USER dify WITH SUPERUSER; -- 安装扩展后撤销权限 ALTER USER dify WITH NOSUPERUSER;5.2 时间同步问题# 虚拟机与主机时间同步 sudo timedatectl set-ntp true sudo systemctl restart systemd-timesyncd5.3 端口冲突检查# 查看已占用端口 sudo netstat -tulnp | grep -E 5001|5432|63795.4 性能监控# 实时监控系统资源 sudo apt install -y htop htop # 查看PostgreSQL性能 sudo -u postgres pg_top

相关文章:

保姆级教程:在Ubuntu 23.10虚拟机上,从零部署Dify源码(含PostgreSQL 17与Redis配置)

保姆级教程:Ubuntu 23.10虚拟机环境下的Dify全栈部署实战 在开发者的日常工作中,本地隔离环境的搭建往往是最容易被忽视却又至关重要的环节。想象一下这样的场景:你正在为一个重要客户开发基于大语言模型的智能应用,突然某个依赖库…...

基于PLC的霓虹灯控制系统

收藏关注不迷路!! 🌟文末获取源码数据库🌟 感兴趣的可以先收藏起来,还有大家在毕设选题(免费咨询指导选题),项目以及论文编写等相关问题都可以给我留言咨询,希望帮助更多…...

Python-Skill Bridge:企业级EDA自动化解决方案,性能提升5倍的生产就绪工具

Python-Skill Bridge:企业级EDA自动化解决方案,性能提升5倍的生产就绪工具 【免费下载链接】skillbridge A seamless python to Cadence Virtuoso Skill interface 项目地址: https://gitcode.com/gh_mirrors/sk/skillbridge Python-Skill Bridge…...

如何高效使用LeagueAkari:掌握英雄联盟LCU工具集的终极指南

如何高效使用LeagueAkari:掌握英雄联盟LCU工具集的终极指南 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否厌倦了在英雄联盟…...

Mysql的行级锁到底是怎么加的?稚

1. 架构背景与演进动力 1.1 从单体到碎片化:.NET 的开源征程 在.NET Framework 时代,构建系统主要围绕 Windows 操作系统紧密集成,采用传统的封闭式开发模式。然而,随着.NET Core 的推出,微软开启了彻底的开源与跨平台…...

Vue 3生态全家桶:Pinia、Vite、Vue Router最新实践

Vue 3生态全家桶:Pinia、Vite、Vue Router最新实践 随着Vue 3的普及,其生态工具链也迎来了全面升级。Pinia作为新一代状态管理库,Vite凭借极速构建脱颖而出,Vue Router则提供了更灵活的路由方案。本文将深入探讨这些工具的最新实…...

MeteorSeed吞

这个代码的核心功能是:基于输入词的长度动态选择反义词示例,并调用大模型生成反义词,体现了 “动态少样本提示(Dynamic Few-Shot Prompting)” 与 “上下文长度感知的示例选择” 的能力。 from langchain.prompts impo…...

【GD32开发】深入解析GD32F103 TIMER0 PWM死区时间配置与优化

1. PWM死区时间基础概念与GD32特性 PWM死区时间是电机控制和电源转换系统中的关键参数。简单来说,它就是在互补PWM信号切换时插入的一个短暂延迟,防止上下桥臂同时导通造成短路。想象一下十字路口的红绿灯切换时,会设置几秒的全红灯时间避免车…...

基于MAVROS的Jetson Nano与PX4飞控高效通信实践指南

1. 为什么需要MAVROS通信? 在无人机开发中,机载电脑(如Jetson Nano)和飞控(如PX4)的协同工作至关重要。想象一下,Jetson Nano就像是无人机的大脑,负责处理复杂的视觉识别、路径规划等…...

树莓派5从零到一:VSCode远程开发与systemd服务部署实战

1. 树莓派5开箱与基础配置 刚拿到树莓派5时,我建议先检查配件是否齐全。除了主板外,你至少需要准备: 支持5V/5A的Type-C电源(官方推荐)至少16GB的microSD卡(建议U3速度等级)散热片或风扇套件&am…...

5分钟掌握Windows任务栏美化:TranslucentTB终极透明化指南

5分钟掌握Windows任务栏美化:TranslucentTB终极透明化指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB 还在为Windows任务…...

模型轻量化×实时编码×语义理解,SITS2026三大原生能力全解析,企业音视频升级路径已不可逆

第一章:SITS2026分享:AI原生音视频处理 2026奇点智能技术大会(https://ml-summit.org) AI原生音视频处理正从“AI辅助”迈向“AI驱动”的范式跃迁——模型不再仅作为后处理模块嵌入传统管线,而是从采集、编码、传输到渲染的全链路深度耦合。…...

AI原生语音交互已进入临界点:2026奇点大会透露的7项技术拐点与你的团队适配时间表

第一章:AI原生语音交互已进入临界点:2026奇点大会核心洞察 2026奇点智能技术大会(https://ml-summit.org) 在2026奇点大会上,来自DeepMind、Meta AI与中科院自动化所的联合实证表明:端到端语音大模型(如Whisper-XL、…...

AI开发-python-langchain框架(--并行流程 )抠

如果有多个供应商,你也可以使用 [[CC-Switch]] 来可视化管理这些API key,以及claude code 的skills。 # 多平台安装指令 curl -fsSL https://claude.ai/install.sh | bash ## Claude Code 配置 GLM Coding Plan curl -O "https://cdn.bigmodel.cn/i…...

DDD难落地?就让AI干吧! - cleanddd-skills介绍窗

AI训练存储选型的演进路线 第一阶段:单机直连时代 早期的深度学习数据集较小,模型训练通常在单台服务器或单张GPU卡上完成。此时直接将数据存储在训练机器的本地NVMe SSD/HDD上。 其优势在于IO延迟最低,吞吐量极高,也就是“数据离…...

基于File-Based App开发MVP项目员

Issue 概述 先来看看提交这个 Issue 的作者是为什么想到这个点子的,以及他初步的核心设计概念。?? 本 PR 实现了 Apache Gravitino 与 SeaTunnel 的集成,将其作为非关系型连接器的外部元数据服务。通过 Gravitino 的 REST API 自动获取表结构和元数据&…...

一文搞懂 Spring Cloud:从入门到实战的微服务全景指南(建议收藏)妥

一、中间件是啥?咱用“餐厅”打个比方 想象一下,你的FastAPI应用是个高级餐厅。 ?? 顾客(客户端请求)来到门口。- 迎宾(CORS中间件):先看你是不是从允许的街区(域名)来…...

【限时解锁】奇点大会AI原生图像识别白皮书(V2.3.1内部修订版):含19个真实产线故障归因案例与实时修复SOP清单

第一章:2026奇点智能技术大会:AI原生图像识别 2026奇点智能技术大会(https://ml-summit.org) 本届大会首次设立“AI原生图像识别”专项轨道,聚焦模型架构、数据范式与推理机制的三位一体原生重构。区别于传统CV流水线中预处理、特征工程与后…...

如何完整备份QQ空间历史说说:GetQzonehistory的终极解决方案

如何完整备份QQ空间历史说说:GetQzonehistory的终极解决方案 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心那些记录青春点滴的QQ空间说说会随着时间流逝而消失…...

喔去,litellm 竟然被投毒了,赶紧检查你的机器中招了没有倭

一、什么是setuptools? setuptools 是一个用于创建、分发和安装 Python 包的核心库。 它可以帮助你: 定义 Python 包的元数据(如名称、版本、作者等)。 声明包的依赖项,确保你的包能够正确运行。 构建源代码分发包&…...

AI时代的算法思维:大经典排序学习媚

引言 在现代软件开发中,性能始终是衡量应用质量的重要指标之一。无论是企业级应用、云服务还是桌面程序,性能优化都能显著提升用户体验、降低基础设施成本并增强系统的可扩展性。对于使用 C# 开发的应用程序而言,性能优化涉及多个层面&#x…...

CEClient嵌入式CEC协议栈:轻量级HDMI-CEC主控实现

1. CEClient库概述:面向嵌入式系统的HDMI-CEC协议通信实现CEClient是一个专为嵌入式平台设计的轻量级C/C库,用于实现HDMI Consumer Electronics Control(CEC)总线协议的主控端通信能力。该库严格遵循HDMI Specification v1.3a中定…...

手把手教你用百度智能云微调大模型:从数据集准备到模型发布的保姆级避坑指南

手把手教你用百度智能云微调大模型:从数据集准备到模型发布的保姆级避坑指南 第一次尝试在百度智能云上微调大模型时,我踩遍了所有能想到的坑——从数据集格式错误导致反复上传失败,到闲时调度开关引发的莫名报错,甚至因为账户余额…...

《模型思维》系统动力学:从存量流量到商业决策的反馈艺术

1. 系统动力学:商业决策的隐形引擎 第一次接触系统动力学时,我正面临一个典型的产品增长困局:明明增加了市场投放预算,用户增长率却不升反降。当时团队争论不休,有人认为是渠道质量下降,有人指责产品体验变…...

全任务零样本学习-mT5中文-base快速部署:systemd服务配置实现开机自启

全任务零样本学习-mT5中文-base快速部署:systemd服务配置实现开机自启 1. 模型概述与环境准备 全任务零样本学习-mT5中文-base是一个基于mT5架构的文本增强模型,专门针对中文场景进行了深度优化。该模型在原有mT5基础上使用了大量中文数据进行训练&…...

玩客云打造全能家庭服务器:Armbian+CasaOS+Docker+青龙面板+内网穿透一站式部署

1. 玩客云改造前的准备工作 家里闲置的玩客云放着吃灰?不如把它改造成全能家庭服务器!这个不到百元的小盒子,刷上Armbian系统后性能直接起飞,跑Docker、挂青龙面板、做内网穿透样样都行。我去年把家里的三台玩客云都改造了&#x…...

利用国内镜像源加速PyTorch2.0(GPU版)命令行安装全攻略

1. 为什么需要国内镜像源安装PyTorch2.0 GPU版 如果你尝试过直接从PyTorch官网安装GPU版本,大概率会遇到下载速度慢如蜗牛的情况。我去年帮实验室配置深度学习环境时,一个简单的torch包下载了整整3小时还没完成,最后发现是因为默认源服务器在…...

别再只盯着UNet了!用TransFuse在医疗图像分割上实现又快又准(附PyTorch代码)

TransFuse:医疗图像分割的下一代混合架构实战指南 在息肉检测和皮肤病变分析等医疗图像分割任务中,我们常常陷入一个两难困境:选择CNN架构能够保留丰富的局部细节但难以建模全局关系,而纯Transformer模型虽然擅长捕捉长距离依赖却…...

Arduino嵌入式环形队列:静态内存、无锁SPSC队列实现

1. QueueArray 库概述QueueArray 是一个面向 Arduino 平台的轻量级、静态内存分配型环形队列(Circular Buffer)实现库。它并非从零编写的全新队列容器,而是对 Arduino 官方QueueArray基础版本进行工程化增强后的衍生版本。其核心设计目标明确…...

Notepad++ 高效使用技巧|程序员必备的 10 个隐藏功能,提升编码效率 10 倍

一、Notepad:被低估的Windows程序员工具 很多人只把Notepad当普通文本编辑器,其实它是一款功能强大的代码编辑器,完全免费开源,搭配插件和隐藏功能,能媲美重型IDE的核心体验。先给大家附上Notepad官网,获取…...