feat: initial commit — asaas-checkout template white-label
Template genérico de checkout com ASAAS, parametrizado via env vars. Inclui fluxo completo: checkout → pedido → polling → webhook → admin. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
99
setup.sh
Executable file
99
setup.sh
Executable file
@@ -0,0 +1,99 @@
|
||||
#!/bin/bash
|
||||
# setup.sh — Bootstrap de nova instância do asaas-checkout
|
||||
# Uso: bash setup.sh
|
||||
|
||||
set -e
|
||||
|
||||
echo ""
|
||||
echo "=== asaas-checkout — Setup de nova instância ==="
|
||||
echo ""
|
||||
|
||||
# Coletar configurações
|
||||
read -p "Nome do projeto (slug, sem espaços): " PROJECT_SLUG
|
||||
read -p "Nome exibido na interface: " APP_NAME
|
||||
read -p "Domínio (ex: checkout.seudominio.com.br): " DOMAIN
|
||||
read -p "ASAAS API Key: " ASAAS_KEY
|
||||
read -p "ASAAS Env [sandbox/production] (default: sandbox): " ASAAS_ENV
|
||||
ASAAS_ENV=${ASAAS_ENV:-sandbox}
|
||||
read -p "Supabase URL: " SUPABASE_URL
|
||||
read -p "Supabase Anon Key: " SUPABASE_ANON
|
||||
read -p "Supabase Service Role Key: " SUPABASE_SERVICE
|
||||
read -p "Senha do admin (deixar vazio para gerar): " ADMIN_PASS
|
||||
if [ -z "$ADMIN_PASS" ]; then
|
||||
ADMIN_PASS=$(openssl rand -base64 12)
|
||||
echo " → Senha gerada: $ADMIN_PASS"
|
||||
fi
|
||||
read -p "Redirect após pagamento (URL, pode ser / ): " AFTER_PAYMENT
|
||||
AFTER_PAYMENT=${AFTER_PAYMENT:-/}
|
||||
read -p "n8n Webhook URL pagamento confirmado (opcional): " N8N_WEBHOOK
|
||||
read -p "n8n Webhook URL PIX gerado (opcional): " N8N_PIX
|
||||
|
||||
# Criar .env.local
|
||||
cat > .env.local <<EOF
|
||||
NEXT_PUBLIC_APP_NAME="${APP_NAME}"
|
||||
NEXT_PUBLIC_APP_LOGO_URL=""
|
||||
NEXT_PUBLIC_APP_PRIMARY_COLOR="#1d4ed8"
|
||||
NEXT_PUBLIC_AFTER_PAYMENT_REDIRECT="${AFTER_PAYMENT}"
|
||||
NEXT_PUBLIC_SUPPORT_EMAIL=""
|
||||
NEXT_PUBLIC_SUPPORT_WHATSAPP=""
|
||||
NEXT_PUBLIC_ADMIN_USER="admin"
|
||||
NEXT_PUBLIC_ADMIN_PASSWORD="${ADMIN_PASS}"
|
||||
ASAAS_API_KEY="${ASAAS_KEY}"
|
||||
ASAAS_ENV="${ASAAS_ENV}"
|
||||
NEXT_PUBLIC_SUPABASE_URL="${SUPABASE_URL}"
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY="${SUPABASE_ANON}"
|
||||
SUPABASE_SERVICE_ROLE_KEY="${SUPABASE_SERVICE}"
|
||||
N8N_WEBHOOK_URL="${N8N_WEBHOOK}"
|
||||
N8N_PIX_WEBHOOK_URL="${N8N_PIX}"
|
||||
EOF
|
||||
|
||||
echo ""
|
||||
echo "✓ .env.local criado"
|
||||
|
||||
# Criar stack file para Docker Swarm
|
||||
cat > stack.${PROJECT_SLUG}.yaml <<EOF
|
||||
version: "3.8"
|
||||
|
||||
services:
|
||||
app:
|
||||
image: ${PROJECT_SLUG}:latest
|
||||
networks:
|
||||
- network_public
|
||||
environment:
|
||||
NEXT_PUBLIC_APP_NAME: "${APP_NAME}"
|
||||
NEXT_PUBLIC_APP_LOGO_URL: ""
|
||||
NEXT_PUBLIC_APP_PRIMARY_COLOR: "#1d4ed8"
|
||||
NEXT_PUBLIC_AFTER_PAYMENT_REDIRECT: "${AFTER_PAYMENT}"
|
||||
NEXT_PUBLIC_ADMIN_USER: "admin"
|
||||
NEXT_PUBLIC_ADMIN_PASSWORD: "${ADMIN_PASS}"
|
||||
ASAAS_API_KEY: "${ASAAS_KEY}"
|
||||
ASAAS_ENV: "${ASAAS_ENV}"
|
||||
NEXT_PUBLIC_SUPABASE_URL: "${SUPABASE_URL}"
|
||||
NEXT_PUBLIC_SUPABASE_ANON_KEY: "${SUPABASE_ANON}"
|
||||
SUPABASE_SERVICE_ROLE_KEY: "${SUPABASE_SERVICE}"
|
||||
N8N_WEBHOOK_URL: "${N8N_WEBHOOK}"
|
||||
N8N_PIX_WEBHOOK_URL: "${N8N_PIX}"
|
||||
deploy:
|
||||
replicas: 1
|
||||
restart_policy:
|
||||
condition: on-failure
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.${PROJECT_SLUG}.rule=Host(\`${DOMAIN}\`)
|
||||
- traefik.http.routers.${PROJECT_SLUG}.entrypoints=websecure
|
||||
- traefik.http.routers.${PROJECT_SLUG}.tls.certresolver=letsencrypt
|
||||
- traefik.http.services.${PROJECT_SLUG}.loadbalancer.server.port=3000
|
||||
|
||||
networks:
|
||||
network_public:
|
||||
external: true
|
||||
EOF
|
||||
|
||||
echo "✓ stack.${PROJECT_SLUG}.yaml criado"
|
||||
echo ""
|
||||
echo "Próximos passos:"
|
||||
echo " 1. docker build -t ${PROJECT_SLUG}:latest ."
|
||||
echo " 2. docker stack deploy -c stack.${PROJECT_SLUG}.yaml ${PROJECT_SLUG}"
|
||||
echo " 3. docker service update --image ${PROJECT_SLUG}:latest --force ${PROJECT_SLUG}_app"
|
||||
echo ""
|
||||
echo "Admin: https://${DOMAIN}/admin | usuário: admin | senha: ${ADMIN_PASS}"
|
||||
Reference in New Issue
Block a user