Server Handover — gravlax

gravlax is the application server (replacement for noodle). AWS eu-north-1, ARM t4g.small, Debian 12. Provisioned via launch_instance.yml, configured via setup_server.yml.

Deploy

ansible-playbook setup_server.yml -e "target=gravlax region=eu-north-1" -e @secrets.yml

Use --tags to run a subset: socks, stunnel, gdata, mcp, apache, certs, ports.

Services

ServicePortNotes
dante SOCKS51080loopback only, reached via stunnel
stunnel (socks)11080TLS wrapper for SOCKS5
gdata-mcp-server REST8020notes REST API + OAuth + web UI
gdata-mcp-server MCP8023MCP StreamableHTTP + SSE
stunnel (notes)18021TLS wrapper — unused externally, kept for CLI
stunnel (mcp)18023TLS wrapper for MCP port
Apache80 / 443www / cv / webdav vhosts

Public URLs

Key Files

FilePurpose
~/ansible/setup_server.ymlMain deployment playbook
~/ansible/secrets.ymlSecrets — not in git, copy manually to new controllers
~/ansible/files/apache/Apache vhost configs
~/py/gdata-server/gdata-mcp-server source
~/ssl/C/CA/cert + keySelf-signed CA cert for stunnel mutual TLS

Apache Proxy Map

Public pathBackend
/notes/127.0.0.1:8020/notes/ (JSONHTL renderer)
/api/127.0.0.1:8020/ (REST, Basic Auth)
/mcp127.0.0.1:8023/mcp (Bearer Auth)
/oauth/127.0.0.1:8020/oauth/
/.well-known/oauth-*127.0.0.1:8020/.well-known/...

Stunnel Note

systemctl restart stunnel4 does not kill the old daemon. After a config change: sudo pkill -f 'stunnel /etc/stunnel' && sudo stunnel /etc/stunnel/stunnel.conf.