00-overview.md (2919B)
1 # Visão geral 2 3 [← Índice](README.md) 4 5 ## O que é o runv-server 6 7 Repositório de **scripts (principalmente Python 3, biblioteca padrão)**, conteúdo estático web e documentação para operar um servidor **pubnix** estilo tilde (**runv.club**) em **Debian**. Não é uma aplicação web monolítica (sem `package.json` na raiz do produto). 8 9 ## Âmbito do repositório 10 11 - **Infraestrutura:** bootstrap (`starthere.py`), quotas ext4, Apache, UFW, ferramentas globais (`tools.py`). 12 - **Site público:** landing estática em `site/public/`, geração de Apache (`genlanding.py`), dados públicos de membros (`build_directory.py`). 13 - **Email transacional:** Mailgun HTTP por defeito; modo legado SMTP/msmtp (`email/`). 14 - **Pedidos de conta:** fluxo SSH ao utilizador `entre` (`terminal/`) — **fila em JSON**, sem criar contas Unix automaticamente. 15 - **Provisionamento canónico:** `scripts/admin/create_runv_user.py` cria utilizador Unix, home, jail, quota, metadados. 16 17 ## Resumo arquitetural 18 19 | Componente | Responsabilidade | 20 |------------|------------------| 21 | `terminal/` | Recolher, validar, enfileirar pedidos; **não** faz `adduser` de membros. | 22 | `create_runv_user.py` | **Única** fonte canónica do fluxo de criação de conta membro (ordem documentada na docstring). | 23 | `users.json` | Metadados dos membros no servidor (`/var/lib/runv/users.json`). | 24 | Fila `entre-queue/` | Pedidos pendentes de revisão humana antes do provisionamento. | 25 | `build_directory.py` | Lê `users.json` → gera `members.json` **filtrado** para o site. | 26 27 Diagrama: [diagrams/architecture.mmd](diagrams/architecture.mmd). 28 29 ## Ciclo de vida de um novo membro 30 31 1. Visitante liga `ssh entre@…` e preenche o fluxo guiado. 32 2. Gera-se um ficheiro JSON na fila (`/var/lib/runv/entre-queue/`). 33 3. **Admin** revê o pedido e executa `create_runv_user.py` (root). 34 4. Actualiza-se `users.json`; opcionalmente regera-se `DocumentRoot/data/members.json` (constelação na landing). 35 5. O membro aparece na lista pública **só** com campos não sensíveis. 36 37 Diagrama: [diagrams/member-flow.mmd](diagrams/member-flow.mmd). 38 39 ## Fronteira dados públicos / privados 40 41 - **Público (`members.json`):** apenas o que `build_directory.py` escreve: `username`, `since`, `path`, opcionalmente `homepage_mtime` (com `--homes-root`). Ver [07-public-members-directory.md](07-public-members-directory.md). 42 - **Privado:** email, fingerprint de chave, quotas detalhadas, campos internos de `users.json` **não** são copiados para o JSON público (garantido no código de `build_directory.py`). 43 44 ## Fontes de verdade 45 46 1. **Código** dos scripts referidos neste índice. 47 2. O **`INSTALL.md` da raiz** e a documentação `.md` nos módulos foram **substituídos** por esta árvore `docs/` (conteúdo absorvido e harmonizado; ver `DOCS_REBUILD_CHANGELOG.md`). 48 3. Docstrings de `starthere.py`, `create_runv_user.py`, `setup_entre.py`, `genlanding.py`, etc.