mikrotik-bot/infra/deploy-all.sh

187 lines
5.2 KiB
Bash

#!/bin/bash
# Complete CI/CD Infrastructure Deployment Script
set -e
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[0;33m'
BLUE='\033[0;34m'
NC='\033[0m'
echo -e "${BLUE}🚀 MikroTik Bot CI/CD Infrastructure Deployment${NC}"
echo -e "${BLUE}=================================================${NC}"
# Configuration
GIT_SERVER="10.10.0.10"
REGISTRY_SERVER="10.10.0.20"
PRODUCTION_SERVER="10.10.0.30"
# Check if running on Proxmox
check_proxmox() {
if ! command -v pct &> /dev/null; then
echo -e "${RED}❌ This script must be run on Proxmox host${NC}"
exit 1
fi
echo -e "${GREEN}✅ Proxmox detected${NC}"
}
# Deploy containers
deploy_containers() {
echo -e "${YELLOW}📦 Deploying LXC containers...${NC}"
bash setup-lxc.sh
# Wait for containers to be ready
echo -e "${YELLOW}⏳ Waiting for containers to be ready...${NC}"
sleep 30
}
# Deploy Git Server
deploy_git_server() {
echo -e "${YELLOW}🔧 Deploying Git Server (Gitea)...${NC}"
# Copy docker-compose to git server
pct exec 100 -- mkdir -p /opt/gitea
pct push 100 gitea-compose.yml /opt/gitea/docker-compose.yml
# Create .env file
pct exec 100 -- bash -c "cat > /opt/gitea/.env << 'EOF'
RUNNER_TOKEN=placeholder-token-will-be-generated
EOF"
# Deploy Gitea
pct exec 100 -- bash -c "
cd /opt/gitea
docker-compose up -d postgres gitea
echo 'Waiting for Gitea to start...'
sleep 30
"
echo -e "${GREEN}✅ Git Server deployed at http://$GIT_SERVER:3000${NC}"
}
# Deploy Registry
deploy_registry() {
echo -e "${YELLOW}🔧 Deploying Docker Registry...${NC}"
# Copy docker-compose to registry server
pct exec 101 -- mkdir -p /opt/registry
pct push 101 registry-compose.yml /opt/registry/docker-compose.yml
# Configure insecure registry
pct exec 101 -- bash -c "
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
\"insecure-registries\": [\"$REGISTRY_SERVER:5000\"]
}
EOF
systemctl restart docker
sleep 10
"
# Deploy registry
pct exec 101 -- bash -c "
cd /opt/registry
docker-compose up -d
"
echo -e "${GREEN}✅ Docker Registry deployed at http://$REGISTRY_SERVER:5000${NC}"
echo -e "${GREEN}✅ Registry UI available at http://$REGISTRY_SERVER:5001${NC}"
}
# Deploy Production
deploy_production() {
echo -e "${YELLOW}🔧 Deploying Production Environment...${NC}"
# Configure insecure registry on production
pct exec 102 -- bash -c "
mkdir -p /etc/docker
cat > /etc/docker/daemon.json << 'EOF'
{
\"insecure-registries\": [\"$REGISTRY_SERVER:5000\"]
}
EOF
systemctl restart docker
sleep 10
"
# Copy docker-compose to production server
pct exec 102 -- mkdir -p /opt/production
pct push 102 production-compose.yml /opt/production/docker-compose.yml
# Create bot.env file
pct exec 102 -- bash -c "cat > /opt/production/bot.env << 'EOF'
TG_BOT_TOKEN=your_bot_token_here
MT_API_HOST=192.168.1.1
MT_API_USER=admin
MT_API_PASS=your_password_here
ALLOWED_USER_IDS=123456789
EOF"
# Deploy production services
pct exec 102 -- bash -c "
cd /opt/production
docker-compose up -d portainer
echo 'Waiting for Portainer to start...'
sleep 20
"
echo -e "${GREEN}✅ Production Environment deployed${NC}"
echo -e "${GREEN}✅ Portainer available at http://$PRODUCTION_SERVER:9000${NC}"
}
# Configure DNS (optional)
configure_dns() {
echo -e "${YELLOW}🌐 DNS Configuration (manual step)${NC}"
echo "Add these entries to your DNS or /etc/hosts:"
echo "$GIT_SERVER git.home.lab"
echo "$REGISTRY_SERVER registry.home.lab"
echo "$PRODUCTION_SERVER portainer.home.lab"
}
# Setup Gitea Actions Runner
setup_runner() {
echo -e "${YELLOW}🏃 Setting up Gitea Actions Runner...${NC}"
echo "Manual steps required:"
echo "1. Go to http://$GIT_SERVER:3000"
echo "2. Create admin account"
echo "3. Go to Site Administration > Actions > Runners"
echo "4. Generate registration token"
echo "5. Update RUNNER_TOKEN in /opt/gitea/.env"
echo "6. Restart gitea runner: docker-compose restart runner"
}
# Main deployment function
main() {
echo -e "${BLUE}Starting deployment...${NC}"
check_proxmox
deploy_containers
deploy_git_server
deploy_registry
deploy_production
configure_dns
setup_runner
echo -e "${GREEN}🎉 Deployment Complete!${NC}"
echo -e "${BLUE}=================================================${NC}"
echo -e "${GREEN}Services:${NC}"
echo -e "📁 Git Server: http://$GIT_SERVER:3000"
echo -e "📦 Registry: http://$REGISTRY_SERVER:5000"
echo -e "🎛️ Registry UI: http://$REGISTRY_SERVER:5001"
echo -e "🔧 Portainer: http://$PRODUCTION_SERVER:9000"
echo ""
echo -e "${YELLOW}Next Steps:${NC}"
echo "1. Configure Gitea admin account"
echo "2. Create mikrotik-bot repository"
echo "3. Setup Gitea Actions runner token"
echo "4. Configure bot.env with real credentials"
echo "5. Push your code to trigger first deployment"
echo ""
echo -e "${BLUE}Happy coding! 🚀${NC}"
}
# Run main function
main "$@"