diff --git a/Caddyfile b/Caddyfile index cbf9fc3..95fe91a 100644 --- a/Caddyfile +++ b/Caddyfile @@ -1,3 +1,8 @@ +tomasrivera.ch { + root * /srv/www + file_server +} + archive.tomasrivera.ch { reverse_proxy archivebox:8000 } diff --git a/compose.yml b/compose.yml index 67a19c0..1170b7b 100644 --- a/compose.yml +++ b/compose.yml @@ -17,6 +17,7 @@ services: - ./Caddyfile:/etc/caddy/Caddyfile:ro - caddy_data:/data - caddy_config:/config + - /home/tomasr/vps-config/web-server:/srv/www extra_hosts: - "host.docker.internal:host-gateway" diff --git a/web-server/index.html b/web-server/index.html new file mode 100644 index 0000000..6545bf0 --- /dev/null +++ b/web-server/index.html @@ -0,0 +1,70 @@ + + + + + + Private VPS Server + + + + +
+
+

Private VPS Server

+

+ Welcome to my private server. This VPS hosts my personal services, + tools, and applications that I use for productivity, archiving, + reading, and managing my own data. Everything here is self-hosted + and maintained by me. +

+
+ +
+

Self-hosting

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
URLNameDescription
archive.tomasrivera.chArchiveBoxPersonal web archive for saving webpages, articles, and online content.
video-archive.tomasrivera.chFileBrowserWeb archive of videos as I can't get ArchiveBox to use yt-dlp correctly
hledger.tomasrivera.chhledger-webWeb version of hledger, a robust, friendly, fast plain text accounting software +
rss.tomasrivera.chFreshRSSSelf-hosted RSS reader for following websites and news feeds.
tomasrivera.chPersonal WebsiteThis homepage served directly by Caddy.
+
+

All of these services behind a login screen. If you need acces to one of these services, contact me.

+

This vps config is hosted on GitHub

+
+ + diff --git a/web-server/style.css b/web-server/style.css new file mode 100644 index 0000000..ae0b5d4 --- /dev/null +++ b/web-server/style.css @@ -0,0 +1,74 @@ +:root { + font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; + color: #222; + background: #f5f5f5; +} + +body { + margin: 0; + padding: 2rem; +} + +main { + max-width: 900px; + margin: auto; + background: white; + padding: 2.5rem; + border-radius: 12px; +} + +h1 { + margin-top: 0; + font-size: 2.2rem; +} + +h2 { + margin-top: 2.5rem; + border-bottom: 1px solid #ddd; + padding-bottom: 0.5rem; +} + +p { + line-height: 1.6; + color: #555; +} + +table { + width: 100%; + border-collapse: collapse; + margin-top: 1rem; +} + +th { + text-align: left; + background: #f0f0f0; +} + +th, +td { + padding: 0.75rem; + border-bottom: 1px solid #ddd; +} + +a { + color: #0066cc; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +@media (max-width: 700px) { + body { + padding: 1rem; + } + + main { + padding: 1.5rem; + } + + table { + font-size: 0.9rem; + } +}