187 lines
5.2 KiB
Bash
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 "$@" |