mirror of
https://github.com/Significant-Gravitas/AutoGPT.git
synced 2026-01-09 15:17:59 -05:00
## Summary This PR adds the frontend service to the Docker Compose configuration, enabling `docker compose up` to run the complete stack, including the frontend. It also implements comprehensive environment variable improvements, unified .env file support, and fixes Docker networking issues. ## Key Changes ### 🐳 Docker Compose Improvements - **Added frontend service** to `docker-compose.yml` and `docker-compose.platform.yml` - **Production build**: Uses `pnpm build + serve` instead of dev server for better stability and lower memory usage - **Service dependencies**: Frontend now waits for backend services (`rest_server`, `websocket_server`) to be ready - **YAML anchors**: Implemented DRY configuration to avoid duplicating environment values ### 📁 Unified .env File Support - **Frontend .env loading**: Automatically loads `.env` file during Docker build and runtime - **Backend .env loading**: Optional `.env` file support with fallback to sensible defaults in `settings.py` - **Single source of truth**: All `NEXT_PUBLIC_*` and API keys can be defined in respective `.env` files - **Docker integration**: Updated `.dockerignore` to include `.env` files in build context - **Git tracking**: Frontend and backend `.env` files are now trackable (removed from gitignore) ### 🔧 Environment Variable Architecture - **Dual environment strategy**: - Server-side code uses Docker service names (`http://rest_server:8006/api`) - Client-side code uses localhost URLs (`http://localhost:8006/api`) - **Comprehensive config**: Added build args and runtime environment variables - **Network compatibility**: Fixes connection issues between frontend and backend containers - **Shared backend variables**: Common environment variables (service hosts, auth settings) centralized using YAML anchors ### 🛠️ Code Improvements - **Centralized env-config helper** (`/frontend/src/lib/env-config.ts`) with server-side priority - **Updated all frontend code** to use shared environment helpers instead of direct `process.env` access - **Consistent API**: All environment variable access now goes through helper functions - **Settings.py improvements**: Better defaults for CORS origins and optional .env file loading ### 🔗 Files Changed - `docker-compose.yml` & `docker-compose.platform.yml` - Added frontend service and shared backend env vars - `frontend/Dockerfile` - Simplified build process to use .env files directly - `backend/settings.py` - Optional .env loading and better defaults - `frontend/src/lib/env-config.ts` - New centralized environment configuration - `.dockerignore` - Allow .env files in build context - `.gitignore` - Updated to allow frontend/backend .env files - Multiple frontend files - Updated to use env helpers - Updates to both auto installer scripts to work with the latest setup! ## Benefits - ✅ **Single command deployment**: `docker compose up` now runs everything - ✅ **Better reliability**: Production build reduces memory usage and crashes - ✅ **Network compatibility**: Proper container-to-container communication - ✅ **Maintainable config**: Centralized environment variable management with .env files - ✅ **Development friendly**: Works in both Docker and local development - ✅ **API key management**: Easy configuration through .env files for all services - ✅ **No more manual env vars**: Frontend and backend automatically load their respective .env files ## Testing - ✅ Verified Docker service communication works correctly - ✅ Frontend responds and serves content properly - ✅ Environment variables are correctly resolved in both server and client contexts - ✅ No connection errors after implementing service dependencies - ✅ .env file loading works correctly in both build and runtime phases - ✅ Backend services work with and without .env files present ### Checklist 📋 #### For configuration changes: - [x] `.env.default` is updated or already compatible with my changes - [x] `docker-compose.yml` is updated or already compatible with my changes - [x] I have included a list of my configuration changes in the PR description (under **Changes**) 🤖 Generated with [Claude Code](https://claude.ai/code) --------- Co-authored-by: Lluis Agusti <hi@llu.lu> Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Nicholas Tindle <nicholas.tindle@agpt.co> Co-authored-by: Claude <claude@users.noreply.github.com> Co-authored-by: Bentlybro <Github@bentlybro.com>
146 lines
4.7 KiB
Bash
Executable File
146 lines
4.7 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# ------------------------------------------------------------------------------
|
|
# AutoGPT Setup Script
|
|
# ------------------------------------------------------------------------------
|
|
# This script automates the installation and setup of AutoGPT on Linux systems.
|
|
# It checks prerequisites, clones the repository, and starts all services.
|
|
# ------------------------------------------------------------------------------
|
|
|
|
# --- Global Variables ---
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m'
|
|
|
|
# Variables
|
|
REPO_DIR=""
|
|
CLONE_NEEDED=false
|
|
DOCKER_CMD="docker"
|
|
DOCKER_COMPOSE_CMD="docker compose"
|
|
LOG_FILE=""
|
|
|
|
print_color() {
|
|
printf "${!1}%s${NC}\n" "$2"
|
|
}
|
|
|
|
print_banner() {
|
|
print_color "BLUE" "
|
|
d8888 888 .d8888b. 8888888b. 88888888888
|
|
d88888 888 d88P Y88b 888 Y88b 888
|
|
d88P888 888 888 888 888 888 888
|
|
d88P 888 888 888 888888 .d88b. 888 888 d88P 888
|
|
d88P 888 888 888 888 d88\"\"88b 888 88888 8888888P\" 888
|
|
d88P 888 888 888 888 888 888 888 888 888 888
|
|
d8888888888 Y88b 888 Y88b. Y88..88P Y88b d88P 888 888
|
|
d88P 888 \"Y88888 \"Y888 \"Y88P\" \"Y8888P88 888 888
|
|
"
|
|
}
|
|
|
|
handle_error() {
|
|
print_color "RED" "Error: $1"
|
|
if [ -n "$LOG_FILE" ] && [ -f "$LOG_FILE" ]; then
|
|
print_color "RED" "Check log file for details: $LOG_FILE"
|
|
fi
|
|
exit 1
|
|
}
|
|
|
|
check_prerequisites() {
|
|
print_color "BLUE" "Checking prerequisites..."
|
|
|
|
if ! command -v git &> /dev/null; then
|
|
handle_error "Git is not installed. Please install it and try again."
|
|
else
|
|
print_color "GREEN" "✓ Git is installed"
|
|
fi
|
|
|
|
if ! command -v docker &> /dev/null; then
|
|
handle_error "Docker is not installed. Please install it and try again."
|
|
else
|
|
print_color "GREEN" "✓ Docker is installed"
|
|
fi
|
|
|
|
if ! docker info &> /dev/null; then
|
|
print_color "YELLOW" "Using sudo for Docker commands..."
|
|
DOCKER_CMD="sudo docker"
|
|
DOCKER_COMPOSE_CMD="sudo docker compose"
|
|
fi
|
|
|
|
print_color "GREEN" "All prerequisites installed!"
|
|
}
|
|
|
|
detect_repo() {
|
|
if [[ "$PWD" == */autogpt_platform/installer ]]; then
|
|
if [[ -d "../../.git" ]]; then
|
|
REPO_DIR="$(cd ../..; pwd)"
|
|
cd ../.. || handle_error "Failed to navigate to repo root"
|
|
print_color "GREEN" "Using existing AutoGPT repository."
|
|
else
|
|
CLONE_NEEDED=true
|
|
REPO_DIR="$(pwd)/AutoGPT"
|
|
fi
|
|
elif [[ -d ".git" && -d "autogpt_platform/installer" ]]; then
|
|
REPO_DIR="$PWD"
|
|
print_color "GREEN" "Using existing AutoGPT repository."
|
|
else
|
|
CLONE_NEEDED=true
|
|
REPO_DIR="$(pwd)/AutoGPT"
|
|
fi
|
|
}
|
|
|
|
clone_repo() {
|
|
if [ "$CLONE_NEEDED" = true ]; then
|
|
print_color "BLUE" "Cloning AutoGPT repository..."
|
|
git clone https://github.com/Significant-Gravitas/AutoGPT.git "$REPO_DIR" || handle_error "Failed to clone repository"
|
|
print_color "GREEN" "Repository cloned successfully."
|
|
fi
|
|
}
|
|
|
|
run_docker() {
|
|
cd "$REPO_DIR/autogpt_platform" || handle_error "Failed to navigate to autogpt_platform"
|
|
|
|
print_color "BLUE" "Starting AutoGPT services with Docker Compose..."
|
|
print_color "YELLOW" "This may take a few minutes on first run..."
|
|
echo
|
|
|
|
mkdir -p logs
|
|
LOG_FILE="$REPO_DIR/autogpt_platform/logs/docker_setup.log"
|
|
|
|
if $DOCKER_COMPOSE_CMD up -d > "$LOG_FILE" 2>&1; then
|
|
print_color "GREEN" "✓ Services started successfully!"
|
|
else
|
|
print_color "RED" "Docker compose failed. Check log file for details: $LOG_FILE"
|
|
print_color "YELLOW" "Common issues:"
|
|
print_color "YELLOW" "- Docker is not running"
|
|
print_color "YELLOW" "- Insufficient disk space"
|
|
print_color "YELLOW" "- Port conflicts (check if ports 3000, 8000, etc. are in use)"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
print_banner
|
|
print_color "GREEN" "AutoGPT Setup Script"
|
|
print_color "GREEN" "-------------------"
|
|
|
|
check_prerequisites
|
|
detect_repo
|
|
clone_repo
|
|
run_docker
|
|
|
|
echo
|
|
print_color "GREEN" "============================="
|
|
print_color "GREEN" " Setup Complete!"
|
|
print_color "GREEN" "============================="
|
|
echo
|
|
print_color "BLUE" "🚀 Access AutoGPT at: http://localhost:3000"
|
|
print_color "BLUE" "📡 API available at: http://localhost:8000"
|
|
echo
|
|
print_color "YELLOW" "To stop services: docker compose down"
|
|
print_color "YELLOW" "To view logs: docker compose logs -f"
|
|
echo
|
|
print_color "YELLOW" "All commands should be run in: $REPO_DIR/autogpt_platform"
|
|
}
|
|
|
|
main |