Spaces:
Sleeping
Sleeping
| # Configuracao Railway | |
| Railway e uma plataforma de deploy que oferece PostgreSQL com pgvector e integracao facil com GitHub. | |
| ## Vantagens | |
| - Deploy com um clique | |
| - PostgreSQL + pgvector pre-configurado | |
| - Integracao com GitHub (deploy automatico) | |
| - Logs e monitoring integrados | |
| - Ambientes de preview para PRs | |
| - CLI poderoso | |
| --- | |
| ## Setup Passo a Passo | |
| ### 1. Criar Conta | |
| 1. Acesse [railway.app](https://railway.app) | |
| 2. Clique em "Start a New Project" | |
| 3. Faca login com GitHub (recomendado) | |
| ### 2. Criar Projeto | |
| #### Opcao A: Projeto Vazio + PostgreSQL | |
| 1. No dashboard, clique em "+ New Project" | |
| 2. Escolha "Empty Project" | |
| 3. Nomeie seu projeto: `rag-template` | |
| #### Opcao B: Deploy do GitHub (Recomendado) | |
| 1. Clique em "+ New Project" | |
| 2. Escolha "Deploy from GitHub repo" | |
| 3. Selecione o repositorio `rag_template` | |
| 4. Railway detectara automaticamente que e um app Python | |
| ### 3. Adicionar PostgreSQL | |
| 1. No seu projeto, clique em "+ New" | |
| 2. Escolha "Database" → "Add PostgreSQL" | |
| 3. Railway criara um banco PostgreSQL automaticamente | |
| ### 4. Habilitar pgvector | |
| Railway usa PostgreSQL padrao. Precisamos habilitar a extensao pgvector: | |
| #### Via Railway CLI | |
| ```bash | |
| # Instale o Railway CLI | |
| npm i -g @railway/cli | |
| # Login | |
| railway login | |
| # Entre no projeto | |
| railway link | |
| # Conecte ao PostgreSQL | |
| railway run psql $DATABASE_URL | |
| # No psql, execute: | |
| CREATE EXTENSION IF NOT EXISTS vector; | |
| \q | |
| ``` | |
| #### Via Connection direto (alternativa) | |
| ```bash | |
| # Copie DATABASE_URL do Railway | |
| # Conecte usando psql local | |
| psql "postgresql://postgres:...@containers.railway.app:5432/railway" | |
| # Execute: | |
| CREATE EXTENSION vector; | |
| ``` | |
| ### 5. Obter Variaveis de Ambiente | |
| No dashboard do Railway: | |
| 1. Clique no servico PostgreSQL | |
| 2. Va para "Variables" | |
| 3. Copie as variaveis necessarias: | |
| ```env | |
| DATABASE_URL=postgresql://postgres:...@containers-us-west-XXX.railway.app:5432/railway | |
| PGHOST=containers-us-west-XXX.railway.app | |
| PGPORT=5432 | |
| PGUSER=postgres | |
| PGPASSWORD=... | |
| PGDATABASE=railway | |
| ``` | |
| ### 6. Configurar Aplicacao | |
| Se deploying no Railway: | |
| 1. Clique no servico da aplicacao | |
| 2. Va para "Variables" | |
| 3. Adicione: | |
| ```env | |
| DATABASE_URL=${{Postgres.DATABASE_URL}} | |
| HF_TOKEN=seu_token_huggingface | |
| PORT=7860 | |
| ``` | |
| **Dica**: `${{Postgres.DATABASE_URL}}` referencia automaticamente o DATABASE_URL do servico PostgreSQL. | |
| ### 7. Configurar Local | |
| Para desenvolvimento local: | |
| ```bash | |
| # .env | |
| DATABASE_URL=postgresql://postgres:...@containers-us-west-XXX.railway.app:5432/railway | |
| HF_TOKEN=seu_token_aqui | |
| ``` | |
| --- | |
| ## Deploy Automatico | |
| ### Conectar GitHub | |
| 1. No servico da aplicacao, va para "Settings" | |
| 2. Em "Source", conecte seu repositorio GitHub | |
| 3. Configure: | |
| - Branch: `main` | |
| - Build command: (Railway detecta automaticamente) | |
| - Start command: `python app.py` | |
| ### Configurar Build | |
| Se necessario, crie um `railway.toml`: | |
| ```toml | |
| [build] | |
| builder = "nixpacks" | |
| [deploy] | |
| startCommand = "python app.py" | |
| healthcheckPath = "/" | |
| healthcheckTimeout = 100 | |
| restartPolicyType = "on_failure" | |
| ``` | |
| Ou use `Procfile`: | |
| ``` | |
| web: python app.py | |
| ``` | |
| ### Deploy Triggers | |
| Agora, a cada push para `main`: | |
| 1. Railway detecta a mudanca | |
| 2. Faz build automatico | |
| 3. Deploy da nova versao | |
| 4. Mantem logs acessiveis | |
| --- | |
| ## Ambientes de Preview | |
| Railway pode criar ambientes de preview para cada PR: | |
| 1. Va para "Settings" do projeto | |
| 2. Habilite "PR Deploys" | |
| 3. Cada PR recebera sua propria URL temporaria | |
| Util para testar mudancas antes do merge! | |
| --- | |
| ## Limites Free Tier | |
| Railway oferece **$5 de credito gratuito por mes**: | |
| | Recurso | Consumo | | |
| |---------|---------| | |
| | PostgreSQL | ~$5/mes (24/7) | | |
| | App (512MB RAM) | ~$5/mes (24/7) | | |
| | Bandwidth | $0.10/GB | | |
| **Estimativa**: Com $5, voce consegue: | |
| - PostgreSQL 24/7 (~$5) | |
| - OU App + PostgreSQL com ~50% uptime | |
| - OU Usar apenas para desenvolvimento (pausar quando nao usar) | |
| **Dicas para economizar**: | |
| 1. **Desenvolvimento**: Use PostgreSQL do Railway, mas rode app localmente | |
| 2. **Producao**: Upgrade para plano Hobby ($5/mes) ou Pro ($20/mes) | |
| 3. **Pausar servicos**: Railway pode pausar servicos sem uso | |
| --- | |
| ## Monitoramento | |
| ### Dashboard | |
| O dashboard do Railway mostra: | |
| - CPU e memoria em tempo real | |
| - Logs de deploy e runtime | |
| - Metricas de rede | |
| - Uso de creditos | |
| ### Logs | |
| ```bash | |
| # Via CLI | |
| railway logs | |
| # Via dashboard | |
| # Clique no servico → "Logs" | |
| ``` | |
| ### Metricas | |
| ```bash | |
| # Via CLI | |
| railway status | |
| # Via dashboard | |
| # Clique no servico → "Metrics" | |
| ``` | |
| --- | |
| ## CLI Avancado | |
| ### Comandos Uteis | |
| ```bash | |
| # Ver status | |
| railway status | |
| # Ver logs em tempo real | |
| railway logs -f | |
| # Executar comandos no contexto do Railway | |
| railway run python manage.py | |
| # Abrir shell no PostgreSQL | |
| railway run psql $DATABASE_URL | |
| # Backup | |
| railway run pg_dump $DATABASE_URL > backup.sql | |
| # Conectar localmente usando variaveis do Railway | |
| railway run python app.py | |
| ``` | |
| ### Variables | |
| ```bash | |
| # Listar variaveis | |
| railway variables | |
| # Adicionar variavel | |
| railway variables add HF_TOKEN=seu_token | |
| # Deletar variavel | |
| railway variables delete OLD_VAR | |
| ``` | |
| --- | |
| ## Configuracoes de Producao | |
| ### Health Checks | |
| Railway pode fazer health checks automaticos: | |
| ```toml | |
| # railway.toml | |
| [deploy] | |
| healthcheckPath = "/health" | |
| healthcheckTimeout = 100 | |
| ``` | |
| Adicione endpoint de health no app: | |
| ```python | |
| # app.py | |
| @app.get("/health") | |
| def health(): | |
| return {"status": "healthy"} | |
| ``` | |
| ### Restart Policy | |
| ```toml | |
| [deploy] | |
| restartPolicyType = "on_failure" | |
| restartPolicyMaxRetries = 3 | |
| ``` | |
| ### Resource Limits | |
| No dashboard, configure: | |
| - Memory: 512MB (free) ate 32GB (paid) | |
| - CPU: Shared (free) ate dedicated (paid) | |
| --- | |
| ## Troubleshooting | |
| ### Erro: "Unable to connect to database" | |
| Verifique: | |
| 1. DATABASE_URL esta correto | |
| 2. Variavel `${{Postgres.DATABASE_URL}}` esta configurada | |
| 3. PostgreSQL esta rodando (veja Metrics) | |
| ### Erro: "pgvector extension not found" | |
| Execute: | |
| ```bash | |
| railway run psql $DATABASE_URL -c "CREATE EXTENSION vector;" | |
| ``` | |
| ### Build Failing | |
| Verifique: | |
| 1. `requirements.txt` esta completo | |
| 2. Python version compativel (configure em Settings) | |
| 3. Logs de build para erros especificos | |
| ### App Crashing | |
| 1. Veja logs: `railway logs` | |
| 2. Verifique variaveis de ambiente | |
| 3. Teste localmente: `railway run python app.py` | |
| --- | |
| ## Migracao | |
| ### De Local para Railway | |
| ```bash | |
| # Dump local | |
| pg_dump -h localhost -U postgres ragdb > dump.sql | |
| # Restore no Railway | |
| railway run psql $DATABASE_URL < dump.sql | |
| ``` | |
| ### De Outro Provider | |
| ```bash | |
| # De Supabase/Neon | |
| pg_dump "postgresql://..." > dump.sql | |
| # Para Railway | |
| railway run psql $DATABASE_URL < dump.sql | |
| ``` | |
| --- | |
| ## Upgrade de Plano | |
| | Plano | Credito/mes | Recursos | Preco | | |
| |-------|-------------|----------|-------| | |
| | Free | $5 | Compartilhado | $0 | | |
| | Hobby | $5 + $5 uso | Dedicado leve | $5/mes | | |
| | Pro | $20 + uso | Dedicado completo | $20/mes | | |
| **Quando fazer upgrade**: | |
| - App precisa rodar 24/7 | |
| - Mais de 512MB RAM | |
| - Suporte prioritario | |
| Veja: [railway.app/pricing](https://railway.app/pricing) | |
| --- | |
| ## Integracao com GitHub Actions | |
| Voce pode usar Railway CLI no GitHub Actions: | |
| ```yaml | |
| # .github/workflows/deploy.yml | |
| name: Deploy to Railway | |
| on: | |
| push: | |
| branches: [main] | |
| jobs: | |
| deploy: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v3 | |
| - name: Install Railway CLI | |
| run: npm i -g @railway/cli | |
| - name: Deploy | |
| run: railway up | |
| env: | |
| RAILWAY_TOKEN: ${{ secrets.RAILWAY_TOKEN }} | |
| ``` | |
| --- | |
| ## Database Branching | |
| Railway ainda nao tem branching nativo como Neon, mas voce pode: | |
| 1. **Criar multiplos projetos**: | |
| - `rag-template-prod` | |
| - `rag-template-dev` | |
| 2. **Usar Railway Environments**: | |
| - production | |
| - staging | |
| - development | |
| Cada environment pode ter suas proprias variaveis. | |
| --- | |
| ## Recursos Adicionais | |
| - [Documentacao Railway](https://docs.railway.app) | |
| - [Railway CLI](https://docs.railway.app/develop/cli) | |
| - [Deploy Guide](https://docs.railway.app/deploy/deployments) | |
| - [Discord](https://discord.gg/railway) | |
| --- | |
| ## Comparacao com Outros Provedores | |
| Veja [DATABASE_COMPARISON.md](DATABASE_COMPARISON.md) para comparar Railway com Supabase, Neon e outros. | |
| --- | |
| **Proximo passo**: [Voltar ao README](../README.md) ou configurar deploy! | |