name: obsidian-vault-web-server
description: >-
Servir um vault Obsidian (pasta de arquivos .md) como site no browser, usando
um servidor Node.js simples no VPS. Alternativa ao Quartz quando este tem
problemas de build. Útil para acessar notas Obsidian via browser de qualquer lugar.
category: devops
Obsidian Vault — Web Server
Servir um vault Obsidian como site no browser, acessível via HTTPS no VPS.
Quando usar
- - Quartz v5 dá erro de build (
Could not resolve "../../.quartz/plugins") - - Não quer usar Obsidian no PC (prefere acesso 100% cloud)
- - Precisa de solução rápida e funcional
- - Vault deletado acidentalmente:
quartz create -X copypode sobrescrever o vault. Sempre fazergit pushantes de testes com o vault. Em caso de perda:git clonedo repo GitHub. - - Quartz v5 build error: Erro
Could not resolve "../../.quartz/plugins"— não resolver, usar esta alternativa em vez de perder tempo debugando. - - nginx config via heredoc:
$no heredoc é expandido pelo shell local. Usarwrite_filelocal +scppara VPS. - - Crontab duplicate: Sempre filtrar linhas existentes antes de adicionar novo cron (usar
grep -v).
Arquitetura
`
VPS: Node.js server (porta 3099)
↓ nginx proxy_pass
https://obsidian.seudominio.com.br
↓
/var/www/obsidian-vault/ (vault .md)
`
Passo a passo
1. Criar servidor Node.js
Salvar em /var/www/obsidian-site/index.js (ou usar write_file + scp):
`javascript
const http = require('http');
const fs = require('fs');
const path = require('path');
const url = require('url');
const PORT = 3099;
const VAULT_PATH = '/var/www/obsidian-vault';
// ... (servidor completo com renderização de markdown)
`
2. Subir e testar
`bash
node /var/www/obsidian-site/index.js &
curl http://127.0.0.1:3099/
`
3. Configurar nginx (subdomain existente com SSL)
Criar em /etc/nginx/sites-available/SEU_DOMINIO:
`nginx
server {
listen 80;
server_name SEU_DOMINIO;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl;
server_name SEU_DOMINIO;
ssl_certificate /etc/letsencrypt/live/SEU_DOMINIO/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/SEU_DOMINIO/privkey.pem;
location / {
proxy_pass http://127.0.0.1:3099;
proxy_http_version 1.1;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
`
`bash
nginx -t && nginx -s reload
`
4. Criar serviço systemd (permanente)
`bash
cat > /etc/systemd/system/obsidian-site.service << 'EOF'
[Unit]
Description=Obsidian Vault Web Server
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/node /var/www/obsidian-site/index.js
Restart=always
RestartSec=5
User=root
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable obsidian-site
systemctl start obsidian-site
`
5. Configurar sync com GitHub
`bash
cat > /usr/local/bin/obsidian-sync.sh << 'SCRIPT'
#!/bin/bash
cd /var/www/obsidian-vault
git add -A
git diff --cached --quiet || { git commit -m "auto-sync $(date +%Y-%m-%d\ %H:%M)" && git push origin main; }
SCRIPT
chmod +x /usr/local/bin/obsidian-sync.sh
Push a cada 5 min
(crontab -l 2>/dev/null | grep -v 'obsidian-sync'; echo '/5 * /usr/local/bin/obsidian-sync.sh >> /var/log/obsidian-sync.log 2>&1') | crontab -
Pull a cada 1 min (mantém vault atualizado de outros dispositivos)
(crontab -l 2>/dev/null | grep -v 'git pull.obsidian-vault'; echo ' cd /var/www/obsidian-vault && git pull origin main >> /var/log/obsidian-sync.log 2>&1') | crontab -
`
Armadilhas
Verificação
`bash
Site no ar
curl -s -I https://SEU_DOMINIO/
Serviço rodando
systemctl status obsidian-site
Logs
journalctl -u obsidian-site -f
`