mirror of
https://github.com/Grace-Solutions/Depl0y-Custom.git
synced 2026-08-25 17:47:00 +00:00
Initial Commit
This commit is contained in:
@@ -0,0 +1,175 @@
|
||||
#!/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 "========================================="
|
||||
Reference in New Issue
Block a user