diff --git a/DOCKER.md b/DOCKER.md new file mode 100644 index 00000000..49af3c69 --- /dev/null +++ b/DOCKER.md @@ -0,0 +1,225 @@ +# Docker Setup for Swarms (x86_64/amd64) + +This repository includes Docker support for running Swarms on x86_64 (amd64) architecture. + +## Quick Start + +### Option 1: Using Docker Compose (Recommended) + +```bash +# Build and run the container +docker-compose up -d + +# View logs +docker-compose logs -f swarms + +# Stop the container +docker-compose down +``` + +### Option 2: Using Docker Build + +```bash +# Build the image +docker build --platform linux/amd64 -t swarms:latest . + +# Run the container +docker run --platform linux/amd64 -it swarms:latest bash + +# Run with environment variables +docker run --platform linux/amd64 \ + -e OPENAI_API_KEY=your_key_here \ + -e ANTHROPIC_API_KEY=your_key_here \ + -v $(pwd):/app \ + swarms:latest +``` + +### Option 3: Pull from Docker Hub + +```bash +# Pull the pre-built image +docker pull swarmscorp/swarms:latest + +# Note: The pre-built image may need to be updated for amd64 compatibility +# Use the local build method above for guaranteed amd64 support +``` + +## Available Services + +The `docker-compose.yml` includes two services: + +### 1. swarms (Default Service) +- Runs a basic swarms container +- Includes health checks +- Auto-restarts unless stopped + +### 2. swarms-dev (Development Service) +- Interactive bash shell +- Ideal for development and testing +- Mounted volumes for live code changes + +```bash +# Run development container +docker-compose up -d swarms-dev + +# Attach to the container +docker exec -it swarms-dev-container bash +``` + +## Architecture + +This Docker image is explicitly built for **x86_64 (amd64)** architecture using: +- Base image: `python:3.11-slim-bullseye` +- Platform: `linux/amd64` +- Multi-stage build for optimized image size + +## Environment Variables + +Configure your Swarms instance by setting environment variables: + +```bash +# Create a .env file in the root directory +cat > .env << EOF +OPENAI_API_KEY=sk-... +ANTHROPIC_API_KEY=sk-ant-... +GOOGLE_API_KEY=... +EOF +``` + +Then use with docker-compose: + +```bash +docker-compose --env-file .env up -d +``` + +## Volume Mounts + +The docker-compose configuration mounts the following directories: + +- `.:/app` - Main application code +- `./data:/app/data` - Data directory +- `./models:/app/models` - Model files + +## Building for Different Architectures + +While this Dockerfile is optimized for amd64, you can build for other architectures: + +```bash +# Build for multiple architectures (requires buildx) +docker buildx create --use +docker buildx build --platform linux/amd64,linux/arm64 -t swarms:multiarch . +``` + +## Health Checks + +The container includes a built-in health check that verifies the swarms package can be imported: + +```bash +# Check container health +docker inspect --format='{{.State.Health.Status}}' swarms-container +``` + +## Troubleshooting + +### Issue: Architecture mismatch +If you're getting architecture-related errors, ensure Docker is configured for amd64: + +```bash +# Check current architecture +docker info | grep Architecture + +# Force amd64 platform +docker run --platform linux/amd64 swarms:latest +``` + +### Issue: Build fails +If the build fails, try cleaning Docker cache: + +```bash +docker system prune -a +docker-compose build --no-cache +``` + +### Issue: Import errors +If you encounter import errors, rebuild the image: + +```bash +docker-compose down +docker-compose build --no-cache +docker-compose up -d +``` + +## Advanced Usage + +### Running Custom Scripts + +```bash +# Run a Python script +docker run --platform linux/amd64 -v $(pwd):/app swarms:latest python your_script.py + +# Using docker-compose +docker-compose run swarms python your_script.py +``` + +### Interactive Python Shell + +```bash +# Start Python REPL +docker run --platform linux/amd64 -it swarms:latest python + +# Or with docker-compose +docker-compose run swarms python +``` + +### Installing Additional Dependencies + +Create a custom Dockerfile extending the base image: + +```dockerfile +FROM swarms:latest + +USER root +RUN pip install additional-package +USER swarms +``` + +## Production Deployment + +For production deployments: + +1. Use specific version tags instead of `latest` +2. Configure proper logging and monitoring +3. Set resource limits in docker-compose.yml +4. Use secrets management for API keys +5. Enable automatic container restarts + +Example production configuration: + +```yaml +services: + swarms: + image: swarms:1.0.0 + deploy: + resources: + limits: + cpus: '2.0' + memory: 4G + reservations: + cpus: '1.0' + memory: 2G + logging: + driver: "json-file" + options: + max-size: "10m" + max-file: "3" +``` + +## Support + +For issues or questions: +- GitHub Issues: https://github.com/kyegomez/swarms/issues +- Documentation: https://docs.swarms.world + +## License + +MIT License - See LICENSE file for details diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..e7c0f635 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,49 @@ +# Multi-stage build for optimized Docker image +# Explicitly target x86_64 (amd64) architecture +FROM --platform=linux/amd64 python:3.11-slim-bullseye as builder + +# Install system dependencies for building +RUN apt-get update && apt-get install -y --no-install-recommends \ + build-essential gcc curl \ + && rm -rf /var/lib/apt/lists/* + +# Install UV for faster package management +RUN curl -LsSf https://astral.sh/uv/install.sh | sh +ENV PATH="/root/.cargo/bin:${PATH}" + +# Create a virtual environment and install dependencies +RUN uv venv /opt/venv +ENV PATH="/opt/venv/bin:$PATH" + +# Install the swarms package using UV +RUN uv pip install --system -U swarms + +# Final stage +FROM --platform=linux/amd64 python:3.11-slim-bullseye + +# Environment config for speed and safety +ENV PYTHONDONTWRITEBYTECODE=1 \ + PYTHONUNBUFFERED=1 \ + PATH="/opt/venv/bin:${PATH}" \ + PYTHONPATH="/app:${PYTHONPATH}" \ + USER=swarms + +# Set working directory +WORKDIR /app + +# Copy virtual environment from builder stage +COPY --from=builder /opt/venv /opt/venv + +# Add non-root user +RUN useradd -m -s /bin/bash -U $USER && \ + chown -R $USER:$USER /app + +# Copy application code +COPY --chown=$USER:$USER . . + +# Switch to non-root +USER $USER + +# Optional health check +HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 \ + CMD python -c "import swarms; print('Health check passed')" || exit 1 diff --git a/build-docker-amd64.sh b/build-docker-amd64.sh new file mode 100755 index 00000000..75294307 --- /dev/null +++ b/build-docker-amd64.sh @@ -0,0 +1,45 @@ +#!/bin/bash + +# Build script for Swarms Docker image (x86_64/amd64) +# This script builds the Swarms Docker image specifically for amd64 architecture + +set -e + +echo "==========================================" +echo "Building Swarms Docker Image for amd64" +echo "==========================================" + +# Colors for output +GREEN='\033[0;32m' +BLUE='\033[0;34m' +NC='\033[0m' # No Color + +# Check if Docker is installed +if ! command -v docker &> /dev/null; then + echo "Error: Docker is not installed. Please install Docker first." + exit 1 +fi + +# Check current architecture +ARCH=$(uname -m) +echo -e "${BLUE}Current system architecture: $ARCH${NC}" + +# Build image +echo -e "${BLUE}Building Docker image for linux/amd64...${NC}" +docker build --platform linux/amd64 -t swarms:amd64 -t swarms:latest . + +# Verify the build +echo -e "${BLUE}Verifying the build...${NC}" +docker images swarms + +echo -e "${GREEN}==========================================" +echo "Build completed successfully!" +echo "==========================================${NC}" +echo "" +echo "To run the container:" +echo " docker run --platform linux/amd64 -it swarms:latest bash" +echo "" +echo "Or use docker-compose:" +echo " docker-compose up -d" +echo "" +echo "For more information, see DOCKER.md" diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 00000000..0455f979 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,58 @@ +version: '3.8' + +services: + swarms: + platform: linux/amd64 + build: + context: . + dockerfile: Dockerfile + platforms: + - linux/amd64 + image: swarms:latest + container_name: swarms-container + environment: + - PYTHONUNBUFFERED=1 + - PYTHONPATH=/app + # Add your API keys here or use .env file + # - OPENAI_API_KEY=${OPENAI_API_KEY} + # - ANTHROPIC_API_KEY=${ANTHROPIC_API_KEY} + # - GOOGLE_API_KEY=${GOOGLE_API_KEY} + volumes: + - .:/app + - ./data:/app/data + - ./models:/app/models + working_dir: /app + command: python -c "import swarms; print('Swarms container is running successfully!')" + restart: unless-stopped + healthcheck: + test: ["CMD", "python", "-c", "import swarms; print('Health check passed')"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + swarms-dev: + platform: linux/amd64 + build: + context: . + dockerfile: Dockerfile + platforms: + - linux/amd64 + image: swarms:dev + container_name: swarms-dev-container + environment: + - PYTHONUNBUFFERED=1 + - PYTHONPATH=/app + volumes: + - .:/app + - ./data:/app/data + - ./models:/app/models + working_dir: /app + command: bash + stdin_open: true + tty: true + restart: unless-stopped + +networks: + default: + name: swarms-network diff --git a/run-docker-amd64.sh b/run-docker-amd64.sh new file mode 100755 index 00000000..76a6ade0 --- /dev/null +++ b/run-docker-amd64.sh @@ -0,0 +1,49 @@ +#!/bin/bash + +# Quick start script for Swarms Docker container (x86_64/amd64) + +set -e + +# Colors for output +GREEN='\033[0;32m' +BLUE='\033[0;34m' +YELLOW='\033[1;33m' +NC='\033[0m' # No Color + +echo "==========================================" +echo "Swarms Docker Quick Start (amd64)" +echo "==========================================" + +# Check if Docker is installed +if ! command -v docker &> /dev/null; then + echo "Error: Docker is not installed. Please install Docker first." + exit 1 +fi + +# Check if image exists +if ! docker image inspect swarms:latest &> /dev/null; then + echo -e "${YELLOW}Swarms image not found. Building image...${NC}" + ./build-docker-amd64.sh +fi + +echo -e "${BLUE}Starting Swarms container...${NC}" + +# Check if using docker-compose or docker run +if [ "$1" == "compose" ]; then + echo -e "${BLUE}Using docker-compose...${NC}" + docker-compose up -d + echo -e "${GREEN}Container started! View logs with: docker-compose logs -f${NC}" +else + echo -e "${BLUE}Using docker run...${NC}" + docker run --platform linux/amd64 \ + --name swarms-container \ + -v $(pwd):/app \ + -e PYTHONUNBUFFERED=1 \ + -it \ + --rm \ + swarms:latest bash +fi + +echo -e "${GREEN}==========================================" +echo "Swarms is ready!" +echo "==========================================${NC}" diff --git a/scripts/docker/Dockerfile b/scripts/docker/Dockerfile index 44392b09..e7c0f635 100644 --- a/scripts/docker/Dockerfile +++ b/scripts/docker/Dockerfile @@ -1,5 +1,6 @@ # Multi-stage build for optimized Docker image -FROM python:3.11-slim-bullseye as builder +# Explicitly target x86_64 (amd64) architecture +FROM --platform=linux/amd64 python:3.11-slim-bullseye as builder # Install system dependencies for building RUN apt-get update && apt-get install -y --no-install-recommends \ @@ -18,7 +19,7 @@ ENV PATH="/opt/venv/bin:$PATH" RUN uv pip install --system -U swarms # Final stage -FROM python:3.11-slim-bullseye +FROM --platform=linux/amd64 python:3.11-slim-bullseye # Environment config for speed and safety ENV PYTHONDONTWRITEBYTECODE=1 \ diff --git a/scripts/docker/docker-compose.yml b/scripts/docker/docker-compose.yml index a0ef3a35..9c559e55 100644 --- a/scripts/docker/docker-compose.yml +++ b/scripts/docker/docker-compose.yml @@ -2,9 +2,12 @@ version: '3.8' services: swarms: + platform: linux/amd64 build: - context: . - dockerfile: Dockerfile + context: ../.. + dockerfile: scripts/docker/Dockerfile + platforms: + - linux/amd64 image: swarms:latest container_name: swarms-container environment: @@ -29,9 +32,12 @@ services: start_period: 40s swarms-dev: + platform: linux/amd64 build: - context: . - dockerfile: Dockerfile + context: ../.. + dockerfile: scripts/docker/Dockerfile + platforms: + - linux/amd64 image: swarms:dev container_name: swarms-dev-container environment: @@ -48,9 +54,12 @@ services: restart: unless-stopped swarms-api: + platform: linux/amd64 build: - context: . - dockerfile: Dockerfile + context: ../.. + dockerfile: scripts/docker/Dockerfile + platforms: + - linux/amd64 image: swarms:api container_name: swarms-api-container environment: