mirror of
https://github.com/Grace-Solutions/Depl0y-Custom.git
synced 2026-07-26 11:28:19 +00:00
176 lines
4.7 KiB
Bash
176 lines
4.7 KiB
Bash
#!/bin/bash
|
|
|
|
# Depl0y Setup Script
|
|
# This script sets up Depl0y on a fresh server
|
|
|
|
set -e
|
|
|
|
echo "========================================="
|
|
echo " Depl0y Installation Script"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Check if running as root
|
|
if [ "$EUID" -ne 0 ]; then
|
|
echo "Please run as root (use sudo)"
|
|
exit 1
|
|
fi
|
|
|
|
# Detect OS
|
|
if [ -f /etc/os-release ]; then
|
|
. /etc/os-release
|
|
OS=$ID
|
|
VERSION=$VERSION_ID
|
|
else
|
|
echo "Cannot detect OS. Exiting."
|
|
exit 1
|
|
fi
|
|
|
|
echo "Detected OS: $OS $VERSION"
|
|
echo ""
|
|
|
|
# Install Docker and Docker Compose
|
|
echo "Installing Docker and Docker Compose..."
|
|
if ! command -v docker &> /dev/null; then
|
|
curl -fsSL https://get.docker.com | sh
|
|
systemctl enable docker
|
|
systemctl start docker
|
|
echo "Docker installed successfully"
|
|
else
|
|
echo "Docker is already installed"
|
|
fi
|
|
|
|
if ! command -v docker-compose &> /dev/null; then
|
|
curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
|
|
chmod +x /usr/local/bin/docker-compose
|
|
echo "Docker Compose installed successfully"
|
|
else
|
|
echo "Docker Compose is already installed"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Generate secrets
|
|
echo "Generating secure secrets..."
|
|
|
|
if [ ! -f .env ]; then
|
|
cp .env.example .env
|
|
|
|
# Generate SECRET_KEY (64 character random string)
|
|
SECRET_KEY=$(openssl rand -hex 32)
|
|
sed -i "s|SECRET_KEY=.*|SECRET_KEY=$SECRET_KEY|" .env
|
|
|
|
# Generate ENCRYPTION_KEY (Fernet key)
|
|
ENCRYPTION_KEY=$(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" 2>/dev/null || openssl rand -base64 32)
|
|
sed -i "s|ENCRYPTION_KEY=.*|ENCRYPTION_KEY=$ENCRYPTION_KEY|" .env
|
|
|
|
# Generate database passwords
|
|
MYSQL_ROOT_PASSWORD=$(openssl rand -hex 16)
|
|
MYSQL_PASSWORD=$(openssl rand -hex 16)
|
|
sed -i "s|MYSQL_ROOT_PASSWORD=.*|MYSQL_ROOT_PASSWORD=$MYSQL_ROOT_PASSWORD|" .env
|
|
sed -i "s|MYSQL_PASSWORD=.*|MYSQL_PASSWORD=$MYSQL_PASSWORD|" .env
|
|
|
|
echo ".env file created with secure random secrets"
|
|
else
|
|
echo ".env file already exists, skipping secret generation"
|
|
fi
|
|
|
|
echo ""
|
|
|
|
# Create necessary directories
|
|
echo "Creating directories..."
|
|
mkdir -p /var/lib/depl0y/{isos,cloud-init,ssh_keys}
|
|
mkdir -p /var/log/depl0y
|
|
chmod 755 /var/lib/depl0y
|
|
chmod 755 /var/log/depl0y
|
|
|
|
echo ""
|
|
|
|
# Build and start containers
|
|
echo "Building and starting Docker containers..."
|
|
docker-compose up -d --build
|
|
|
|
echo ""
|
|
echo "Waiting for services to start..."
|
|
sleep 10
|
|
|
|
# Run database migrations
|
|
echo "Running database migrations..."
|
|
docker-compose exec -T backend alembic upgrade head || echo "Note: Alembic migrations may need to be configured"
|
|
|
|
# Create default admin user
|
|
echo ""
|
|
echo "Creating default admin user..."
|
|
read -p "Enter admin username (default: admin): " ADMIN_USER
|
|
ADMIN_USER=${ADMIN_USER:-admin}
|
|
|
|
read -p "Enter admin email: " ADMIN_EMAIL
|
|
while [ -z "$ADMIN_EMAIL" ]; do
|
|
echo "Email cannot be empty"
|
|
read -p "Enter admin email: " ADMIN_EMAIL
|
|
done
|
|
|
|
read -sp "Enter admin password: " ADMIN_PASSWORD
|
|
echo ""
|
|
while [ ${#ADMIN_PASSWORD} -lt 8 ]; do
|
|
echo "Password must be at least 8 characters"
|
|
read -sp "Enter admin password: " ADMIN_PASSWORD
|
|
echo ""
|
|
done
|
|
|
|
# Create admin user via Python script
|
|
docker-compose exec -T backend python3 << EOF
|
|
from app.core.database import SessionLocal
|
|
from app.models import User, UserRole
|
|
from app.core.security import get_password_hash
|
|
|
|
db = SessionLocal()
|
|
try:
|
|
# Check if user exists
|
|
existing_user = db.query(User).filter(User.username == "$ADMIN_USER").first()
|
|
if existing_user:
|
|
print("User '$ADMIN_USER' already exists")
|
|
else:
|
|
# Create admin user
|
|
admin = User(
|
|
username="$ADMIN_USER",
|
|
email="$ADMIN_EMAIL",
|
|
hashed_password=get_password_hash("$ADMIN_PASSWORD"),
|
|
role=UserRole.ADMIN,
|
|
is_active=True
|
|
)
|
|
db.add(admin)
|
|
db.commit()
|
|
print("Admin user created successfully")
|
|
except Exception as e:
|
|
print(f"Error creating admin user: {e}")
|
|
finally:
|
|
db.close()
|
|
EOF
|
|
|
|
echo ""
|
|
echo "========================================="
|
|
echo " Installation Complete!"
|
|
echo "========================================="
|
|
echo ""
|
|
echo "Depl0y is now running!"
|
|
echo ""
|
|
echo "Access the web interface at: http://$(hostname -I | awk '{print $1}')"
|
|
echo ""
|
|
echo "Default credentials:"
|
|
echo " Username: $ADMIN_USER"
|
|
echo " Password: (the one you just entered)"
|
|
echo ""
|
|
echo "Important: Change the default admin password after first login!"
|
|
echo ""
|
|
echo "To view logs:"
|
|
echo " docker-compose logs -f"
|
|
echo ""
|
|
echo "To stop Depl0y:"
|
|
echo " docker-compose down"
|
|
echo ""
|
|
echo "To start Depl0y:"
|
|
echo " docker-compose up -d"
|
|
echo ""
|
|
echo "========================================="
|