Files
AutoGPT/autogpt_platform/installer/setup-autogpt.sh
Zamil Majdy 4bfeddc03d feat(platform/docker): add frontend service to docker-compose with env config improvements (#10615)
## 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>
2025-08-14 03:28:18 +00:00

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