Dify'ı PAI-EAS üzerinde dağıtmak, altyapı bakımını ortadan kaldıran ve prototipten üretime geçişi hızlandıran, elastik ölçeklendirme özellikli yönetilen bir hizmet sunar.
Çalışma prensibi
PAI-EAS; Dify bileşenlerini çok kapsayıcılı bir ortamda çalıştırarak ve ApsaraDB RDS for PostgreSQL, ApsaraDB for Redis, Alibaba Cloud Elasticsearch ile Object Storage Service (OSS) gibi dış bağımlılıkları bağlayarak eksiksiz bir hizmet oluşturur. Tüm bileşenler bir Virtual Private Cloud (VPC) ağı üzerinden iletişim kurar.
Mimarinin temel bileşenleri şunlardır:
PAI-EAS hizmeti: Temel hesaplama platformu olan PAI-EAS; web arayüzü, API arka ucu, zaman uyumsuz görev çalışanları ve eklenti korumalı alanı dahil olmak üzere tüm Dify hizmet bileşenlerini çok kapsayıcılı bir ortamda çalıştırır. PAI-EAS; hizmet yaşam döngüsünü, kaynak zamanlamasını ve ağ yapılandırmasını yönetir.
ApsaraDB RDS for PostgreSQL: Kullanıcılar, konuşmalar, bilgi tabanları, iş akışları ve eklenti yapılandırmalarına ilişkin verileri depolar. Veritabanının uygulamadan ayrılması veri kalıcılığını ve bağımsızlığını sağlar.
ApsaraDB for Redis: Yüksek performanslı önbellekleme ve mesaj kuyruğu işlevselliği sunar. Sık erişilen verileri önbelleğe almak, oturum durumlarını yönetmek ve Celery Broker aracılığıyla Dify bileşenleri arasında zaman uyumsuz görevleri dağıtmak için kullanılır.
Alibaba Cloud Elasticsearch: Vektör veritabanı ve tam metin arama motoru olarak görev yapar. Getirme artırılmış üretim (RAG) senaryolarında bilgi tabanındaki belgeleri depolar, dizine ekler ve verimli bir şekilde getirir.
Object Storage Service (OSS): Eklenti ve bilgi tabanı dosyaları gibi kalıcı verileri depolar; böylece veriler hizmet güncellemeleri ve yeniden başlatmalardan sonra korunur.
Kullanıcılar, PAI-EAS tarafından sağlanan web hizmeti URL'si aracılığıyla Dify arayüzüne erişir. Tüm istekler ilk olarak Nginx kapsayıcısı tarafından Dify-Web veya Dify-API kapsayıcısına yönlendirilir. API hizmeti, iş mantığını işlerken arka uçtaki ApsaraDB RDS for PostgreSQL, ApsaraDB for Redis ve Alibaba Cloud Elasticsearch ile etkileşime girer. Belge dizine ekleme gibi zaman uyumsuz görevler yürütülmek üzere Redis aracılığıyla worker kapsayıcısına iletilir. Kalıcılık gerektiren tüm dosyalar bağlı OSS yolundan okunur ve buraya yazılır.
Adım 1: Bağımlı kaynakları hazırlama
Dify'ı dağıtmadan önce gerekli dış hizmetleri hazırlayın. Ağ bağlantısı sorunlarını önlemek için bu kaynakların tümünün dağıtacağınız PAI-EAS hizmetiyle aynı bölge ve Virtual Private Cloud (VPC) içinde olduğundan emin olun.
ApsaraDB RDS for PostgreSQL veya Alibaba Cloud Elasticsearch örneğinin VPC'si oluşturulduktan sonra değiştirilemez. Bu nedenle bu örnekleri PAI-EAS hizmetinizle aynı VPC içinde oluşturmanız gerekir.
Bir Virtual Private Cloud (VPC) planlayın. Henüz bir VPC'niz yoksa bir VPC ve vSwitch oluşturun.
-
Bir ApsaraDB RDS for PostgreSQL örneği oluşturun. Örnek oluşturulduktan sonra yüksek ayrıcalıklı bir hesap oluşturun. Bu hesabı kullanarak iki veritabanı oluşturun: biri Dify'ın temel işlev verileri için, diğeri ise eklenti verileri için. Daha fazla bilgi için bkz. Hesaplar ve veritabanları oluşturma.
ÖnemliPostgreSQL 16 kullanmanızı öneririz. Sürüm 18 bir uuidv7 işlevi çakışmasına neden olabilir.
Bir ApsaraDB for Redis örneği oluşturun. PAI-EAS kapsayıcılarının örneğe erişmesine izin vermek için PAI-EAS vSwitch'inin IP adres aralığını Redis izin listesine ekleyin. Bu bilgilere VPC konsolundaki vSwitch ayrıntıları sayfasından ulaşabilirsiniz.
Bir Alibaba Cloud Elasticsearch örneği oluşturun. Bu örnek bilgi tabanı için vektör veritabanı ve tam metin arama motoru olarak görev yapar. Örneğin PAI-EAS hizmetiyle aynı VPC içinde olduğundan emin olun.
Adım 2: Dify hizmetini dağıtma
PAI console adresinde oturum açın. Sayfanın üst kısmından bir bölge seçin. Ardından istediğiniz çalışma alanını seçin ve Enter Elastic Algorithm Service (EAS) seçeneğine tıklayın.
Inference Service sekmesinde Deploy Service seçeneğine tıklayın. Scenario-based Model Deployment bölümünde Dify LLM platform seçeneğine tıklayın.
-
Dağıtım sayfasında aşağıdaki parametreleri yapılandırın.
OSS: Bilgi tabanı dosyaları, eklenti verileri ve diğer verilerin kalıcı olarak depolanması için bir OSS paketi seçin ve bir yol belirtin. Belirtilen yolda dify ve dify_plugin adlı iki klasör otomatik olarak oluşturulur.
-
PostgreSQL configuration:
Host Address: ApsaraDB RDS for PostgreSQL örneğinin dahili IP adresini girin. Bu adresi ApsaraDB RDS for PostgreSQL console üzerindeki örnek için Database Connection sayfasında bulabilirsiniz.
Port: Varsayılan değer 5432'dir. Farklıysa gerçek bağlantı noktasını girin.
Database - core data: Uygulamalar, kullanıcılar, konuşmalar, bilgi tabanları, iş akışları ve model yapılandırmaları gibi temel işlevlerle ilgili verileri kalıcı olarak depolamak için oluşturduğunuz veritabanının adını girin.
Database plugins: Eklentilerin çalışma durumu, yapılandırması ve meta verileriyle ilgili bilgileri kalıcı olarak depolamak için oluşturduğunuz veritabanının adını girin.
Account ve Password: Veritabanlarını oluştururken kullandığınız yüksek ayrıcalıklı hesabı ve parolayı girin.
-
Redis config:
Host: Redis örneğinin dahili IP adresini girin. ApsaraDB for Redis console adresine gidin ve adresi örnek ayrıntıları sayfasındaki bağlantı bilgileri bölümünden alın.
Port: Varsayılan değer 6379'dur. Farklıysa gerçek bağlantı noktasını girin.
Account ve Password: Redis örneği için hesap ve parolayı girin.
-
Elasticsearch configuration:
Host address: Alibaba Cloud Elasticsearch örneğinin dahili IP adresini girin. Alibaba Cloud Elasticsearch console adresine gidin, örnek ayrıntıları sayfasına ilerleyin ve adresi temel bilgiler bölümünden alın.
Port: Varsayılan değer 9200'dür. Farklıysa gerçek bağlantı noktasını girin.
Account ve Password: Alibaba Cloud Elasticsearch örneği için kullanıcı adını (varsayılan: elastic) ve parolayı girin. Parolayı unuttuysanız parolayı sıfırlayabilirsiniz.
Resource Specification: Hizmet için bir PAI-EAS örnek teknik özelliği seçin. Kararlı çalışma için en az 8 CPU ve 16 GB belleğe sahip bir teknik özellik önerilir.
Yapılandırmayı onayladıktan sonra Deploy seçeneğine tıklayın. Hizmet durumu Running durumuna geçtiğinde dağıtım başarılı olmuş demektir.
Adım 3: Hizmet durumunu ve erişimi doğrulama
Hizmet başarıyla dağıtıldıktan sonra durumunu kontrol edebilir ve işlevselliğini doğrulayabilirsiniz.
-
Hizmet Günlüklerini Görüntüleme
Hizmet başlatılamaz veya anormal çalışırsa hizmet ayrıntıları sayfasına gidin. Instance List bölümünde ilgili kapsayıcı bileşenini bulun ve yanındaki Logs düğmesine tıklayın. Hatanın nedenini belirlemek için başlatma ve çalışma zamanı günlüklerini kontrol edin.
-
Dify Web Arayüzüne Erişme
Hizmet ayrıntıları sayfasında Dify başlatma sayfasını açmak için sağ üst köşedeki Web applications seçeneğine tıklayın. Bir yönetici hesabı oluşturduktan sonra uygulamayı kullanmaya başlayabilirsiniz.
-
API'yi Çağırma
Dify uygulaması oluşturulduktan sonra API erişim sayfasında görüntülenen temel URL dahili bir hizmet adresidir. Dify uygulamasında sol gezinme bölmesinde Access API seçeneğine tıklayarak Base URL öğesini görüntüleyin. Dify API'yi genel internetten çağırmak için dahili URL'yi (örneğin
http://******.console.cn-hangzhou.eas.pai-ml.com) PAI-EAS hizmet çağrı bilgilerindeki genel uç noktayla değiştirmeniz gerekir. Hizmetin Invocation Info iletişim kutusunda Shared Gateway sekmesine geçerek Public Endpoint (curl komutunda kullanılan hizmet URL'si), VPC endpoint ve token bilgilerini alın.Uygulama ile API üzerinden etkileşim kurmak için bir API Anahtarı oluşturmanız gerekir. Sol gezinme bölmesinde Access API seçeneğine tıklayın. Ardından sağ üst köşedeki API Keys düğmesine tıklayın. Açılan iletişim kutusunda + Create Key seçeneğine tıklayarak API çağrılarınızda
Authorization: Bearerkimlik doğrulaması için kullanacağınız bir API Anahtarı oluşturun.Aşağıdaki örnek genel bir API çağrısı kullanarak bir sohbet robotu uygulamasına nasıl mesaj gönderileceğini gösterir:
curl -X POST 'http://xxxx.your_aliyun_account_id.cn-hangzhou.pai-eas.aliyuncs.com/v1/chat-messages' \ --header 'Authorization: Bearer app-xxxxxxxxxxxxx' \ --header 'Content-Type: application/json' \ --data-raw '{ "inputs": {}, "query": "Describe the main features of Dify", "response_mode": "blocking", "user": "test-user-001" }'
Adım 4: JSON ile gelişmiş dağıtım
Otomatikleştirilmiş veya özel dağıtımlar için bir JSON yapılandırma dosyası kullanın. PAI-EAS hizmet dağıtım sayfasında JSON Deployment seçeneğine geçin ve aşağıdaki şablonu kullanın. Bu şablon Dify'ın gerektirdiği tüm kapsayıcıları, ortam değişkenlerini, depolama bağlantılarını ve ağ yapılandırmalarını tanımlar.
Dağıtım sırasında JSON şablonundaki yer tutucuları ($ ile başlayan) gerçek değerlerinizle değiştirin. Ayrıntılı parametre açıklamaları için bkz. JSON Dağıtımı.
metadata bölümünde web erişim bağlantı noktasını açmak için
"enable_webservice": trueayarını yapmanız gerekir.storage bölümünde
$oss_pathdeğerini gerçek OSS yoluyla değiştirin; örneğin "oss://your-bucket-name/dify-data/". Bu yol Dify API ve eklentileri tarafından kullanılır. Bu yol altında dify ve dify_plugin adlı iki alt klasör oluşturulur.-
containers bölümünde yer tutucu değişikliği gerektiren temel ortam değişkenleri aşağıda açıklanmıştır. Daha fazla bilgi için bkz. Dify Ortam Değişkenleri.
PostgreSQL veritabanı
db_host: PostgreSQL veritabanı örneğinin uç noktası.
db_port: Varsayılan değer 5432'dir.
api_db: Dify temel işlevler veritabanı. Uygulamalar, kullanıcılar, konuşmalar, bilgi tabanları, iş akışları ve model yapılandırmaları gibi temel işlevlerle ilgili tüm verileri depolar.
plugin_daemon_db: Dify eklenti veritabanı. Eklenti çalışma durumu, yapılandırması ve meta verileriyle ilgili bilgileri depolar.
db_username ve db_password: Her iki veritabanı da aynı kullanıcı adı ve parolayı paylaşır.
Redis
Kullanıcılar AI ile gerçek zamanlı konuşmalar yaptığında Redis farklı hizmet bileşenleri arasında gerçek zamanlı mesajlaşmayı ve iletişimi kolaylaştırır.
redis_host: Redis örneğinin uç noktası.
redis_port: Varsayılan değer 6379'dur.
redis_password: Redis örneğini oluştururken belirlediğiniz parola.
Elasticsearch
Vektör veritabanı ve tam metin arama motoru olarak kullanılır.
elasticsearch_host: Elasticsearch örneğinin uç noktası.
elasticsearch_port: Varsayılan değer 9200'dür.
elasticsearch_username: Varsayılan değer elastic'tir.
elasticsearch_password: Elasticsearch örneğini oluştururken yapılandırdığınız parola. Parolayı unuttuysanız örnek erişim parolasını sıfırlayabilirsiniz.
Güvenlik anahtarları
Dify dahili iletişimi güvence altına almak için birkaç anahtar kullanır. Bunları
openssl rand -base64 42komutuyla oluşturun.secret_key: Oturum çerezlerini güvenli bir şekilde imzalamak ve veritabanındaki hassas bilgileri şifrelemek için kullanılan anahtar.
api_key: Kötü niyetli dış saldırıları önlemek için dahili API erişimi için gereken anahtar.
plugin_daemon_key: Kötü niyetli dış saldırıları önlemek için eklenti daemon'a dahili erişim için gereken anahtar.
SSS
Veritabanı örneğine bağlanılamıyor
[2025-09-13 00:46:28] [/bin/sh]: 2025/09/12 16:46:28 /app/internal/db/pg/pg.go:34
[2025-09-13 00:46:28] [/bin/sh]: [error] failed to initialize database, got error failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
[2025-09-13 00:46:28] [/bin/sh]: 2025/09/12 16:46:28 init.go:95: [PANIC]failed to init dify plugin db: failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
[2025-09-13 00:46:28] [/bin/sh]: panic: [PANIC]failed to init dify plugin db: failed to connect to `host=pgm-xxxxxxxxxx.pg.rds.aliyuncs.com user=dify database=postgres`: dial error (timeout: dial tcp 10.0.0.230:5432: connect: connection timed out)
ApsaraDB RDS for PostgreSQL örneğinin ve PAI-EAS hizmetinin aynı VPC içinde olduğundan emin olun. ApsaraDB RDS for PostgreSQL VPC değiştirmeyi desteklemez. Örneği doğru VPC içinde yeniden oluşturmanız gerekir.
ApsaraDB RDS for PostgreSQL konsolundaki örnek ayrıntıları sayfasında sol gezinme bölmesinde Database Connection seçeneğine tıklayarak örneğin VPC adını ve dahili IP adresini görüntüleyin. Varsayılan bağlantı noktası 5432 şeklindedir.
Redis'e bağlanılamıyor
Bu sorun dify-api kapsayıcısındaki Redis istemcisinin Redis sunucusuna bağlanamaması durumunda oluşur.
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/utils.py", line 188, in wrapper
[2025-09-13 00:28:21] [/bin/sh]: return func(*args, **kwargs)
[2025-09-13 00:28:21] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 1530, in get_connection
[2025-09-13 00:28:21] [/bin/sh]: connection.connect()
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 379, in connect
[2025-09-13 00:28:21] [/bin/sh]: self.connect_check_health(check_health=True)
[2025-09-13 00:28:21] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/redis/connection.py", line 389, in connect_check_health
[2025-09-13 00:28:21] [/bin/sh]: raise TimeoutError("Timeout connecting to server")
[2025-09-13 00:28:21] [/bin/sh]: redis.exceptions.TimeoutError: Timeout connecting to server
[2025-09-13 00:28:22] time="2025-09-12T16:28:22Z" level=info msg="program stopped with status:exit status 1" program=/bin/sh
Olası nedenler:
-
VPC ağı sorunu: Redis örneğinin ve PAI-EAS hizmetinin aynı VPC içinde olduğundan emin olun.
ApsaraDB for Redis örneğinizin Instance Information sayfasında Basic Information bölümündeki Virtual Private Cloud alanını kontrol ederek VPC Kimliğini doğrulayın.
-
İzin listesi ayarı sorunu: Redis örneği için bir izin listesi yapılandırıldığından emin olun. PAI-EAS hizmetinin bulunduğu vSwitch'in IP adres aralığını eklemeniz gerekir. IP adres aralığını vSwitch sayfasında bulabilirsiniz.
Örneğin Allowlist Settings sayfasında vSwitch CIDR bloğunu (örneğin
192.168.32.0/22) bir izin listesi grubuna ekleyin.
Alibaba Cloud Elasticsearch'e bağlanılamıyor
Olası bir neden VPC ağı sorunudur. Alibaba Cloud Elasticsearch örneğinin ve PAI-EAS hizmetinin aynı VPC içinde olduğundan emin olun.
Alibaba Cloud Elasticsearch örneğinin Basic Information sayfasında örneğin VPC Kimliğini almak için Virtual Private Cloud alanını kontrol edin.
dify-api için eksik veritabanı
Dify başlatıldığında iki veritabanına bağlanır: dify-api tarafından gereken core data veritabanı ve dify-plugin tarafından gereken plugin veritabanı.
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/sqlalchemy/engine/default.py", line 625, in connect
[2025-09-13 01:33:20] [/bin/sh]: return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/psycopg2/__init__.py", line 122, in connect
[2025-09-13 01:33:20] [/bin/sh]: conn = _connect(dsn, connection_factory=connection_factory, **kwasync)
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: File "/app/api/.venv/lib/python3.12/site-packages/psycogreen/gevent.py", line 32, in gevent_wait_callback
[2025-09-13 01:33:20] [/bin/sh]: state = conn.poll()
[2025-09-13 01:33:20] [/bin/sh]: ^^^^^^^^^^^
[2025-09-13 01:33:20] [/bin/sh]: sqlalchemy.exc.OperationalError: (psycopg2.OperationalError) FATAL: database "dify_core" does not exist
[2025-09-13 01:33:20] [/bin/sh]:
Bu dağıtım için kullanılan Dify Community Edition 1.7.1 sürümünde plugin veritabanı otomatik olarak oluşturulur ancak core data veritabanı oluşturulmaz. Core data veritabanını manuel olarak oluşturmanız gerekir.
marketplace.dify.ai adresine bağlanılamıyor
Bu sorun PAI-EAS kapsayıcılarının varsayılan olarak genel internet erişimine sahip olmamasından kaynaklanır. Çözüm için bkz. PAI-EAS hizmetinin genel veya dahili kaynaklara erişimini etkinleştirme.
[2025-09-13 00:00:00] [/bin/sh]: 2025-09-12 16:00:00,847.847 WARNING [Dummy-1] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 1: timed out
[2025-09-13 00:00:02] [/bin/sh]: 2025-09-12 16:00:02,046.046 WARNING [Dummy-2] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 1: timed out
[2025-09-13 00:00:06] [/bin/sh]: 2025-09-12 16:00:06,416.416 WARNING [Dummy-1] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.46@8e73008929dbc3934936493d442fab4c34ef016ae817b144b45da278ba76580e failed on attempt 2: timed out
[2025-09-13 00:00:07] [/bin/sh]: 2025-09-12 16:00:07,614.614 WARNING [Dummy-2] [ssrf_proxy.py:81] - Request to URL https://marketplace.dify.ai/api/v1/plugins/download?unique_identifier=langgenius/tongyi:0.0.