Files
SeConectai_Web/scripts/install-server.sh
T

153 lines
3.5 KiB
Bash
Executable File

#!/bin/sh
set -eu
REPO_URL="${REPO_URL:-https://gitea.seconectai.com.br/tiago/SeConectai_Web.git}"
INSTALL_DIR="${INSTALL_DIR:-/opt/seconectai-web}"
APP_DOMAIN="${APP_DOMAIN:-}"
APP_URL="${APP_URL:-}"
LETSENCRYPT_EMAIL="${LETSENCRYPT_EMAIL:-}"
ADMIN_EMAIL="${ADMIN_EMAIL:-}"
ADMIN_INITIAL_PASSWORD="${ADMIN_INITIAL_PASSWORD:-}"
POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-}"
AUTH_SECRET="${AUTH_SECRET:-}"
CPF_ENC_KEY="${CPF_ENC_KEY:-}"
CPF_HASH_KEY="${CPF_HASH_KEY:-}"
SMTP_HOST="${SMTP_HOST:-}"
SMTP_PORT="${SMTP_PORT:-587}"
SMTP_USER="${SMTP_USER:-}"
SMTP_PASS="${SMTP_PASS:-}"
SMTP_FROM="${SMTP_FROM:-}"
need() {
if [ -z "$2" ]; then
echo "Variavel obrigatoria ausente: $1" >&2
exit 1
fi
}
gen_secret() {
if command -v openssl >/dev/null 2>&1; then
openssl rand -base64 32
else
head -c 32 /dev/urandom | base64
fi
}
need ADMIN_EMAIL "$ADMIN_EMAIL"
need ADMIN_INITIAL_PASSWORD "$ADMIN_INITIAL_PASSWORD"
if [ -n "$APP_DOMAIN" ]; then
APP_URL="${APP_URL:-https://$APP_DOMAIN}"
COMPOSE_FILE="docker-compose.prod.yml"
else
SERVER_IP="${SERVER_IP:-}"
if [ -z "$APP_URL" ]; then
if [ -n "$SERVER_IP" ]; then
APP_URL="http://$SERVER_IP:3000"
else
APP_URL="http://localhost:3000"
fi
fi
COMPOSE_FILE="docker-compose.http.yml"
APP_DOMAIN="${APP_DOMAIN:-localhost}"
LETSENCRYPT_EMAIL="${LETSENCRYPT_EMAIL:-admin@example.com}"
fi
if [ -z "$POSTGRES_PASSWORD" ]; then
POSTGRES_PASSWORD="$(gen_secret)"
fi
if [ -z "$AUTH_SECRET" ]; then
AUTH_SECRET="$(gen_secret)"
fi
if [ -z "$CPF_ENC_KEY" ]; then
CPF_ENC_KEY="$(gen_secret)"
fi
if [ -z "$CPF_HASH_KEY" ]; then
CPF_HASH_KEY="$(gen_secret)"
fi
if ! command -v git >/dev/null 2>&1; then
echo "Instale git antes de continuar." >&2
exit 1
fi
if ! command -v docker >/dev/null 2>&1; then
echo "Instale Docker antes de continuar." >&2
exit 1
fi
if docker compose version >/dev/null 2>&1; then
COMPOSE="docker compose"
elif command -v docker-compose >/dev/null 2>&1; then
COMPOSE="docker-compose"
else
echo "Instale Docker Compose antes de continuar." >&2
exit 1
fi
if [ -d "$INSTALL_DIR/.git" ]; then
echo "Atualizando projeto em $INSTALL_DIR"
git -C "$INSTALL_DIR" pull --ff-only
else
echo "Clonando projeto em $INSTALL_DIR"
mkdir -p "$(dirname "$INSTALL_DIR")"
git clone "$REPO_URL" "$INSTALL_DIR"
fi
cd "$INSTALL_DIR"
cat > .env <<EOF
POSTGRES_DB=briefing
POSTGRES_USER=briefing
POSTGRES_PASSWORD=$POSTGRES_PASSWORD
DATABASE_URL=postgresql://briefing:$POSTGRES_PASSWORD@db:5432/briefing?schema=public
AUTH_SECRET=$AUTH_SECRET
APP_URL=$APP_URL
APP_DOMAIN=$APP_DOMAIN
LETSENCRYPT_EMAIL=$LETSENCRYPT_EMAIL
CPF_ENC_KEY=$CPF_ENC_KEY
CPF_HASH_KEY=$CPF_HASH_KEY
SMTP_HOST=$SMTP_HOST
SMTP_PORT=$SMTP_PORT
SMTP_USER=$SMTP_USER
SMTP_PASS=$SMTP_PASS
SMTP_FROM=$SMTP_FROM
ADMIN_EMAIL=$ADMIN_EMAIL
ADMIN_INITIAL_PASSWORD=$ADMIN_INITIAL_PASSWORD
EVOLUTION_API_URL=
EVOLUTION_API_KEY=
EVOLUTION_API_INSTANCE=
ADMIN_WHATSAPP=
UPLOAD_DIR=/app/storage/uploads
UPLOAD_MAX_MB=25
BACKUP_DIR=./backups
BACKUP_RETENTION_DAYS=14
EOF
chmod 600 .env
echo "Construindo e subindo banco"
$COMPOSE -f "$COMPOSE_FILE" up -d db
echo "Rodando migrations e seed"
$COMPOSE -f "$COMPOSE_FILE" run --rm release
if [ "$COMPOSE_FILE" = "docker-compose.prod.yml" ]; then
echo "Subindo app e proxy HTTPS"
$COMPOSE -f "$COMPOSE_FILE" up -d --build app caddy
else
echo "Subindo app HTTP na porta 3000"
$COMPOSE -f "$COMPOSE_FILE" up -d --build app
fi
echo
echo "Instalacao concluida."
echo "Acesse: $APP_URL"
echo "Admin: $ADMIN_EMAIL"
echo "O Postgres nao foi exposto publicamente."