621 lines
14 KiB
Markdown
621 lines
14 KiB
Markdown
# Arcadia Suite - Guia Completo de Hospedagem e Deploy
|
|
|
|
## Indice
|
|
|
|
1. [Requisitos do Servidor](#1-requisitos-do-servidor)
|
|
2. [Variaveis de Ambiente](#2-variaveis-de-ambiente)
|
|
3. [Instalacao](#3-instalacao)
|
|
4. [Banco de Dados](#4-banco-de-dados)
|
|
5. [Servicos Python](#5-servicos-python)
|
|
6. [Metabase (Arcadia Insights)](#6-metabase-arcadia-insights)
|
|
7. [Build e Producao](#7-build-e-producao)
|
|
8. [Configuracao do Servidor Web (Nginx)](#8-configuracao-do-servidor-web-nginx)
|
|
9. [Process Manager (PM2)](#9-process-manager-pm2)
|
|
10. [SSL/HTTPS](#10-sslhttps)
|
|
11. [Estrutura de Portas](#11-estrutura-de-portas)
|
|
12. [Arcadia Plus (Laravel)](#12-arcadia-plus-laravel)
|
|
13. [Manutencao e Backups](#13-manutencao-e-backups)
|
|
14. [Troubleshooting](#14-troubleshooting)
|
|
|
|
---
|
|
|
|
## 1. Requisitos do Servidor
|
|
|
|
### Minimo Recomendado
|
|
- **SO:** Ubuntu 22.04 LTS ou Debian 12
|
|
- **CPU:** 4 vCPUs
|
|
- **RAM:** 8 GB (16 GB recomendado)
|
|
- **Disco:** 50 GB SSD
|
|
- **Node.js:** v20.x ou superior
|
|
- **Python:** 3.11 ou superior
|
|
- **PostgreSQL:** 15 ou superior
|
|
- **Java:** OpenJDK 11+ (para Metabase)
|
|
- **PHP:** 8.1+ (para Arcadia Plus, opcional)
|
|
- **Composer:** 2.x (para Arcadia Plus, opcional)
|
|
|
|
### Instalacao de Dependencias (Ubuntu/Debian)
|
|
|
|
```bash
|
|
# Atualizar sistema
|
|
sudo apt update && sudo apt upgrade -y
|
|
|
|
# Node.js 20
|
|
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
|
|
sudo apt install -y nodejs
|
|
|
|
# Python 3.11
|
|
sudo apt install -y python3.11 python3.11-venv python3-pip
|
|
|
|
# PostgreSQL 15
|
|
sudo apt install -y postgresql postgresql-contrib
|
|
|
|
# Java (para Metabase)
|
|
sudo apt install -y openjdk-11-jre-headless
|
|
|
|
# Ferramentas auxiliares
|
|
sudo apt install -y git nginx certbot python3-certbot-nginx build-essential
|
|
```
|
|
|
|
---
|
|
|
|
## 2. Variaveis de Ambiente
|
|
|
|
Crie um arquivo `.env` na raiz do projeto:
|
|
|
|
```env
|
|
# === BANCO DE DADOS ===
|
|
DATABASE_URL=postgresql://arcadia_user:SUA_SENHA_AQUI@localhost:5432/arcadia_suite
|
|
PGHOST=localhost
|
|
PGPORT=5432
|
|
PGUSER=arcadia_user
|
|
PGPASSWORD=SUA_SENHA_AQUI
|
|
PGDATABASE=arcadia_suite
|
|
|
|
# === OPENAI (IA) ===
|
|
OPENAI_API_KEY=sk-sua-chave-openai-aqui
|
|
|
|
# === ERPNext (opcional) ===
|
|
ERPNEXT_URL=https://seu-erpnext.com
|
|
ERPNEXT_API_KEY=sua-api-key
|
|
ERPNEXT_API_SECRET=seu-api-secret
|
|
|
|
# === GITHUB (opcional - para XOS Pipeline) ===
|
|
GITHUB_TOKEN=ghp_seu-token-github
|
|
|
|
# === PRODUCAO ===
|
|
NODE_ENV=production
|
|
PORT=5000
|
|
SESSION_SECRET=gere-uma-string-secreta-longa-e-aleatoria
|
|
|
|
# === METABASE ===
|
|
MB_DB_TYPE=postgres
|
|
MB_DB_DBNAME=arcadia_metabase
|
|
MB_DB_PORT=5432
|
|
MB_DB_USER=arcadia_user
|
|
MB_DB_PASS=SUA_SENHA_AQUI
|
|
MB_DB_HOST=localhost
|
|
MB_JETTY_PORT=8088
|
|
METABASE_PORT=8088
|
|
METASET_ADMIN_EMAIL=admin@arcadia.app
|
|
METASET_ADMIN_PASSWORD=SuaSenhaMetaSet
|
|
```
|
|
|
|
---
|
|
|
|
## 3. Instalacao
|
|
|
|
```bash
|
|
# Clonar o repositorio
|
|
git clone https://github.com/SEU_USUARIO/arcadia-suite.git
|
|
cd arcadia-suite
|
|
|
|
# Instalar dependencias Node.js
|
|
npm install
|
|
|
|
# Instalar dependencias Python
|
|
python3.11 -m venv .venv
|
|
source .venv/bin/activate
|
|
pip install -r python-service/requirements.txt
|
|
pip install fastapi uvicorn pandas numpy httpx pydantic nfelib lxml signxml \
|
|
cryptography zeep beautifulsoup4 psycopg2-binary matplotlib pymongo \
|
|
python-multipart python-docx pyopenssl
|
|
|
|
# Copiar arquivo de ambiente
|
|
cp .env.example .env
|
|
# Edite o .env com suas credenciais
|
|
nano .env
|
|
```
|
|
|
|
---
|
|
|
|
## 4. Banco de Dados
|
|
|
|
### Criar banco e usuario
|
|
|
|
```bash
|
|
sudo -u postgres psql
|
|
```
|
|
|
|
```sql
|
|
-- Criar usuario
|
|
CREATE USER arcadia_user WITH PASSWORD 'SUA_SENHA_SEGURA';
|
|
|
|
-- Criar banco principal
|
|
CREATE DATABASE arcadia_suite OWNER arcadia_user;
|
|
|
|
-- Criar banco do Metabase (separado)
|
|
CREATE DATABASE arcadia_metabase OWNER arcadia_user;
|
|
|
|
-- Permissoes
|
|
GRANT ALL PRIVILEGES ON DATABASE arcadia_suite TO arcadia_user;
|
|
GRANT ALL PRIVILEGES ON DATABASE arcadia_metabase TO arcadia_user;
|
|
|
|
\q
|
|
```
|
|
|
|
### Executar migracoes (Drizzle ORM)
|
|
|
|
```bash
|
|
# Sincronizar schema com o banco
|
|
npx drizzle-kit push
|
|
```
|
|
|
|
---
|
|
|
|
## 5. Servicos Python
|
|
|
|
O projeto utiliza servicos Python para funcionalidades especificas. Eles sao iniciados automaticamente pelo servidor Node.js, mas podem ser executados manualmente para testes:
|
|
|
|
| Servico | Porta | Funcao | Inicio Automatico |
|
|
|---------|-------|--------|--------------------|
|
|
| Contabil | 8003 | Motor contabil | Sim |
|
|
| BI Engine | 8004 | Business Intelligence | Sim |
|
|
| Automations | 8005 | Motor de automacoes | Sim |
|
|
| Scientist | 8001 | IA, embeddings, analise de dados | Opcional* |
|
|
| Fisco | 8002 | Motor fiscal NF-e/NFC-e | Opcional* |
|
|
| Communication | 8006 | Motor de comunicacao | Opcional* |
|
|
|
|
*Servicos opcionais podem ser ativados adicionando suas chamadas em `server/index.ts`.
|
|
|
|
Os servicos Contabil, BI e Automations sao iniciados automaticamente pelo `server/index.ts`.
|
|
|
|
---
|
|
|
|
## 6. Metabase (Arcadia Insights)
|
|
|
|
O Metabase e usado como motor de BI invisivel. Para instala-lo:
|
|
|
|
```bash
|
|
# Criar diretorio
|
|
mkdir -p metabase/plugins
|
|
|
|
# Baixar Metabase (versao 0.50.x recomendada)
|
|
wget https://downloads.metabase.com/v0.50.31/metabase.jar -O metabase/metabase.jar
|
|
|
|
# Testar execucao
|
|
java -jar metabase/metabase.jar &
|
|
```
|
|
|
|
O Metabase sera executado na porta 8088 e proxied pelo Node.js em `/api/bi/metaset/*` e `/metabase/`.
|
|
|
|
O script de inicio esta em `metabase/start-metabase.sh` e e gerenciado automaticamente pelo servidor Node.js.
|
|
|
|
---
|
|
|
|
## 7. Build e Producao
|
|
|
|
```bash
|
|
# Build do frontend (Vite) + backend
|
|
npm run build
|
|
|
|
# Iniciar em producao
|
|
npm run start
|
|
```
|
|
|
|
O comando `npm run start` executa `NODE_ENV=production node dist/index.cjs` na porta 5000.
|
|
|
|
---
|
|
|
|
## 8. Configuracao do Servidor Web (Nginx)
|
|
|
|
Crie o arquivo de configuracao:
|
|
|
|
```bash
|
|
sudo nano /etc/nginx/sites-available/arcadia-suite
|
|
```
|
|
|
|
```nginx
|
|
server {
|
|
listen 80;
|
|
server_name seu-dominio.com.br;
|
|
|
|
# Redirecionar HTTP para HTTPS
|
|
return 301 https://$server_name$request_uri;
|
|
}
|
|
|
|
server {
|
|
listen 443 ssl http2;
|
|
server_name seu-dominio.com.br;
|
|
|
|
# SSL (sera configurado pelo Certbot)
|
|
ssl_certificate /etc/letsencrypt/live/seu-dominio.com.br/fullchain.pem;
|
|
ssl_certificate_key /etc/letsencrypt/live/seu-dominio.com.br/privkey.pem;
|
|
|
|
# Limites
|
|
client_max_body_size 50M;
|
|
|
|
# Proxy principal (Node.js na porta 5000)
|
|
location / {
|
|
proxy_pass http://127.0.0.1:5000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
proxy_read_timeout 86400;
|
|
}
|
|
|
|
# WebSocket (Socket.IO)
|
|
location /socket.io/ {
|
|
proxy_pass http://127.0.0.1:5000;
|
|
proxy_http_version 1.1;
|
|
proxy_set_header Upgrade $http_upgrade;
|
|
proxy_set_header Connection "upgrade";
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_read_timeout 86400;
|
|
}
|
|
|
|
# Arcadia Plus (Laravel, opcional)
|
|
location /plus/ {
|
|
proxy_pass http://127.0.0.1:8080/;
|
|
proxy_set_header Host $host;
|
|
proxy_set_header X-Real-IP $remote_addr;
|
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
|
proxy_set_header X-Forwarded-Proto $scheme;
|
|
}
|
|
}
|
|
```
|
|
|
|
```bash
|
|
# Ativar o site
|
|
sudo ln -s /etc/nginx/sites-available/arcadia-suite /etc/nginx/sites-enabled/
|
|
sudo nginx -t
|
|
sudo systemctl reload nginx
|
|
```
|
|
|
|
---
|
|
|
|
## 9. Process Manager (PM2)
|
|
|
|
Use PM2 para manter o servidor rodando:
|
|
|
|
```bash
|
|
# Instalar PM2 globalmente
|
|
sudo npm install -g pm2
|
|
|
|
# Iniciar a aplicacao
|
|
pm2 start dist/index.cjs --name arcadia-suite --env production
|
|
|
|
# Salvar a lista de processos
|
|
pm2 save
|
|
|
|
# Configurar para iniciar no boot
|
|
pm2 startup
|
|
```
|
|
|
|
### Arquivo ecosystem (opcional)
|
|
|
|
Crie `ecosystem.config.cjs`:
|
|
|
|
```javascript
|
|
module.exports = {
|
|
apps: [
|
|
{
|
|
name: "arcadia-suite",
|
|
script: "dist/index.cjs",
|
|
env: {
|
|
NODE_ENV: "production",
|
|
PORT: 5000,
|
|
},
|
|
instances: 1,
|
|
max_memory_restart: "1G",
|
|
log_date_format: "YYYY-MM-DD HH:mm:ss",
|
|
error_file: "logs/error.log",
|
|
out_file: "logs/output.log",
|
|
},
|
|
{
|
|
name: "arcadia-metabase",
|
|
script: "java",
|
|
args: "-jar metabase/metabase.jar",
|
|
interpreter: "none",
|
|
env: {
|
|
MB_DB_TYPE: "postgres",
|
|
MB_DB_DBNAME: "arcadia_metabase",
|
|
MB_DB_PORT: "5432",
|
|
MB_DB_USER: "arcadia_user",
|
|
MB_DB_PASS: "SUA_SENHA_AQUI",
|
|
MB_DB_HOST: "localhost",
|
|
MB_JETTY_PORT: "8088",
|
|
},
|
|
max_memory_restart: "2G",
|
|
},
|
|
],
|
|
};
|
|
```
|
|
|
|
```bash
|
|
# Iniciar com ecosystem
|
|
pm2 start ecosystem.config.cjs
|
|
pm2 save
|
|
```
|
|
|
|
---
|
|
|
|
## 10. SSL/HTTPS
|
|
|
|
```bash
|
|
# Certificado gratuito com Let's Encrypt
|
|
sudo certbot --nginx -d seu-dominio.com.br
|
|
|
|
# Renovacao automatica (ja configurada pelo Certbot)
|
|
sudo certbot renew --dry-run
|
|
```
|
|
|
|
---
|
|
|
|
## 11. Estrutura de Portas
|
|
|
|
| Porta | Servico | Acesso |
|
|
|-------|---------|--------|
|
|
| 5000 | Node.js (Express + Vite) | Principal - proxied pelo Nginx |
|
|
| 8088 | Metabase (Arcadia Insights) | Interno - proxied via /api/bi/metaset e /metabase |
|
|
| 8003 | Python Contabil | Interno - inicio automatico |
|
|
| 8004 | Python BI Engine | Interno - inicio automatico |
|
|
| 8005 | Python Automations | Interno - inicio automatico |
|
|
| 8001 | Python Scientist | Interno - opcional |
|
|
| 8002 | Python Fisco | Interno - opcional |
|
|
| 8006 | Node Communication | Interno - opcional |
|
|
| 8080 | Arcadia Plus (Laravel) | Interno - proxied via /plus |
|
|
|
|
Apenas a porta 80 (HTTP) e 443 (HTTPS) devem estar expostas publicamente via Nginx.
|
|
|
|
---
|
|
|
|
## 12. Arcadia Plus (Laravel)
|
|
|
|
Se voce utiliza o modulo Plus (ERP Laravel):
|
|
|
|
```bash
|
|
cd plus
|
|
|
|
# Instalar dependencias PHP
|
|
composer install --no-dev --optimize-autoloader
|
|
|
|
# Configurar ambiente
|
|
cp .env.example .env
|
|
php artisan key:generate
|
|
|
|
# Configurar banco (usar schema separado no mesmo PostgreSQL)
|
|
# Edite plus/.env com as credenciais do banco
|
|
|
|
# Migracoes
|
|
php artisan migrate
|
|
|
|
# Otimizar para producao
|
|
php artisan config:cache
|
|
php artisan route:cache
|
|
php artisan view:cache
|
|
|
|
# Servir (porta 8080)
|
|
php artisan serve --host=0.0.0.0 --port=8080
|
|
```
|
|
|
|
---
|
|
|
|
## 13. Manutencao e Backups
|
|
|
|
### Backup do Banco de Dados
|
|
|
|
```bash
|
|
# Criar backup
|
|
pg_dump -U arcadia_user -h localhost arcadia_suite > backup_$(date +%Y%m%d_%H%M%S).sql
|
|
|
|
# Restaurar backup
|
|
psql -U arcadia_user -h localhost arcadia_suite < backup_20260209.sql
|
|
```
|
|
|
|
### Atualizar a Aplicacao
|
|
|
|
```bash
|
|
cd /caminho/para/arcadia-suite
|
|
|
|
# Parar a aplicacao
|
|
pm2 stop arcadia-suite
|
|
|
|
# Atualizar codigo
|
|
git pull origin main
|
|
|
|
# Reinstalar dependencias
|
|
npm install
|
|
|
|
# Rebuild
|
|
npm run build
|
|
|
|
# Migrar banco (se necessario)
|
|
npx drizzle-kit push
|
|
|
|
# Reiniciar
|
|
pm2 restart arcadia-suite
|
|
```
|
|
|
|
### Logs
|
|
|
|
```bash
|
|
# Ver logs em tempo real
|
|
pm2 logs arcadia-suite
|
|
|
|
# Ver logs do Nginx
|
|
sudo tail -f /var/log/nginx/error.log
|
|
```
|
|
|
|
---
|
|
|
|
## 14. Troubleshooting
|
|
|
|
### Erro: "Cannot find module"
|
|
```bash
|
|
npm install
|
|
npm run build
|
|
```
|
|
|
|
### Erro: "ECONNREFUSED" no banco
|
|
```bash
|
|
# Verificar se PostgreSQL esta rodando
|
|
sudo systemctl status postgresql
|
|
sudo systemctl start postgresql
|
|
```
|
|
|
|
### Erro: "Port already in use"
|
|
```bash
|
|
# Encontrar processo na porta
|
|
lsof -i :5000
|
|
kill -9 PID_DO_PROCESSO
|
|
```
|
|
|
|
### Servicos Python nao iniciam
|
|
```bash
|
|
# Verificar Python
|
|
python3.11 --version
|
|
|
|
# Verificar ambiente virtual
|
|
source .venv/bin/activate
|
|
pip list | grep fastapi
|
|
```
|
|
|
|
### Metabase nao inicia
|
|
```bash
|
|
# Verificar Java
|
|
java -version
|
|
|
|
# Verificar se metabase.jar existe
|
|
ls -la metabase/metabase.jar
|
|
|
|
# Executar manualmente para ver erros
|
|
java -jar metabase/metabase.jar
|
|
```
|
|
|
|
---
|
|
|
|
## Hospedagem em Cloud (Alternativas)
|
|
|
|
### VPS Recomendados
|
|
- **Hetzner:** A partir de EUR 4/mes (melhor custo-beneficio)
|
|
- **DigitalOcean:** A partir de USD 12/mes (4GB RAM)
|
|
- **Vultr:** A partir de USD 12/mes
|
|
- **AWS EC2:** t3.medium (sob demanda)
|
|
- **Contabo:** A partir de EUR 5/mes (alto recurso por preco)
|
|
|
|
### Deploy com Docker (Alternativa)
|
|
|
|
Se preferir usar Docker, crie um `Dockerfile`:
|
|
|
|
```dockerfile
|
|
FROM node:20-slim
|
|
|
|
WORKDIR /app
|
|
|
|
# Instalar Python e Java
|
|
RUN apt-get update && apt-get install -y \
|
|
python3.11 python3.11-venv python3-pip \
|
|
openjdk-11-jre-headless \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
# Copiar e instalar dependencias
|
|
COPY package.json ./
|
|
RUN npm install --production
|
|
|
|
# Instalar dependencias Python
|
|
COPY python-service/requirements.txt ./python-requirements.txt
|
|
RUN python3.11 -m venv /app/.venv && \
|
|
/app/.venv/bin/pip install -r python-requirements.txt
|
|
|
|
# Copiar codigo
|
|
COPY . .
|
|
|
|
# Build
|
|
RUN npm run build
|
|
|
|
EXPOSE 5000
|
|
|
|
CMD ["npm", "run", "start"]
|
|
```
|
|
|
|
```yaml
|
|
# docker-compose.yml
|
|
version: "3.8"
|
|
services:
|
|
app:
|
|
build: .
|
|
ports:
|
|
- "5000:5000"
|
|
environment:
|
|
- DATABASE_URL=postgresql://arcadia_user:senha@db:5432/arcadia_suite
|
|
- NODE_ENV=production
|
|
depends_on:
|
|
- db
|
|
|
|
db:
|
|
image: postgres:15
|
|
environment:
|
|
POSTGRES_USER: arcadia_user
|
|
POSTGRES_PASSWORD: senha
|
|
POSTGRES_DB: arcadia_suite
|
|
volumes:
|
|
- pgdata:/var/lib/postgresql/data
|
|
|
|
metabase:
|
|
image: metabase/metabase:v0.50.31
|
|
ports:
|
|
- "8088:8088"
|
|
environment:
|
|
MB_DB_TYPE: postgres
|
|
MB_DB_DBNAME: arcadia_metabase
|
|
MB_DB_PORT: 5432
|
|
MB_DB_USER: arcadia_user
|
|
MB_DB_PASS: senha
|
|
MB_DB_HOST: db
|
|
MB_JETTY_PORT: 8088
|
|
|
|
volumes:
|
|
pgdata:
|
|
```
|
|
|
|
---
|
|
|
|
## Checklist de Deploy
|
|
|
|
- [ ] Servidor provisionado com requisitos minimos
|
|
- [ ] PostgreSQL instalado e configurado
|
|
- [ ] Node.js 20 instalado
|
|
- [ ] Python 3.11 instalado
|
|
- [ ] Repositorio clonado
|
|
- [ ] Dependencias instaladas (npm install)
|
|
- [ ] Dependencias Python instaladas
|
|
- [ ] Arquivo .env configurado com todas as variaveis
|
|
- [ ] Banco de dados criado e migracoes executadas
|
|
- [ ] Build de producao executado (npm run build)
|
|
- [ ] Metabase baixado e configurado
|
|
- [ ] PM2 configurado e aplicacao rodando
|
|
- [ ] Nginx configurado como reverse proxy
|
|
- [ ] SSL/HTTPS configurado com Certbot
|
|
- [ ] Firewall configurado (portas 80 e 443 abertas)
|
|
- [ ] Backup automatico do banco configurado
|
|
- [ ] Dominio apontando para o servidor
|
|
|
|
---
|
|
|
|
*Documento gerado em 09/02/2026 - Arcadia Suite v1.0*
|