<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Postgresql on Carlos Vaz</title>
    <link>https://carlosvaz.com/tags/postgresql/</link>
    <description>Recent content in Postgresql on Carlos Vaz</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-US</language>
    <managingEditor>carlos@carjorvaz.com (Carlos Vaz)</managingEditor>
    <webMaster>carlos@carjorvaz.com (Carlos Vaz)</webMaster>
    <lastBuildDate>Sat, 05 Aug 2023 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://carlosvaz.com/tags/postgresql/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Holy Grail Nextcloud setup made easy by NixOS</title>
      <link>https://carlosvaz.com/posts/the-holy-grail-nextcloud-setup-made-easy-by-nixos/</link>
      <pubDate>Sat, 05 Aug 2023 00:00:00 +0000</pubDate><author>carlos@carjorvaz.com (Carlos Vaz)</author>
      <guid>https://carlosvaz.com/posts/the-holy-grail-nextcloud-setup-made-easy-by-nixos/</guid>
      <description>&lt;p&gt;Nextcloud really is the central piece to most people&amp;rsquo;s self-hosted infrastructure.&lt;/p&gt;&#xA;&lt;p&gt;Providing file synchronization, a web interface to navigate through them, calendar, contacts, tasks, kanban and webmail, it presents itself as a complete GSuite self-hosted alternative.&lt;/p&gt;&#xA;&lt;p&gt;Hosting Nextcloud has become easier over time, thanks to its docker-compose example setups and to the Snap for use mostly on Ubuntu systems. However, having a faster and more optimized setup can take some effort on these platforms. Thankfully, on NixOS it&amp;rsquo;s not hard at all, as I&amp;rsquo;ll show you.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>Nextcloud really is the central piece to most people&rsquo;s self-hosted infrastructure.</p>
<p>Providing file synchronization, a web interface to navigate through them, calendar, contacts, tasks, kanban and webmail, it presents itself as a complete GSuite self-hosted alternative.</p>
<p>Hosting Nextcloud has become easier over time, thanks to its docker-compose example setups and to the Snap for use mostly on Ubuntu systems. However, having a faster and more optimized setup can take some effort on these platforms. Thankfully, on NixOS it&rsquo;s not hard at all, as I&rsquo;ll show you.</p>





