<?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 Quollix</title><link>https://quollix.org/docs/self-hosting/</link><description>Recent content in Self-Hosting on Quollix</description><generator>Hugo</generator><language>en-us</language><atom:link href="https://quollix.org/docs/self-hosting/index.xml" rel="self" type="application/rss+xml"/><item><title>Automatic updates</title><link>https://quollix.org/docs/self-hosting/automatic-updates/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://quollix.org/docs/self-hosting/automatic-updates/</guid><description>&lt;p&gt;This article is on automatic updates of Quollix itself. The apps installed in Quollix are already automatically updated by Quollix. On the server, run:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;sudo crontab -e
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add a cronjob automatically updating &lt;code&gt;quollix&lt;/code&gt; image, for example:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;3&lt;/span&gt; * * * /usr/bin/bash -c &lt;span class="s2"&gt;&amp;#34;docker pull quollix/quollix:latest &amp;amp;&amp;amp; docker compose -f /path/to/docker-compose.yml up -d&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;It is recommended to test the bash command above for correct execution by manually running it.&lt;/p&gt;</description></item><item><title>Backup server setup</title><link>https://quollix.org/docs/self-hosting/backup-server-setup/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://quollix.org/docs/self-hosting/backup-server-setup/</guid><description>&lt;p&gt;This guide shows how to set up a backup server for Quollix. For production use, this can serve as the external backup system in the &lt;a href="https://quollix.org/docs/self-hosting/backup-strategy/"&gt;3-2-1 backup strategy&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;There are two setup options:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;local storage for testing&lt;/li&gt;
&lt;li&gt;external storage for production&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="local-testing"&gt;Local Testing&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Start Quollix.&lt;/li&gt;
&lt;li&gt;Create this &lt;code&gt;docker-compose.yml&lt;/code&gt;:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;services&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ssh-server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;image&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;linuxserver/openssh-server:latest&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;container_name&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="l"&gt;dummy_backup_server&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;environment&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;PASSWORD_ACCESS=true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;USER_NAME=sshadmin&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;USER_PASSWORD=sshpassword&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;ports&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="s2"&gt;&amp;#34;127.0.0.1:2222:2222&amp;#34;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;- &lt;span class="l"&gt;quollix_postgres&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="nt"&gt;networks&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;quollix_postgres&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nt"&gt;external&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="kc"&gt;true&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol&gt;
&lt;li&gt;Start the backup server:&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker compose up -d
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Use these values on the Quollix &lt;strong&gt;Settings -&amp;gt; Backup server&lt;/strong&gt; page:&lt;/p&gt;</description></item><item><title>Backup strategy</title><link>https://quollix.org/docs/self-hosting/backup-strategy/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://quollix.org/docs/self-hosting/backup-strategy/</guid><description>&lt;p&gt;This article describes an easy-to-set-up, low-maintenance way to implement the 3-2-1 backup rule for a Quollix server. It focuses on recoverability under realistic failure scenarios such as server compromise, data loss, or accidental deletion.&lt;/p&gt;
&lt;h2 id="3-2-1-backup-rule"&gt;3-2-1 Backup Rule&lt;/h2&gt;
&lt;p&gt;The &lt;a href="https://en.wikipedia.org/wiki/Backup#3-2-1_Backup_Rule"&gt;3-2-1 backup rule&lt;/a&gt; is a widely recommended approach to data backup. It recommends:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;3 copies of data&lt;/li&gt;
&lt;li&gt;2 independent trust domains&lt;/li&gt;
&lt;li&gt;1 off-site copy&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="proposed-architecture"&gt;Proposed Architecture&lt;/h2&gt;
&lt;img src="https://quollix.org/images/backup-architecture.svg" alt="Backup Architecture" width="1000"&gt;
&lt;p&gt;The above diagram shows a backup architecture that complies with the 3-2-1 rule. The system is organised into two trust domains.&lt;/p&gt;</description></item><item><title>GDPR compliance</title><link>https://quollix.org/docs/self-hosting/gdpr-compliance/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://quollix.org/docs/self-hosting/gdpr-compliance/</guid><description>&lt;div class="alert alert-warning" role="alert"&gt;&lt;div class="h4 alert-heading" role="heading"&gt;Note&lt;/div&gt;


This section provides general information only and does not constitute legal advice. No responsibility or liability is assumed for how this information is used.
&lt;/div&gt;

