#!/bin/bash # BCards Infrastructure Setup Script # Configura os servidores OCI para o ambiente de produção set -e SERVER_IPS=("141.148.162.114" "129.146.116.218") SSH_USER="ubuntu" # Cores para output RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' NC='\033[0m' # No Color log() { echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] $1${NC}" } error() { echo -e "${RED}[ERROR] $1${NC}" exit 1 } warn() { echo -e "${YELLOW}[WARNING] $1${NC}" } # Função para executar comando em servidor remoto run_remote() { local server_ip=$1 local command=$2 ssh -o StrictHostKeyChecking=no ${SSH_USER}@${server_ip} "$command" } # Instalar Docker se não existir install_docker() { local server_ip=$1 log "Verificando Docker no servidor $server_ip..." if run_remote $server_ip "command -v docker >/dev/null 2>&1"; then log "Docker já está instalado no servidor $server_ip" else log "Instalando Docker no servidor $server_ip..." run_remote $server_ip " sudo apt-get update && sudo apt-get install -y ca-certificates curl gnupg lsb-release && sudo mkdir -p /etc/apt/keyrings && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg && echo \"deb [arch=\$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \$(lsb_release -cs) stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null && sudo apt-get update && sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-compose-plugin && sudo usermod -aG docker $SSH_USER " log "Docker instalado com sucesso no servidor $server_ip" fi } # Configurar NGINX para load balancing setup_nginx() { local server_ip=$1 log "Configurando NGINX no servidor $server_ip..." run_remote $server_ip " sudo apt-get install -y nginx && sudo systemctl enable nginx && sudo systemctl start nginx " log "NGINX configurado no servidor $server_ip" } # Criar redes Docker locais setup_docker_networks() { local server_ip=$1 log "Configurando redes Docker no servidor $server_ip..." run_remote $server_ip " sudo docker network create --driver bridge bcards-network 2>/dev/null || true " } # Configurar firewall básico configure_firewall() { local server_ip=$1 log "Configurando firewall no servidor $server_ip..." run_remote $server_ip " sudo ufw --force reset && sudo ufw default deny incoming && sudo ufw default allow outgoing && sudo ufw allow ssh && sudo ufw allow 80/tcp && sudo ufw allow 443/tcp && sudo ufw --force enable " log "Firewall configurado no servidor $server_ip" } # Instalar utilitários essenciais install_utilities() { local server_ip=$1 log "Instalando utilitários no servidor $server_ip..." run_remote $server_ip " sudo apt-get update && sudo apt-get install -y \ curl \ wget \ git \ htop \ nano \ unzip \ jq \ certbot \ python3-certbot-nginx " } # Criar diretórios necessários create_directories() { local server_ip=$1 log "Criando diretórios no servidor $server_ip..." run_remote $server_ip " mkdir -p ~/bcards/{nginx,logs,data,ssl} && sudo mkdir -p /var/log/bcards && sudo chown -R $SSH_USER:$SSH_USER /var/log/bcards " } # Configurar log rotation setup_log_rotation() { local server_ip=$1 log "Configurando rotação de logs no servidor $server_ip..." run_remote $server_ip " sudo tee /etc/logrotate.d/bcards > /dev/null </dev/null 2>&1; then error "Não foi possível conectar ao servidor $server_ip" fi done # Setup em cada servidor for server_ip in "${SERVER_IPS[@]}"; do log "Configurando servidor $server_ip..." install_utilities $server_ip install_docker $server_ip configure_firewall $server_ip create_directories $server_ip setup_log_rotation $server_ip setup_docker_networks $server_ip setup_nginx $server_ip done log "Setup completo! Servidores prontos para deploy." log "Servidor 1: ${SERVER_IPS[0]}" log "Servidor 2: ${SERVER_IPS[1]}" log "Cada servidor rodará containers Docker independentes" log "NGINX fará load balance entre os servidores" } # Verificar se o script está sendo executado com argumentos if [[ "$1" == "--help" || "$1" == "-h" ]]; then echo "BCards Infrastructure Setup Script" echo "Usage: $0" echo "" echo "Este script configura os servidores OCI para o ambiente BCards:" echo "- Instala Docker e utilitários" echo "- Configura Docker Swarm" echo "- Configura firewall básico" echo "- Cria estrutura de diretórios" echo "" echo "Servidores configurados:" for server_ip in "${SERVER_IPS[@]}"; do echo " - $server_ip" done exit 0 fi # Executar função principal main "$@"