0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【vultr×Dify】でプライベートなAI環境構築

Posted at

参考記事

今回参考にさせていただいた有益な記事は以下。

前提

  • vultr(ヴァルチャー?)でVPSを契約している。
  • vultrサーバーのSSHの設定を済ませている。

環境

vultr:ubuntu 24.0.0 LTS

Dockerを使えるようにする

sudo apt update

sudo apt install -y docker.io

sudo systemctl start docker

sudo systemctl enable docker

sudo apt install -y curl

sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

sudo chmod +x /usr/local/bin/docker-compose

sudo docker --version

sudo docker-compose --version

Dify構築

mkdir services

Difyのソースコードをローカルにクローンします

git clone https://github.com/langgenius/dify.git

基本的には以下の公式の手順を参考に進めていきます。
ちょっとだけ変えないとうまく動かないという感じ。
https://docs.dify.ai/ja-jp/getting-started/install-self-hosted/docker-compose#difyno

Difyの起動

  1. difyソースコードのdockerディレクトリに移動し、次のコマンドを実行してdifyを起動する
cd service/dify/docker
  1. docker-compose.override.yamlのオーバーライド

dify/dockerディレクトリにdocker-compose.override.yamlを作成する。
内容は以下の通り。

services:
  api:
    environment:
      CONSOLE_WEB_URL: 'http://localhost:8080'
      CONSOLE_API_URL: 'http://vultrのパブリックIP'
      MAIL_TYPE: 'smtp'
      MAIL_DEFAULT_SEND_FROM: 'hoge@gmail.com'
      SMTP_SERVER: 'smtp.gmail.com'
      SMTP_PORT: 587
      SMTP_USERNAME: 'hoge@gmail.com'
      SMTP_PASSWORD: 'hogepass' # Gmailのアプリパスワード
      SMTP_USE_TLS: 'true'
  worker:
    environment:
      CONSOLE_WEB_URL: 'http://localhost:8080'
      CONSOLE_API_URL: 'http://vultrのパブリックIP'
      MAIL_TYPE: 'smtp'
      MAIL_DEFAULT_SEND_FROM: 'hoge@gmail.com'
      SMTP_SERVER: 'smtp.gmail.com'
      SMTP_PORT: 587
      SMTP_USERNAME: 'hoge@gmail.com'
      SMTP_PASSWORD: 'hogepass'
      SMTP_USE_TLS: 'true'
  nginx:
    ports:
      - "8080:80" # Difyを公開するポート
  1. 環境ファイルをコピーする
    dify/api/.env
    dify/web/.env
    dify/docker/.env
    の3つがあるので、それぞれ以下のコマンドでコピーしておく。
    cp .env.example .env

この時dify/dokcer/.envの中身は以下の2点を書き換える。

  • apiのパス
  • database(任意)

apiのパスはvultrのパブリックIPを明示的に記述しておく。

.env
CONSOLE_API_URL=http://vultrのパブリックIP
CONSOLE_WEB_URL=http://vultrのパブリックIP
SERVICE_API_URL=http://vultrのパブリックIP

databaseは任意で使いたいpostgresがあればその情報に書き換える。

.env
DB_USERNAME=mydbuser
DB_PASSWORD=mydbpass
DB_HOST=mydbhost
DB_PORT=5432
DB_DATABASE=mydb

Difyの公式が作ってくれてる図は以下。

Docker内のnginxが吸収してくれていることによって、コンテナ間のネットワークはすべてDocker環境の中に閉じ込められている。
つまり、使う人はローカルでDocker環境を立ち上げるだけでよく、外部からはlocalhost(デフォルトである`80番)だけ意識すればいいような作りになっている。(美しい、かっけぇ...)

なので今回のvultr環境では、
dockerのlocalhost:8080→
vultr(ホスト)の80番→
パブリックのIP(インターネット)といった具合に繋がっている。

上記で述べた「apiのパスはvultrのパブリックIPを明示的に記述しておく」というのもこれによるもの。

  1. Docker コンテナを起動する
docker-compose up -d
  1. 確認する
docker compose ps

Dockerをsudoなしで使えるようにする

sudo usermod -aG docker $USER

newgrp docker

nginxの502エラーが出る場合

以下のコマンドを実行して、それぞれのコンテナのIPを確認する

docker ps -q | xargs -n 1 docker inspect --format '{{ .Name }}: {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}'

dify/docker/nginx/conf.d/default.confを編集して上記コマンドで確認したIPを明示的に指定する。

詳しくは公式のリファレンスに記載がある。
https://docs.dify.ai/ja-jp/learn-more/faq/install-faq

firewallの設定を忘れずに

とりあえずdifyが使える状態になったので、AIに与えた情報が流出するかもとか気にせずに好きに使えます。
自分アプリに連携するなり想像が広がりますね。
あとはvultr側でのfirewallとかの設定を忘れないように気をつけてくださいね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?