Some checks failed
Test / test (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
181 lines
4.3 KiB
Bash
Executable File
181 lines
4.3 KiB
Bash
Executable File
#!/bin/bash
|
|
source ~/.bashrc
|
|
# Deploy Gitea on VM 102 using guest-agent IP discovery
|
|
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
# Load environment variables
|
|
if [ -f "$PROJECT_ROOT/.env" ]; then
|
|
set -a
|
|
source <(grep -v '^#' "$PROJECT_ROOT/.env" | grep -v '^$' | sed 's/#.*$//' | grep '=')
|
|
set +a
|
|
fi
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
VM_USER="${VM_USER:-ubuntu}"
|
|
SSH_KEY="${SSH_KEY:-$HOME/.ssh/id_ed25519_proxmox}"
|
|
VMID=102
|
|
VM_NAME="git-server"
|
|
|
|
# Import helper library
|
|
if [ -f "$PROJECT_ROOT/scripts/lib/proxmox_vm_helpers.sh" ]; then
|
|
source "$PROJECT_ROOT/scripts/lib/proxmox_vm_helpers.sh"
|
|
else
|
|
log_error "Helper library not found"
|
|
exit 1
|
|
fi
|
|
|
|
main() {
|
|
log_info "Deploying Gitea on VM $VMID ($VM_NAME)"
|
|
echo ""
|
|
|
|
# Get IP using guest agent
|
|
local ip
|
|
ip="$(get_vm_ip_or_warn "$VMID" "$VM_NAME" || true)"
|
|
|
|
if [[ -z "$ip" ]]; then
|
|
log_error "Cannot get IP for VM $VMID. Ensure SSH is working and QEMU Guest Agent is installed."
|
|
exit 1
|
|
fi
|
|
|
|
log_info "Using IP: $ip"
|
|
echo ""
|
|
|
|
# Check if Docker is installed
|
|
log_info "Checking Docker installation..."
|
|
if ! ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "${VM_USER}@${ip}" "command -v docker" &>/dev/null; then
|
|
log_warn "Docker not found. Installing Docker..."
|
|
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "${VM_USER}@${ip}" <<'EOF'
|
|
set -e
|
|
sudo apt-get update -qq
|
|
sudo apt-get install -y docker.io docker-compose
|
|
sudo usermod -aG docker $USER
|
|
EOF
|
|
log_info "Docker installed. You may need to log out and back in for group changes."
|
|
else
|
|
log_info "Docker is installed"
|
|
fi
|
|
|
|
# Create Gitea directory
|
|
log_info "Setting up Gitea directory..."
|
|
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "${VM_USER}@${ip}" <<'EOF'
|
|
set -e
|
|
mkdir -p ~/gitea
|
|
cd ~/gitea
|
|
EOF
|
|
|
|
# Copy docker-compose file
|
|
log_info "Creating docker-compose.yml..."
|
|
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "${VM_USER}@${ip}" "cat > ~/gitea/docker-compose.yml" <<EOF
|
|
version: '3.8'
|
|
|
|
services:
|
|
gitea:
|
|
image: gitea/gitea:latest
|
|
container_name: gitea
|
|
restart: unless-stopped
|
|
environment:
|
|
- USER_UID=1000
|
|
- USER_GID=1000
|
|
- GITEA__database__DB_TYPE=postgres
|
|
- GITEA__database__HOST=db:5432
|
|
- GITEA__database__NAME=gitea
|
|
- GITEA__database__USER=gitea
|
|
- GITEA__database__PASSWD=gitea
|
|
- GITEA__server__DOMAIN=${ip}
|
|
- GITEA__server__SSH_DOMAIN=${ip}
|
|
- GITEA__server__SSH_PORT=2222
|
|
- GITEA__server__ROOT_URL=http://${ip}:3000
|
|
volumes:
|
|
- gitea_data:/data
|
|
- /etc/timezone:/etc/timezone:ro
|
|
- /etc/localtime:/etc/localtime:ro
|
|
ports:
|
|
- "3000:3000"
|
|
- "2222:22"
|
|
depends_on:
|
|
- db
|
|
networks:
|
|
- gitea-network
|
|
|
|
db:
|
|
image: postgres:15
|
|
container_name: gitea-db
|
|
restart: unless-stopped
|
|
environment:
|
|
- POSTGRES_USER=gitea
|
|
- POSTGRES_PASSWORD=gitea
|
|
- POSTGRES_DB=gitea
|
|
volumes:
|
|
- gitea_db_data:/var/lib/postgresql/data
|
|
networks:
|
|
- gitea-network
|
|
|
|
volumes:
|
|
gitea_data:
|
|
driver: local
|
|
gitea_db_data:
|
|
driver: local
|
|
|
|
networks:
|
|
gitea-network:
|
|
driver: bridge
|
|
EOF
|
|
|
|
# Deploy
|
|
log_info "Deploying Gitea with Docker Compose..."
|
|
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no "${VM_USER}@${ip}" <<'EOF'
|
|
set -e
|
|
cd ~/gitea
|
|
sudo docker-compose up -d
|
|
EOF
|
|
|
|
# Wait for service to be ready
|
|
log_info "Waiting for Gitea to start..."
|
|
sleep 10
|
|
|
|
# Verify
|
|
log_info "Verifying Gitea deployment..."
|
|
local max_wait=60
|
|
local elapsed=0
|
|
while [ $elapsed -lt $max_wait ]; do
|
|
if curl -s "http://${ip}:3000" &>/dev/null; then
|
|
log_info "✓ Gitea is running!"
|
|
echo ""
|
|
log_info "Access Gitea at: http://${ip}:3000"
|
|
log_info "SSH access: ssh://git@${ip}:2222"
|
|
return 0
|
|
fi
|
|
sleep 5
|
|
elapsed=$((elapsed + 5))
|
|
echo -n "."
|
|
done
|
|
|
|
log_warn "Gitea may not be fully ready yet. Check logs with:"
|
|
log_info " ssh ${VM_USER}@${ip} 'cd ~/gitea && sudo docker-compose logs'"
|
|
}
|
|
|
|
main "$@"
|
|
|