mirror of
https://github.com/rustfs/rustfs.git
synced 2026-01-17 09:40:32 +00:00
295 lines
9.0 KiB
Bash
Executable File
295 lines
9.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
# RustFS Docker Quick Start Script
|
|
# This script provides easy deployment commands for different scenarios
|
|
|
|
set -e
|
|
|
|
# Colors for output
|
|
GREEN='\033[0;32m'
|
|
BLUE='\033[0;34m'
|
|
YELLOW='\033[1;33m'
|
|
RED='\033[0;31m'
|
|
NC='\033[0m' # No Color
|
|
|
|
log() {
|
|
echo -e "${GREEN}[RustFS]${NC} $1"
|
|
}
|
|
|
|
info() {
|
|
echo -e "${BLUE}[INFO]${NC} $1"
|
|
}
|
|
|
|
warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
# Print banner
|
|
print_banner() {
|
|
echo -e "${BLUE}"
|
|
echo "=================================================="
|
|
echo " RustFS Docker Quick Start"
|
|
echo " Console & Endpoint Separation"
|
|
echo "=================================================="
|
|
echo -e "${NC}"
|
|
}
|
|
|
|
# Check Docker availability
|
|
check_docker() {
|
|
if ! command -v docker &> /dev/null; then
|
|
error "Docker is not installed or not available in PATH"
|
|
exit 1
|
|
fi
|
|
info "Docker is available: $(docker --version)"
|
|
}
|
|
|
|
# Quick start - basic deployment
|
|
quick_basic() {
|
|
log "Starting RustFS basic deployment..."
|
|
|
|
docker run -d \
|
|
--name rustfs-quick \
|
|
-p 9000:9000 \
|
|
-p 9001:9001 \
|
|
-e RUSTFS_EXTERNAL_ADDRESS=":9000" \
|
|
-e RUSTFS_CORS_ALLOWED_ORIGINS="http://localhost:9001" \
|
|
-v rustfs-quick-data:/data \
|
|
rustfs/rustfs:latest
|
|
|
|
echo
|
|
info "✅ RustFS deployed successfully!"
|
|
info "🌐 API Endpoint: http://localhost:9000"
|
|
info "🖥️ Console UI: http://localhost:9001/rustfs/console/"
|
|
info "🔐 Credentials: rustfsadmin / rustfsadmin"
|
|
info "🏥 Health Check: curl http://localhost:9000/health"
|
|
echo
|
|
info "To stop: docker stop rustfs-quick"
|
|
info "To remove: docker rm rustfs-quick && docker volume rm rustfs-quick-data"
|
|
}
|
|
|
|
# Development deployment with debug logging
|
|
quick_dev() {
|
|
log "Starting RustFS development environment..."
|
|
|
|
docker run -d \
|
|
--name rustfs-dev \
|
|
-p 9010:9000 \
|
|
-p 9011:9001 \
|
|
-e RUSTFS_EXTERNAL_ADDRESS=":9010" \
|
|
-e RUSTFS_CORS_ALLOWED_ORIGINS="*" \
|
|
-e RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS="*" \
|
|
-e RUSTFS_ACCESS_KEY="dev-admin" \
|
|
-e RUSTFS_SECRET_KEY="dev-secret" \
|
|
-e RUST_LOG="debug" \
|
|
-v rustfs-dev-data:/data \
|
|
rustfs/rustfs:latest
|
|
|
|
echo
|
|
info "✅ RustFS development environment ready!"
|
|
info "🌐 API Endpoint: http://localhost:9010"
|
|
info "🖥️ Console UI: http://localhost:9011/rustfs/console/"
|
|
info "🔐 Credentials: dev-admin / dev-secret"
|
|
info "📊 Debug logging enabled"
|
|
echo
|
|
info "To stop: docker stop rustfs-dev"
|
|
}
|
|
|
|
# Production-like deployment
|
|
quick_prod() {
|
|
log "Starting RustFS production-like deployment..."
|
|
|
|
# Generate secure credentials
|
|
ACCESS_KEY="prod-$(openssl rand -hex 8)"
|
|
SECRET_KEY="$(openssl rand -hex 24)"
|
|
|
|
docker run -d \
|
|
--name rustfs-prod \
|
|
-p 9020:9000 \
|
|
-p 127.0.0.1:9021:9001 \
|
|
-e RUSTFS_EXTERNAL_ADDRESS=":9020" \
|
|
-e RUSTFS_CORS_ALLOWED_ORIGINS="https://myapp.com" \
|
|
-e RUSTFS_CONSOLE_CORS_ALLOWED_ORIGINS="https://admin.myapp.com" \
|
|
-e RUSTFS_CONSOLE_RATE_LIMIT_ENABLE="true" \
|
|
-e RUSTFS_CONSOLE_RATE_LIMIT_RPM="60" \
|
|
-e RUSTFS_ACCESS_KEY="$ACCESS_KEY" \
|
|
-e RUSTFS_SECRET_KEY="$SECRET_KEY" \
|
|
-v rustfs-prod-data:/data \
|
|
rustfs/rustfs:latest
|
|
|
|
# Save credentials
|
|
echo "RUSTFS_ACCESS_KEY=$ACCESS_KEY" > rustfs-prod-credentials.txt
|
|
echo "RUSTFS_SECRET_KEY=$SECRET_KEY" >> rustfs-prod-credentials.txt
|
|
chmod 600 rustfs-prod-credentials.txt
|
|
|
|
echo
|
|
info "✅ RustFS production deployment ready!"
|
|
info "🌐 API Endpoint: http://localhost:9020 (public)"
|
|
info "🖥️ Console UI: http://127.0.0.1:9021/rustfs/console/ (localhost only)"
|
|
info "🔐 Credentials saved to rustfs-prod-credentials.txt"
|
|
info "🔒 Console restricted to localhost for security"
|
|
echo
|
|
warn "⚠️ Change default CORS origins for production use"
|
|
}
|
|
|
|
# Stop and cleanup
|
|
cleanup() {
|
|
log "Cleaning up RustFS deployments..."
|
|
|
|
docker stop rustfs-quick rustfs-dev rustfs-prod 2>/dev/null || true
|
|
docker rm rustfs-quick rustfs-dev rustfs-prod 2>/dev/null || true
|
|
|
|
info "Containers stopped and removed"
|
|
echo
|
|
info "To also remove data volumes, run:"
|
|
info "docker volume rm rustfs-quick-data rustfs-dev-data rustfs-prod-data"
|
|
}
|
|
|
|
# Show status of all deployments
|
|
status() {
|
|
log "RustFS deployment status:"
|
|
echo
|
|
|
|
if docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep -q rustfs; then
|
|
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | head -n1
|
|
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}" | grep rustfs
|
|
else
|
|
info "No RustFS containers are currently running"
|
|
fi
|
|
|
|
echo
|
|
info "Available endpoints:"
|
|
|
|
if docker ps --filter "name=rustfs-quick" --format "{{.Names}}" | grep -q rustfs-quick; then
|
|
echo " Basic: http://localhost:9000 (API) | http://localhost:9001/rustfs/console/ (Console)"
|
|
fi
|
|
|
|
if docker ps --filter "name=rustfs-dev" --format "{{.Names}}" | grep -q rustfs-dev; then
|
|
echo " Dev: http://localhost:9010 (API) | http://localhost:9011/rustfs/console/ (Console)"
|
|
fi
|
|
|
|
if docker ps --filter "name=rustfs-prod" --format "{{.Names}}" | grep -q rustfs-prod; then
|
|
echo " Prod: http://localhost:9020 (API) | http://127.0.0.1:9021/rustfs/console/ (Console)"
|
|
fi
|
|
}
|
|
|
|
# Test deployments
|
|
test_deployments() {
|
|
log "Testing RustFS deployments..."
|
|
echo
|
|
|
|
# Test basic deployment
|
|
if docker ps --filter "name=rustfs-quick" --format "{{.Names}}" | grep -q rustfs-quick; then
|
|
info "Testing basic deployment..."
|
|
if curl -s -f http://localhost:9000/health | grep -q "ok"; then
|
|
echo " ✅ API health check: PASS"
|
|
else
|
|
echo " ❌ API health check: FAIL"
|
|
fi
|
|
|
|
if curl -s -f http://localhost:9001/health | grep -q "console"; then
|
|
echo " ✅ Console health check: PASS"
|
|
else
|
|
echo " ❌ Console health check: FAIL"
|
|
fi
|
|
fi
|
|
|
|
# Test dev deployment
|
|
if docker ps --filter "name=rustfs-dev" --format "{{.Names}}" | grep -q rustfs-dev; then
|
|
info "Testing development deployment..."
|
|
if curl -s -f http://localhost:9010/health | grep -q "ok"; then
|
|
echo " ✅ Dev API health check: PASS"
|
|
else
|
|
echo " ❌ Dev API health check: FAIL"
|
|
fi
|
|
|
|
if curl -s -f http://localhost:9011/health | grep -q "console"; then
|
|
echo " ✅ Dev Console health check: PASS"
|
|
else
|
|
echo " ❌ Dev Console health check: FAIL"
|
|
fi
|
|
fi
|
|
|
|
# Test prod deployment
|
|
if docker ps --filter "name=rustfs-prod" --format "{{.Names}}" | grep -q rustfs-prod; then
|
|
info "Testing production deployment..."
|
|
if curl -s -f http://localhost:9020/health | grep -q "ok"; then
|
|
echo " ✅ Prod API health check: PASS"
|
|
else
|
|
echo " ❌ Prod API health check: FAIL"
|
|
fi
|
|
|
|
if curl -s -f http://127.0.0.1:9021/health | grep -q "console"; then
|
|
echo " ✅ Prod Console health check: PASS"
|
|
else
|
|
echo " ❌ Prod Console health check: FAIL"
|
|
fi
|
|
fi
|
|
}
|
|
|
|
# Show help
|
|
show_help() {
|
|
print_banner
|
|
echo "Usage: $0 [command]"
|
|
echo
|
|
echo "Commands:"
|
|
echo " basic Start basic RustFS deployment (ports 9000-9001)"
|
|
echo " dev Start development deployment with debug logging (ports 9010-9011)"
|
|
echo " prod Start production-like deployment with security (ports 9020-9021)"
|
|
echo " status Show status of running deployments"
|
|
echo " test Test health of all running deployments"
|
|
echo " cleanup Stop and remove all RustFS containers"
|
|
echo " help Show this help message"
|
|
echo
|
|
echo "Examples:"
|
|
echo " $0 basic # Quick start with default settings"
|
|
echo " $0 dev # Development environment with debug logs"
|
|
echo " $0 prod # Production-like setup with security"
|
|
echo " $0 status # Check what's running"
|
|
echo " $0 test # Test all deployments"
|
|
echo " $0 cleanup # Clean everything up"
|
|
echo
|
|
echo "For more advanced deployments, see:"
|
|
echo " - examples/enhanced-docker-deployment.sh"
|
|
echo " - examples/enhanced-security-deployment.sh"
|
|
echo " - examples/docker-comprehensive.yml"
|
|
echo " - docs/console-separation.md"
|
|
echo
|
|
}
|
|
|
|
# Main execution
|
|
case "${1:-help}" in
|
|
"basic")
|
|
print_banner
|
|
check_docker
|
|
quick_basic
|
|
;;
|
|
"dev")
|
|
print_banner
|
|
check_docker
|
|
quick_dev
|
|
;;
|
|
"prod")
|
|
print_banner
|
|
check_docker
|
|
quick_prod
|
|
;;
|
|
"status")
|
|
print_banner
|
|
status
|
|
;;
|
|
"test")
|
|
print_banner
|
|
test_deployments
|
|
;;
|
|
"cleanup")
|
|
print_banner
|
|
cleanup
|
|
;;
|
|
"help"|*)
|
|
show_help
|
|
;;
|
|
esac |