BCards-Scripts-Server/scripts/setup-servers.sh
2025-07-22 21:24:07 -03:00

206 lines
5.7 KiB
Bash

#!/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 <<EOF
/var/log/bcards/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 644 $SSH_USER $SSH_USER
}
EOF
"
}
# Função principal
main() {
log "Iniciando setup da infraestrutura BCards..."
# Verificar conectividade com os servidores
for server_ip in "${SERVER_IPS[@]}"; do
log "Testando conectividade com $server_ip..."
if ! ssh -o ConnectTimeout=10 -o StrictHostKeyChecking=no ${SSH_USER}@${server_ip} "echo 'Conectado com sucesso'" >/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 "$@"