<div class="highlight"><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;"><code class="language-nix" data-lang="nix"><span style="display:flex;"><span>{ self<span style="color:#f92672">,</span> config<span style="color:#f92672">,</span> lib<span style="color:#f92672">,</span> pkgs<span style="color:#f92672">,</span> <span style="color:#f92672">...</span> }:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>{
</span></span><span style="display:flex;"><span>  services <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>    nginx<span style="color:#f92672">.</span>virtualHosts <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>      <span style="color:#e6db74">&#34;cloud.example.com&#34;</span> <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>        forceSSL <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>        enableACME <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>      };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      <span style="color:#e6db74">&#34;onlyoffice.example.com&#34;</span> <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>        forceSSL <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>        enableACME <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>      };
</span></span><span style="display:flex;"><span>    };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    nextcloud <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>      enable <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>      hostName <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;cloud.example.com&#34;</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>       <span style="color:#75715e"># Need to manually increment with every major upgrade.</span>
</span></span><span style="display:flex;"><span>      package <span style="color:#f92672">=</span> pkgs<span style="color:#f92672">.</span>nextcloud27;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      <span style="color:#75715e"># Let NixOS install and configure the database automatically.</span>
</span></span><span style="display:flex;"><span>      database<span style="color:#f92672">.</span>createLocally <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      <span style="color:#75715e"># Let NixOS install and configure Redis caching automatically.</span>
</span></span><span style="display:flex;"><span>      configureRedis <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      <span style="color:#75715e"># Increase the maximum file upload size to avoid problems uploading videos.</span>
</span></span><span style="display:flex;"><span>      maxUploadSize <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;16G&#34;</span>;
</span></span><span style="display:flex;"><span>      https <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>      enableBrokenCiphersForSSE <span style="color:#f92672">=</span> <span style="color:#66d9ef">false</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      autoUpdateApps<span style="color:#f92672">.</span>enable <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>      extraAppsEnable <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>      extraApps <span style="color:#f92672">=</span> <span style="color:#66d9ef">with</span> config<span style="color:#f92672">.</span>services<span style="color:#f92672">.</span>nextcloud<span style="color:#f92672">.</span>package<span style="color:#f92672">.</span>packages<span style="color:#f92672">.</span>apps; {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># List of apps we want to install and are already packaged in</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># https://github.com/NixOS/nixpkgs/blob/master/pkgs/servers/nextcloud/packages/nextcloud-apps.json</span>
</span></span><span style="display:flex;"><span>        <span style="color:#66d9ef">inherit</span> calendar contacts mail notes onlyoffice tasks;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># Custom app installation example.</span>
</span></span><span style="display:flex;"><span>        cookbook <span style="color:#f92672">=</span> pkgs<span style="color:#f92672">.</span>fetchNextcloudApp <span style="color:#66d9ef">rec</span> {
</span></span><span style="display:flex;"><span>          url <span style="color:#f92672">=</span>
</span></span><span style="display:flex;"><span>            <span style="color:#e6db74">&#34;https://github.com/nextcloud/cookbook/releases/download/v0.10.2/Cookbook-0.10.2.tar.gz&#34;</span>;
</span></span><span style="display:flex;"><span>          sha256 <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;sha256-XgBwUr26qW6wvqhrnhhhhcN4wkI+eXDHnNSm1HDbP6M=&#34;</span>;
</span></span><span style="display:flex;"><span>        };
</span></span><span style="display:flex;"><span>      };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      config <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>        overwriteProtocol <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;https&#34;</span>;
</span></span><span style="display:flex;"><span>        defaultPhoneRegion <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;PT&#34;</span>;
</span></span><span style="display:flex;"><span>        dbtype <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;pgsql&#34;</span>;
</span></span><span style="display:flex;"><span>        adminuser <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;admin&#34;</span>;
</span></span><span style="display:flex;"><span>        adminpassFile <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;/path/to/nextcloud-admin-pass&#34;</span>;
</span></span><span style="display:flex;"><span>      };
</span></span><span style="display:flex;"><span>    };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    onlyoffice <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>      enable <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>      hostname <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;onlyoffice.example.com&#34;</span>;
</span></span><span style="display:flex;"><span>    };
</span></span><span style="display:flex;"><span>  };
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div><p>You may want to proceed with caution while setting up the OnlyOffice server, which will allow for Google Docs-like functionality on our Nextcloud instance, by having it only accessible inside your VPN or by setting the <code>services.onlyoffice.jwtSecretFile</code> option if exposed to the public Internet.</p>
<p>With this snippet, a Nextcloud instance with a selection of pre-installed Apps, PostgreSQL as a database, Redis Caching and Let&rsquo;s Encrypt certificates will be set up for you.</p>
<p>To connect to the OnlyOffice server, configure it appropriately in Administration settings &gt; ONLYOFFICE &gt; ONLYOFFICE Docs address.</p>
<h2 id="backups">Backups</h2>
<p>In this configuration, we need to persist the <code>/var/lib/nextcloud</code> and <code>/var/lib/postgresql</code> directories.</p>
<p>For backing up, you could copy  <code>/var/lib/nextcloud</code> to another computer and, for the database, dump it to a file and copy it to another computer as well, as described <a href="https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html">in the official Nextcloud documentation</a>.</p>
<h2 id="conclusion">Conclusion</h2>
<p>Once again, NixOS proves itself as an amazing self-hosting platform.</p>
<p>Nextcloud, in its default configuration, is sometimes known for running slow.
Thanks to NixOS, we&rsquo;ve optimized its performance and that&rsquo;s quite impactful, as it&rsquo;s my most used self-hosted application.
Having all of these apps running on Nextcloud has enabled me to move on from GSuite to a mostly autonomous and self-hosted infrastructure.</p>
<p>In the future, I look forward to being able to use Collabora/Nextcloud Office instead of OnlyOffice, as it&rsquo;s more aligned with Nextcloud&rsquo;s philosophical goals and hasn&rsquo;t done <a href="https://help.nextcloud.com/t/onlyoffice-removed-web-mobile-editing-from-version-5-5-0-of-community-document-server/74360">suspicious decisions in the past</a>.</p>
<h2 id="references">References</h2>
<ul>
<li><a href="https://nixos.wiki/wiki/Nextcloud">https://nixos.wiki/wiki/Nextcloud</a></li>
<li><a href="https://nixos.wiki/wiki/Onlyoffice-Documentserver">https://nixos.wiki/wiki/Onlyoffice-Documentserver</a></li>
<li><a href="https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html">https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html</a></li>
<li><a href="https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html">https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html</a></li>
</ul>
]]></content:encoded>
    </item>
    <item>
      <title>Setting up Plausible Analytics on NixOS</title>
      <link>https://carlosvaz.com/posts/setting-up-plausible-analytics-on-nixos/</link>
      <pubDate>Thu, 03 Aug 2023 00:00:00 +0000</pubDate><author>carlos@carjorvaz.com (Carlos Vaz)</author>
      <guid>https://carlosvaz.com/posts/setting-up-plausible-analytics-on-nixos/</guid>
      <description>&lt;p&gt;I&amp;rsquo;ve been looking to set up analytics on my blog and maybe some other websites.&#xA;I&amp;rsquo;ve avoided Google Analytics as it&amp;rsquo;s quite insideous and would like to avoid giving them my readers&amp;rsquo; data willingly and for free.&lt;/p&gt;&#xA;&lt;p&gt;From my research, I found Plausible and Umami to be good alternatives.&#xA;Both collect so little data that cookie consent banners are not required and both are very minimalistic in their dashboards, focusing on what really matters.&lt;/p&gt;</description>
      <content:encoded><![CDATA[<p>I&rsquo;ve been looking to set up analytics on my blog and maybe some other websites.
I&rsquo;ve avoided Google Analytics as it&rsquo;s quite insideous and would like to avoid giving them my readers&rsquo; data willingly and for free.</p>
<p>From my research, I found Plausible and Umami to be good alternatives.
Both collect so little data that cookie consent banners are not required and both are very minimalistic in their dashboards, focusing on what really matters.</p>
<p>A friend of mine is using Umami and is quite happy with his setup.
Umami should also be lighter, as Plausible is designed to support a much larger number of connected websites.
Despite all of that, I ended up choosing Plausible simply because it has an upstream NixOS module, allowing me to set it up quite trivially, whereas I would have to package Umami and setup its PostgreSQL integration manually or use containers, which I&rsquo;m also trying to avoid in my self-hosted infrastructure.</p>
<p>This simple snippet is enough to set up a Plausible instance, all automatically configured for you.</p>





<div class="highlight"><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;"><code class="language-nix" data-lang="nix"><span style="display:flex;"><span>{ self<span style="color:#f92672">,</span> config<span style="color:#f92672">,</span> lib<span style="color:#f92672">,</span> pkgs<span style="color:#f92672">,</span> <span style="color:#f92672">...</span> }:
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">let</span> domain <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;plausible.example.com&#34;</span>;
</span></span><span style="display:flex;"><span><span style="color:#66d9ef">in</span> {
</span></span><span style="display:flex;"><span>  age<span style="color:#f92672">.</span>secrets <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>    plausibleAdminPassword<span style="color:#f92672">.</span>file <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>self<span style="color:#e6db74">}</span><span style="color:#e6db74">/secrets/plausibleAdminPassword.age&#34;</span>;
</span></span><span style="display:flex;"><span>    plausibleReleaseCookie<span style="color:#f92672">.</span>file <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>self<span style="color:#e6db74">}</span><span style="color:#e6db74">/secrets/plausibleReleaseCookie.age&#34;</span>;
</span></span><span style="display:flex;"><span>    plausibleSecretKeybase<span style="color:#f92672">.</span>file <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;</span><span style="color:#e6db74">${</span>self<span style="color:#e6db74">}</span><span style="color:#e6db74">/secrets/plausibleSecretKeybase.age&#34;</span>;
</span></span><span style="display:flex;"><span>  };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  services <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>    nginx<span style="color:#f92672">.</span>virtualHosts<span style="color:#f92672">.</span><span style="color:#e6db74">${</span>domain<span style="color:#e6db74">}</span> <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>      forceSSL <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>      enableACME <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>      locations<span style="color:#f92672">.</span><span style="color:#e6db74">&#34;/&#34;</span><span style="color:#f92672">.</span>proxyPass <span style="color:#f92672">=</span>
</span></span><span style="display:flex;"><span>        <span style="color:#e6db74">&#34;http://127.0.0.1:</span><span style="color:#e6db74">${</span>toString config<span style="color:#f92672">.</span>services<span style="color:#f92672">.</span>plausible<span style="color:#f92672">.</span>server<span style="color:#f92672">.</span>port<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>;
</span></span><span style="display:flex;"><span>    };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>    plausible <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>      enable <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      adminUser <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># activate is used to skip the email verification of the admin-user that&#39;s</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># automatically created by plausible. This is only supported if</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># postgresql is configured by the module. This is done by default, but</span>
</span></span><span style="display:flex;"><span>        <span style="color:#75715e"># can be turned off with services.plausible.database.postgres.setup.</span>
</span></span><span style="display:flex;"><span>        activate <span style="color:#f92672">=</span> <span style="color:#66d9ef">true</span>;
</span></span><span style="display:flex;"><span>        email <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;john.doe@example.com&#34;</span>;
</span></span><span style="display:flex;"><span>        passwordFile <span style="color:#f92672">=</span> config<span style="color:#f92672">.</span>age<span style="color:#f92672">.</span>secrets<span style="color:#f92672">.</span>plausibleAdminPassword<span style="color:#f92672">.</span>path;
</span></span><span style="display:flex;"><span>      };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>      server <span style="color:#f92672">=</span> {
</span></span><span style="display:flex;"><span>        baseUrl <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;https://</span><span style="color:#e6db74">${</span>domain<span style="color:#e6db74">}</span><span style="color:#e6db74">&#34;</span>;
</span></span><span style="display:flex;"><span>        secretKeybaseFile <span style="color:#f92672">=</span> config<span style="color:#f92672">.</span>age<span style="color:#f92672">.</span>secrets<span style="color:#f92672">.</span>plausibleSecretKeybase<span style="color:#f92672">.</span>path;
</span></span><span style="display:flex;"><span>      };
</span></span><span style="display:flex;"><span>    };
</span></span><span style="display:flex;"><span>  };
</span></span><span style="display:flex;"><span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># As this is a root on tmpfs system, we use the impermanence</span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># NixOS module to persist state between reboots.</span>
</span></span><span style="display:flex;"><span>  <span style="color:#75715e"># You can omit the next block if using a regular configuration.</span>
</span></span><span style="display:flex;"><span>  environment<span style="color:#f92672">.</span>persistence<span style="color:#f92672">.</span><span style="color:#e6db74">&#34;/persist&#34;</span><span style="color:#f92672">.</span>directories <span style="color:#f92672">=</span>
</span></span><span style="display:flex;"><span>    [
</span></span><span style="display:flex;"><span>      <span style="color:#e6db74">&#34;/var/lib/postgresql&#34;</span>
</span></span><span style="display:flex;"><span>      {
</span></span><span style="display:flex;"><span>        directory <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;/var/lib/clickhouse&#34;</span>;
</span></span><span style="display:flex;"><span>        mode <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;0750&#34;</span>;
</span></span><span style="display:flex;"><span>        user <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;clickhouse&#34;</span>;
</span></span><span style="display:flex;"><span>        group <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;clickhouse&#34;</span>;
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>      {
</span></span><span style="display:flex;"><span>        directory <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;/var/lib/private/plausible&#34;</span>;
</span></span><span style="display:flex;"><span>        mode <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;0750&#34;</span>;
</span></span><span style="display:flex;"><span>        user <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;plausible&#34;</span>;
</span></span><span style="display:flex;"><span>        group <span style="color:#f92672">=</span> <span style="color:#e6db74">&#34;plausible&#34;</span>;
</span></span><span style="display:flex;"><span>      }
</span></span><span style="display:flex;"><span>    ];
</span></span><span style="display:flex;"><span>}</span></span></code></pre></div><p>In this snippet I&rsquo;m using <a href="https://github.com/ryantm/agenix">agenix</a> to manage secrets such as the admin password.
You&rsquo;re obvisouly free to use your secrets management tool of choice or you can just use file paths which are not in public version control systems.</p>
<p>As per the official documentation, the <code>secretKeybaseFile</code>&rsquo;s contents should be generated with:</p>





