<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Self-hosting on East of the Sun, West of the Moon</title>
    <link>https://is-here.com/tags/self-hosting/</link>
    <description>Recent content in Self-hosting on East of the Sun, West of the Moon</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <copyright>Erwin Harte</copyright>
    <lastBuildDate>Sun, 13 Jul 2025 00:00:00 +0000</lastBuildDate><atom:link href="https://is-here.com/tags/self-hosting/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Moving to Europe (part 2)</title>
      <link>https://is-here.com/post/2025/07/moving-to-europe-part-2/</link>
      <pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate>
      
      <category>Terraform</category><category>Self-hosting</category><category>LetsEncrypt</category><category>Hetzner</category><category>Scaleway</category><comments>https://strangeweb.page/@jochie/115794020313176152</comments><guid>https://is-here.com/post/2025/07/moving-to-europe-part-2/</guid>
      <description>
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
The saga continues
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;After I moved my (three) domains, most of the DNS, and my static websites to Europe I got side-tracked. An interaction with a former colleague nudged me to pick that back up.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-2&#34;&gt;
Services
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;When I last wrote about it I thought I would land on UpCloud or Scaleway for a virtual server (or two), but now I&amp;#39;m actually working with a virtual server at Hetzner. They do things a little bit differently, so I&amp;#39;m still getting used to that. Both have &lt;em&gt;projects&lt;/em&gt;, which feels like the mental model equivalent of AWS VPCs? Hetzner has performance/usage graphs integrated into their web UI, whereas Scaleway has a hosted Grafana service (for which you need to create a dedicated user). Hetzner&amp;#39;s virtual servers seem more generous with their root volumes, but then it may not be as easy to change that out later, so choose wisely?&lt;/p&gt;
&lt;p&gt;
That said, for something that mostly needs to be compute, storage, and a web presence, Hetzner&amp;#39;s offerings seem quite nice.&lt;/p&gt;
&lt;p&gt;
Currently I&amp;#39;m putting together a &amp;#34;services&amp;#34; instance that will host things like webmail (Roundcube), bookmarks (Readeck), passwords (Vaultwarden, or something along those lines), etc. This would be the same Services project hinted at in the &lt;a href=&#34;https://is-here.com/project/read-later/&#34;&gt;Read Later&lt;/a&gt; project page. The goal here will be to make it relatively painless to blow it away and spin it up elsewhere, so a layer of Terraform, some cloud-init fun, and automatically generated and managed LetsEncrypt certificates are going to be part of that.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-3&#34;&gt;
Object Storage
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;For this, Scaleway still seems to be the most reasonable price, in particular for buckets with not a lot of content. Hetzner &lt;em&gt;starts&lt;/em&gt; at 4.99 Euro for even an empty bucket (which then gets you 1TB of storage and traffic), by comparison. That&amp;#39;s a non-starter for a bucket where I expect to have just a few dozen GB of data. For completeness, UpCloud&amp;#39;s buckets also start at 5 Euros which then includes 250GB of storage, and states there are no data transfer fees, period?&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-4&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-4&#34;&gt;
Open questions
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-4&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;For moving my mail server I still need to do some &lt;em&gt;research&lt;/em&gt; to find out which of these 3 (or some alternative I&amp;#39;ve overlooked or discarded unfairly) is the better pick in terms of IP reputation, or spam abuse complaint handling. Anyone know?&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-5&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-5&#34;&gt;
Previously
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-5&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://is-here.com/post/2025/04/moving-to-europe/&#34;&gt;Moving to Europe&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
    <item>
      <title>Read Later</title>
      <link>https://is-here.com/project/read-later/</link>
      <pubDate>Sun, 13 Jul 2025 00:00:00 +0000</pubDate>
      
      <category>Self-hosting</category><category>Docker</category><category>Python</category><comments>https://strangeweb.page/@@jochie/114848668662470733</comments><guid>https://is-here.com/project/read-later/</guid>
      <description>
&lt;div id=&#34;outline-container-headline-1&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-1&#34;&gt;
Status
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-1&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;Active since July 2025.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-2&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-2&#34;&gt;
What
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-2&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;A self-hosted bookmark/read-later service&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-3&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-3&#34;&gt;
Where
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-3&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;&lt;a href=&#34;https://readeck.is-here.com/&#34;&gt;https://readeck.is-here.com/&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-4&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-4&#34;&gt;
How
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-4&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;This service is setup as one of several virtual hosts on a virtual machine that is dedicated to a couple of these self-hosted things (the project page for is still WIP/AWOL for now).&lt;/p&gt;
&lt;p&gt;
To try and keep the maintenance requirements relatively low I used the docker approach, only sharing the data with the host system so that it is preserved over restarts and can be backed up regularly:&lt;/p&gt;
&lt;div class=&#34;src src-shell&#34;&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-shell&#34; data-lang=&#34;shell&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  docker run &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;         --detach &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;         --rm -ti &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;         -p 6080:8000 &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;         -v /var/www/readeck:/readeck &lt;span style=&#34;color:#ae81ff&#34;&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#ae81ff&#34;&gt;&lt;/span&gt;         codeberg.org/readeck/readeck:latest&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
A fragment of the Apache configuration file:&lt;/p&gt;
&lt;div class=&#34;src src-text&#34;&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-text&#34; data-lang=&#34;text&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ProxyPreserveHost On
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ProxyPass / http://0.0.0.0:6080/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  ProxyPassReverse / http://0.0.0.0:6080/
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;  RequestHeader set X-Forwarded-Proto https&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;
Disclaimer: I don&amp;#39;t have a lot of experience with the &lt;code class=&#34;verbatim&#34;&gt;proxy&lt;/code&gt; or &lt;code class=&#34;verbatim&#34;&gt;proxy_http&lt;/code&gt; modules, so it&amp;#39;s possible that could be done better. There are more complete instructions on the Readeck &lt;a href=&#34;https://readeck.org/en/docs/deploy&#34;&gt;Deployment&lt;/a&gt; documentation page.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-5&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-5&#34;&gt;
Integrating it:
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-5&#34; class=&#34;outline-text-2&#34;&gt;
&lt;ul&gt;
&lt;li&gt;For Firefox I use this &lt;a href=&#34;https://addons.mozilla.org/en-US/firefox/user/18046494/&#34;&gt;Readeck add-on&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;There is no iOS (or Android, for that matter) app but the (self-hosted) website can be added as a pseudo-app on iOS by using Safari&amp;#39;s &amp;#34;Add to Home Screen&amp;#34;.&lt;/li&gt;
&lt;li&gt;That pseudo-app doesn&amp;#39;t get you a &amp;#34;Share to …&amp;#34; entry, but thankfully there are acceptable workarounds (listed in the &lt;a href=&#34;https://readeck.org/en/docs/faq#is-there-an-android-or-ios-application&#34;&gt;FAQ&lt;/a&gt;) in the form of shortcuts.
It took a little bit of fidgeting to figure out how to configure the shortcut, but after that it was relatively smooth sailing.&lt;/li&gt;
&lt;li&gt;Although it&amp;#39;s somewhat redundant, I also created a script to check my Mastodon bookmarks and import new ones into Readeck. So if I&amp;#39;m in a hurry, I&amp;#39;ll quickly bookmark a &lt;del&gt;post&lt;/del&gt; toot, otherwise I&amp;#39;ll use the &amp;#34;Send Page + Tags To Readeck&amp;#34; shortcut.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&#34;outline-container-headline-6&#34; class=&#34;outline-2&#34;&gt;
&lt;h2 id=&#34;headline-6&#34;&gt;
Code and related things
&lt;/h2&gt;
&lt;div id=&#34;outline-text-headline-6&#34; class=&#34;outline-text-2&#34;&gt;
&lt;p&gt;Originally I had planned to migrate from Instapaper (the read-later service I used for ~15 years) to a self-hosted &lt;a href=&#34;https://wallabag.it/en/&#34;&gt;Wallabag&lt;/a&gt; instance, but before the dust had even settled on that (meaning figuring out what browser add-on to use or how to integrate it on my phone) &lt;a href=&#34;https://shom.dev/posts/20250629_bookmarking-i-mean-omnivoring-no-hoarding-no-bagging-dot-dot-dot-wait-decking/&#34;&gt;this post&lt;/a&gt; by Shom pointed me towards &lt;a href=&#34;https://readeck.org/en/&#34;&gt;Readeck&lt;/a&gt;. That&amp;#39;s why the scripts below have a migration path from Instapaper -&amp;gt; Wallabag -&amp;gt; Readeck, and not Instapaper -&amp;gt; Readeck.&lt;/p&gt;
&lt;p&gt;
My collection of scripts in this &lt;a href=&#34;https://codeberg.org/jochie/read-later&#34;&gt;read-later repository&lt;/a&gt;.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code class=&#34;verbatim&#34;&gt;wallabag_import.py&lt;/code&gt;: Iterate over the Instapaper entries and add them one by one to my (also self-hosted) Wallabag service. For the ~17k bookmarks that I had that took multiple hours and possibly got my IP in trouble with a few websites.&lt;/li&gt;
&lt;li&gt;&lt;code class=&#34;verbatim&#34;&gt;readeck_wallabag.py&lt;/code&gt;: Initiate a migration from Wallabag to Readeck (handled entirely by Readeck after that).&lt;/li&gt;
&lt;li&gt;&lt;code class=&#34;verbatim&#34;&gt;reprocess_readeck.py&lt;/code&gt;: Loop over all bookmarks in a Readeck collection, re-adding them and deleting the original ones as it goes.&lt;/li&gt;
&lt;li&gt;&lt;code class=&#34;verbatim&#34;&gt;bookmark_readeck.py&lt;/code&gt;: Check my Mastodon bookmarks and add any new ones to Readeck&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
</description>
    </item>
    
  </channel>
</rss>
