Add offline package builders for new AI tooling
This commit is contained in:
parent
5fbad3f82d
commit
3b1b4c234b
159
.github/workflows/offline-package-autogen-studio.yaml
vendored
Normal file
159
.github/workflows/offline-package-autogen-studio.yaml
vendored
Normal file
@ -0,0 +1,159 @@
|
||||
name: Build Offline AutoGen Studio Installer
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'gitops/scripts/autogen-studio/**'
|
||||
- '.github/workflows/offline-package-autogen-studio.yaml'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: "Release tag to use/sync (e.g., v0.1.0). Leave empty to use offline-autogen-studio-<run_number>"
|
||||
required: false
|
||||
type: string
|
||||
autogen_tag:
|
||||
description: "AutoGen Studio container tag (default: latest)"
|
||||
required: false
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: build-offline-autogen-studio
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build-offline-installer:
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64, arm64]
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
autogen_tag: ${{ steps.resolve.outputs.autogen_tag }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Resolve image tag
|
||||
id: resolve
|
||||
env:
|
||||
INPUT_AUTOGEN_TAG: ${{ github.event.inputs.autogen_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
AUTOGEN_TAG=${INPUT_AUTOGEN_TAG:-latest}
|
||||
echo "autogen_tag=${AUTOGEN_TAG}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Prepare directories
|
||||
run: |
|
||||
set -euo pipefail
|
||||
rm -rf offline-installer
|
||||
mkdir -p offline-installer/{images,scripts}
|
||||
|
||||
- name: Stage compose file and scripts
|
||||
env:
|
||||
AUTOGEN_TAG: ${{ steps.resolve.outputs.autogen_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cp gitops/scripts/autogen-studio/docker-compose.yaml offline-installer/docker-compose.yaml
|
||||
sed -i "s/__AUTOGEN_TAG__/${AUTOGEN_TAG}/g" offline-installer/docker-compose.yaml
|
||||
cp gitops/scripts/autogen-studio/deploy-autogen-studio.sh offline-installer/scripts/
|
||||
chmod +x offline-installer/scripts/deploy-autogen-studio.sh
|
||||
cat <<'README' > offline-installer/README.md
|
||||
# Offline AutoGen Studio Installer
|
||||
|
||||
This archive contains container images and helper assets for deploying AutoGen Studio with Docker Compose.
|
||||
|
||||
## Contents
|
||||
- `docker-compose.yaml`: Reference deployment manifest configured for the packaged images.
|
||||
- `images/`: Pre-pulled container images saved as tar archives.
|
||||
- `scripts/deploy-autogen-studio.sh`: Helper script to load the images and manage the compose stack.
|
||||
|
||||
## Usage
|
||||
1. Extract the archive on a host with Docker/nerdctl available.
|
||||
2. (Optional) Run `IMAGE_LOAD_TOOL=nerdctl ./scripts/deploy-autogen-studio.sh load-images` to import the images with nerdctl.
|
||||
3. Start the stack: `./scripts/deploy-autogen-studio.sh up`.
|
||||
4. Access AutoGen Studio at http://localhost:9090.
|
||||
|
||||
Adjust the compose file as needed before running the helper script.
|
||||
README
|
||||
|
||||
- name: Pull & export container images
|
||||
env:
|
||||
AUTOGEN_TAG: ${{ steps.resolve.outputs.autogen_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
image="autogenstudio/autogen-studio:${AUTOGEN_TAG}"
|
||||
docker pull "$image"
|
||||
safe=$(echo "$image" | tr '/:' '-_')
|
||||
docker save "$image" -o "offline-installer/images/${safe}.tar"
|
||||
|
||||
- name: Package offline installer
|
||||
run: |
|
||||
set -euo pipefail
|
||||
tar -czf offline-package-autogen-studio-${{ matrix.arch }}.tar.gz -C offline-installer .
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: offline-package-autogen-studio-${{ matrix.arch }}
|
||||
path: offline-package-autogen-studio-${{ matrix.arch }}.tar.gz
|
||||
|
||||
test-offline-installer:
|
||||
needs: build-offline-installer
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-autogen-studio-${{ matrix.arch }}
|
||||
path: offline-test
|
||||
|
||||
- name: Verify archive integrity
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cd offline-test
|
||||
tar -tzf offline-package-autogen-studio-${{ matrix.arch }}.tar.gz > /dev/null
|
||||
|
||||
publish-release:
|
||||
needs: test-offline-installer
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
TAG_NAME: ${{ github.event.inputs.tag != '' && github.event.inputs.tag || format('offline-autogen-studio-{0}', github.run_number) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
release_name: Build ${{ env.TAG_NAME }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download amd64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-autogen-studio-amd64
|
||||
path: release-artifacts/amd64
|
||||
|
||||
- name: Download arm64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-autogen-studio-arm64
|
||||
path: release-artifacts/arm64
|
||||
|
||||
- name: Upload offline installers to GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
files: |
|
||||
release-artifacts/amd64/offline-package-autogen-studio-amd64.tar.gz
|
||||
release-artifacts/arm64/offline-package-autogen-studio-arm64.tar.gz
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
192
.github/workflows/offline-package-dify.yaml
vendored
Normal file
192
.github/workflows/offline-package-dify.yaml
vendored
Normal file
@ -0,0 +1,192 @@
|
||||
name: Build Offline Dify Installer
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'gitops/scripts/dify/**'
|
||||
- '.github/workflows/offline-package-dify.yaml'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: "Release tag to use/sync (e.g., v0.1.0). Leave empty to use offline-dify-<run_number>"
|
||||
required: false
|
||||
type: string
|
||||
dify_tag:
|
||||
description: "Dify container tag (default: latest)"
|
||||
required: false
|
||||
type: string
|
||||
postgres_tag:
|
||||
description: "Postgres image tag (default: 15-alpine)"
|
||||
required: false
|
||||
type: string
|
||||
redis_tag:
|
||||
description: "Redis image tag (default: 7-alpine)"
|
||||
required: false
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: build-offline-dify
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build-offline-installer:
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64, arm64]
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
dify_tag: ${{ steps.resolve.outputs.dify_tag }}
|
||||
postgres_tag: ${{ steps.resolve.outputs.postgres_tag }}
|
||||
redis_tag: ${{ steps.resolve.outputs.redis_tag }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Resolve image tags
|
||||
id: resolve
|
||||
env:
|
||||
INPUT_DIFY_TAG: ${{ github.event.inputs.dify_tag }}
|
||||
INPUT_POSTGRES_TAG: ${{ github.event.inputs.postgres_tag }}
|
||||
INPUT_REDIS_TAG: ${{ github.event.inputs.redis_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
DIFY_TAG=${INPUT_DIFY_TAG:-latest}
|
||||
POSTGRES_TAG=${INPUT_POSTGRES_TAG:-15-alpine}
|
||||
REDIS_TAG=${INPUT_REDIS_TAG:-7-alpine}
|
||||
{
|
||||
echo "dify_tag=${DIFY_TAG}"
|
||||
echo "postgres_tag=${POSTGRES_TAG}"
|
||||
echo "redis_tag=${REDIS_TAG}"
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Prepare directories
|
||||
run: |
|
||||
set -euo pipefail
|
||||
rm -rf offline-installer
|
||||
mkdir -p offline-installer/{images,scripts}
|
||||
|
||||
- name: Stage compose file and scripts
|
||||
env:
|
||||
DIFY_TAG: ${{ steps.resolve.outputs.dify_tag }}
|
||||
POSTGRES_TAG: ${{ steps.resolve.outputs.postgres_tag }}
|
||||
REDIS_TAG: ${{ steps.resolve.outputs.redis_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cp gitops/scripts/dify/docker-compose.yaml offline-installer/docker-compose.yaml
|
||||
sed -i "s/__DIFY_TAG__/${DIFY_TAG}/g" offline-installer/docker-compose.yaml
|
||||
sed -i "s/__POSTGRES_TAG__/${POSTGRES_TAG}/g" offline-installer/docker-compose.yaml
|
||||
sed -i "s/__REDIS_TAG__/${REDIS_TAG}/g" offline-installer/docker-compose.yaml
|
||||
cp gitops/scripts/dify/deploy-dify.sh offline-installer/scripts/
|
||||
chmod +x offline-installer/scripts/deploy-dify.sh
|
||||
cat <<'README' > offline-installer/README.md
|
||||
# Offline Dify Installer
|
||||
|
||||
This archive contains container images and helper assets for deploying Dify with Docker Compose.
|
||||
|
||||
## Contents
|
||||
- `docker-compose.yaml`: Reference deployment manifest configured for the packaged images.
|
||||
- `images/`: Pre-pulled container images saved as tar archives.
|
||||
- `scripts/deploy-dify.sh`: Helper script to load the images and manage the compose stack.
|
||||
|
||||
## Usage
|
||||
1. Extract the archive on a host with Docker/nerdctl available.
|
||||
2. (Optional) Run `IMAGE_LOAD_TOOL=nerdctl ./scripts/deploy-dify.sh load-images` to import the images with nerdctl.
|
||||
3. Start the stack: `./scripts/deploy-dify.sh up`.
|
||||
4. Access the Dify web UI at http://localhost:8080.
|
||||
|
||||
Adjust the compose file as needed before running the helper script.
|
||||
README
|
||||
|
||||
- name: Pull & export container images
|
||||
env:
|
||||
DIFY_TAG: ${{ steps.resolve.outputs.dify_tag }}
|
||||
POSTGRES_TAG: ${{ steps.resolve.outputs.postgres_tag }}
|
||||
REDIS_TAG: ${{ steps.resolve.outputs.redis_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
images=(
|
||||
"langgenius/dify-api:${DIFY_TAG}"
|
||||
"langgenius/dify-worker:${DIFY_TAG}"
|
||||
"langgenius/dify-web:${DIFY_TAG}"
|
||||
"langgenius/dify-nginx:${DIFY_TAG}"
|
||||
"postgres:${POSTGRES_TAG}"
|
||||
"redis:${REDIS_TAG}"
|
||||
)
|
||||
for image in "${images[@]}"; do
|
||||
docker pull "$image"
|
||||
safe=$(echo "$image" | tr '/:' '-_')
|
||||
docker save "$image" -o "offline-installer/images/${safe}.tar"
|
||||
done
|
||||
|
||||
- name: Package offline installer
|
||||
run: |
|
||||
set -euo pipefail
|
||||
tar -czf offline-package-dify-${{ matrix.arch }}.tar.gz -C offline-installer .
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: offline-package-dify-${{ matrix.arch }}
|
||||
path: offline-package-dify-${{ matrix.arch }}.tar.gz
|
||||
|
||||
test-offline-installer:
|
||||
needs: build-offline-installer
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-dify-${{ matrix.arch }}
|
||||
path: offline-test
|
||||
|
||||
- name: Verify archive integrity
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cd offline-test
|
||||
tar -tzf offline-package-dify-${{ matrix.arch }}.tar.gz > /dev/null
|
||||
|
||||
publish-release:
|
||||
needs: test-offline-installer
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
TAG_NAME: ${{ github.event.inputs.tag != '' && github.event.inputs.tag || format('offline-dify-{0}', github.run_number) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
release_name: Build ${{ env.TAG_NAME }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download amd64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-dify-amd64
|
||||
path: release-artifacts/amd64
|
||||
|
||||
- name: Download arm64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-dify-arm64
|
||||
path: release-artifacts/arm64
|
||||
|
||||
- name: Upload offline installers to GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
files: |
|
||||
release-artifacts/amd64/offline-package-dify-amd64.tar.gz
|
||||
release-artifacts/arm64/offline-package-dify-arm64.tar.gz
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
159
.github/workflows/offline-package-flowise.yaml
vendored
Normal file
159
.github/workflows/offline-package-flowise.yaml
vendored
Normal file
@ -0,0 +1,159 @@
|
||||
name: Build Offline Flowise Installer
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'gitops/scripts/flowise/**'
|
||||
- '.github/workflows/offline-package-flowise.yaml'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: "Release tag to use/sync (e.g., v0.1.0). Leave empty to use offline-flowise-<run_number>"
|
||||
required: false
|
||||
type: string
|
||||
flowise_tag:
|
||||
description: "Flowise container tag (default: latest)"
|
||||
required: false
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: build-offline-flowise
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build-offline-installer:
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64, arm64]
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
flowise_tag: ${{ steps.resolve.outputs.flowise_tag }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Resolve image tag
|
||||
id: resolve
|
||||
env:
|
||||
INPUT_FLOWISE_TAG: ${{ github.event.inputs.flowise_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
FLOWISE_TAG=${INPUT_FLOWISE_TAG:-latest}
|
||||
echo "flowise_tag=${FLOWISE_TAG}" >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Prepare directories
|
||||
run: |
|
||||
set -euo pipefail
|
||||
rm -rf offline-installer
|
||||
mkdir -p offline-installer/{images,scripts}
|
||||
|
||||
- name: Stage compose file and scripts
|
||||
env:
|
||||
FLOWISE_TAG: ${{ steps.resolve.outputs.flowise_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cp gitops/scripts/flowise/docker-compose.yaml offline-installer/docker-compose.yaml
|
||||
sed -i "s/__FLOWISE_TAG__/${FLOWISE_TAG}/g" offline-installer/docker-compose.yaml
|
||||
cp gitops/scripts/flowise/deploy-flowise.sh offline-installer/scripts/
|
||||
chmod +x offline-installer/scripts/deploy-flowise.sh
|
||||
cat <<'README' > offline-installer/README.md
|
||||
# Offline Flowise Installer
|
||||
|
||||
This archive contains container images and helper assets for deploying Flowise with Docker Compose.
|
||||
|
||||
## Contents
|
||||
- `docker-compose.yaml`: Reference deployment manifest configured for the packaged images.
|
||||
- `images/`: Pre-pulled container images saved as tar archives.
|
||||
- `scripts/deploy-flowise.sh`: Helper script to load the images and manage the compose stack.
|
||||
|
||||
## Usage
|
||||
1. Extract the archive on a host with Docker/nerdctl available.
|
||||
2. (Optional) Run `IMAGE_LOAD_TOOL=nerdctl ./scripts/deploy-flowise.sh load-images` to import the images with nerdctl.
|
||||
3. Start the stack: `./scripts/deploy-flowise.sh up`.
|
||||
4. Access the Flowise UI at http://localhost:3000.
|
||||
|
||||
Adjust the compose file as needed before running the helper script.
|
||||
README
|
||||
|
||||
- name: Pull & export container images
|
||||
env:
|
||||
FLOWISE_TAG: ${{ steps.resolve.outputs.flowise_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
image="flowiseai/flowise:${FLOWISE_TAG}"
|
||||
docker pull "$image"
|
||||
safe=$(echo "$image" | tr '/:' '-_')
|
||||
docker save "$image" -o "offline-installer/images/${safe}.tar"
|
||||
|
||||
- name: Package offline installer
|
||||
run: |
|
||||
set -euo pipefail
|
||||
tar -czf offline-package-flowise-${{ matrix.arch }}.tar.gz -C offline-installer .
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: offline-package-flowise-${{ matrix.arch }}
|
||||
path: offline-package-flowise-${{ matrix.arch }}.tar.gz
|
||||
|
||||
test-offline-installer:
|
||||
needs: build-offline-installer
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-flowise-${{ matrix.arch }}
|
||||
path: offline-test
|
||||
|
||||
- name: Verify archive integrity
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cd offline-test
|
||||
tar -tzf offline-package-flowise-${{ matrix.arch }}.tar.gz > /dev/null
|
||||
|
||||
publish-release:
|
||||
needs: test-offline-installer
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
TAG_NAME: ${{ github.event.inputs.tag != '' && github.event.inputs.tag || format('offline-flowise-{0}', github.run_number) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
release_name: Build ${{ env.TAG_NAME }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download amd64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-flowise-amd64
|
||||
path: release-artifacts/amd64
|
||||
|
||||
- name: Download arm64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-flowise-arm64
|
||||
path: release-artifacts/arm64
|
||||
|
||||
- name: Upload offline installers to GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
files: |
|
||||
release-artifacts/amd64/offline-package-flowise-amd64.tar.gz
|
||||
release-artifacts/arm64/offline-package-flowise-arm64.tar.gz
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
177
.github/workflows/offline-package-n8n.yaml
vendored
Normal file
177
.github/workflows/offline-package-n8n.yaml
vendored
Normal file
@ -0,0 +1,177 @@
|
||||
name: Build Offline n8n Installer
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'gitops/scripts/n8n/**'
|
||||
- '.github/workflows/offline-package-n8n.yaml'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: "Release tag to use/sync (e.g., v0.1.0). Leave empty to use offline-n8n-<run_number>"
|
||||
required: false
|
||||
type: string
|
||||
n8n_tag:
|
||||
description: "n8n container tag (default: latest)"
|
||||
required: false
|
||||
type: string
|
||||
postgres_tag:
|
||||
description: "Postgres image tag (default: 15-alpine)"
|
||||
required: false
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: build-offline-n8n
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build-offline-installer:
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64, arm64]
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
n8n_tag: ${{ steps.resolve.outputs.n8n_tag }}
|
||||
postgres_tag: ${{ steps.resolve.outputs.postgres_tag }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Resolve image tags
|
||||
id: resolve
|
||||
env:
|
||||
INPUT_N8N_TAG: ${{ github.event.inputs.n8n_tag }}
|
||||
INPUT_POSTGRES_TAG: ${{ github.event.inputs.postgres_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
N8N_TAG=${INPUT_N8N_TAG:-latest}
|
||||
POSTGRES_TAG=${INPUT_POSTGRES_TAG:-15-alpine}
|
||||
{
|
||||
echo "n8n_tag=${N8N_TAG}"
|
||||
echo "postgres_tag=${POSTGRES_TAG}"
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Prepare directories
|
||||
run: |
|
||||
set -euo pipefail
|
||||
rm -rf offline-installer
|
||||
mkdir -p offline-installer/{images,scripts}
|
||||
|
||||
- name: Stage compose file and scripts
|
||||
env:
|
||||
N8N_TAG: ${{ steps.resolve.outputs.n8n_tag }}
|
||||
POSTGRES_TAG: ${{ steps.resolve.outputs.postgres_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cp gitops/scripts/n8n/docker-compose.yaml offline-installer/docker-compose.yaml
|
||||
sed -i "s/__N8N_TAG__/${N8N_TAG}/g" offline-installer/docker-compose.yaml
|
||||
sed -i "s/__POSTGRES_TAG__/${POSTGRES_TAG}/g" offline-installer/docker-compose.yaml
|
||||
cp gitops/scripts/n8n/deploy-n8n.sh offline-installer/scripts/
|
||||
chmod +x offline-installer/scripts/deploy-n8n.sh
|
||||
cat <<'README' > offline-installer/README.md
|
||||
# Offline n8n Installer
|
||||
|
||||
This archive contains container images and helper assets for deploying n8n with Docker Compose.
|
||||
|
||||
## Contents
|
||||
- `docker-compose.yaml`: Reference deployment manifest configured for the packaged images.
|
||||
- `images/`: Pre-pulled container images saved as tar archives.
|
||||
- `scripts/deploy-n8n.sh`: Helper script to load the images and manage the compose stack.
|
||||
|
||||
## Usage
|
||||
1. Extract the archive on a host with Docker/nerdctl available.
|
||||
2. (Optional) Run `IMAGE_LOAD_TOOL=nerdctl ./scripts/deploy-n8n.sh load-images` to import the images with nerdctl.
|
||||
3. Start the stack: `./scripts/deploy-n8n.sh up`.
|
||||
4. Access the n8n UI at http://localhost:5678.
|
||||
|
||||
Adjust the compose file as needed before running the helper script.
|
||||
README
|
||||
|
||||
- name: Pull & export container images
|
||||
env:
|
||||
N8N_TAG: ${{ steps.resolve.outputs.n8n_tag }}
|
||||
POSTGRES_TAG: ${{ steps.resolve.outputs.postgres_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
images=(
|
||||
"n8nio/n8n:${N8N_TAG}"
|
||||
"postgres:${POSTGRES_TAG}"
|
||||
)
|
||||
for image in "${images[@]}"; do
|
||||
docker pull "$image"
|
||||
safe=$(echo "$image" | tr '/:' '-_')
|
||||
docker save "$image" -o "offline-installer/images/${safe}.tar"
|
||||
done
|
||||
|
||||
- name: Package offline installer
|
||||
run: |
|
||||
set -euo pipefail
|
||||
tar -czf offline-package-n8n-${{ matrix.arch }}.tar.gz -C offline-installer .
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: offline-package-n8n-${{ matrix.arch }}
|
||||
path: offline-package-n8n-${{ matrix.arch }}.tar.gz
|
||||
|
||||
test-offline-installer:
|
||||
needs: build-offline-installer
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-n8n-${{ matrix.arch }}
|
||||
path: offline-test
|
||||
|
||||
- name: Verify archive integrity
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cd offline-test
|
||||
tar -tzf offline-package-n8n-${{ matrix.arch }}.tar.gz > /dev/null
|
||||
|
||||
publish-release:
|
||||
needs: test-offline-installer
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
TAG_NAME: ${{ github.event.inputs.tag != '' && github.event.inputs.tag || format('offline-n8n-{0}', github.run_number) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
release_name: Build ${{ env.TAG_NAME }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download amd64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-n8n-amd64
|
||||
path: release-artifacts/amd64
|
||||
|
||||
- name: Download arm64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-n8n-arm64
|
||||
path: release-artifacts/arm64
|
||||
|
||||
- name: Upload offline installers to GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
files: |
|
||||
release-artifacts/amd64/offline-package-n8n-amd64.tar.gz
|
||||
release-artifacts/arm64/offline-package-n8n-arm64.tar.gz
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
189
.github/workflows/offline-package-ragflow.yaml
vendored
Normal file
189
.github/workflows/offline-package-ragflow.yaml
vendored
Normal file
@ -0,0 +1,189 @@
|
||||
name: Build Offline RAGFlow Installer
|
||||
|
||||
on:
|
||||
push:
|
||||
paths:
|
||||
- 'gitops/scripts/ragflow/**'
|
||||
- '.github/workflows/offline-package-ragflow.yaml'
|
||||
workflow_dispatch:
|
||||
inputs:
|
||||
tag:
|
||||
description: "Release tag to use/sync (e.g., v0.1.0). Leave empty to use offline-ragflow-<run_number>"
|
||||
required: false
|
||||
type: string
|
||||
ragflow_tag:
|
||||
description: "RAGFlow container tag (default: latest)"
|
||||
required: false
|
||||
type: string
|
||||
postgres_tag:
|
||||
description: "Postgres image tag (default: 15-alpine)"
|
||||
required: false
|
||||
type: string
|
||||
redis_tag:
|
||||
description: "Redis image tag (default: 7-alpine)"
|
||||
required: false
|
||||
type: string
|
||||
|
||||
permissions:
|
||||
contents: write
|
||||
|
||||
concurrency:
|
||||
group: build-offline-ragflow
|
||||
cancel-in-progress: false
|
||||
|
||||
jobs:
|
||||
build-offline-installer:
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64, arm64]
|
||||
runs-on: ubuntu-latest
|
||||
outputs:
|
||||
ragflow_tag: ${{ steps.resolve.outputs.ragflow_tag }}
|
||||
postgres_tag: ${{ steps.resolve.outputs.postgres_tag }}
|
||||
redis_tag: ${{ steps.resolve.outputs.redis_tag }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Resolve image tags
|
||||
id: resolve
|
||||
env:
|
||||
INPUT_RAGFLOW_TAG: ${{ github.event.inputs.ragflow_tag }}
|
||||
INPUT_POSTGRES_TAG: ${{ github.event.inputs.postgres_tag }}
|
||||
INPUT_REDIS_TAG: ${{ github.event.inputs.redis_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
RAGFLOW_TAG=${INPUT_RAGFLOW_TAG:-latest}
|
||||
POSTGRES_TAG=${INPUT_POSTGRES_TAG:-15-alpine}
|
||||
REDIS_TAG=${INPUT_REDIS_TAG:-7-alpine}
|
||||
{
|
||||
echo "ragflow_tag=${RAGFLOW_TAG}"
|
||||
echo "postgres_tag=${POSTGRES_TAG}"
|
||||
echo "redis_tag=${REDIS_TAG}"
|
||||
} >> "$GITHUB_OUTPUT"
|
||||
|
||||
- name: Prepare directories
|
||||
run: |
|
||||
set -euo pipefail
|
||||
rm -rf offline-installer
|
||||
mkdir -p offline-installer/{images,scripts}
|
||||
|
||||
- name: Stage compose file and scripts
|
||||
env:
|
||||
RAGFLOW_TAG: ${{ steps.resolve.outputs.ragflow_tag }}
|
||||
POSTGRES_TAG: ${{ steps.resolve.outputs.postgres_tag }}
|
||||
REDIS_TAG: ${{ steps.resolve.outputs.redis_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cp gitops/scripts/ragflow/docker-compose.yaml offline-installer/docker-compose.yaml
|
||||
sed -i "s/__RAGFLOW_TAG__/${RAGFLOW_TAG}/g" offline-installer/docker-compose.yaml
|
||||
sed -i "s/__POSTGRES_TAG__/${POSTGRES_TAG}/g" offline-installer/docker-compose.yaml
|
||||
sed -i "s/__REDIS_TAG__/${REDIS_TAG}/g" offline-installer/docker-compose.yaml
|
||||
cp gitops/scripts/ragflow/deploy-ragflow.sh offline-installer/scripts/
|
||||
chmod +x offline-installer/scripts/deploy-ragflow.sh
|
||||
cat <<'README' > offline-installer/README.md
|
||||
# Offline RAGFlow Installer
|
||||
|
||||
This archive contains container images and helper assets for deploying RAGFlow with Docker Compose.
|
||||
|
||||
## Contents
|
||||
- `docker-compose.yaml`: Reference deployment manifest configured for the packaged images.
|
||||
- `images/`: Pre-pulled container images saved as tar archives.
|
||||
- `scripts/deploy-ragflow.sh`: Helper script to load the images and manage the compose stack.
|
||||
|
||||
## Usage
|
||||
1. Extract the archive on a host with Docker/nerdctl available.
|
||||
2. (Optional) Run `IMAGE_LOAD_TOOL=nerdctl ./scripts/deploy-ragflow.sh load-images` to import the images with nerdctl.
|
||||
3. Start the stack: `./scripts/deploy-ragflow.sh up`.
|
||||
4. Access the RAGFlow UI at http://localhost:3001.
|
||||
|
||||
Adjust the compose file as needed before running the helper script. Configure external vector stores or storage services as required by your deployment.
|
||||
README
|
||||
|
||||
- name: Pull & export container images
|
||||
env:
|
||||
RAGFLOW_TAG: ${{ steps.resolve.outputs.ragflow_tag }}
|
||||
POSTGRES_TAG: ${{ steps.resolve.outputs.postgres_tag }}
|
||||
REDIS_TAG: ${{ steps.resolve.outputs.redis_tag }}
|
||||
run: |
|
||||
set -euo pipefail
|
||||
images=(
|
||||
"ragflow/ragflow:${RAGFLOW_TAG}"
|
||||
"postgres:${POSTGRES_TAG}"
|
||||
"redis:${REDIS_TAG}"
|
||||
)
|
||||
for image in "${images[@]}"; do
|
||||
docker pull "$image"
|
||||
safe=$(echo "$image" | tr '/:' '-_')
|
||||
docker save "$image" -o "offline-installer/images/${safe}.tar"
|
||||
done
|
||||
|
||||
- name: Package offline installer
|
||||
run: |
|
||||
set -euo pipefail
|
||||
tar -czf offline-package-ragflow-${{ matrix.arch }}.tar.gz -C offline-installer .
|
||||
|
||||
- name: Upload artifact
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: offline-package-ragflow-${{ matrix.arch }}
|
||||
path: offline-package-ragflow-${{ matrix.arch }}.tar.gz
|
||||
|
||||
test-offline-installer:
|
||||
needs: build-offline-installer
|
||||
strategy:
|
||||
matrix:
|
||||
arch: [amd64]
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Download artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-ragflow-${{ matrix.arch }}
|
||||
path: offline-test
|
||||
|
||||
- name: Verify archive integrity
|
||||
run: |
|
||||
set -euo pipefail
|
||||
cd offline-test
|
||||
tar -tzf offline-package-ragflow-${{ matrix.arch }}.tar.gz > /dev/null
|
||||
|
||||
publish-release:
|
||||
needs: test-offline-installer
|
||||
runs-on: ubuntu-latest
|
||||
env:
|
||||
TAG_NAME: ${{ github.event.inputs.tag != '' && github.event.inputs.tag || format('offline-ragflow-{0}', github.run_number) }}
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: Create Release
|
||||
id: create_release
|
||||
uses: actions/create-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
release_name: Build ${{ env.TAG_NAME }}
|
||||
draft: false
|
||||
prerelease: false
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
|
||||
- name: Download amd64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-ragflow-amd64
|
||||
path: release-artifacts/amd64
|
||||
|
||||
- name: Download arm64 artifact
|
||||
uses: actions/download-artifact@v4
|
||||
with:
|
||||
name: offline-package-ragflow-arm64
|
||||
path: release-artifacts/arm64
|
||||
|
||||
- name: Upload offline installers to GitHub Release
|
||||
uses: softprops/action-gh-release@v1
|
||||
with:
|
||||
tag_name: ${{ env.TAG_NAME }}
|
||||
files: |
|
||||
release-artifacts/amd64/offline-package-ragflow-amd64.tar.gz
|
||||
release-artifacts/arm64/offline-package-ragflow-arm64.tar.gz
|
||||
env:
|
||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||
86
gitops/scripts/autogen-studio/deploy-autogen-studio.sh
Executable file
86
gitops/scripts/autogen-studio/deploy-autogen-studio.sh
Executable file
@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
APP_NAME="AutoGen Studio"
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
OFFLINE_ROOT=$(cd "${SCRIPT_DIR}/.." && pwd)
|
||||
COMPOSE_FILE="${OFFLINE_ROOT}/docker-compose.yaml"
|
||||
IMAGES_DIR="${OFFLINE_ROOT}/images"
|
||||
IMAGE_LOAD_TOOL="${IMAGE_LOAD_TOOL:-docker}"
|
||||
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
load_images() {
|
||||
if ! command_exists "${IMAGE_LOAD_TOOL}"; then
|
||||
echo "Error: image loader '${IMAGE_LOAD_TOOL}' not found in PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "${IMAGES_DIR}" ]; then
|
||||
echo "No images directory found at ${IMAGES_DIR}. Skipping image load." >&2
|
||||
return
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
local tarball
|
||||
for tarball in "${IMAGES_DIR}"/*.tar; do
|
||||
echo "Loading container images from ${tarball}"
|
||||
"${IMAGE_LOAD_TOOL}" load -i "${tarball}"
|
||||
done
|
||||
shopt -u nullglob
|
||||
}
|
||||
|
||||
compose() {
|
||||
if command_exists docker && docker compose version >/dev/null 2>&1; then
|
||||
docker compose "$@"
|
||||
elif command_exists docker-compose; then
|
||||
docker-compose "$@"
|
||||
else
|
||||
echo "Error: docker compose plugin or docker-compose binary is required" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<USAGE
|
||||
Usage: $(basename "$0") [command]
|
||||
|
||||
Commands:
|
||||
up Load images (if available) and start ${APP_NAME}
|
||||
down Stop ${APP_NAME}
|
||||
load-images Only load container images from the images/ directory
|
||||
status Show status of the compose application
|
||||
|
||||
Environment variables:
|
||||
IMAGE_LOAD_TOOL Override the container image loader (default: docker)
|
||||
COMPOSE_FILE Override docker compose file path (default: ${COMPOSE_FILE})
|
||||
USAGE
|
||||
}
|
||||
|
||||
cmd=${1:-up}
|
||||
case "${cmd}" in
|
||||
up)
|
||||
load_images
|
||||
compose -f "${COMPOSE_FILE}" up -d
|
||||
;;
|
||||
down)
|
||||
compose -f "${COMPOSE_FILE}" down
|
||||
;;
|
||||
load-images)
|
||||
load_images
|
||||
;;
|
||||
status)
|
||||
compose -f "${COMPOSE_FILE}" ps
|
||||
;;
|
||||
-h|--help|help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "Unknown command: ${cmd}" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
18
gitops/scripts/autogen-studio/docker-compose.yaml
Normal file
18
gitops/scripts/autogen-studio/docker-compose.yaml
Normal file
@ -0,0 +1,18 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
autogen-studio:
|
||||
image: autogenstudio/autogen-studio:__AUTOGEN_TAG__
|
||||
container_name: autogen-studio
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "9090:9090"
|
||||
environment:
|
||||
AUTOGEN_STUDIO_HOST: 0.0.0.0
|
||||
AUTOGEN_STUDIO_PORT: 9090
|
||||
AUTOGEN_STUDIO_LOG_LEVEL: info
|
||||
volumes:
|
||||
- autogen-data:/data
|
||||
|
||||
volumes:
|
||||
autogen-data:
|
||||
86
gitops/scripts/dify/deploy-dify.sh
Executable file
86
gitops/scripts/dify/deploy-dify.sh
Executable file
@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
APP_NAME="Dify"
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
OFFLINE_ROOT=$(cd "${SCRIPT_DIR}/.." && pwd)
|
||||
COMPOSE_FILE="${OFFLINE_ROOT}/docker-compose.yaml"
|
||||
IMAGES_DIR="${OFFLINE_ROOT}/images"
|
||||
IMAGE_LOAD_TOOL="${IMAGE_LOAD_TOOL:-docker}"
|
||||
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
load_images() {
|
||||
if ! command_exists "${IMAGE_LOAD_TOOL}"; then
|
||||
echo "Error: image loader '${IMAGE_LOAD_TOOL}' not found in PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "${IMAGES_DIR}" ]; then
|
||||
echo "No images directory found at ${IMAGES_DIR}. Skipping image load." >&2
|
||||
return
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
local tarball
|
||||
for tarball in "${IMAGES_DIR}"/*.tar; do
|
||||
echo "Loading container images from ${tarball}"
|
||||
"${IMAGE_LOAD_TOOL}" load -i "${tarball}"
|
||||
done
|
||||
shopt -u nullglob
|
||||
}
|
||||
|
||||
compose() {
|
||||
if command_exists docker && docker compose version >/dev/null 2>&1; then
|
||||
docker compose "$@"
|
||||
elif command_exists docker-compose; then
|
||||
docker-compose "$@"
|
||||
else
|
||||
echo "Error: docker compose plugin or docker-compose binary is required" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<USAGE
|
||||
Usage: $(basename "$0") [command]
|
||||
|
||||
Commands:
|
||||
up Load images (if available) and start ${APP_NAME}
|
||||
down Stop ${APP_NAME}
|
||||
load-images Only load container images from the images/ directory
|
||||
status Show status of the compose application
|
||||
|
||||
Environment variables:
|
||||
IMAGE_LOAD_TOOL Override the container image loader (default: docker)
|
||||
COMPOSE_FILE Override docker compose file path (default: ${COMPOSE_FILE})
|
||||
USAGE
|
||||
}
|
||||
|
||||
cmd=${1:-up}
|
||||
case "${cmd}" in
|
||||
up)
|
||||
load_images
|
||||
compose -f "${COMPOSE_FILE}" up -d
|
||||
;;
|
||||
down)
|
||||
compose -f "${COMPOSE_FILE}" down
|
||||
;;
|
||||
load-images)
|
||||
load_images
|
||||
;;
|
||||
status)
|
||||
compose -f "${COMPOSE_FILE}" ps
|
||||
;;
|
||||
-h|--help|help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "Unknown command: ${cmd}" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
72
gitops/scripts/dify/docker-compose.yaml
Normal file
72
gitops/scripts/dify/docker-compose.yaml
Normal file
@ -0,0 +1,72 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:__POSTGRES_TAG__
|
||||
container_name: dify-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: dify
|
||||
POSTGRES_USER: dify
|
||||
POSTGRES_PASSWORD: dify
|
||||
volumes:
|
||||
- dify-postgres:/var/lib/postgresql/data
|
||||
redis:
|
||||
image: redis:__REDIS_TAG__
|
||||
container_name: dify-redis
|
||||
restart: unless-stopped
|
||||
command: ["redis-server", "--appendonly", "yes"]
|
||||
volumes:
|
||||
- dify-redis:/data
|
||||
dify-api:
|
||||
image: langgenius/dify-api:__DIFY_TAG__
|
||||
container_name: dify-api
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- postgres
|
||||
- redis
|
||||
environment:
|
||||
DATABASE_URL: postgresql+psycopg://dify:dify@postgres:5432/dify
|
||||
REDIS_URL: redis://redis:6379/0
|
||||
WEB_URL: http://localhost:8080
|
||||
WORKER_QUEUE_BROKER_URL: redis://redis:6379/1
|
||||
WORKER_QUEUE_BACKEND_URL: redis://redis:6379/2
|
||||
volumes:
|
||||
- dify-storage:/app/storage
|
||||
dify-worker:
|
||||
image: langgenius/dify-worker:__DIFY_TAG__
|
||||
container_name: dify-worker
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- redis
|
||||
- dify-api
|
||||
environment:
|
||||
REDIS_URL: redis://redis:6379/1
|
||||
WORKER_QUEUE_BACKEND_URL: redis://redis:6379/2
|
||||
API_URL: http://dify-api:5001
|
||||
dify-web:
|
||||
image: langgenius/dify-web:__DIFY_TAG__
|
||||
container_name: dify-web
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- dify-api
|
||||
environment:
|
||||
VITE_API_URL: http://dify-nginx
|
||||
VITE_APP_ENV: production
|
||||
dify-nginx:
|
||||
image: langgenius/dify-nginx:__DIFY_TAG__
|
||||
container_name: dify-nginx
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "8080:80"
|
||||
depends_on:
|
||||
- dify-api
|
||||
- dify-web
|
||||
environment:
|
||||
API_HOST: dify-api:5001
|
||||
WEB_HOST: dify-web:3000
|
||||
|
||||
volumes:
|
||||
dify-postgres:
|
||||
dify-redis:
|
||||
dify-storage:
|
||||
86
gitops/scripts/flowise/deploy-flowise.sh
Executable file
86
gitops/scripts/flowise/deploy-flowise.sh
Executable file
@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
APP_NAME="Flowise"
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
OFFLINE_ROOT=$(cd "${SCRIPT_DIR}/.." && pwd)
|
||||
COMPOSE_FILE="${OFFLINE_ROOT}/docker-compose.yaml"
|
||||
IMAGES_DIR="${OFFLINE_ROOT}/images"
|
||||
IMAGE_LOAD_TOOL="${IMAGE_LOAD_TOOL:-docker}"
|
||||
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
load_images() {
|
||||
if ! command_exists "${IMAGE_LOAD_TOOL}"; then
|
||||
echo "Error: image loader '${IMAGE_LOAD_TOOL}' not found in PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "${IMAGES_DIR}" ]; then
|
||||
echo "No images directory found at ${IMAGES_DIR}. Skipping image load." >&2
|
||||
return
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
local tarball
|
||||
for tarball in "${IMAGES_DIR}"/*.tar; do
|
||||
echo "Loading container images from ${tarball}"
|
||||
"${IMAGE_LOAD_TOOL}" load -i "${tarball}"
|
||||
done
|
||||
shopt -u nullglob
|
||||
}
|
||||
|
||||
compose() {
|
||||
if command_exists docker && docker compose version >/dev/null 2>&1; then
|
||||
docker compose "$@"
|
||||
elif command_exists docker-compose; then
|
||||
docker-compose "$@"
|
||||
else
|
||||
echo "Error: docker compose plugin or docker-compose binary is required" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<USAGE
|
||||
Usage: $(basename "$0") [command]
|
||||
|
||||
Commands:
|
||||
up Load images (if available) and start ${APP_NAME}
|
||||
down Stop ${APP_NAME}
|
||||
load-images Only load container images from the images/ directory
|
||||
status Show status of the compose application
|
||||
|
||||
Environment variables:
|
||||
IMAGE_LOAD_TOOL Override the container image loader (default: docker)
|
||||
COMPOSE_FILE Override docker compose file path (default: ${COMPOSE_FILE})
|
||||
USAGE
|
||||
}
|
||||
|
||||
cmd=${1:-up}
|
||||
case "${cmd}" in
|
||||
up)
|
||||
load_images
|
||||
compose -f "${COMPOSE_FILE}" up -d
|
||||
;;
|
||||
down)
|
||||
compose -f "${COMPOSE_FILE}" down
|
||||
;;
|
||||
load-images)
|
||||
load_images
|
||||
;;
|
||||
status)
|
||||
compose -f "${COMPOSE_FILE}" ps
|
||||
;;
|
||||
-h|--help|help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "Unknown command: ${cmd}" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
19
gitops/scripts/flowise/docker-compose.yaml
Normal file
19
gitops/scripts/flowise/docker-compose.yaml
Normal file
@ -0,0 +1,19 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
flowise:
|
||||
image: flowiseai/flowise:__FLOWISE_TAG__
|
||||
container_name: flowise-app
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "3000:3000"
|
||||
environment:
|
||||
PORT: 3000
|
||||
FLOWISE_USERNAME: admin
|
||||
FLOWISE_PASSWORD: changeme
|
||||
DATABASE_PATH: /data/flowise.sqlite
|
||||
volumes:
|
||||
- flowise-data:/data
|
||||
|
||||
volumes:
|
||||
flowise-data:
|
||||
86
gitops/scripts/n8n/deploy-n8n.sh
Executable file
86
gitops/scripts/n8n/deploy-n8n.sh
Executable file
@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
APP_NAME="n8n"
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
OFFLINE_ROOT=$(cd "${SCRIPT_DIR}/.." && pwd)
|
||||
COMPOSE_FILE="${OFFLINE_ROOT}/docker-compose.yaml"
|
||||
IMAGES_DIR="${OFFLINE_ROOT}/images"
|
||||
IMAGE_LOAD_TOOL="${IMAGE_LOAD_TOOL:-docker}"
|
||||
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
load_images() {
|
||||
if ! command_exists "${IMAGE_LOAD_TOOL}"; then
|
||||
echo "Error: image loader '${IMAGE_LOAD_TOOL}' not found in PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "${IMAGES_DIR}" ]; then
|
||||
echo "No images directory found at ${IMAGES_DIR}. Skipping image load." >&2
|
||||
return
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
local tarball
|
||||
for tarball in "${IMAGES_DIR}"/*.tar; do
|
||||
echo "Loading container images from ${tarball}"
|
||||
"${IMAGE_LOAD_TOOL}" load -i "${tarball}"
|
||||
done
|
||||
shopt -u nullglob
|
||||
}
|
||||
|
||||
compose() {
|
||||
if command_exists docker && docker compose version >/dev/null 2>&1; then
|
||||
docker compose "$@"
|
||||
elif command_exists docker-compose; then
|
||||
docker-compose "$@"
|
||||
else
|
||||
echo "Error: docker compose plugin or docker-compose binary is required" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<USAGE
|
||||
Usage: $(basename "$0") [command]
|
||||
|
||||
Commands:
|
||||
up Load images (if available) and start ${APP_NAME}
|
||||
down Stop ${APP_NAME}
|
||||
load-images Only load container images from the images/ directory
|
||||
status Show status of the compose application
|
||||
|
||||
Environment variables:
|
||||
IMAGE_LOAD_TOOL Override the container image loader (default: docker)
|
||||
COMPOSE_FILE Override docker compose file path (default: ${COMPOSE_FILE})
|
||||
USAGE
|
||||
}
|
||||
|
||||
cmd=${1:-up}
|
||||
case "${cmd}" in
|
||||
up)
|
||||
load_images
|
||||
compose -f "${COMPOSE_FILE}" up -d
|
||||
;;
|
||||
down)
|
||||
compose -f "${COMPOSE_FILE}" down
|
||||
;;
|
||||
load-images)
|
||||
load_images
|
||||
;;
|
||||
status)
|
||||
compose -f "${COMPOSE_FILE}" ps
|
||||
;;
|
||||
-h|--help|help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "Unknown command: ${cmd}" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
37
gitops/scripts/n8n/docker-compose.yaml
Normal file
37
gitops/scripts/n8n/docker-compose.yaml
Normal file
@ -0,0 +1,37 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:__POSTGRES_TAG__
|
||||
container_name: n8n-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: n8n
|
||||
POSTGRES_USER: n8n
|
||||
POSTGRES_PASSWORD: n8n
|
||||
volumes:
|
||||
- n8n-postgres:/var/lib/postgresql/data
|
||||
n8n:
|
||||
image: n8nio/n8n:__N8N_TAG__
|
||||
container_name: n8n-app
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- postgres
|
||||
ports:
|
||||
- "5678:5678"
|
||||
environment:
|
||||
DB_TYPE: postgresdb
|
||||
DB_POSTGRESDB_HOST: postgres
|
||||
DB_POSTGRESDB_PORT: 5432
|
||||
DB_POSTGRESDB_DATABASE: n8n
|
||||
DB_POSTGRESDB_USER: n8n
|
||||
DB_POSTGRESDB_PASSWORD: n8n
|
||||
N8N_BASIC_AUTH_ACTIVE: "true"
|
||||
N8N_BASIC_AUTH_USER: admin
|
||||
N8N_BASIC_AUTH_PASSWORD: changeme
|
||||
volumes:
|
||||
- n8n-data:/home/node/.n8n
|
||||
|
||||
volumes:
|
||||
n8n-postgres:
|
||||
n8n-data:
|
||||
86
gitops/scripts/ragflow/deploy-ragflow.sh
Executable file
86
gitops/scripts/ragflow/deploy-ragflow.sh
Executable file
@ -0,0 +1,86 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
APP_NAME="RAGFlow"
|
||||
|
||||
SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
|
||||
OFFLINE_ROOT=$(cd "${SCRIPT_DIR}/.." && pwd)
|
||||
COMPOSE_FILE="${OFFLINE_ROOT}/docker-compose.yaml"
|
||||
IMAGES_DIR="${OFFLINE_ROOT}/images"
|
||||
IMAGE_LOAD_TOOL="${IMAGE_LOAD_TOOL:-docker}"
|
||||
|
||||
command_exists() {
|
||||
command -v "$1" >/dev/null 2>&1
|
||||
}
|
||||
|
||||
load_images() {
|
||||
if ! command_exists "${IMAGE_LOAD_TOOL}"; then
|
||||
echo "Error: image loader '${IMAGE_LOAD_TOOL}' not found in PATH" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [ ! -d "${IMAGES_DIR}" ]; then
|
||||
echo "No images directory found at ${IMAGES_DIR}. Skipping image load." >&2
|
||||
return
|
||||
fi
|
||||
|
||||
shopt -s nullglob
|
||||
local tarball
|
||||
for tarball in "${IMAGES_DIR}"/*.tar; do
|
||||
echo "Loading container images from ${tarball}"
|
||||
"${IMAGE_LOAD_TOOL}" load -i "${tarball}"
|
||||
done
|
||||
shopt -u nullglob
|
||||
}
|
||||
|
||||
compose() {
|
||||
if command_exists docker && docker compose version >/dev/null 2>&1; then
|
||||
docker compose "$@"
|
||||
elif command_exists docker-compose; then
|
||||
docker-compose "$@"
|
||||
else
|
||||
echo "Error: docker compose plugin or docker-compose binary is required" >&2
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
usage() {
|
||||
cat <<USAGE
|
||||
Usage: $(basename "$0") [command]
|
||||
|
||||
Commands:
|
||||
up Load images (if available) and start ${APP_NAME}
|
||||
down Stop ${APP_NAME}
|
||||
load-images Only load container images from the images/ directory
|
||||
status Show status of the compose application
|
||||
|
||||
Environment variables:
|
||||
IMAGE_LOAD_TOOL Override the container image loader (default: docker)
|
||||
COMPOSE_FILE Override docker compose file path (default: ${COMPOSE_FILE})
|
||||
USAGE
|
||||
}
|
||||
|
||||
cmd=${1:-up}
|
||||
case "${cmd}" in
|
||||
up)
|
||||
load_images
|
||||
compose -f "${COMPOSE_FILE}" up -d
|
||||
;;
|
||||
down)
|
||||
compose -f "${COMPOSE_FILE}" down
|
||||
;;
|
||||
load-images)
|
||||
load_images
|
||||
;;
|
||||
status)
|
||||
compose -f "${COMPOSE_FILE}" ps
|
||||
;;
|
||||
-h|--help|help)
|
||||
usage
|
||||
;;
|
||||
*)
|
||||
echo "Unknown command: ${cmd}" >&2
|
||||
usage
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
37
gitops/scripts/ragflow/docker-compose.yaml
Normal file
37
gitops/scripts/ragflow/docker-compose.yaml
Normal file
@ -0,0 +1,37 @@
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
postgres:
|
||||
image: postgres:__POSTGRES_TAG__
|
||||
container_name: ragflow-postgres
|
||||
restart: unless-stopped
|
||||
environment:
|
||||
POSTGRES_DB: ragflow
|
||||
POSTGRES_USER: ragflow
|
||||
POSTGRES_PASSWORD: ragflow
|
||||
volumes:
|
||||
- ragflow-postgres:/var/lib/postgresql/data
|
||||
redis:
|
||||
image: redis:__REDIS_TAG__
|
||||
container_name: ragflow-redis
|
||||
restart: unless-stopped
|
||||
command: ["redis-server", "--appendonly", "yes"]
|
||||
volumes:
|
||||
- ragflow-redis:/data
|
||||
ragflow:
|
||||
image: ragflow/ragflow:__RAGFLOW_TAG__
|
||||
container_name: ragflow-app
|
||||
restart: unless-stopped
|
||||
depends_on:
|
||||
- postgres
|
||||
- redis
|
||||
ports:
|
||||
- "3001:3000"
|
||||
environment:
|
||||
DATABASE_URL: postgresql://ragflow:ragflow@postgres:5432/ragflow
|
||||
REDIS_URL: redis://redis:6379/0
|
||||
SECRET_KEY: changeme
|
||||
|
||||
volumes:
|
||||
ragflow-postgres:
|
||||
ragflow-redis:
|
||||
Loading…
Reference in New Issue
Block a user