notes.domain.com - Initial Deployment
Date: 2026-06-02
Goal
Create a public read-only knowledge base based on Obsidian notes.
Target architecture:
Obsidian Notes
↓
Quartz
↓
Nginx
↓
notes.domain.comInitial Environment
Server:
Host: ubuntu-4gb-nbg1-1
Provider: Hetzner
OS: Ubuntu 24.04 LTSDomain:
notes.domain.comDNS:
notes.domain.com
→ 123.124.125.126Existing infrastructure:
Nginx
Let's Encrypt
code-server
ttyd
lab.domain.comCreate Quartz Project
Create project directory:
sudo mkdir -p /srv/lab/projects
sudo chown -R terri:lab /srv/lab/projects
cd /srv/lab/projectsClone Quartz:
git clone https://github.com/jackyzha0/quartz.git notes-site
cd notes-siteInstall dependencies:
npm installInitialize Quartz
Run:
npx quartz createSelected options:
Template:
Obsidian
Content Initialization:
Empty Quartz
Base URL:
notes.domain.comResult:
Quartz configuration created
content/
quartz.config.ts
quartz.layout.tsBuild Site
Build static website:
npx quartz buildOutput generated:
public/Verify:
ls -la publicExpected:
index.html
404.html
sitemap.xml
static/
...Configure Nginx
Create site:
sudo vim /etc/nginx/sites-available/notes.domain.comConfiguration:
server {
listen 80;
listen [::]:80;
server_name notes.domain.com;
root /srv/lab/projects/notes-site/public;
index index.html;
location / {
try_files $uri $uri/ =404;
}
}Enable site:
sudo ln -s \
/etc/nginx/sites-available/notes.domain.com \
/etc/nginx/sites-enabled/Validate:
sudo nginx -tReload:
sudo systemctl reload nginxFix Permission Issue
Initial test:
curl -I http://notes.domain.comResult:
404 Not FoundInvestigation:
namei -l /srv/lab/projects/notes-site/public/index.htmlFound:
/srv/labwas not traversable by nginx user.
Directory:
drwxrws--- terri lab /srv/labSolution:
Add nginx user to lab group:
sudo usermod -aG lab www-data
sudo systemctl restart nginxRetest:
curl -I http://notes.domain.comResult:
HTTP/1.1 200 OKConfigure HTTPS
Issue certificate:
sudo certbot --nginx -d notes.domain.comEnable redirect:
HTTP → HTTPSVerification:
curl -I https://notes.domain.comResult:
HTTP 200 OKFirst Published Note
Edit:
cd /srv/lab/projects/notes-site/content
vim index.mdExample:
# Welcome to Tri's common place book
This is a page to record knowledge and tools which I use during work.
It is also a common place book which I can access everywhere.
Created on 2026-06-02.Rebuild:
cd /srv/lab/projects/notes-site
npx quartz buildRefresh browser.
Result:
https://notes.domain.comsuccessfully displays custom content.
Final State
Infrastructure:
notes.domain.com
↓
Nginx
↓
Quartz static files
↓
/srv/lab/projects/notes-site/publicProject location:
/srv/lab/projects/notes-sitePublish workflow:
Edit content/*
↓
npx quartz build
↓
Refresh browserLessons Learned
-
Quartz setup is straightforward once Node.js is available.
-
Nginx may return 404 due to filesystem traversal permissions, even when configuration is correct.
-
Group permissions on
/srv/labmatter because nginx runs aswww-data. -
Build output is static files only; no application server is required.
-
Publishing new notes currently requires only:
npx quartz buildFuture Work
Repository
Create personal repository:
github.com/domain/notes-siteCurrent repository still points to Quartz upstream.
Publishing Workflow
Investigate:
ExternBrain
↓
Selected Notes
↓
Quartz Content
↓
BuildAutomation
Potential future workflow:
git pull
npx quartz buildor
git push
↓
CI/CD
↓
Auto-buildLabserver Improvements
Pending:
Copy/Paste issue in ttyd + Zellij
Persistent Zellij workspace
Project organization
Workspace automation
Backups