&lt;p&gt;Quollix includes features that can support GDPR-aligned operation. This page provides additional legal context for selected features, explaining their relevance from a data protection perspective. The information here is not comprehensive and does not cover all GDPR obligations.&lt;/p&gt;
&lt;h2 id="user-invites"&gt;User invites&lt;/h2&gt;
&lt;p&gt;The link generated for user invitation contains only a temporary token, not a password. The token is valid for a limited time, can only be used once, and is protected by HTTPS provided that a properly signed certificate is configured, which is required for secure operation. Transmitting such links, even over insecure channels, is considered GDPR-compliant. Administrators may distribute the link through the following channels:&lt;/p&gt;</description></item><item><title>Scaling</title><link>https://quollix.org/docs/self-hosting/scaling/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://quollix.org/docs/self-hosting/scaling/</guid><description>&lt;p&gt;Quollix is designed to run as a single-node system. There is no built-in horizontal clustering. Scaling is achieved using one of the following approaches.&lt;/p&gt;
&lt;h2 id="vertical-scaling"&gt;Vertical Scaling&lt;/h2&gt;
&lt;p&gt;The primary scaling strategy is vertical scaling. Run Quollix on a machine with more CPU, memory, and disk space. This can be done by migrating the instance to a larger server. The &lt;a href="https://quollix.org/docs/self-hosting/server-migration/"&gt;server migration guide&lt;/a&gt; might be helpful for that.&lt;/p&gt;
&lt;h2 id="federation"&gt;Federation&lt;/h2&gt;
&lt;div class="alert alert-warning" role="alert"&gt;
 &lt;p&gt;This feature is not, or not fully, implemented yet. See the &lt;a href="https://quollix.org/docs/introduction/features/"&gt;feature
 overview&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Server migration</title><link>https://quollix.org/docs/self-hosting/server-migration/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://quollix.org/docs/self-hosting/server-migration/</guid><description>&lt;p&gt;Server migration means moving Quollix and apps data from one server to another. This could be for reasons such as switching cloud providers, upgrading hardware or moving between self-hosted and SaaS infrastructure.&lt;/p&gt;
&lt;p&gt;With Quollix, migration is straightforward: simply create remote backups of all apps, set up a new Quollix instance, configure access to the remote backup server, and restore the apps from the remote backup server. To avoid compatibility issues, ensure that the Docker image tags of the old and new Quollix containers are the same.&lt;/p&gt;</description></item><item><title>Server preparations</title><link>https://quollix.org/docs/self-hosting/server-preparations/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://quollix.org/docs/self-hosting/server-preparations/</guid><description>&lt;p&gt;This sample guide walks you through setting up a hardened Ubuntu Server host for Quollix. Adapt it to your own environment as needed.&lt;/p&gt;
&lt;h2 id="restrict-physical-access"&gt;Restrict Physical Access&lt;/h2&gt;
&lt;p&gt;Place the device in a locked rack or drawer.&lt;/p&gt;
&lt;h2 id="os-installation"&gt;OS Installation&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Download Ubuntu Server: Grab the latest ISO from &lt;a href="https://ubuntu.com/download/server"&gt;Canonical’s download page&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Flash it to a USB drive (Rufus, balenaEtcher, etc.). You will need to connect a screen and a keyboard in order to complete the initial setup.&lt;/li&gt;
&lt;li&gt;During setup:
&lt;ul&gt;
&lt;li&gt;Pick minimal installation, no GUI.&lt;/li&gt;
&lt;li&gt;Enable SSH server.&lt;/li&gt;
&lt;li&gt;Optional: Choose LVM with full-disk encryption (FDE) if you want encrypted storage (see below).&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="internet-connection"&gt;Internet Connection&lt;/h2&gt;
&lt;p&gt;Connect the server to a wired LAN to avoid having to configure a Wi-Fi connection on boot. With FDE, Wi-Fi setup would even be required twice: once in the encrypted-mode initramfs and again in the decrypted-mode main operating system. Please note that the LAN IP address of the server may differ between initramfs mode and the main operating system, since the router may recognise them as two distinct devices.&lt;/p&gt;</description></item><item><title>Threat model</title><link>https://quollix.org/docs/self-hosting/threat-model/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://quollix.org/docs/self-hosting/threat-model/</guid><description>&lt;p&gt;This document describes how Quollix mitigates threats to protect its digital infrastructure.&lt;/p&gt;
&lt;h2 id="security-measures"&gt;Security Measures&lt;/h2&gt;
&lt;h3 id="cryptography"&gt;Cryptography&lt;/h3&gt;
&lt;p&gt;We only use modern, well-tested cryptographic algorithms. Administrators can generate Let’s Encrypt–signed certificates or provide their own certificates to secure HTTPS endpoints. HTTP requests are redirected to HTTPS so users reach the encrypted endpoint by default.&lt;/p&gt;
&lt;h3 id="container-isolation"&gt;Container Isolation&lt;/h3&gt;
&lt;p&gt;Every app runs in its own Docker container with no shared volumes, networks, or Docker socket access, and with restricted Linux capabilities.&lt;/p&gt;</description></item><item><title>Troubleshooting</title><link>https://quollix.org/docs/self-hosting/troubleshooting/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><guid>https://quollix.org/docs/self-hosting/troubleshooting/</guid><description>&lt;details style="--faqlink: #3a73a0;"&gt;
 &lt;summary style="color: var(--faqlink);"&gt;&lt;span class="faq-question"&gt;I have forgotten my Quollix password. How can I reset it?&lt;/span&gt;&lt;/summary&gt;
 &lt;p&gt;You can ask an admin to reset your account password.&lt;/p&gt;
&lt;p&gt;If you are the only admin and have lost access to your account, you can reset the password by running the following command on the server:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;docker &lt;span class="nb"&gt;exec&lt;/span&gt; -i quollix_postgres_postgres psql -U postgres -d application -c &lt;span class="s2"&gt;&amp;#34;UPDATE users SET hashed_password = &amp;#39;\$2a\$10\$ly6w8BjJ35pdGOp3rdVnHOWmZzC/MQwdF5qSt8AQZk6WnhDqNSKqW&amp;#39; WHERE username = &amp;#39;&amp;lt;enter-your-username&amp;gt;&amp;#39;;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This resets the account password to &amp;lsquo;password&amp;rsquo;.&lt;/p&gt;</description></item></channel></rss>