diff --git a/README.md b/README.md index a31da67..90a4463 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,6 @@ Servidores standalone gerenciados individualmente. - [**Redbull**](./vps/redbull/README.md): Servidor de Desenvolvimento (Coolify PaaS). IP: 185.194.141.70 - https://redbull.rede5.com.br - [**Echo**](./vps/echo/README.md): Servidor VPS Civo. IP: 152.53.120.181 -- [**Apolo**](./vps/apolo/README.md): Servidor de Producao/Staging (Podman + Systemd). IP: 45.143.7.55 - [**Vim**](./vps/vim/README.md): Servidor de Producao (Dokku PaaS). IP: 38.19.201.52 - [**NC1**](./vps/nc1/README.md): Servidor de Producao (Podman + Systemd). IP: 185.194.141.70 diff --git a/vps/apolo/README.md b/vps/apolo/README.md deleted file mode 100644 index 4a25d96..0000000 --- a/vps/apolo/README.md +++ /dev/null @@ -1,33 +0,0 @@ -# Infraestrutura Apolo VPS - -Documentação oficial do servidor **Apolo**, responsável por hospedar o ecossistema de produção/staging de diversas aplicações (SaveInMed, ObraMarket, Farmácia, etc.). - -## 🖥️ Acesso Rápido - -- [Arquitetura Detalhada](./architecture.md) - Diagrama de conexões e subsistemas. -- [Inventário de Serviços](./services_inventory.md) - Tabela de containers, portas mapeadas e domínios. -- [Guia de Deploy](./deployment_guide.md) - Padrões para publicação de serviços. - -## 📊 Especificações do Sistema - -| Propriedade | Valor | -|-------------|-------| -| **Hostname** | `apolo.rede5.com.br` | -| **IP Público** | `45.143.7.55` | -| **OS** | AlmaLinux 9.7 (Moss Jungle Cat) | -| **Kernel** | Linux 5.14.0 | -| **CPU** | AMD EPYC (Virtual) | -| **RAM** | 7.5 GB | -| **Disco** | 60 GB (33 GB usado) | - -## 🛠️ Stack Tecnológico - -- **Container Engine**: Podman (Rootless/Root). -- **Service Manager**: Systemd via **Quadlet**. -- **Reverse Proxy**: Traefik v3.0 (Gerencia HTTP/HTTPS e TCP). -- **Databases**: - - PostgreSQL 17 (Main) - - PostgreSQL 16 (Forgejo) - - Redis 7 (GoHorseJobs & Cache) -- **Registry**: Zot (Container Register Privado). -- **CI/CD**: Forgejo Runner. diff --git a/vps/apolo/architecture.md b/vps/apolo/architecture.md deleted file mode 100644 index 783ecac..0000000 --- a/vps/apolo/architecture.md +++ /dev/null @@ -1,137 +0,0 @@ -# Arquitetura do Sistema Apolo - -Diagrama detalhado dos serviços hospedados no servidor Apolo. - -```mermaid -flowchart LR - %% Nós Externos - Internet((Internet)) -->|HTTPS/443| T[Traefik Proxy] - Internet -->|SSH/2323| FG[Forgejo Git] - - %% Core Infra - subgraph Core ["Infraestrutura Core"] - direction TB - FG[Forgejo] - PGADM[pgAdmin] - ZOT[Zot Registry] - GL[Glances Mon] - runner[Forgejo Runner] - end - - %% Databases - subgraph Data ["Camada de Dados"] - PG[(PostgreSQL Main)] - PG_FG[(PostgreSQL Forgejo)] - RD[(Redis GoHorse)] - end - - %% SaveInMed Ecosystem - subgraph SaveInMed ["SaveInMed"] - SIM_BE[Backend API] - SIM_BO[Backoffice] - SIM_MK[Marketplace] - SIM_SD[Seeder] - SIM_WEB[Website] - end - - %% RodiziosDaqui Ecosystem - subgraph Rodizio ["Rodízios Daqui"] - RD_BE[Backend] - RD_BO[Backoffice] - RD_FE[Frontend] - RD_SD[Seeder] - end - - %% ObraMarket Ecosystem - subgraph Obra ["ObraMarket"] - OM_BE[Backend] - OM_BO[Backoffice] - OM_FE[Frontend] - OM_SD[Seeder] - end - - %% Outros Apps - subgraph Apps ["Outras Aplicações"] - FARM_BE[Farmácia Backend] - FARM_FE[Farmácia Frontend] - VEST_BE[Vestuário Backend] - VEST_FE[Vestuário Frontend] - Q1_BE[Q1 Agenda BE] - Q1_FE[Q1 Agenda FE] - end - - %% Roteamento Traefik - T --> FG - T --> PGADM - T --> ZOT - T --> GL - - T --> SIM_BE - T --> SIM_BO - T --> SIM_MK - T --> SIM_SD - T --> SIM_WEB - - T --> RD_BE - T --> RD_BO - T --> RD_FE - T --> RD_SD - - T --> OM_BE - T --> OM_BO - T --> OM_FE - T --> OM_SD - - T --> FARM_BE - T --> FARM_FE - T --> VEST_BE - T --> VEST_FE - T --> Q1_BE - T --> Q1_FE - - %% TCP Routing (Bancos expostos) - T -.->|TCP/27537| PG - T -.->|TCP/26380| RD - - %% Conexões de Dados - FG --> PG_FG - runner --> FG - - SIM_BE --> PG - SIM_BO --> PG - SIM_SD --> PG - - RD_BE --> PG - RD_BO --> PG - RD_SD --> PG - - OM_BE --> PG - OM_BO --> PG - OM_SD --> PG - - FARM_BE --> PG - VEST_BE --> PG - Q1_BE --> PG - - %% Legenda de Estilo - linkStyle default stroke-width:1px,fill:none,stroke:gray; -``` - -## Descrição dos Subsistemas - -### 🌐 Traefik Proxy -O Traefik atua como gateway principal. Além de rotear tráfego HTTP/HTTPS (portas 80/443), ele também expõe serviços TCP como banco de dados (27537) e Redis (26380) para acesso externo controlado. - -### 🏭 Infraestrutura & CI/CD -- **Forgejo**: Servidor Git self-hosted (codeberg fork). Possui banco de dados próprio (`forgejo-db`). -- **Zot**: Registry de containers para imagens privadas. -- **Glances**: Monitoramento de recursos do servidor. - -### 🏥 SaveInMed -Ecossistema completo de saúde, incluindo Backend, Backoffice administrativo, Marketplace e Site institucional. - -### 🏗️ ObraMarket e 🍕 RodíziosDaqui -Plataformas que seguem arquitetura similar: Backend API, Backoffice Admin, Frontend Web e Seeder (para popular dados). - -### 🛒 Farmácia e Vestuário -Lojas/Apps específicos, compostos por pares de Backend/Frontend. diff --git a/vps/apolo/deployment_guide.md b/vps/apolo/deployment_guide.md deleted file mode 100644 index 8924605..0000000 --- a/vps/apolo/deployment_guide.md +++ /dev/null @@ -1,132 +0,0 @@ -# Guia de Deploy e Manutenção - Apolo - -Este guia descreve o processo completo para implantar, atualizar e manter serviços na VPS Apolo utilizando Podman e Quadlet, seguindo o padrão da infraestrutura. - -## 🚀 Adicionando um Novo Serviço - -O **Quadlet** permite declarar containers como serviços `systemd`. Siga estes passos para criar um novo. - -### 1. Preparação -Escolha onde o arquivo ficará: -- **Global (Root)**: `/etc/containers/systemd/` (Padrão para serviços core/produção). -- **Usuário**: `~/.config/containers/systemd/` (Recomendado para experimentos ou serviços pessoais). - -> **Nota:** A maioria dos serviços no Apolo roda como **root** em `/etc/containers/systemd/` para acesso facilitado a portas baixas e volumes globais, mas o modo rootless é suportado. - -### 2. Criar o Arquivo `.container` - -Crie um arquivo com sufixo `.container`, por exemplo, `meu-app.container`. - -```ini -[Unit] -Description=Meu App Exemplo -After=network-online.target - -[Container] -# 1. Imagem Docker -Image=docker.io/minha-empresa/meu-app:latest -AutoUpdate=registry - -# 2. Variáveis de Ambiente -Environment=PORT=3000 -Environment=DB_HOST=postgres-main - -# 3. Persistência (opcional) -Volume=/mnt/data/meu-app:/app:Z -# Explicação: -# - /mnt/data/meu-app : Pasta no Host (Servidor) -# - /app : Pasta dentro do Container -# - :Z : Configura permissão SELinux (Essencial no AlmaLinux) - -# 4. Rede e Exposição (Traefik) -Network=web_proxy -Label=traefik.enable=true - -# Roteamento de Host (URL) -Label=traefik.http.routers.meu-app.rule=Host(`app.rede5.com.br`) -Label=traefik.http.routers.meu-app.entrypoints=websecure -Label=traefik.http.routers.meu-app.tls.certresolver=myresolver - -# Porta Interna do Container (Load Balancer) -Label=traefik.http.services.meu-app.loadbalancer.server.port=3000 - -# Middleware (Ex: Redirect HTTP->HTTPS) - Opcional se entrypoints já for websecure -# Label=traefik.http.middlewares.https-redirect.redirectscheme.scheme=https - -[Install] -WantedBy=multi-user.target -``` - -### 3. Aplicar as Alterações - -O systemd precisa ler o novo arquivo e gerar o serviço correspondente. - -```bash -# Se criado como Root (Padrão Apolo) -sudo systemctl daemon-reload -sudo systemctl start meu-app - -# Se criado como Usuário -systemctl --user daemon-reload -systemctl --user start meu-app -``` - ---- - -## 🔄 Atualizando um Serviço - -Se a imagem estiver configurada com `AutoUpdate=registry`, o Podman pode atualizar automaticamente. Para fazer manual: - -1. **Baixar nova imagem**: `podman pull docker.io/minha-empresa/meu-app:latest` -2. **Reiniciar serviço**: `systemctl restart meu-app` - ---- - -## 🛠️ Troubleshooting - -### Verificar Status do Serviço -```bash -systemctl status meu-app -``` - -### Ver Logs da Aplicação -```bash -# Follow logs em tempo real -journalctl -f -u meu-app - -# Ver logs anteriores -journalctl -u meu-app -n 100 -``` - -### O Container não sobe? -1. Verifique erros de sintaxe no arquivo `.container`: - ```bash - /usr/libexec/podman/quadlet -dryrun - ``` -2. Verifique se a porta está em uso. -3. Verifique se a imagem existe e foi baixada. - -### O domínio não responde (Erro 404/502)? -1. Verifique se o container está na rede `web_proxy`. -2. Confira se a `port` no Label do Traefik bate com a porta que a aplicação escuta internamente. -3. Veja os logs do Traefik: `journalctl -f -u traefik` - ---- - -## 📂 Estrutura de Diretórios Recomendada - -Mantenha os volumes organizados em `/mnt/data/`: - -```text -/mnt/data/ -├── postgres-general/ # Banco de Dados Principal -├── redis-gohorsejobs/ # Redis Dedicado -├── saveinmed/ -│ ├── backend/ -│ │ └── .env -│ ├── marketplace/ -│ └── ... -├── farmacia/ -├── obramarket/ -└── [nome-do-projeto]/ -``` diff --git a/vps/apolo/services_inventory.md b/vps/apolo/services_inventory.md deleted file mode 100644 index d9dc797..0000000 --- a/vps/apolo/services_inventory.md +++ /dev/null @@ -1,56 +0,0 @@ -# Inventário de Serviços Apolo - -## Tabela Geral de Serviços - -| Serviço | Container | Domínio / URL | Porta Interna | Banco de Dados | -|---------|-----------|---------------|:-------------:|----------------| -| **Traefik** | `traefik` | n/a | 80/443 | - | -| **Forgejo Git** | `forgejo` | `forgejo-gru.rede5.com.br` | 3000 | `forgejo-db` | -| **Forgejo SSH** | `forgejo` | `forgejo-gru.rede5.com.br` | 22 (Ext: 2323) | - | -| **Zot Registry** | `zot` | `zot-gru.rede5.com.br` | 5000 | - | -| **pgAdmin** | `pgadmin` | `pgadmin.rede5.com.br` | 80 | - | -| **Glances** | `glances` | `gms1.rede5.com.br` | 61208 | - | -| **Farmácia BE** | `farmacia-backend` | `api.farmacia.rede5.com.br` | 8080 | Postgres Main | -| **Farmácia FE** | `farmacia-frontend` | `farmacia.rede5.com.br` | 3000 | - | -| **ObraMarket BE** | `obramarket-backend` | `api.obramarket.rede5.com.br` | 8158 | Postgres Main | -| **ObraMarket BO** | `obramarket-backoffice` | `admin.obramarket.rede5.com.br` | 3000 | - | -| **ObraMarket FE** | `obramarket-frontend` | `obramarket.rede5.com.br` | 80 | - | -| **Q1Agenda BE** | `q1agenda-backend-dev` | `api-dev.q1agenda.com.br` | 8000 | Postgres Main | -| **Q1Agenda FE** | `q1agenda-frontend-dev` | `dev.q1agenda.com.br` | 3000 | - | -| **Rodízios BE** | `rodiziosdaqui-backend` | `api.rodiziosdaqui.rede5.com.br` | 8080 | Postgres Main | -| **Rodízios BO** | `rodiziosdaqui-backoffice` | `backoffice.rodiziosdaqui...` | 8082 | - | -| **Rodízios FE** | `rodiziosdaqui-frontend` | `rodiziosdaqui.rede5.com.br` | 3000 | - | -| **SaveInMed BE**| `saveinmed-backend-dev` | `api.saveinmed.com.br` | 8214 | Postgres Main | -| **SaveInMed BO**| `saveinmed-backoffice-dev` | `admin.saveinmed.com.br` | 3000 | - | -| **SaveInMed MK**| `saveinmed-marketplace-dev`| `app.saveinmed.com.br` | 3000 | - | -| **SaveInMed Site**| `saveinmed-website-dev` | `saveinmed.com.br` | 8000 | - | -| **Vestuário BE**| `vestuario-backend` | `api.vestuario.rede5.com.br` | 8000 | Postgres Main | -| **Vestuário FE**| `vestuario-frontend` | `vestuario.rede5.com.br` | 3000 | - | - -## Infraestrutura de Dados - -### PostgreSQL Main (`postgres-main`) -- **Versão**: 17-alpine -- **Exposição**: Interna (5432) e Externa via Traefik (TCP 27537). -- **Volume**: `/mnt/data/postgres-general` - -### PostgreSQL Forgejo (`forgejo-db`) -- **Versão**: 16-alpine -- **Uso**: Exclusivo para o Forgejo. -- **Volume**: `/mnt/data/postgres-forgejo` - -### Redis GoHorseJobs (`redis-gohorsejobs`) -- **Config**: Persistência ativada (`appendonly yes`), limite 128MB. -- **Exposição**: Interna (6379) e Externa via Traefik (TCP 26380). -- **Volume**: `/mnt/data/redis-gohorsejobs` - -## Portas Públicas Publicadas (Node Ports) - -Alguns containers publicam portas diretamente no host (além do Traefik), mas o acesso ideal é via domínio. - -- **80/443**: Traefik (Web) -- **2323**: Forgejo SSH -- **12110/12112**: Farmácia -- **12120/12123**: RodíziosDaqui -- **8214**: SaveInMed Backend -- **12111/12113**: Vestuário