<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>howto on Alán's blog</title><link>https://quasimorphic.com/categories/howto/</link><description>Recent content in howto on Alán's blog</description><generator>Hugo</generator><language>en-uk</language><lastBuildDate>Mon, 24 Nov 2025 19:38:00 -0500</lastBuildDate><atom:link href="https://quasimorphic.com/categories/howto/index.xml" rel="self" type="application/rss+xml"/><item><title>Set up email hosting and a personal website on personal domain</title><link>https://quasimorphic.com/archive/setup_email_website_personal_domain/</link><pubDate>Mon, 24 Nov 2025 19:38:00 -0500</pubDate><guid>https://quasimorphic.com/archive/setup_email_website_personal_domain/</guid><description>&lt;p>At some point I was struggling to get access to my Gmail account. Since I usually block unwanted scripts from running on my computer, Google likes to flag my Gmail login attempts as suspicious activity. This would be fine if it didn&amp;rsquo;t also make one of my only alternative identification methods an SMS. If I were to lose my phone or number I could be locked out of my account. Most accounts I have assume I have access to this email, thus a good chunk of modern life requires me accessing it, the prospect of becoming unable to log in seems quite realistic. &lt;a href="https://www.migadu.com/blog/gmail/">This&lt;/a> post (by an email-hosting company) builds a case against Gmail ground of privacy. It was at last time to get my own domain and control over my email. I also started this blog this year and it is pleasing to give it a nice &lt;code>.com&lt;/code> home.&lt;/p>
&lt;h2 id="yer-a-domain-harry">&amp;lsquo;Yer a domain, Harry&lt;/h2>
&lt;p>Buy a domain from a domain provider. Common options are CloudFare, GoDaddy and NameCheap. I used CloudFare due to mixed comments online about customer service on the others. Also, NameCheap &lt;a href="https://news.ycombinator.com/item?id=44134152">may&lt;/a> pre-purchase domains that were looked up on domain search engines. If you are paranoid like me you can use &lt;a href="https://tracker.debian.org/pkg/whois">whois&lt;/a> (though it is being &lt;a href="https://www.icann.org/en/announcements/details/icann-update-launching-rdap-sunsetting-whois-27-01-2025-en">sunset&lt;/a>, I&amp;rsquo;d suggest looking for an alternative). Once you find a domain name you like and is available just pay for it, you can get it for up to 10-years at a time.&lt;/p>
&lt;h2 id="buy-email-hosting-services-and-link-them-to-the-domain">Buy email hosting services and link them to the domain&lt;/h2>
&lt;p>Doing some research (mostly HackerNews and Reddit comments) I narrowed down options to either &lt;a href="https://migadu.com/">Migadu&lt;/a> and &lt;a href="https://mxroute.com/">MXroute&lt;/a>. &lt;code>Migadu&lt;/code> had a free trial, so I gave it a shot, but in the end I went for &lt;code>MXroute&lt;/code> due to a promo they had at the time.&lt;/p>
&lt;p>Make an email account. On Migadu it should be straightforward. In the case of &lt;code>MXroute&lt;/code>, you have to pay at this point. the URL for management should be &lt;code>&amp;lt;SERVER&amp;gt;.mxrouting.net:2222&lt;/code>, were &lt;code>&amp;lt;SERVER&amp;gt;&lt;/code> is in the confirmation email. Once you have access to your email hosting server you can to link it to your domain.&lt;/p>
&lt;h3 id="link-email-service-to-domain">Link email service to domain&lt;/h3>
&lt;p>The first step once you have an account is to add DNS (Domain Name Service) records to the website. They are instructions stored in servers that provide information about how to handle requests, mostly linking names to IPs.&lt;/p>
&lt;h4 id="migadu">Migadu&lt;/h4>
&lt;ul>
&lt;li>Export the BIND records into a file and download it&lt;/li>
&lt;li>Load this file, add them CloudFare DNS records&lt;/li>
&lt;li>If the &lt;code>DKMS&lt;/code> and &lt;code>ARC&lt;/code> keys fail, make sure to untoggle the &lt;code>proxy&lt;/code> switch on their records&lt;/li>
&lt;/ul>
&lt;h4 id="mxroute">MXroute&lt;/h4>
&lt;p>Mostly follow the &lt;a href="https://gist.github.com/afermg/69df5d99ddc7e1201b471aa6eb564e51">instructions&lt;/a> sent upon registration, but it is basically the same as Migadu but without the import/export convenience. For instance, one of the MX records (with different fields separated by commas) is &lt;code>MX, &amp;lt;domain.com&amp;gt;, &amp;lt;server&amp;gt;.mxrouting.net&lt;/code>. The ones I had to copy over from the email were:&lt;/p>
&lt;ul>
&lt;li>
&lt;p>TXT records: &lt;code>spf1&lt;/code> and &lt;code>DKIM1&lt;/code>&lt;/p>
&lt;/li>
&lt;li>
&lt;p>MX records: &lt;code>&amp;lt;SERVER&amp;gt;.mxrouting.net&lt;/code> and &lt;code>&amp;lt;SERVER&amp;gt;-relay.mxrouting.net&lt;/code>&lt;/p>
&lt;p>Copy them on Cloudfare, specifically on DNS records:&lt;/p>
&lt;/li>
&lt;/ul>
&lt;!--listend-->
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Cloudfare&amp;#39;s domain home -&amp;gt; DNS Records -&amp;gt; Add record
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;h3 id="test-the-setup">Test the setup&lt;/h3>
&lt;ul>
&lt;li>Log-in to yor account on &lt;code>webmail.migadu.com&lt;/code> or &lt;code>&amp;lt;SERVER&amp;gt;.mxrouting.net/roundcube&lt;/code>&lt;/li>
&lt;li>Create an account for your first user&lt;/li>
&lt;li>Send an mail to yourself to validate that it works&lt;/li>
&lt;/ul>
&lt;h3 id="optional-set-subdomain-for-server-access">Optional: Set subdomain for server access&lt;/h3>
&lt;p>To access my email from my phone&amp;rsquo;s Thunderbird App I had to set a subdomain. Only &lt;code>MXroute&lt;/code> required this.&lt;/p>
&lt;ul>
&lt;li>From the Control panel provided by &lt;code>MXroute&lt;/code> the verification key
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>&amp;lt;SERVER&amp;gt;.mxrouting.net -&amp;gt; (sidebar) Account manager -&amp;gt; DNS record
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>And add it as a TXT record on CloudFare&lt;/li>
&lt;li>Add &lt;code>mail.&amp;lt;domain.com&amp;gt;&lt;/code> and/or &lt;code>webmail.&amp;lt;domain.com&amp;gt;&lt;/code> subdomain(s) on CloudFare&lt;/li>
&lt;/ul>
&lt;h2 id="link-github-pages-website-to-domain">Link Github Pages website to domain&lt;/h2>
&lt;p>If we have one, we can also link our website to the domain. Some companies like to use &lt;code>blog.&amp;lt;domain.com&amp;gt;&lt;/code> for blogs and keep &lt;code>&amp;lt;domain.com&amp;gt;&lt;/code> for their landing page, but since I am almost certainly a person I skipped the subdomain approach (and used the so-called apex domain). In my case I am using Github to host my website, so I followed their &lt;a href="https://docs.github.com/en/pages/configuring-a-custom-domain-for-your-github-pages-site/managing-a-custom-domain-for-your-github-pages-site">instructions&lt;/a>:&lt;/p>
&lt;ol>
&lt;li>Go to DNS records
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Cloudfare&amp;#39;s domain home -&amp;gt; DNS Records -&amp;gt; Add record
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Add &lt;code>A&lt;/code> records to CloudFare (e.g., &lt;code>A,&amp;lt;domain.com&amp;gt;,&amp;lt;185.ipv4.github.address&amp;gt;&lt;/code>)&lt;/li>
&lt;li>Add &lt;code>CNAME,www,&amp;lt;user&amp;gt;.github.io&lt;/code> record. This step wasn&amp;rsquo;t specified on the Github docs but I found it to be necessary for some reason.it&lt;/li>
&lt;li>Add cloudfare rules to redirect https
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Cloudfare&amp;#39;s domain home -&amp;gt; Cloudfare rules -&amp;gt; Templates -&amp;gt; Redirect http to HTTPS -&amp;gt; Deploy
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Add custom domain to github pages:
&lt;div class="highlight">&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;">&lt;code class="language-text" data-lang="text">&lt;span style="display:flex;">&lt;span>Github repo -&amp;gt; settings -&amp;gt; pages on side panel -&amp;gt; Custom domain
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;/li>
&lt;li>Also on Github, the &lt;code>Enforce HTTPS&lt;/code> checkbox, if the rest was properly configured it should work without a hitch&lt;/li>
&lt;/ol>
&lt;h2 id="conclusions">Conclusions&lt;/h2>
&lt;p>I like that I have control over my email, and I could even give my family and friends their personal emails (if any of them actually wants one). The first time I did all this it took me around three hours, mostly because Github could not find my DNS records. Since I have my domain now I can probably do more fun stuff, such as self-hosting tools to share with friends and family.&lt;/p></description></item>/</channel></rss>