<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Help on etke.cc</title><link>https://etke.cc/help/</link><description>Recent content in Help on etke.cc</description><generator>Hugo</generator><language>en</language><atom:link href="https://etke.cc/help/index.xml" rel="self" type="application/rss+xml"/><item><title>.well-known redirects</title><link>https://etke.cc/help/well-known-redirects/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://etke.cc/help/well-known-redirects/</guid><description>&lt;h2 id="overview"&gt;
 Overview&lt;a class="heading__anchor" href="#overview"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Proper &lt;code&gt;.well-known&lt;/code&gt; setup is a prerequisite for installing a Matrix server. It is required not only for Matrix clients and servers, but also for the &lt;a href="https://etke.cc/help/extras/ketesa/"&gt;server admin panel&lt;/a&gt;, &lt;a href="https://etke.cc/help/extras/matrix-rtc/"&gt;in-app calls&lt;/a&gt;, and other features.&lt;/p&gt;
&lt;p&gt;You can either point your apex/base domain to the Matrix server IP address, or set up a few redirects on your apex/base domain.&lt;/p&gt;
&lt;p&gt;This page covers the second option, as it keeps usernames clean (without the &lt;code&gt;matrix.&lt;/code&gt; prefix) while leaving your base domain available for other uses, such as hosting a website.&lt;/p&gt;
&lt;p&gt;Here we provide you configuration examples for various web servers and platforms to help you set up the necessary redirects. If you don&amp;rsquo;t see your web server or platform listed here, please &lt;a href="https://etke.cc/contacts/"&gt;contact us&lt;/a&gt; for assistance!&lt;/p&gt;
&lt;p&gt;⚠️ If redirects are not properly configured, the Matrix server and services will not work as expected, so please confirm that the redirects are correctly specified. &lt;a href="https://federationtester.matrix.org/"target="_blank" rel="nofollow"&gt;This test tool&lt;/a&gt; provided by courtesy of the Matrix Foundation is also helpful to troubleshoot the common issues related to federation. Also, please note that due to technical complexity and nuances we do not support running the Matrix server behind proxied setups.&lt;/p&gt;
&lt;h2 id="web-servers"&gt;
 Web Servers&lt;a class="heading__anchor" href="#web-servers"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="nginx"&gt;
 Nginx&lt;a class="heading__anchor" href="#nginx"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-nginx" data-lang="nginx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# This is your HTTPS-enabled server for your-server.com.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Replace your-server.com with your Matrix server&amp;#39;s base/apex domain.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;server&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#f92672"&gt;server_name&lt;/span&gt; &lt;span style="color:#e6db74"&gt;your-server.com&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;location&lt;/span&gt; &lt;span style="color:#e6db74"&gt;^~&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/.well-known/matrix/&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;add_header&lt;/span&gt; &lt;span style="color:#e6db74"&gt;Access-Control-Allow-Origin&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;*&amp;#34;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;always&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;return&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;301&lt;/span&gt; &lt;span style="color:#e6db74"&gt;https://matrix.your-server.com&lt;/span&gt;$request_uri;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#75715e"&gt;# other configuration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="apache2"&gt;
 Apache2&lt;a class="heading__anchor" href="#apache2"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-apache" data-lang="apache"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# This is your HTTPS-enabled server for your-server.com.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Replace your-server.com with your Matrix server&amp;#39;s base/apex domain.&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;VirtualHost&lt;/span&gt; &lt;span style="color:#e6db74"&gt;*:443&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	ServerName your-server.com
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#75715e"&gt;# Ensure mod_headers and mod_alias (or mod_rewrite) are enabled&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;Location&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;/.well-known/matrix/&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Header always set Access-Control-Allow-Origin &lt;span style="color:#e6db74"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;/Location&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; RedirectMatch &lt;span style="color:#ae81ff"&gt;301&lt;/span&gt; ^/\.well-known/matrix/(.*)$ https://matrix.your-server.com/.well-known/matrix/$1
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;	&lt;span style="color:#75715e"&gt;# other configuration&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;/VirtualHost&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="caddy-2"&gt;
 Caddy 2&lt;a class="heading__anchor" href="#caddy-2"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-caddy" data-lang="caddy"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# This is your HTTPS-enabled frontend for your-server.com.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Replace your-server.com with your Matrix server&amp;#39;s base/apex domain.
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;your-server.com {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;@matrixWellKnown&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;path&lt;/span&gt; &lt;span style="color:#e6db74"&gt;/.well-known/matrix/*&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;header&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;@matrixWellKnown&lt;/span&gt; &lt;span style="color:#e6db74"&gt;Access-Control-Allow-Origin&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#66d9ef"&gt;redir&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;@matrixWellKnown&lt;/span&gt; &lt;span style="color:#e6db74"&gt;https://matrix.your-server.com&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;{uri}&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;301&lt;/span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;	# other configuration
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="traefik-v3"&gt;
 Traefik v3&lt;a class="heading__anchor" href="#traefik-v3"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;blockquote class="blockquote"&gt;
 &lt;p&gt;The example below uses Docker labels format, but you can adapt it to YAML, TOML, or other formats if needed.&lt;/p&gt;

&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-docker" data-lang="docker"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.enable&lt;span style="color:#f92672"&gt;=&lt;/span&gt;true&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Router&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.routers.matrix-wellknown.entrypoints&lt;span style="color:#f92672"&gt;=&lt;/span&gt;web&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.routers.matrix-wellknown.rule&lt;span style="color:#f92672"&gt;=&lt;/span&gt;PathPrefix&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;/.well-known/matrix/&lt;span style="color:#e6db74"&gt;`&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.routers.matrix-wellknown.service&lt;span style="color:#f92672"&gt;=&lt;/span&gt;noop@internal&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.routers.matrix-wellknown.middlewares&lt;span style="color:#f92672"&gt;=&lt;/span&gt;matrix-wellknown-headers,matrix-wellknown-redirect&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Middleware: CORS headers only for this router&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.middlewares.matrix-wellknown-headers.headers.accessControlAllowOriginList&lt;span style="color:#f92672"&gt;=&lt;/span&gt;*&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.middlewares.matrix-wellknown-headers.headers.accessControlAllowMethods&lt;span style="color:#f92672"&gt;=&lt;/span&gt;GET,OPTIONS&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.middlewares.matrix-wellknown-headers.headers.accessControlAllowHeaders&lt;span style="color:#f92672"&gt;=&lt;/span&gt;*&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.middlewares.matrix-wellknown-headers.headers.customResponseHeaders.Access-Control-Allow-Origin&lt;span style="color:#f92672"&gt;=&lt;/span&gt;*&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Middleware: 301 redirect preserving full URI&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# REPLACE your-server.com with your Matrix server&amp;#39;s base/apex domain.&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.middlewares.matrix-wellknown-redirect.redirectregex.regex&lt;span style="color:#f92672"&gt;=&lt;/span&gt;^https?://&lt;span style="color:#f92672"&gt;[&lt;/span&gt;^/&lt;span style="color:#f92672"&gt;]&lt;/span&gt;+&lt;span style="color:#f92672"&gt;(&lt;/span&gt;/.well-known/matrix/.*&lt;span style="color:#f92672"&gt;)&lt;/span&gt;$&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.middlewares.matrix-wellknown-redirect.redirectregex.replacement&lt;span style="color:#f92672"&gt;=&lt;/span&gt;https://matrix.your-server.com$$&lt;span style="color:#f92672"&gt;{&lt;/span&gt;1&lt;span style="color:#f92672"&gt;}&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;traefik.http.middlewares.matrix-wellknown-redirect.redirectregex.permanent&lt;span style="color:#f92672"&gt;=&lt;/span&gt;true&lt;span style="color:#960050;background-color:#1e0010"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="platforms"&gt;
 Platforms&lt;a class="heading__anchor" href="#platforms"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="vercel"&gt;
 Vercel&lt;a class="heading__anchor" href="#vercel"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;See the &lt;a href="https://vercel.com/guides/does-vercel-support-permanent-redirects"target="_blank" rel="nofollow"&gt;official documentation&lt;/a&gt; for more details.&lt;/p&gt;
&lt;p&gt;Add the following to &lt;code&gt;vercel.json&lt;/code&gt;, replacing &lt;code&gt;your-server.com&lt;/code&gt; with your Matrix server&amp;rsquo;s base/apex domain:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;headers&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/.well-known/matrix/(.*)&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;headers&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;key&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;Access-Control-Allow-Origin&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;value&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;*&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ],
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;redirects&amp;#34;&lt;/span&gt;: [
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/.well-known/matrix/server&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;destination&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;https://matrix.your-server.com/.well-known/matrix/server&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;statusCode&amp;#34;&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;301&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/.well-known/matrix/client&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;destination&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;https://matrix.your-server.com/.well-known/matrix/client&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;statusCode&amp;#34;&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;301&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; },
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/.well-known/matrix/support&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;destination&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;https://matrix.your-server.com/.well-known/matrix/support&amp;#34;&lt;/span&gt;,
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#f92672"&gt;&amp;#34;statusCode&amp;#34;&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;301&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; }
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; ]
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description></item><item><title>Linux Distribution Upgrade</title><link>https://etke.cc/help/distro-upgrade/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://etke.cc/help/distro-upgrade/</guid><description>&lt;p&gt;Need to bump your server&amp;rsquo;s host OS to a new major version? We can handle the whole upgrade for you for a one-time fee, start to finish. Or, if you&amp;rsquo;d rather do it yourself at no extra cost, here&amp;rsquo;s how.&lt;/p&gt;
&lt;h2 id="ubuntu"&gt;
 Ubuntu&lt;a class="heading__anchor" href="#ubuntu"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Please use &lt;strong&gt;LTS&lt;/strong&gt; (Long Term Support) versions of Ubuntu only.
We recommend using the &lt;a href="https://wiki.ubuntu.com/Releases#List_of_releases"target="_blank" rel="nofollow"&gt;latest LTS version&lt;/a&gt; available at the time of installation.&lt;/p&gt;
&lt;h3 id="1-take-a-backup"&gt;
 1. Take a backup&lt;a class="heading__anchor" href="#1-take-a-backup"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;Hosting customers&lt;/strong&gt;: Daily backup (snapshot) is taken automatically every day, the backups are retained for 7 days, you don&amp;rsquo;t need to do anything.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;On-premises customers&lt;/strong&gt;: Make sure to back up your server before proceeding. All cloud providers have some kind of backup functionality and make snapshots either automatically or on-demand (manually).&lt;/p&gt;
&lt;h3 id="2-set-up-a-fallback-port"&gt;
 2. Set up a fallback port&lt;a class="heading__anchor" href="#2-set-up-a-fallback-port"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;During the upgrade process, the SSH process on your host may be restarted and you may lose connectivity.&lt;/p&gt;
&lt;p&gt;The upgrade process usually opens another fallback SSH port (&lt;code&gt;1022&lt;/code&gt;) that may be used to get back to the upgrade process. Though the port will be opened automatically, you need to update your firewalls to allow incoming connections to this port.&lt;/p&gt;
&lt;p&gt;Also, ensure the &lt;code&gt;screen&lt;/code&gt; utility is installed on your system, and &lt;strong&gt;start a screen session before proceeding&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;screen -S upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you lose connectivity during the upgrade, reconnect with &lt;code&gt;screen -r upgrade&lt;/code&gt;. See &lt;a href="https://serverfault.com/a/427004"target="_blank" rel="nofollow"&gt;resuming a screen session&lt;/a&gt; for details.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Hosting customers&lt;/strong&gt;: the &lt;code&gt;1022&lt;/code&gt; port is already open on the provider-level firewall, so you only need to update the on-server firewall:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ufw allow 1022/tcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;On-premises customers&lt;/strong&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Update your provider-level firewall rules to allow connectivity to the &lt;code&gt;1022&lt;/code&gt; (TCP) port, if you have one&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Update the on-server firewall to allow incoming connections to the fallback port:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ufw allow 1022/tcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 id="3-update-the-system"&gt;
 3. Update the system&lt;a class="heading__anchor" href="#3-update-the-system"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Before performing the actual distribution upgrade, make sure your system is up-to-date:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Update the package list&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-get update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Upgrade the system packages&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-get dist-upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You &lt;em&gt;may&lt;/em&gt; reboot your server after this step, if prompted to do so.&lt;/p&gt;
&lt;h3 id="4-unpin-docker"&gt;
 4. Unpin Docker&lt;a class="heading__anchor" href="#4-unpin-docker"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;We pin Docker to a specific version on your server to prevent accidental upgrades to a newer release that may not yet be compatible. Before performing the distribution upgrade, you must remove those pins, otherwise the upgrade process may fail to resolve package dependencies.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Remove the apt-mark holds&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;apt-mark unhold docker-ce docker-ce-cli containerd.io docker-buildx-plugin
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#75715e"&gt;# Remove the apt-preferences block&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rm -f /etc/apt/preferences.d/docker-ce-block
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After the distribution upgrade is complete and you have run maintenance via &lt;a href="https://etke.cc/help/extras/ketesa/#server-actions"&gt;Ketesa Server Actions&lt;/a&gt;, the pins will be re-applied automatically.&lt;/p&gt;
&lt;h3 id="5-upgrade-to-the-new-release"&gt;
 5. Upgrade to the new release&lt;a class="heading__anchor" href="#5-upgrade-to-the-new-release"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Finally, run the upgrade command:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;do&lt;/span&gt;-release-upgrade
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Follow the on-screen instructions. They are quite straightforward.&lt;/p&gt;
&lt;blockquote class="blockquote"&gt;
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: if you are upgrading from an older LTS release (e.g., Ubuntu 20.04 while the currently supported LTS release is Ubuntu 24.04), you may need to repeat the process multiple times, as Ubuntu only supports direct upgrades between consecutive LTS releases.
We recommend always upgrading to the &lt;strong&gt;latest LTS&lt;/strong&gt; version available.&lt;/p&gt;
&lt;p&gt;When doing a multi-hop upgrade, run maintenance after each intermediate release before continuing to the next one. Maintenance will re-pin Docker, so you will need to &lt;strong&gt;repeat step 4 (Unpin Docker)&lt;/strong&gt; before each subsequent &lt;code&gt;do-release-upgrade&lt;/code&gt;.&lt;/p&gt;

&lt;/blockquote&gt;
&lt;h2 id="post-upgrade-steps"&gt;
 Post-upgrade steps&lt;a class="heading__anchor" href="#post-upgrade-steps"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;After the upgrade is complete:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Close the fallback port&lt;/strong&gt; you opened in step 2:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ufw delete allow 1022/tcp
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Run maintenance&lt;/strong&gt; via &lt;a href="https://etke.cc/help/extras/ketesa/#server-actions"&gt;Ketesa Server Actions&lt;/a&gt;. This will:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Re-apply the Docker version pin&lt;/li&gt;
&lt;li&gt;Update the Docker apt repository to reference the new distro codename (without this, apt may show errors or install unexpected Docker versions)&lt;/li&gt;
&lt;li&gt;Ensure your server is fully reconfigured for the new OS release&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If your Matrix server happens to be down after the upgrade, &lt;a href="https://etke.cc/contacts/"&gt;contact us&lt;/a&gt; and we will help you bring it back online.&lt;/p&gt;</description></item><item><title>Matrix Federation</title><link>https://etke.cc/help/federation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://etke.cc/help/federation/</guid><description>&lt;p&gt;Federation is what lets Matrix users on different servers talk to each other, and it&amp;rsquo;s core to how the whole protocol works. This page explains what it is, how it works, and why you should leave it on.&lt;/p&gt;
&lt;h2 id="tldr"&gt;
 TL;DR&lt;a class="heading__anchor" href="#tldr"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Is it secure?&lt;/strong&gt; Yes ✅&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Is it safe?&lt;/strong&gt; Yes ✅&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Will any information be leaked?&lt;/strong&gt; No&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Will any random person be able to join my rooms?&lt;/strong&gt; No&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Should I disable it?&lt;/strong&gt; No&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;What happens if I disable it?&lt;/strong&gt; ⚠️ You will not be able to access to many essential features, such as:
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://etke.cc/help/extras/matrix-rtc/"&gt;Matrix RTC calls&lt;/a&gt; (In-App Calls for Matrix Clients)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etke.cc/services/support/#dedicated"&gt;dedicated etke.cc support&lt;/a&gt; (priority support)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etke.cc/help/extras/scheduler/"&gt;the self-service bot&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://etke.cc/help/bots/draupnir/#policies"&gt;community moderation policies&lt;/a&gt; (shared moderation efforts)&lt;/li&gt;
&lt;li&gt;sticker picker&lt;/li&gt;
&lt;li&gt;integration manager&lt;/li&gt;
&lt;li&gt;and &lt;em&gt;many other functionalities&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Can I disable it anyway?&lt;/strong&gt; Yes, but it is not recommended.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;I am scared of federation. Should I be?&lt;/strong&gt; No&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;em&gt;We hope this clarifies any confusion about Matrix Federation.&lt;/em&gt;&lt;/p&gt;
&lt;h2 id="what-is-matrix-federation"&gt;
 What is Matrix Federation?&lt;a class="heading__anchor" href="#what-is-matrix-federation"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Federation allows users on different Matrix servers to participate in the same room. For this to function, external servers must be able to communicate with yours to transmit messages.&lt;/p&gt;
&lt;p&gt;Think of Matrix Federation like email: just as you can send an email from Gmail to a Yahoo account and receive a reply, Matrix Federation works in a similar way, ensuring open communication across servers.&lt;/p&gt;
&lt;h3 id="-secure-and-safe-by-design"&gt;
 🔒 Secure and safe by design&lt;a class="heading__anchor" href="#-secure-and-safe-by-design"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Federation lets servers talk to each other without exposing &lt;strong&gt;any&lt;/strong&gt; of your information by default. It&amp;rsquo;s secure and safe by design.&lt;/p&gt;
&lt;p&gt;Here are details about how secure room participation works:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Inviting members&lt;/strong&gt;: A member with invite privileges can invite someone to a room. This action is logged in the room’s timeline, making it visible to all members. Once the invite is accepted or rejected, it is also recorded in the timeline.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Joining with a link&lt;/strong&gt;:
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Room administrators&lt;/strong&gt; must make the room public in the settings. This action is logged.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Room administrators&lt;/strong&gt; must assign a room alias, which is also logged.&lt;/li&gt;
&lt;li&gt;(Optional but recommended) Administrators can set the room’s history visibility to &lt;code&gt;Anyone&lt;/code&gt;, enabling members to see history from before they joined. This does not apply to end-to-end encrypted rooms.&lt;/li&gt;
&lt;li&gt;Anyone with the room alias can join the room, and their join action will be logged.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Accessing a room requires either an invite or joining a public room. Nobody can access the room without either of them.&lt;/p&gt;
&lt;p&gt;Also, reading messages in a room requires membership, obtained through an invite or joining a public room. It is not possible to read them without it.&lt;/p&gt;
&lt;h2 id="disabling-federation-degrades-usability-and-functionality"&gt;
 Disabling federation degrades usability and functionality&lt;a class="heading__anchor" href="#disabling-federation-degrades-usability-and-functionality"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Federation is a core and fundamental feature of the Matrix protocol, and is required by many useful and important features like &lt;a href="https://etke.cc/help/extras/matrix-rtc/"&gt;in-app calls on Matrix clients&lt;/a&gt;, &lt;a href="https://etke.cc/services/support/#dedicated"&gt;dedicated etke.cc support&lt;/a&gt;, &lt;a href="https://etke.cc/help/extras/scheduler"&gt;self-service bot&lt;/a&gt;, sticker picker, integration manager, &lt;a href="https://etke.cc/help/bots/draupnir/#policies"&gt;community moderation policies&lt;/a&gt;, and many more.&lt;/p&gt;
&lt;p&gt;(Federation is necessary even if an in-app calls happen only among users of your own server, as the backend for it requires federation to be enabled. You can check the relevant code &lt;a href="https://github.com/element-hq/lk-jwt-service/blob/f5f5374c4bdcc00a4fb13d27c0b28e20e4c62334/main.go#L135-L146"target="_blank" rel="nofollow"&gt;here&lt;/a&gt;, if you are interested).&lt;/p&gt;
&lt;p&gt;🚨 &lt;strong&gt;Disabling federation will severely limit your server&amp;rsquo;s functionality.&lt;/strong&gt; You have been warned!&lt;/p&gt;
&lt;h2 id="contact-us-to-disable-federation"&gt;
 Contact us to disable federation&lt;a class="heading__anchor" href="#contact-us-to-disable-federation"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If you would like to disable federation anyway, it is possible for us to do so for you. In this case, please &lt;a href="https://etke.cc/contacts/"&gt;contact us&lt;/a&gt; with the following statement, making sure that you are fully aware of expected consequences:&lt;/p&gt;
&lt;blockquote class="blockquote"&gt;
 &lt;p&gt;I am fully aware that I want to disable one of the fundamental features of the protocol, effectively limiting my access to modern advancements and reverting to a pre-internet era of isolated networks that do not offer superior information protection. I request that federation be disabled for my server, understanding that this change will leave me with a partially functional server.&lt;/p&gt;

&lt;/blockquote&gt;</description></item><item><title>Matrix Homeserver Moderation</title><link>https://etke.cc/help/moderation/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://etke.cc/help/moderation/</guid><description>&lt;p&gt;We run managed Matrix servers, but we don&amp;rsquo;t own or control them, and that&amp;rsquo;s the whole point. We handle the technical side (installation, updates, backups, monitoring), your data stays yours, and we never touch what happens inside your homeserver.&lt;/p&gt;
&lt;p&gt;The flip side of that freedom: moderation is &lt;strong&gt;your&lt;/strong&gt; job as the owner. This guide walks through why it matters, what to watch for, which tools actually work, and where to find people who&amp;rsquo;ve been through it.&lt;/p&gt;
&lt;p&gt;And you won&amp;rsquo;t be doing it alone. We&amp;rsquo;ve teamed up with &lt;a href="https://muninn-hall.com/"target="_blank" rel="nofollow"&gt;Muninn Hall&lt;/a&gt;, a community of developers, moderators, and community managers who have seen it all, from lone trolls to full-scale spam waves, and they share what they know.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="why-moderation-is-important"&gt;
 Why moderation is important&lt;a class="heading__anchor" href="#why-moderation-is-important"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Without moderation, a server can quickly become unpleasant or even unsafe. Here are some threats you may face:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Spammers&lt;/strong&gt;: flood your rooms with ads, crypto scams, and noise that drowns out real conversation&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Phishers and scammers&lt;/strong&gt;: DM your users to trick them out of credentials, money, or data&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Abusers and trolls&lt;/strong&gt;: harass people until your regulars get tired and leave&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Illegal content&lt;/strong&gt;: from pirated media to child abuse material, the kind that gets servers seized and police involved&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Unwanted bots&lt;/strong&gt;: fake activity, amplified garbage, relentless noise&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h2 id="what-to-moderate"&gt;
 What to moderate&lt;a class="heading__anchor" href="#what-to-moderate"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;h3 id="open-registration-servers"&gt;
 Open registration servers&lt;a class="heading__anchor" href="#open-registration-servers"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;If your instance is public and anyone can sign up, make sure to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Protect registration (for example, use email verification or CAPTCHAs)&lt;/li&gt;
&lt;li&gt;Keep an eye on &lt;strong&gt;new accounts&lt;/strong&gt; (they can upload harmful avatars or spam)&lt;/li&gt;
&lt;li&gt;Check &lt;strong&gt;new rooms&lt;/strong&gt; (users can create spaces with illegal or unwanted content)&lt;/li&gt;
&lt;li&gt;Watch out for &lt;strong&gt;inactive accounts&lt;/strong&gt; that may suddenly start abusing the server&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="closed-or-invite-only-servers"&gt;
 Closed or invite-only servers&lt;a class="heading__anchor" href="#closed-or-invite-only-servers"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;If registration is restricted, moderation is simpler, but public rooms and invited users still need oversight.&lt;br&gt;
We strongly recommend running &lt;a href="https://etke.cc/help/bots/draupnir/"&gt;Draupnir&lt;/a&gt; in either case.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-to-moderate"&gt;
 How to moderate&lt;a class="heading__anchor" href="#how-to-moderate"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;There are several ways to moderate your communities.&lt;/p&gt;
&lt;h3 id="admin-dashboard"&gt;
 Admin dashboard&lt;a class="heading__anchor" href="#admin-dashboard"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Your &lt;a href="https://etke.cc/help/extras/ketesa/"&gt;Ketesa dashboard&lt;/a&gt; (installed by default) lets you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Suspend (make read-only), ban, or shadowban users. A shadowbanned user keeps posting into the void; nobody else sees a thing.&lt;/li&gt;
&lt;li&gt;Redact messages or uploaded media&lt;/li&gt;
&lt;li&gt;Remove problematic rooms&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This is your &amp;ldquo;control center&amp;rdquo; for quick moderation.&lt;/p&gt;
&lt;h3 id="moderation-bot"&gt;
 Moderation bot&lt;a class="heading__anchor" href="#moderation-bot"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Matrix does not come with built-in moderation, so you will need a bot.&lt;br&gt;
We recommend &lt;a href="https://etke.cc/help/bots/draupnir/"&gt;Draupnir&lt;/a&gt;. It works well for both small servers and large communities.&lt;/p&gt;
&lt;p&gt;See our &lt;a href="https://etke.cc/help/bots/draupnir/#getting-started"&gt;quick start guide&lt;/a&gt; for an easy setup with safe defaults suggested by Muninn Hall and Draupnir developers.&lt;/p&gt;
&lt;h3 id="knowledge"&gt;
 Knowledge&lt;a class="heading__anchor" href="#knowledge"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;Tools are powerful, but knowing &lt;strong&gt;how to respond&lt;/strong&gt; is equally important.&lt;br&gt;
For example:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://matrix-community-help.codestorm.net/sending-server-admin.html"target="_blank" rel="nofollow"&gt;What to do if your server sends spam&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://matrix-community-help.codestorm.net/receiving-server-admin.html"target="_blank" rel="nofollow"&gt;What to do if your server receives abuse&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The &lt;a href="https://matrix-community-help.codestorm.net/"target="_blank" rel="nofollow"&gt;Matrix Community Help guides&lt;/a&gt; are an excellent starting point.&lt;br&gt;
For deeper insights, see the &lt;a href="https://muninn-hall.com/docs/intro"target="_blank" rel="nofollow"&gt;Muninn Hall docs&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="coordination"&gt;
 Coordination&lt;a class="heading__anchor" href="#coordination"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;No homeserver owner can fight abuse alone. The best approach is to &lt;strong&gt;coordinate with others&lt;/strong&gt;.&lt;br&gt;
Muninn Hall gives you:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Active Threats list&lt;/strong&gt; that plugs straight into Draupnir if you follow our guide&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alerts room&lt;/strong&gt; that pings you early when a spam wave hits the network or your own server&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Announcements&lt;/strong&gt; for policy and tooling updates&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discussion rooms&lt;/strong&gt; to ask questions and compare notes with people who&amp;rsquo;ve been there&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Off-topic chat&lt;/strong&gt; for everything else&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Muninn Hall cannot be joined directly.
It is a focused community for server admins and moderators, with a short screening process before joining.
Once you are in, you can invite your moderation team as well.&lt;/p&gt;
&lt;p&gt;👉 &lt;a href="https://muninn-hall.com/#how-to-join"target="_blank" rel="nofollow"&gt;How to join Muninn Hall&lt;/a&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="where-to-start"&gt;
 Where to start&lt;a class="heading__anchor" href="#where-to-start"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Running your own homeserver means running its moderation too: the cost of self-governance. Good tools make it far lighter than it looks.&lt;/p&gt;
&lt;p&gt;Start small: lock down registration, set up &lt;a href="https://etke.cc/help/bots/draupnir/"&gt;Draupnir&lt;/a&gt;, and read the basic guides. &lt;a href="https://etke.cc/help/extras/ketesa/"&gt;Ketesa&lt;/a&gt; and Draupnir do the heavy lifting, and &lt;a href="https://muninn-hall.com/"target="_blank" rel="nofollow"&gt;Muninn Hall&lt;/a&gt; means you&amp;rsquo;ve always got people to ask. Step by step, you&amp;rsquo;ll get the hang of it.&lt;/p&gt;</description></item><item><title>Payments</title><link>https://etke.cc/help/payments/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://etke.cc/help/payments/</guid><description>&lt;p&gt;etke.cc uses the &lt;a href="https://etke.cc/ko-fi"&gt;Ko-Fi&lt;/a&gt; payment and subscription management platform, which itself uses &lt;a href="https://www.paypal.com/"target="_blank" rel="nofollow"&gt;PayPal&lt;/a&gt; and &lt;a href="https://stripe.com/"target="_blank" rel="nofollow"&gt;Stripe&lt;/a&gt; for payment processing. At the moment, we don&amp;rsquo;t support any other subscription or payment options.&lt;/p&gt;
&lt;p&gt;Ko-Fi works well, but a few corners of it aren&amp;rsquo;t exactly obvious. So here&amp;rsquo;s how to handle the common payment scenarios, step by step.&lt;/p&gt;
&lt;h2 id="how-to-become-a-subscriber"&gt;
 How to Become a Subscriber&lt;a class="heading__anchor" href="#how-to-become-a-subscriber"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;To access etke.cc&amp;rsquo;s services and manage your subscription later (to &lt;a href="#how-to-update-your-subscription-price"&gt;update its price&lt;/a&gt;, to &lt;a href="#how-to-fix-a-failing-subscription"&gt;fix it if payments are failing&lt;/a&gt;, or to &lt;a href="#how-to-cancel-your-subscription"&gt;cancel it&lt;/a&gt;), you&amp;rsquo;ll need to set up a subscription with recurring payments on Ko-Fi. For this reason:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;it is &lt;strong&gt;recommended&lt;/strong&gt; that you &lt;a href="https://ko-fi.com/account/register"target="_blank" rel="nofollow"&gt;sign up for Ko-Fi&lt;/a&gt; now (before paying for your etke.cc order), so that the subscription will be automatically associated with your account at Ko-Fi.&lt;/p&gt;
&lt;p&gt;⚠️ When signing up for Ko-Fi, make sure to use the same email address as you provided when placing the order at us. If you submit another email address, our system won&amp;rsquo;t be able to automatically match it to the order, so you would need to &lt;a href="https://etke.cc/contacts/"&gt;contact us&lt;/a&gt; about it.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;alternatively, you can create an account at Ko-Fi later, after becoming our subscriber and paying for an order without the account. However, please make sure to sign up with the same email address as you have provided for your subscription (see below).&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;To become an etke.cc subscriber, follow the steps below:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;&lt;a href="https://ko-fi.com/account/login"target="_blank" rel="nofollow"&gt;Sign into your Ko-Fi account&lt;/a&gt;, if you have one already. You can also become a subscriber without a Ko-Fi account, as mentioned above.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Visit the &lt;a href="https://etke.cc/membership"&gt;etke.cc membership page on Ko-Fi&lt;/a&gt;.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select the &lt;strong&gt;By Complexity&lt;/strong&gt; tier.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter the following details:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Pay what you want:&lt;/strong&gt; Input the total price based on the components you have ordered.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Email address:&lt;/strong&gt; This field only appears when ordering without a Ko-Fi account. Please make sure to use the &lt;strong&gt;same email address&lt;/strong&gt; you provided when placing the order with us.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your name or nickname:&lt;/strong&gt; (optional) Use any name you wish.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/payment-form.webp" width="910" height="1488" alt="Payment form" srcset="https://etke.cc/img/ko-fi/payment-form_hu_90fe3be96cd9d8a1.webp 800w, https://etke.cc/img/ko-fi/payment-form.webp 910w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Press the &lt;strong&gt;Pay&lt;/strong&gt; button to proceed to checkout. You may see PayPal and/or Stripe as options, depending on your region and Ko‑Fi availability.&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Select your preferred payment method or add a new one and click on &lt;strong&gt;Agree &amp;amp; Continue&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/payment-paypal.webp" width="1102" height="1358" alt="PayPal payment" srcset="https://etke.cc/img/ko-fi/payment-paypal_hu_5b349f9922c830a7.webp 800w, https://etke.cc/img/ko-fi/payment-paypal.webp 1102w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;If the payment is successful, you&amp;rsquo;ll be redirected to the payment confirmation page on Ko-Fi.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/payment-confirmation.webp" width="1089" height="1207" alt="Payment confirmation" srcset="https://etke.cc/img/ko-fi/payment-confirmation_hu_ad8586d0ab382c25.webp 800w, https://etke.cc/img/ko-fi/payment-confirmation.webp 1089w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Congratulations! You&amp;rsquo;re all set 🎉&lt;/p&gt;
&lt;p&gt;We&amp;rsquo;ll receive a notification from Ko-Fi and will begin preparing your Matrix server. &lt;strong&gt;Keep an eye on your email for updates&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;If you have created a Ko-Fi account, you can also review your account&amp;rsquo;s &lt;a href="https://ko-fi.com/manage/supportreceived?src=sidemenu"target="_blank" rel="nofollow"&gt;Payments and Orders&lt;/a&gt; page at Ko-Fi. Additionally, you can view your payment history and download invoices from the &lt;a href="https://etke.cc/help/extras/ketesa/#billing"&gt;Billing page in Ketesa&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/payment-list.webp" width="1743" height="1359" alt="Payments list" srcset="https://etke.cc/img/ko-fi/payment-list_hu_3aabe8dc11ff1078.webp 800w, https://etke.cc/img/ko-fi/payment-list_hu_8ebe9d2aa3106da.webp 1200w, https://etke.cc/img/ko-fi/payment-list.webp 1743w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-to-update-your-subscription-price"&gt;
 How to Update Your Subscription Price&lt;a class="heading__anchor" href="#how-to-update-your-subscription-price"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If you subsequently order new services from us or cancel some services we were providing until now, you may need to adjust the price of your subscription to align it with the new cost.&lt;/p&gt;
&lt;p&gt;You will need your &lt;a href="https://ko-fi.com/"target="_blank" rel="nofollow"&gt;Ko-Fi&lt;/a&gt; account to manage your etke.cc subscription on the Ko-Fi platform. If you have not created a Ko-Fi account early on, you can create one now by going to &lt;a href="https://ko-fi.com/account/register"target="_blank" rel="nofollow"&gt;Ko-Fi&amp;rsquo;s signup page&lt;/a&gt;. When signing up, make sure to use the same email address that you used for your already-existing subscription. This way, Ko-Fi will automatically attribute this subscription to your new account.&lt;/p&gt;
&lt;p&gt;To update your subscription&amp;rsquo;s price, follow the steps below:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Log in to your Ko-Fi account&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Visit your &lt;a href="https://ko-fi.com/account/"target="_blank" rel="nofollow"&gt;Ko-Fi account page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Locate your &lt;strong&gt;etke.cc&lt;/strong&gt; subscription in the list.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/subscriptions-list.webp" width="1752" height="1828" alt="Subscriptions list" srcset="https://etke.cc/img/ko-fi/subscriptions-list_hu_bc7463fc772a5da4.webp 800w, https://etke.cc/img/ko-fi/subscriptions-list_hu_7a44b122bd91b53b.webp 1200w, https://etke.cc/img/ko-fi/subscriptions-list.webp 1752w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on the three-dots dropdown menu and press the &lt;strong&gt;Update Pledge&lt;/strong&gt; button&lt;/p&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/subscriptions-adjust.webp" width="1752" height="1828" alt="Update Pledge button on the subscriptions list" srcset="https://etke.cc/img/ko-fi/subscriptions-adjust_hu_b7e015000771ee39.webp 800w, https://etke.cc/img/ko-fi/subscriptions-adjust_hu_3e2a920aa27de8cc.webp 1200w, https://etke.cc/img/ko-fi/subscriptions-adjust.webp 1752w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Enter the new, recalculated price into the input field and click &lt;strong&gt;Update&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/subscriptions-adjust-input.webp" width="1752" height="1506" alt="Adjusted price input on the subscriptions list" srcset="https://etke.cc/img/ko-fi/subscriptions-adjust-input_hu_7cb4a3c751ffc25c.webp 800w, https://etke.cc/img/ko-fi/subscriptions-adjust-input_hu_54425cdc72265d9a.webp 1200w, https://etke.cc/img/ko-fi/subscriptions-adjust-input.webp 1752w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Confirm the changes by clicking &lt;strong&gt;Yes, update pledge&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;You&amp;rsquo;ll be charged using the new subscription price &lt;strong&gt;during the next payment period&lt;/strong&gt; (e.g. next month), not immediately. To &lt;strong&gt;make up for the difference&lt;/strong&gt; during the current payment period, make &lt;a href="https://etke.cc/kofi"&gt;a one-time Ko-Fi donation&lt;/a&gt; with a custom price equal to the price difference between the new price and the old price. For example, if going from €10/mo subscription to a €25/mo subscription, make a one-time payment of €15.&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Congratulations, you&amp;rsquo;ve successfully updated your subscription price! 🎉&lt;/p&gt;
&lt;p&gt;Your &lt;a href="https://ko-fi.com/account/"target="_blank" rel="nofollow"&gt;Ko-Fi account page&lt;/a&gt; should now reflect these changes:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/subscriptions-list-adjusted.webp" width="1752" height="1832" alt="Subscriptions list after the price adjustments" srcset="https://etke.cc/img/ko-fi/subscriptions-list-adjusted_hu_7c6c9fee74c8fd8d.webp 800w, https://etke.cc/img/ko-fi/subscriptions-list-adjusted_hu_afcb490c38e838ec.webp 1200w, https://etke.cc/img/ko-fi/subscriptions-list-adjusted.webp 1752w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-to-cancel-your-subscription"&gt;
 How to Cancel Your Subscription&lt;a class="heading__anchor" href="#how-to-cancel-your-subscription"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;blockquote class="blockquote"&gt;
 &lt;p&gt;&lt;strong&gt;WARNING&lt;/strong&gt;: by canceling your subscription, you will lose access to &lt;em&gt;all&lt;/em&gt; services provided by etke.cc:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;(in case of hosting) your Matrix server will be erased, including all its data and backups, there won&amp;rsquo;t be an option to restore it later&lt;/li&gt;
&lt;li&gt;no updates, security fixes, housekeeping, or &lt;a href="https://etke.cc/services/support/"&gt;support&lt;/a&gt; will be provided, etc.&lt;/li&gt;
&lt;li&gt;no &lt;a href="https://etke.cc/services/monitoring/"&gt;monitoring&lt;/a&gt;, &lt;a href="https://etke.cc/services/registry/"&gt;private docker registry&lt;/a&gt;, &lt;a href="https://etke.cc/help/extras/scheduler/"&gt;self-service bot&lt;/a&gt;, etc.&lt;/li&gt;
&lt;li&gt;even no exclusive &lt;a href="https://etke.cc/help/extras/ketesa/"&gt;admin panel features&lt;/a&gt; will be available&lt;/li&gt;
&lt;/ul&gt;

&lt;/blockquote&gt;
&lt;p&gt;If, for any reason, you don&amp;rsquo;t wish to continue with your subscription, you can cancel it.&lt;/p&gt;
&lt;p&gt;You will need a &lt;a href="https://ko-fi.com/"target="_blank" rel="nofollow"&gt;Ko-Fi&lt;/a&gt; account to manage your etke.cc subscription on the Ko-Fi platform. If you haven&amp;rsquo;t created a Ko-Fi account early on, you can create one now by going to &lt;a href="https://ko-fi.com/account/register"target="_blank" rel="nofollow"&gt;Ko-Fi&amp;rsquo;s signup page&lt;/a&gt;. When signing up, make sure to use the same email address that you used for your already-existing subscription. This way, Ko-Fi will automatically attribute this subscription to your new account.&lt;/p&gt;
&lt;p&gt;To cancel your subscription, follow the steps below:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;
&lt;p&gt;Log in to your Ko-Fi account&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Visit your &lt;a href="https://ko-fi.com/account/"target="_blank" rel="nofollow"&gt;Ko-Fi account page&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Locate your &lt;strong&gt;etke.cc&lt;/strong&gt; subscription in the list.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/subscriptions-list.webp" width="1752" height="1828" alt="Subscriptions list" srcset="https://etke.cc/img/ko-fi/subscriptions-list_hu_bc7463fc772a5da4.webp 800w, https://etke.cc/img/ko-fi/subscriptions-list_hu_7a44b122bd91b53b.webp 1200w, https://etke.cc/img/ko-fi/subscriptions-list.webp 1752w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Click on the three-dots dropdown menu and press the &lt;strong&gt;Don&amp;rsquo;t Renew&lt;/strong&gt; button.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/subscriptions-cancel.webp" width="1752" height="1828" alt="Don’t renew button on the subscriptions list" srcset="https://etke.cc/img/ko-fi/subscriptions-cancel_hu_bea7d5bc094851ee.webp 800w, https://etke.cc/img/ko-fi/subscriptions-cancel_hu_352b6b781ff4a028.webp 1200w, https://etke.cc/img/ko-fi/subscriptions-cancel.webp 1752w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Confirm the changes by clicking &lt;strong&gt;Yes, cancel it&lt;/strong&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Your canceled subscription will now appear on your Ko-Fi account page.&lt;/p&gt;
&lt;blockquote class="blockquote"&gt;
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt;: Depending on the automatic renewal status and the number of retry attempts, the canceled subscription may not be immediately visible or may appear differently.&lt;/p&gt;

&lt;/blockquote&gt;
&lt;p&gt;&lt;img src="https://etke.cc/img/ko-fi/subscriptions-list-canceled.webp" width="1746" height="1837" alt="Subscriptions list after the cancellation" srcset="https://etke.cc/img/ko-fi/subscriptions-list-canceled_hu_c7a2b95b69cf5ef2.webp 800w, https://etke.cc/img/ko-fi/subscriptions-list-canceled_hu_a251dbf95af65d83.webp 1200w, https://etke.cc/img/ko-fi/subscriptions-list-canceled.webp 1746w" sizes="(max-width: 768px) 100vw, 768px" loading="lazy" decoding="async"&gt;&lt;/p&gt;
&lt;p&gt;At this point, you are no longer an etke.cc subscriber. Nevertheless, we&amp;rsquo;ll continue providing the service you were paying for until the end period you paid for. If you wish for us to stop providing the service immediately, please &lt;a href="https://etke.cc/contacts/"&gt;contact us&lt;/a&gt;.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id="how-to-fix-a-failing-subscription"&gt;
 How to Fix a Failing Subscription&lt;a class="heading__anchor" href="#how-to-fix-a-failing-subscription"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If, for any reason, your subscription fails to renew automatically, you may need to resubscribe manually.&lt;/p&gt;
&lt;p&gt;To resubscribe, follow the steps below:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Cancel your existing subscription&lt;/strong&gt;. See the &lt;a href="#how-to-cancel-your-subscription"&gt;How to Cancel Your Subscription&lt;/a&gt; guide&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subscribe again&lt;/strong&gt;. See the &lt;a href="#how-to-become-a-subscriber"&gt;How to Become a Subscriber&lt;/a&gt; guide&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="how-to-get-invoices-for-your-payments"&gt;
 How to get invoices for your payments&lt;a class="heading__anchor" href="#how-to-get-invoices-for-your-payments"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If you need to obtain invoices for your payments, you can do so through the &lt;a href="https://etke.cc/help/extras/ketesa/#billing"&gt;Billing page in Ketesa&lt;/a&gt;. This page provides access to all your payment history and allows you to download invoices for each transaction.&lt;/p&gt;
&lt;p&gt;We deploy admin panel on &lt;code&gt;https://matrix.your-server.com/admin&lt;/code&gt; (replace &lt;code&gt;your-server.com&lt;/code&gt; with your actual server domain).
To access the admin panel, you need to have an admin user account on your Matrix server.&lt;/p&gt;
&lt;h3 id="how-to-add-company-details-to-the-invoices"&gt;
 How to add company details to the invoices&lt;a class="heading__anchor" href="#how-to-add-company-details-to-the-invoices"&gt;¶&lt;/a&gt;
&lt;/h3&gt;
&lt;p&gt;You can add your company details to the future invoices directly in your &lt;a href="https://etke.cc/help/extras/ketesa/"&gt;Ketesa admin panel&lt;/a&gt; on the Billing page.&lt;/p&gt;
&lt;p&gt;The changes will be applied to all &lt;strong&gt;future&lt;/strong&gt; invoices, but not to the past ones.&lt;/p&gt;</description></item><item><title>Removed Components</title><link>https://etke.cc/help/removed-components/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://etke.cc/help/removed-components/</guid><description>&lt;p&gt;&lt;strong&gt;You were likely redirected here from a removed or deprecated page. You may wish to check our full list of &lt;a href="https://etke.cc/help/bridges/"&gt;bridges&lt;/a&gt;, &lt;a href="https://etke.cc/help/bots/"&gt;bots&lt;/a&gt;, or &lt;a href="https://etke.cc/help/extras/"&gt;extra services&lt;/a&gt; for the latest information.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s been a long time since we deprecated certain components and replaced them with better-working alternatives. Even though the old components were deprecated and considered unmaintained by us, some of our customers continued using them for a long time.&lt;/p&gt;
&lt;p&gt;Even after marking these components unmaintained, we kept putting effort into supporting them, trying to fix the problems our customers ran into. In the end, such components still misbehaved once in a while and we couldn&amp;rsquo;t always make them fully work. If a component is unmaintained by its developers, we cannot help maintaining it ourselves because eventually it becomes incompatible with modern APIs, and there is nobody to fix the component&amp;rsquo;s code and make it compatible again.&lt;/p&gt;
&lt;p&gt;This has prompted us to re-evaluate the current status of our deprecated components. To avoid having to invest our effort in maintaining obsoleted components, we have completely eliminated all deprecated components after a long grace period.&lt;/p&gt;
&lt;h2 id="removed--deprecated-components"&gt;
 Removed / deprecated components&lt;a class="heading__anchor" href="#removed--deprecated-components"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Here is the list of the removed or deprecated components:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;ChatGPT Bot (matrix-chatgpt-bot)&lt;/strong&gt;: unmaintained by its developers since November 2023. It got superseded by &lt;a href="https://etke.cc/help/bots/baibot/"&gt;Baibot&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dimension integration manager&lt;/strong&gt;: unmaintained by its developers since November 2022. There is no free-software alternative integration manager.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Discord bridge (mx-puppet-discord)&lt;/strong&gt; : unmaintained by its developers since May 2022. It got superseded by &lt;a href="https://etke.cc/help/bridges/mautrix-discord/"&gt;Discord bridge (mautrix-discord)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Facebook bridge (mautrix-facebook)&lt;/strong&gt;: archived by its developers on March 2024. It got superseded by &lt;a href="https://etke.cc/help/bridges/mautrix-meta-messenger/"&gt;Facebook bridge (mautrix-meta)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Firezone&lt;/strong&gt; - superseded by &lt;a href="https://etke.cc/help/extras/wg-easy/"&gt;WG Easy&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;GroupMe Bridge (mx-puppet-groupme)&lt;/strong&gt;: unmaintained by its developers since November 2021. There is no free-software alternative GroupMe bridge.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Instagram bridge (mautrix-instagram)&lt;/strong&gt;: archived by its developers on March 2024. It got superseded by &lt;a href="https://etke.cc/help/bridges/mautrix-meta-instagram/"&gt;Instagram bridge (mautrix-meta)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;LinkedIn bridge (beeper-linkedin)&lt;/strong&gt;: archived by its developers in March 2025. It got superseded by &lt;a href="https://etke.cc/help/bridges/mautrix-linkedin/"&gt;LinkedIn bridge (mautrix-linkedin)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Skype bridge (go-skype-bridge)&lt;/strong&gt;: Skype was shut down in May 2025.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Slack bridge (mx-puppet-slack)&lt;/strong&gt;: unmaintained by its developers since May 2022. It got superseded by &lt;a href="https://etke.cc/help/bridges/mautrix-slack/"&gt;Slack bridge (mautrix-slack)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Steam Bridge (mx-puppet-steam)&lt;/strong&gt;: this uses obsolete framework/base unmaintained by its developers since May 2022. There is no free-software alternative Steam bridge.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WeChat bridge (matrix-wechat)&lt;/strong&gt;: unmaintained by its developers since February 2024. There is no free-software alternative WeChat bridge.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Webhooks bridge (appservice-webhooks)&lt;/strong&gt;: unmaintained by its developers since November 2022. It got superseded by &lt;a href="https://etke.cc/help/bridges/hookshot/"&gt;Webhooks bridge (hookshot)&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Wireguard&lt;/strong&gt; (and dnsmasq): superseded by &lt;a href="https://etke.cc/help/extras/wg-easy/"&gt;WG Easy&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>Restoring servers from backups</title><link>https://etke.cc/help/backups/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://etke.cc/help/backups/</guid><description>&lt;p&gt;Servers die. A disk gives out, an update goes sideways, and suddenly the only thing between you and a very bad day is a backup. Good news: you&amp;rsquo;ve got them. Here&amp;rsquo;s how to bring one back.&lt;/p&gt;
&lt;p&gt;Honestly, the easiest path is to &lt;a href="https://etke.cc/contacts/"&gt;contact us&lt;/a&gt; and let us do the restore. Pulling servers back from the brink is sort of our whole thing. But if you&amp;rsquo;d rather get your hands dirty, read on: we&amp;rsquo;ll walk you through it and flag the spots where it bites. And if you&amp;rsquo;re &lt;a href="https://etke.cc/services/hosting/"&gt;on one of our hosting plans&lt;/a&gt;, you&amp;rsquo;re already covered: daily full-server snapshots, kept for 7 days, nothing for you to set up.&lt;/p&gt;
&lt;h2 id="borgbackup"&gt;
 &lt;a href="https://etke.cc/help/extras/borgbackup/"&gt;BorgBackup&lt;/a&gt;&lt;a class="heading__anchor" href="#borgbackup"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;If your server has BorgBackup installed, follow these steps to restore a backup:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get the list of all available backups using &lt;code&gt;/matrix/backup-borg/bin/borgmatic rlist&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;List the files in the archive. Usually, you need specific files from the archive, and extracting a full backup may require a lot of disk space. However, if you need to extract the full archive, skip this step. To find a specific file (e.g., Twitter bridge DB dump), use the following command: &lt;code&gt;/matrix/backup-borg/bin/borgmatic list --archive &amp;lt;ARCHIVE&amp;gt; --find borgmatic/postgresql_databases/matrix-postgres\:5432/&lt;/code&gt; (replace &lt;code&gt;&amp;lt;ARCHIVE&amp;gt;&lt;/code&gt; with the archive name from the first step). Example: &lt;code&gt;/matrix/backup-borg/bin/borgmatic list --archive matrix-2025-04-04-021409 --find borgmatic/postgresql_databases/matrix-postgres\:5432/&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Extract the needed files from the archive using the command &lt;code&gt;/matrix/backup-borg/bin/borgmatic extract --archive &amp;lt;ARCHIVE&amp;gt; --destination /restore --path &amp;lt;LIST OF PATHS&amp;gt;&lt;/code&gt; (replace &lt;code&gt;&amp;lt;ARCHIVE&amp;gt;&lt;/code&gt; with the archive name from the first step and &lt;code&gt;&amp;lt;LIST OF PATHS&amp;gt;&lt;/code&gt; with a space-separated list of paths without leading slash. If you want to extract the full archive, omit the &lt;code&gt;--path&lt;/code&gt; parameter). Example: &lt;code&gt;/matrix/backup-borg/bin/borgmatic extract --archive matrix-2025-04-04-021409 --destination /restore --path /borgmatic/postgresql_databases/matrix-postgres/matrix_mautrix_twitter&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;The extracted files will be in &lt;code&gt;/matrix/backup-borg/restored&lt;/code&gt; on the host (the &lt;code&gt;--destination /restore&lt;/code&gt; inside the container maps to this path). Do whatever you need with them, and don&amp;rsquo;t forget to remove them when you&amp;rsquo;re done.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 id="local-postgres-backups"&gt;
 Local Postgres Backups&lt;a class="heading__anchor" href="#local-postgres-backups"&gt;¶&lt;/a&gt;
&lt;/h2&gt;
&lt;p&gt;Enabled by default &lt;strong&gt;only&lt;/strong&gt; for on-premises servers without any other backup solution. If you&amp;rsquo;d like to enable local Postgres backups on your server, please &lt;a href="https://etke.cc/contacts/"&gt;contact us&lt;/a&gt;.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Find a usable backup in &lt;code&gt;/matrix/postgres-backup/data/last&lt;/code&gt;; it is usually the latest one (e.g., &lt;code&gt;synapse-latest.sql.gz&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Replace placeholders and run the following script on the server:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/usr/bin/env docker run --rm --name matrix-postgres-import &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--log-driver&lt;span style="color:#f92672"&gt;=&lt;/span&gt;none --user&lt;span style="color:#f92672"&gt;=&lt;/span&gt;998:1001 --cap-drop&lt;span style="color:#f92672"&gt;=&lt;/span&gt;ALL --network&lt;span style="color:#f92672"&gt;=&lt;/span&gt;matrix &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--env-file&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/matrix/postgres/env-postgres-psql &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--mount type&lt;span style="color:#f92672"&gt;=&lt;/span&gt;bind,src&lt;span style="color:#f92672"&gt;=&lt;/span&gt;./DATABASE_DUMP.sql.gz,dst&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/dump.sql.gz,ro &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;--entrypoint&lt;span style="color:#f92672"&gt;=&lt;/span&gt;/bin/sh docker.io/postgres:POSTGRES_VERSION-alpine &lt;span style="color:#ae81ff"&gt;\
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;-c &lt;span style="color:#e6db74"&gt;&amp;#34;cat /synapse_dump.sql | gunzip -c | grep -vE &amp;#39;^(CREATE|ALTER) ROLE (matrix)(;| WITH)&amp;#39; | grep -vE &amp;#39;^CREATE DATABASE (matrix)\s&amp;#39; | psql -v ON_ERROR_STOP=1 -h matrix-postgres --dbname=DATABASE_NAME&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;
&lt;li&gt;&lt;code&gt;DATABASE_DUMP.sql.gz&lt;/code&gt;: file name on the host filesystem you want to import.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;POSTGRES_VERSION&lt;/code&gt;: Postgres version; you can find the actual version by running &lt;code&gt;cat /etc/systemd/system/matrix-postgres.service | grep -o &amp;quot;postgres:.*-alpine&amp;quot;&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;DATABASE_NAME&lt;/code&gt;: the actual database name (e.g., &lt;code&gt;synapse&lt;/code&gt; or &lt;code&gt;postmoogle&lt;/code&gt;). Usually, the backup filename uses the format: &lt;code&gt;&amp;lt;database_name-timestamp&amp;gt;.sql.gz&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item><item><title>VPS to VPS migration</title><link>https://etke.cc/help/vps-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://etke.cc/help/vps-migration/</guid><description>&lt;p&gt;Need to move your Matrix server from one box to another? We can handle the whole migration for you for a one-time fee: setting up the new server, transferring the data, and making sure everything comes back up. Or, if you&amp;rsquo;d rather do it yourself at no extra cost, here&amp;rsquo;s how.&lt;/p&gt;
&lt;blockquote class="blockquote"&gt;
 &lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; This applies only to Matrix servers with custom domains. It covers migrations between cloud hosting and on-premises servers (in either direction), as well as between on-premises servers, but not migrations between two cloud-hosted servers.&lt;/p&gt;

&lt;/blockquote&gt;
&lt;ol&gt;
&lt;li&gt;Set DNS TTLs to 5 minutes for all Matrix-related DNS records.&lt;/li&gt;
&lt;li&gt;Copy etke.cc&amp;rsquo;s SSH key from the old server to the new server.&lt;/li&gt;
&lt;li&gt;Share the SSH login information with us, along with the sudo password (if set) and the new server&amp;rsquo;s IP address.&lt;/li&gt;
&lt;li&gt;Generate a new SSH key on the new server using &lt;code&gt;ssh-keygen -t ed25519 -N '' -C migration&lt;/code&gt;. Add the public key to the old server&amp;rsquo;s &lt;code&gt;.ssh/authorized_keys&lt;/code&gt; file (preferably as &lt;code&gt;root&lt;/code&gt;).&lt;/li&gt;
&lt;li&gt;Stop and disable all Matrix services from auto-starting on the old server by running &lt;code&gt;cd /etc/systemd/system/ &amp;amp;&amp;amp; systemctl disable --now matrix-*&lt;/code&gt;. Verify they are stopped with &lt;code&gt;systemctl | grep matrix-&lt;/code&gt; (a &lt;code&gt;failed&lt;/code&gt; status is fine; what matters is that no Matrix services are actively running).&lt;/li&gt;
&lt;li&gt;Update all Matrix-related DNS records to point to the new server.&lt;/li&gt;
&lt;li&gt;Start a new &lt;a href="https://www.gnu.org/software/screen/"target="_blank" rel="nofollow"&gt;screen&lt;/a&gt; session on the new server by running &lt;code&gt;screen -R&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Migrate the data to the new server by running &lt;code&gt;rsync -arP OLD_SERVER_USER@OLD_SERVER_IP:/matrix/ /matrix&lt;/code&gt; (replace &lt;code&gt;OLD_SERVER_USER&lt;/code&gt; and &lt;code&gt;OLD_SERVER_IP&lt;/code&gt; with the appropriate values).&lt;/li&gt;
&lt;li&gt;Create the &lt;code&gt;matrix&lt;/code&gt; group and user on the new server by running &lt;code&gt;groupadd --system matrix &amp;amp;&amp;amp; useradd --system --gid=matrix --no-create-home --home-dir=/matrix --shell=/sbin/nologin matrix&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Fix ownership of the &lt;code&gt;/matrix&lt;/code&gt; files on the new server by running &lt;code&gt;chown -hR matrix:matrix /matrix&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Inform us once the data migration is complete. We will then run a full setup process to properly configure the new server.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;If you have a Matrix client with an active session, it will reconnect once services are back up. Expect a few minutes of instability while things settle.&lt;/p&gt;
&lt;p&gt;We recommend completing steps 1 and 2 first so we can confirm connectivity to your new server.&lt;/p&gt;
&lt;p&gt;The subsequent steps require stopping services on the old server. Matrix services will be down until the data is copied to the new server, you contact us, and we complete the full setup process. This final coordination step may take some time, especially over weekends or at night (in Europe), which can lead to extended downtime.&lt;/p&gt;
&lt;p&gt;It&amp;rsquo;s best to perform the last steps at a time agreed with us in advance to ensure a quick turnaround. Be aware that your Matrix services will be down once you stop them, so you&amp;rsquo;ll need to contact us using one of the other methods listed on our &lt;a href="https://etke.cc/contacts/"&gt;contacts page&lt;/a&gt;.&lt;/p&gt;</description></item></channel></rss>