Dockerize the bashar bot
This commit is contained in:
15
.dockerignore
Normal file
15
.dockerignore
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
.git
|
||||||
|
.gitignore
|
||||||
|
.env
|
||||||
|
.venv
|
||||||
|
__pycache__
|
||||||
|
*.pyc
|
||||||
|
*.pyo
|
||||||
|
*.pyd
|
||||||
|
.Python
|
||||||
|
*.log
|
||||||
|
transcript.log
|
||||||
|
bot.log
|
||||||
|
README.md
|
||||||
|
.vscode
|
||||||
|
.idea
|
||||||
6
.env.example
Normal file
6
.env.example
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
DISCORD_TOKEN=your_discord_token_here
|
||||||
|
WHISPER_MODEL_SIZE=small
|
||||||
|
LOG_LEVEL=INFO
|
||||||
|
TRANSCRIPT_LOG_ENABLED=true
|
||||||
|
HOTWORD_ENABLED=true
|
||||||
|
GOODBOY_USER_ID=94578724413902848
|
||||||
107
DOCKER_DEPLOYMENT.md
Normal file
107
DOCKER_DEPLOYMENT.md
Normal file
@@ -0,0 +1,107 @@
|
|||||||
|
# Docker Deployment Guide
|
||||||
|
|
||||||
|
## Quick Start
|
||||||
|
|
||||||
|
1. **Copy environment file:**
|
||||||
|
```bash
|
||||||
|
cp .env.example .env
|
||||||
|
```
|
||||||
|
|
||||||
|
2. **Edit .env with your Discord token:**
|
||||||
|
```bash
|
||||||
|
# Edit .env and add your DISCORD_TOKEN
|
||||||
|
```
|
||||||
|
|
||||||
|
3. **Build and run with Docker Compose:**
|
||||||
|
```bash
|
||||||
|
docker-compose up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
4. **View logs:**
|
||||||
|
```bash
|
||||||
|
docker-compose logs -f basharbot
|
||||||
|
```
|
||||||
|
|
||||||
|
## Portainer Deployment
|
||||||
|
|
||||||
|
### Method 1: Using Portainer Stacks
|
||||||
|
|
||||||
|
1. Log into Portainer
|
||||||
|
2. Go to **Stacks** → **Add stack**
|
||||||
|
3. Name it `basharbot`
|
||||||
|
4. Choose **Upload** and upload `docker-compose.yml`
|
||||||
|
5. Add environment variables in the **Environment variables** section:
|
||||||
|
- `DISCORD_TOKEN`: Your Discord bot token
|
||||||
|
- `WHISPER_MODEL_SIZE`: small (or tiny/base/medium/large)
|
||||||
|
- `LOG_LEVEL`: INFO
|
||||||
|
6. Click **Deploy the stack**
|
||||||
|
|
||||||
|
### Method 2: Using Git Repository
|
||||||
|
|
||||||
|
1. In Portainer, go to **Stacks** → **Add stack**
|
||||||
|
2. Choose **Repository**
|
||||||
|
3. Enter your Git repository URL
|
||||||
|
4. Set compose path: `docker-compose.yml`
|
||||||
|
5. Add environment variables
|
||||||
|
6. Click **Deploy the stack**
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
All configuration is done via environment variables in `.env`:
|
||||||
|
|
||||||
|
- `DISCORD_TOKEN`: Your Discord bot token (required)
|
||||||
|
- `WHISPER_MODEL_SIZE`: Model size for speech recognition (tiny/small/base/medium/large)
|
||||||
|
- `LOG_LEVEL`: Logging level (DEBUG/INFO/WARNING/ERROR)
|
||||||
|
- `TRANSCRIPT_LOG_ENABLED`: Enable transcript logging (true/false)
|
||||||
|
- `HOTWORD_ENABLED`: Enable hotword detection (true/false)
|
||||||
|
- `GOODBOY_USER_ID`: Special user ID for goodboy audio
|
||||||
|
|
||||||
|
## Volumes
|
||||||
|
|
||||||
|
- `./logs`: Bot and transcript logs
|
||||||
|
- `./data`: Persistent data
|
||||||
|
- `whisper-models`: Cached Whisper AI models
|
||||||
|
|
||||||
|
## Commands
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Start the bot
|
||||||
|
docker-compose up -d
|
||||||
|
|
||||||
|
# Stop the bot
|
||||||
|
docker-compose down
|
||||||
|
|
||||||
|
# View logs
|
||||||
|
docker-compose logs -f
|
||||||
|
|
||||||
|
# Restart the bot
|
||||||
|
docker-compose restart
|
||||||
|
|
||||||
|
# Rebuild after code changes
|
||||||
|
docker-compose up -d --build
|
||||||
|
|
||||||
|
# Remove everything including volumes
|
||||||
|
docker-compose down -v
|
||||||
|
```
|
||||||
|
|
||||||
|
## Troubleshooting
|
||||||
|
|
||||||
|
**Bot won't start:**
|
||||||
|
- Check logs: `docker-compose logs basharbot`
|
||||||
|
- Verify DISCORD_TOKEN is set correctly in .env
|
||||||
|
|
||||||
|
**Audio issues:**
|
||||||
|
- Ensure ffmpeg is installed in container (included in Dockerfile)
|
||||||
|
- Check opus library is available
|
||||||
|
|
||||||
|
**High memory usage:**
|
||||||
|
- Use smaller Whisper model: `WHISPER_MODEL_SIZE=tiny`
|
||||||
|
- Reduce model compute type in stt.py
|
||||||
|
|
||||||
|
## Updates
|
||||||
|
|
||||||
|
To update the bot:
|
||||||
|
```bash
|
||||||
|
git pull
|
||||||
|
docker-compose up -d --build
|
||||||
|
```
|
||||||
31
Dockerfile
Normal file
31
Dockerfile
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
# Use Python 3.11 slim image
|
||||||
|
FROM python:3.11-slim
|
||||||
|
|
||||||
|
# Install system dependencies
|
||||||
|
RUN apt-get update && apt-get install -y \
|
||||||
|
ffmpeg \
|
||||||
|
libopus0 \
|
||||||
|
libopus-dev \
|
||||||
|
espeak \
|
||||||
|
libespeak-dev \
|
||||||
|
&& rm -rf /var/lib/apt/lists/*
|
||||||
|
|
||||||
|
# Set working directory
|
||||||
|
WORKDIR /app
|
||||||
|
|
||||||
|
# Copy requirements first for better caching
|
||||||
|
COPY requirements.txt .
|
||||||
|
|
||||||
|
# Install Python dependencies
|
||||||
|
RUN pip install --no-cache-dir -r requirements.txt
|
||||||
|
|
||||||
|
# Copy application files
|
||||||
|
COPY bot.py .
|
||||||
|
COPY stt.py .
|
||||||
|
COPY goodboy.ogg .
|
||||||
|
|
||||||
|
# Create volume mount points for logs and data
|
||||||
|
VOLUME ["/app/logs", "/app/data"]
|
||||||
|
|
||||||
|
# Run the bot
|
||||||
|
CMD ["python", "-u", "bot.py"]
|
||||||
31
docker-compose.yml
Normal file
31
docker-compose.yml
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
version: '3.8'
|
||||||
|
|
||||||
|
services:
|
||||||
|
basharbot:
|
||||||
|
build: .
|
||||||
|
container_name: basharbot
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- DISCORD_TOKEN=MTAxNDE5NDAxNzM0NjUzMTQxOQ.GY6P0P.jnCq9V4SbeO1HmkNuzWCSM47CnrIsdko_3sCCw
|
||||||
|
- WHISPER_MODEL_SIZE=small
|
||||||
|
- LOG_LEVEL=DEBUG
|
||||||
|
- TRANSCRIPT_LOG_ENABLED=true
|
||||||
|
- HOTWORD_ENABLED=true
|
||||||
|
- GOODBOY_USER_ID=94578724413902848
|
||||||
|
- TRANSCRIPT_LOG_PATH=/app/logs/transcript.log
|
||||||
|
volumes:
|
||||||
|
- ./logs:/app/logs
|
||||||
|
- ./data:/app/data
|
||||||
|
- whisper-models:/root/.cache/huggingface
|
||||||
|
networks:
|
||||||
|
- bot-network
|
||||||
|
labels:
|
||||||
|
- "com.centurylinklabs.watchtower.enable=true"
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
whisper-models:
|
||||||
|
driver: local
|
||||||
|
|
||||||
|
networks:
|
||||||
|
bot-network:
|
||||||
|
driver: bridge
|
||||||
Reference in New Issue
Block a user