244 lines
5.2 KiB
Bash
244 lines
5.2 KiB
Bash
#!/bin/bash
|
||
# build.sh - Script para build e deploy do JobMaker
|
||
|
||
set -e
|
||
|
||
echo "🚀 JobMaker Build & Deploy Script"
|
||
echo "================================="
|
||
|
||
# Cores para output
|
||
RED='\033[0;31m'
|
||
GREEN='\033[0;32m'
|
||
YELLOW='\033[1;33m'
|
||
BLUE='\033[0;34m'
|
||
NC='\033[0m' # No Color
|
||
|
||
# Função para logs coloridos
|
||
log_info() {
|
||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||
}
|
||
|
||
log_success() {
|
||
echo -e "${GREEN}✅ $1${NC}"
|
||
}
|
||
|
||
log_warning() {
|
||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||
}
|
||
|
||
log_error() {
|
||
echo -e "${RED}❌ $1${NC}"
|
||
}
|
||
|
||
# Verificar se Docker está instalado
|
||
if ! command -v docker &> /dev/null; then
|
||
log_error "Docker não está instalado!"
|
||
exit 1
|
||
fi
|
||
|
||
# Verificar estrutura de arquivos
|
||
log_info "Verificando estrutura de arquivos..."
|
||
|
||
required_files=(
|
||
"index.html"
|
||
"en/index.html"
|
||
"css/styles.css"
|
||
"js/scripts.js"
|
||
"assets/img/jobmaker_logo.png"
|
||
"Dockerfile"
|
||
"nginx.conf"
|
||
)
|
||
|
||
for file in "${required_files[@]}"; do
|
||
if [[ ! -f "$file" ]]; then
|
||
log_error "Arquivo obrigatório não encontrado: $file"
|
||
exit 1
|
||
fi
|
||
done
|
||
|
||
log_success "Todos os arquivos obrigatórios encontrados!"
|
||
|
||
# Build da imagem Docker
|
||
log_info "Construindo imagem Docker..."
|
||
|
||
IMAGE_NAME="jobmaker-website"
|
||
IMAGE_TAG="latest"
|
||
|
||
docker build -t $IMAGE_NAME:$IMAGE_TAG . || {
|
||
log_error "Falha no build da imagem Docker!"
|
||
exit 1
|
||
}
|
||
|
||
log_success "Imagem Docker construída: $IMAGE_NAME:$IMAGE_TAG"
|
||
|
||
# Parar container existente se estiver rodando
|
||
if docker ps -q -f name=jobmaker-web &> /dev/null; then
|
||
log_info "Parando container existente..."
|
||
docker stop jobmaker-web || true
|
||
docker rm jobmaker-web || true
|
||
fi
|
||
|
||
# Executar novo container
|
||
log_info "Iniciando novo container..."
|
||
|
||
docker run -d \
|
||
--name jobmaker-web \
|
||
-p 8080:80 \
|
||
--restart unless-stopped \
|
||
$IMAGE_NAME:$IMAGE_TAG || {
|
||
log_error "Falha ao iniciar container!"
|
||
exit 1
|
||
}
|
||
|
||
log_success "Container iniciado com sucesso!"
|
||
|
||
# Verificar se o site está respondendo
|
||
log_info "Verificando se o site está respondendo..."
|
||
|
||
sleep 3
|
||
|
||
if curl -f http://localhost:8080 &> /dev/null; then
|
||
log_success "Site está online! 🎉"
|
||
echo ""
|
||
echo "📍 URLs disponíveis:"
|
||
echo " Português: http://localhost:8080"
|
||
echo " English: http://localhost:8080/en/"
|
||
echo ""
|
||
echo "🐳 Comandos Docker úteis:"
|
||
echo " Ver logs: docker logs jobmaker-web"
|
||
echo " Parar: docker stop jobmaker-web"
|
||
echo " Reiniciar: docker restart jobmaker-web"
|
||
echo " Remover: docker rm -f jobmaker-web"
|
||
else
|
||
log_error "Site não está respondendo!"
|
||
echo ""
|
||
echo "🔍 Para debug, verifique os logs:"
|
||
echo " docker logs jobmaker-web"
|
||
exit 1
|
||
fi
|
||
|
||
# Mostrar informações do container
|
||
echo ""
|
||
log_info "Informações do container:"
|
||
docker ps | grep jobmaker-web
|
||
|
||
echo ""
|
||
log_success "Deploy concluído com sucesso! 🚀"
|
||
|
||
---
|
||
|
||
#!/bin/bash
|
||
# deploy-production.sh - Script para deploy em produção
|
||
|
||
set -e
|
||
|
||
echo "🚀 JobMaker Production Deploy"
|
||
echo "============================"
|
||
|
||
# Verificar se estamos na branch main
|
||
BRANCH=$(git branch --show-current)
|
||
if [[ "$BRANCH" != "main" ]]; then
|
||
log_error "Deploy de produção deve ser feito da branch main!"
|
||
log_info "Branch atual: $BRANCH"
|
||
exit 1
|
||
fi
|
||
|
||
# Verificar se não há mudanças pendentes
|
||
if [[ -n $(git status --porcelain) ]]; then
|
||
log_error "Há mudanças não commitadas!"
|
||
log_info "Commit suas mudanças antes do deploy."
|
||
exit 1
|
||
fi
|
||
|
||
# Configurações de produção
|
||
REGISTRY="your-registry.com" # Substituir pelo seu registry
|
||
IMAGE_NAME="jobmaker-website"
|
||
VERSION=$(git rev-parse --short HEAD)
|
||
PRODUCTION_TAG="$REGISTRY/$IMAGE_NAME:$VERSION"
|
||
LATEST_TAG="$REGISTRY/$IMAGE_NAME:latest"
|
||
|
||
log_info "Versão: $VERSION"
|
||
|
||
# Build da imagem
|
||
log_info "Construindo imagem para produção..."
|
||
docker build -t $PRODUCTION_TAG -t $LATEST_TAG .
|
||
|
||
# Push para registry
|
||
log_info "Enviando imagem para registry..."
|
||
docker push $PRODUCTION_TAG
|
||
docker push $LATEST_TAG
|
||
|
||
# Deploy (exemplo para Docker Swarm)
|
||
log_info "Fazendo deploy em produção..."
|
||
|
||
# Criar/atualizar serviço Docker Swarm
|
||
docker service create \
|
||
--name jobmaker-web \
|
||
--publish 80:80 \
|
||
--replicas 2 \
|
||
--update-parallelism 1 \
|
||
--update-delay 10s \
|
||
--restart-condition on-failure \
|
||
--restart-max-attempts 3 \
|
||
$LATEST_TAG || \
|
||
docker service update \
|
||
--image $LATEST_TAG \
|
||
jobmaker-web
|
||
|
||
log_success "Deploy de produção concluído!"
|
||
|
||
echo ""
|
||
echo "🌐 Site em produção:"
|
||
echo " https://jobmaker.com.br"
|
||
echo " https://jobmaker.com.br/en/"
|
||
|
||
---
|
||
|
||
# docker-compose.yml - Para desenvolvimento local
|
||
version: '3.8'
|
||
|
||
services:
|
||
jobmaker-web:
|
||
build: .
|
||
ports:
|
||
- "8080:80"
|
||
volumes:
|
||
- .:/usr/share/nginx/html:ro
|
||
restart: unless-stopped
|
||
container_name: jobmaker-web-dev
|
||
|
||
# Nginx para HTTPS local (desenvolvimento)
|
||
nginx-ssl:
|
||
image: nginx:alpine
|
||
ports:
|
||
- "443:443"
|
||
volumes:
|
||
- ./nginx-ssl.conf:/etc/nginx/conf.d/default.conf
|
||
- ./ssl/:/etc/ssl/certs/
|
||
depends_on:
|
||
- jobmaker-web
|
||
profiles:
|
||
- ssl
|
||
|
||
---
|
||
|
||
# .dockerignore
|
||
.git
|
||
.gitignore
|
||
README.md
|
||
*.md
|
||
.env
|
||
.env.*
|
||
node_modules
|
||
*.log
|
||
.DS_Store
|
||
Thumbs.db
|
||
|
||
# Arquivos de desenvolvimento
|
||
*.sh
|
||
docker-compose.yml
|
||
.dockerignore
|
||
|
||
# Arquivos temporários
|
||
*.tmp
|
||
*.temp |