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,236 @@
|
||||
#!/bin/bash
|
||||
|
||||
# Depl0y Quick Start (assumes MariaDB already installed)
|
||||
|
||||
set -e
|
||||
|
||||
echo "========================================="
|
||||
echo " Depl0y Quick Start"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
|
||||
# Check if running as root
|
||||
if [ "$EUID" -ne 0 ]; then
|
||||
echo "Please run as root (use sudo)"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
PROJECT_DIR="/home/administrator/depl0y"
|
||||
cd "$PROJECT_DIR"
|
||||
|
||||
# Setup MariaDB database
|
||||
echo "Setting up database..."
|
||||
mysql -u root << 'EOF'
|
||||
CREATE DATABASE IF NOT EXISTS depl0y;
|
||||
CREATE USER IF NOT EXISTS 'depl0y'@'localhost' IDENTIFIED BY 'depl0y_password_123';
|
||||
GRANT ALL PRIVILEGES ON depl0y.* TO 'depl0y'@'localhost';
|
||||
FLUSH PRIVILEGES;
|
||||
EOF
|
||||
|
||||
echo "Database created"
|
||||
|
||||
# Create application user and directories
|
||||
echo "Creating directories..."
|
||||
useradd -r -s /bin/bash -d /opt/depl0y -m depl0y 2>/dev/null || true
|
||||
mkdir -p /opt/depl0y/{backend,frontend}
|
||||
mkdir -p /var/lib/depl0y/{isos,cloud-init,ssh_keys}
|
||||
mkdir -p /var/log/depl0y
|
||||
mkdir -p /etc/depl0y
|
||||
|
||||
# Copy files
|
||||
echo "Copying application files..."
|
||||
cp -r "$PROJECT_DIR/backend"/* /opt/depl0y/backend/
|
||||
cp -r "$PROJECT_DIR/frontend"/* /opt/depl0y/frontend/
|
||||
|
||||
# Set permissions
|
||||
chown -R depl0y:depl0y /opt/depl0y
|
||||
chown -R depl0y:depl0y /var/lib/depl0y
|
||||
chown -R depl0y:depl0y /var/log/depl0y
|
||||
|
||||
# Generate secrets
|
||||
echo "Generating configuration..."
|
||||
SECRET_KEY=$(openssl rand -hex 32)
|
||||
ENCRYPTION_KEY=$(python3 -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())")
|
||||
|
||||
# Create config file
|
||||
cat > /etc/depl0y/config.env << EOF
|
||||
DATABASE_URL=mysql+pymysql://depl0y:depl0y_password_123@localhost:3306/depl0y
|
||||
SECRET_KEY=${SECRET_KEY}
|
||||
ENCRYPTION_KEY=${ENCRYPTION_KEY}
|
||||
DEBUG=false
|
||||
LOG_LEVEL=INFO
|
||||
LOG_FILE=/var/log/depl0y/app.log
|
||||
ISO_STORAGE_PATH=/var/lib/depl0y/isos
|
||||
CLOUDINIT_TEMPLATE_PATH=/var/lib/depl0y/cloud-init
|
||||
SSH_KEY_PATH=/var/lib/depl0y/ssh_keys
|
||||
API_V1_PREFIX=/api/v1
|
||||
EOF
|
||||
|
||||
chmod 600 /etc/depl0y/config.env
|
||||
chown depl0y:depl0y /etc/depl0y/config.env
|
||||
|
||||
# Install Python dependencies
|
||||
echo "Installing Python dependencies (this may take a few minutes)..."
|
||||
cd /opt/depl0y/backend
|
||||
sudo -u depl0y python3 -m venv venv
|
||||
sudo -u depl0y /opt/depl0y/backend/venv/bin/pip install --upgrade pip --quiet
|
||||
sudo -u depl0y /opt/depl0y/backend/venv/bin/pip install -r requirements.txt --quiet
|
||||
|
||||
echo "Python dependencies installed"
|
||||
|
||||
# Initialize database
|
||||
echo "Initializing database..."
|
||||
cd /opt/depl0y/backend
|
||||
sudo -u depl0y bash -c "source venv/bin/activate && source /etc/depl0y/config.env && python3 -c 'from app.core.database import init_db; init_db()'"
|
||||
|
||||
echo "Database initialized"
|
||||
|
||||
# Build frontend
|
||||
echo "Building frontend (this may take a few minutes)..."
|
||||
cd /opt/depl0y/frontend
|
||||
sudo -u depl0y npm install --quiet
|
||||
sudo -u depl0y npm run build
|
||||
|
||||
echo "Frontend built"
|
||||
|
||||
# Create systemd service
|
||||
echo "Creating systemd service..."
|
||||
cat > /etc/systemd/system/depl0y-backend.service << 'SVCEOF'
|
||||
[Unit]
|
||||
Description=Depl0y Backend API
|
||||
After=network.target mariadb.service
|
||||
Wants=mariadb.service
|
||||
|
||||
[Service]
|
||||
Type=simple
|
||||
User=depl0y
|
||||
Group=depl0y
|
||||
WorkingDirectory=/opt/depl0y/backend
|
||||
EnvironmentFile=/etc/depl0y/config.env
|
||||
ExecStart=/opt/depl0y/backend/venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8000
|
||||
Restart=always
|
||||
RestartSec=10
|
||||
|
||||
[Install]
|
||||
WantedBy=multi-user.target
|
||||
SVCEOF
|
||||
|
||||
# Configure Nginx
|
||||
echo "Configuring Nginx..."
|
||||
cat > /etc/nginx/sites-available/depl0y << 'NGEOF'
|
||||
server {
|
||||
listen 80;
|
||||
server_name _;
|
||||
|
||||
client_max_body_size 10G;
|
||||
|
||||
location / {
|
||||
root /opt/depl0y/frontend/dist;
|
||||
try_files $uri $uri/ /index.html;
|
||||
|
||||
location ~* \.(js|css|png|jpg|jpeg|gif|ico|svg|woff|woff2|ttf|eot)$ {
|
||||
expires 1y;
|
||||
add_header Cache-Control "public, immutable";
|
||||
}
|
||||
}
|
||||
|
||||
location /api {
|
||||
proxy_pass http://127.0.0.1:8000;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_http_version 1.1;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
proxy_connect_timeout 300s;
|
||||
proxy_send_timeout 300s;
|
||||
proxy_read_timeout 300s;
|
||||
}
|
||||
|
||||
location /health {
|
||||
proxy_pass http://127.0.0.1:8000/health;
|
||||
access_log off;
|
||||
}
|
||||
|
||||
access_log /var/log/nginx/depl0y_access.log;
|
||||
error_log /var/log/nginx/depl0y_error.log;
|
||||
}
|
||||
NGEOF
|
||||
|
||||
ln -sf /etc/nginx/sites-available/depl0y /etc/nginx/sites-enabled/
|
||||
rm -f /etc/nginx/sites-enabled/default
|
||||
|
||||
# Test nginx
|
||||
nginx -t
|
||||
|
||||
# Create admin user
|
||||
echo ""
|
||||
echo "Creating admin user..."
|
||||
cd /opt/depl0y/backend
|
||||
sudo -u depl0y bash -c "source venv/bin/activate && source /etc/depl0y/config.env && python3" << 'PYEOF'
|
||||
from app.core.database import SessionLocal
|
||||
from app.models import User, UserRole
|
||||
from app.core.security import get_password_hash
|
||||
|
||||
db = SessionLocal()
|
||||
try:
|
||||
# Delete existing admin if exists
|
||||
existing = db.query(User).filter(User.username == "admin").first()
|
||||
if existing:
|
||||
db.delete(existing)
|
||||
db.commit()
|
||||
|
||||
# Create new admin
|
||||
admin = User(
|
||||
username="admin",
|
||||
email="admin@depl0y.local",
|
||||
hashed_password=get_password_hash("Admin123!"),
|
||||
role=UserRole.ADMIN,
|
||||
is_active=True
|
||||
)
|
||||
db.add(admin)
|
||||
db.commit()
|
||||
print("✓ Admin user created")
|
||||
except Exception as e:
|
||||
print(f"Error: {e}")
|
||||
import traceback
|
||||
traceback.print_exc()
|
||||
finally:
|
||||
db.close()
|
||||
PYEOF
|
||||
|
||||
# Start services
|
||||
echo ""
|
||||
echo "Starting services..."
|
||||
systemctl daemon-reload
|
||||
systemctl enable depl0y-backend
|
||||
systemctl restart depl0y-backend
|
||||
systemctl reload nginx
|
||||
|
||||
# Wait for startup
|
||||
echo "Waiting for services to start..."
|
||||
sleep 5
|
||||
|
||||
# Get server IP
|
||||
SERVER_IP=$(hostname -I | awk '{print $1}')
|
||||
|
||||
echo ""
|
||||
echo "========================================="
|
||||
echo " Installation Complete!"
|
||||
echo "========================================="
|
||||
echo ""
|
||||
echo "✓ Depl0y is now running!"
|
||||
echo ""
|
||||
echo "Access: http://${SERVER_IP}"
|
||||
echo ""
|
||||
echo "Login:"
|
||||
echo " Username: admin"
|
||||
echo " Password: Admin123!"
|
||||
echo ""
|
||||
echo "Commands:"
|
||||
echo " Status: sudo systemctl status depl0y-backend"
|
||||
echo " Restart: sudo systemctl restart depl0y-backend"
|
||||
echo " Logs: sudo journalctl -u depl0y-backend -f"
|
||||
echo ""
|
||||
echo "========================================="
|
||||
Reference in New Issue
Block a user