<pre tabindex="0"><code class="language-nil" data-lang="nil">$ openssl rand -base64 64 | tr -d &#39;\n&#39; ; echo</code></pre><p>For some unknown unreason, the admin password I set up didn&rsquo;t work after the rebuild.
I worked around that by using the reset password form on the login page.
In my case, this worked out of the box as the host where I deployed this Plausible instance was also a mailserver.
If yours isn&rsquo;t, you may have to adjust the <code>services.plausible.mail.*</code> options accordingly.</p>
<p>All that&rsquo;s left is to add a website in the dashboard.
You&rsquo;ll be presented with an HTML snippet which you should include on your website&rsquo;s <code>&lt;head&gt;</code> tag to start collecting privacy-respecting analytics.</p>
<p>As optional configuration, I enabled email alerts for weekly and monthly reports and also traffic spikes, to avoid creating the common addiction of being permanently looking at the analytics dashboard instead of engaging in productive activities.</p>
<h2 id="conclusion">Conclusion</h2>
<p>I&rsquo;m quite happy with this setup.
As I said before, this gives me some insight into my readership without compromising their privacy.</p>
<p>For many months my only analytics were from the Google Search Console, as I was having configuration and compilation errros in the past when trying to set up Plausible in NixOS.
Recently I decided to give it another go for no special reason and was pleasantly surprised to find out that it just works.</p>
<p>It seems to be possible to <a href="https://plausible.io/docs/self-hosting-configuration#google-search-integration">integrate Plausible with the Google Search Console API</a> and that may be something I&rsquo;ll look into in the future.</p>
<p>If you wish to work around your readers&rsquo; adblockers, this also seems to be possible using a proxy as to not trigger the usual adblocker filters, as explained in <a href="https://www.ersocon.net/articles/plausible-js-adblocker-workaround-on-nixos~79dc0321-4d77-4e11-840e-73ef27df58ef">this article</a>.</p>
<h2 id="references">References</h2>
<ul>
<li><a href="https://nixos.org/manual/nixos/stable/#module-services-plausible">https://nixos.org/manual/nixos/stable/#module-services-plausible</a></li>
<li><a href="https://plausible.io/docs/self-hosting">https://plausible.io/docs/self-hosting</a></li>
</ul>
]]></content:encoded>
    </item>
  </channel>
</rss>
