206 lines
5.7 KiB
Bash
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 "$@" |