feat(mcp-docugen): scaffold service + Docker stack con gateway Caddy

Task 0 del piano (adattato a workspace uv):
- services/mcp-docugen/: pyproject.toml, src/mcp_docugen/, tests/unit+integration/,
  README, .env.example. Package rinominato da docugen_mcp -> mcp_docugen.
- Root pyproject.toml: aggiunto services/mcp-docugen a workspace members.
- .python-version: 3.11
- uv.lock committato.

Docker stack stile CerberoSuite/Cerbero con prefisso "arca-":
- docker/base.Dockerfile -> arca-base:latest
- docker/mcp-docugen.Dockerfile -> arca-mcp-docugen:dev (porta interna 9100,
  label arca.service, runtime multi-stage, user non-root, healthcheck)
- docker-compose.yml root: gateway Caddy unica porta host (8080) + mcp-docugen
  su rete interna. Security defaults cap_drop ALL, no-new-privileges, read_only
  ove applicabile, restart unless-stopped.
- gateway/Caddyfile: reverse proxy /mcp-docugen/* -> mcp-docugen:9100 + landing.
- gateway/public/index.html: landing page minimale.

.env.example root aggiornato con DOCUGEN_API_KEY + OPENROUTER_API_KEY condivisa.

Task 1-12 (implementazione TDD effettiva) ancora da fare.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
2026-04-21 12:16:22 +02:00
parent 7b169fb8db
commit c5e84a578b
16 changed files with 1692 additions and 8 deletions
+21
View File
@@ -0,0 +1,21 @@
{
admin off
auto_https off
}
:8080 {
log {
output stdout
format console
}
handle_path /mcp-docugen/* {
reverse_proxy mcp-docugen:9100
}
# Landing page statica
handle {
root * /srv
file_server
}
}
+30
View File
@@ -0,0 +1,30 @@
<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>ArcaSuite</title>
<style>
body {
font-family: system-ui, sans-serif;
max-width: 640px;
margin: 3em auto;
padding: 0 1em;
color: #222;
background: #fafafa;
}
h1 { font-weight: 500; }
ul { padding-left: 1.2em; }
code { background: #eee; padding: 0.1em 0.3em; border-radius: 3px; }
a { color: #0366d6; text-decoration: none; }
a:hover { text-decoration: underline; }
</style>
</head>
<body>
<h1>ArcaSuite</h1>
<p>MCP server stack — gateway Caddy. Servizi attivi esposti come path:</p>
<ul>
<li><a href="/mcp-docugen/health">/mcp-docugen/</a> — generazione Markdown da template + LLM</li>
</ul>
<p><small>Accesso via MCP richiede header <code>Authorization: Bearer &lt;API_KEY&gt;</code>.</small></p>
</body>
</html>