All checks were successful
Updates/open-webui-ollama-docker-deploy/pipeline/head This commit looks good
197 lines
6.4 KiB
Markdown
197 lines
6.4 KiB
Markdown
# Ollama and Open-WebUI Docker Setup
|
|
|
|
This repository provides the necessary configuration files to deploy two Docker services, Ollama and Open-WebUI, using Docker Compose and Jenkins for automated management. These services are deployed on the `shark-wrangler` node, making use of NVIDIA GPU acceleration for Ollama.
|
|
|
|
## Prerequisites
|
|
|
|
To get started, ensure you have the following installed and configured:
|
|
|
|
- Docker and Docker Compose
|
|
- NVIDIA GPU drivers (compatible with the Ollama container)
|
|
- Jenkins with access to the `shark-wrangler` node
|
|
|
|
## Services Overview
|
|
|
|
### Ollama
|
|
- **Image**: `ollama/ollama:latest`
|
|
- **Container Name**: `ollama`
|
|
- **Ports**: `11434:11434`
|
|
- **Environment Variables**:
|
|
- `OLLAMA_LLM_LIBRARY=cuda_v12` for GPU acceleration.
|
|
- **Volumes**: Mounts data at `/root/.ollama` to persist Ollama's state.
|
|
- **Networks**: Connected to `shared_net`.
|
|
|
|
### Open-WebUI
|
|
- **Image**: `ghcr.io/open-webui/open-webui:dev`
|
|
- **Container Name**: `open-webui`
|
|
- **Ports**: `3000:8080`
|
|
- **Environment Variables**:
|
|
- **OAuth Configuration**: Enables login and OAuth features.
|
|
- **OpenAI API Key**: Configured to enable integrations.
|
|
- **OLLAMA_BASE_URL**: Points to the running Ollama instance for interoperability.
|
|
- **Volumes**: Mounts data at `/app/backend/data` to persist WebUI state.
|
|
- **Networks**: Connected to `shared_net`.
|
|
|
|
### Docker Compose Configuration
|
|
The Docker Compose configuration deploys the following:
|
|
- `ollama` and `open-webui` services with defined volumes and ports.
|
|
- `shared_net` network for container communication.
|
|
|
|
The relevant section in `docker-compose.yaml`:
|
|
```yaml
|
|
docker-compose.yaml
|
|
services:
|
|
ollama:
|
|
image: ollama/ollama:latest
|
|
deploy:
|
|
resources:
|
|
reservations:
|
|
devices:
|
|
- driver: nvidia
|
|
capabilities: [gpu]
|
|
count: all
|
|
ports:
|
|
- "11434:11434"
|
|
environment:
|
|
- OLLAMA_LLM_LIBRARY=cuda_v12
|
|
volumes:
|
|
- ollama:/root/.ollama
|
|
restart: always
|
|
container_name: ollama
|
|
networks:
|
|
- shared_net
|
|
|
|
open_webui:
|
|
image: ghcr.io/open-webui/open-webui:dev
|
|
ports:
|
|
- "3000:8080"
|
|
volumes:
|
|
- open-webui:/app/backend/data
|
|
restart: always
|
|
container_name: open-webui
|
|
networks:
|
|
- shared_net
|
|
environment:
|
|
- ENV=dev
|
|
- ENABLE_LOGIN_FORM=true
|
|
- ENABLE_OAUTH_SIGNUP=true
|
|
- OAUTH_USERNAME_CLAIM=name
|
|
- OAUTH_MERGE_ACCOUNTS_BY_EMAIL=true
|
|
- OAUTH_PROVIDER_NAME=git.adamoutler.com permissions
|
|
- WEBUI_URL=https://ai.hackedyour.info
|
|
- OPENID_PROVIDER_URL=https://git.adamoutler.com/.well-known/openid-configuration
|
|
- OPENID_REDIRECT_URI=https://ai.hackedyour.info/oauth/oidc/callback
|
|
- OLLAMA_BASE_URL=http://ollama:11434
|
|
- OPENAI_API_KEY=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
|
|
- OAUTH_CLIENT_ID=a7bb86aa-fea4-4c0d-a07f-3e0ca4428159
|
|
- OAUTH_CLIENT_SECRET=gto_v5va4hznsqck4myz33fve7md2tk7nntgpwoskvki6mxiwg3ux6vq
|
|
|
|
volumes:
|
|
ollama:
|
|
open-webui:
|
|
|
|
networks:
|
|
shared_net:
|
|
```
|
|
|
|
## Jenkinsfile for CI/CD
|
|
|
|
The `Jenkinsfile` automates the deployment of Ollama and Open-WebUI services using Docker Compose:
|
|
|
|
### Pipeline Stages
|
|
|
|
1. **Check NVIDIA Driver Version**:
|
|
- Ensures NVIDIA drivers are available and compatible.
|
|
|
|
2. **Check Ollama and Open-WebUI Versions (Before Deploy)**:
|
|
- Retrieves the current version of the Ollama and Open-WebUI containers.
|
|
|
|
3. **Deploy with Docker Compose**:
|
|
- Pulls the latest images and recreates the containers using Docker Compose.
|
|
|
|
4. **Check Ollama and Open-WebUI Versions (After Deploy)**:
|
|
- Ensures that the services are running and updated to the latest version after deployment.
|
|
|
|
The relevant Jenkinsfile snippet:
|
|
```groovy
|
|
pipeline {
|
|
agent {
|
|
node { label 'shark-wrangler' }
|
|
}
|
|
environment {
|
|
DOCKER_HOST = 'unix:///var/run/docker.sock'
|
|
}
|
|
stages {
|
|
stage('Check NVIDIA Driver Version') {
|
|
steps {
|
|
script {
|
|
catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
|
|
sh 'nvidia-smi --query-gpu=driver_version --format=csv,noheader'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
stage('Check Ollama and Open-WebUI Versions (Before Deploy)') {
|
|
steps {
|
|
script {
|
|
catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
|
|
echo 'Checking Ollama version before deploy:'
|
|
sh 'docker exec -i ollama ollama -v || echo "Ollama check failed"'
|
|
|
|
echo 'Checking Open-WebUI version before deploy:'
|
|
sh 'docker exec -i open-webui jq -r .version /app/package.json || echo "Open-WebUI check failed"'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
stage('Deploy with Docker Compose') {
|
|
steps {
|
|
script {
|
|
sh '''
|
|
docker pull ollama/ollama
|
|
docker pull ghcr.io/open-webui/open-webui:main
|
|
docker compose up -d --force-recreate
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
stage('Check Ollama and Open-WebUI Versions (After Deploy)') {
|
|
steps {
|
|
script {
|
|
catchError(buildResult: 'SUCCESS', stageResult: 'UNSTABLE') {
|
|
echo 'Checking Ollama version after deploy:'
|
|
sh 'docker exec -i ollama ollama -v || echo "Ollama check failed"'
|
|
|
|
echo 'Checking Open-WebUI version after deploy:'
|
|
sh 'docker exec -i open-webui jq -r .version /app/package.json || echo "Open-WebUI check failed"'
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
post {
|
|
always {
|
|
echo 'Pipeline finished.'
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
## Usage
|
|
|
|
To deploy the services, simply use Docker Compose:
|
|
|
|
```sh
|
|
docker compose up -d
|
|
```
|
|
|
|
For automated deployments, you can use Jenkins with the provided `Jenkinsfile` to ensure the latest versions are deployed and tested.
|
|
|
|
## Notes
|
|
- Ensure all environment variables are correctly set, particularly the OAuth credentials and OpenAI API key.
|
|
- Update Docker images regularly to maintain security and access new features.
|
|
|
|
## License
|
|
This project is open-source and licensed under the [MIT License](LICENSE).
|
|
|