<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Danschmid</title>
    <link>https://danschmid.writeas.com/</link>
    <description>A Novel about my FreeBSD journey</description>
    <pubDate>Fri, 19 Jun 2026 17:13:02 +0000</pubDate>
    <image>
      <url>https://i.snap.as/fBgsimOC.png</url>
      <title>Danschmid</title>
      <link>https://danschmid.writeas.com/</link>
    </image>
    <item>
      <title>Install Vaultwarden Password Server on FreeBSD</title>
      <link>https://danschmid.writeas.com/install-vaultwarden-password-server-on-freebsd?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[In this guide, I explain how to install and set up Vaultwarden on FreeBSD.&#xA;&#xA;!--more--&#xA;&#xA;What is Vaultwarden&#xA;&#xA;Vaultwarden is an alternative implementation of the Bitwarden server API, written in Rust and compatible with upstream Bitwarden clients. It is perfect for self-hosted use when using the official, resource-intensive service is not ideal.&#xA;&#xA;We can install it as follows:&#xA;&#xA;$: pkg install vaultwarden&#xA;&#xA;Then we copy the sample configuration:&#xA;&#xA;$: cp /usr/local/etc/rc.conf.d/vaultwarden.sample /usr/local/etc/rc.conf.d/vaultwarden&#xA;&#xA;However, before we change our Vaultwarden configuration, we need an admin token, which we can create with the following command:&#xA;&#xA;$: openssl rand -base64 48&#xA;&#xA;We now copy the created token and change the configuration.&#xA;&#xA;Note: If we want to use the web interface, we have to set SIGNUPSALLOWED to true. Under ADMINTOKEN we paste our copied token.&#xA;Furthermore, we can change our email server configuration here.&#xA;&#xA;$: nano /usr/local/etc/rc.conf.d/vaultwarden =  ROCKETADDRESS=127.0.0.1&#xA;export ROCKETADDRESS&#xA;&#xA;ROCKETPORT=4567 # your port here&#xA;export ROCKETPORT&#xA;&#xA;ROCKETTLS=&#39;{certs = &#34;/ssl/fullchain.pem&#34;, key = &#34;/ssl/key.pem&#34;}&#39;&#xA;LOGFILE=&#39;/data/bitwarden.log&#39;&#xA;&#xA;SIGNUPSALLOWED=&#39;true&#39;&#xA;export SIGNUPSALLOWED&#xA;&#xA;DOMAIN=&#39;https://vaultwarden.domain&#39;&#xA;export DOMAIN&#xA;&#xA;ADMINTOKEN= # generate one with ~$ openssl rand -base64 48&#xA;export ADMINTOKEN&#xA;&#xA;SMTPHOST=localhost&#xA;export SMTPHOST&#xA;&#xA;SMTPFROM=noreply@localhost&#xA;export SMTPFROM&#xA;&#xA;SMTPPORT=25&#xA;export SMTPPORT&#xA;&#xA;SMTPSSL=false&#xA;export SMTPSSL&#xA;&#xA;SMTPUSERNAME=&#xA;export SMTPUSERNAME&#xA;&#xA;SMTPPASSWORD=&#xA;export SMTPPASSWORD&#xA;&#xA;Now that we have changed our configuration, we can enable the Vaultwarden service and start it for the first time.&#xA;&#xA;$: service vaultwarden enable&#xA;$: service vaultwarden start&#xA;$: service vaultwarden status&#xA;&#xA;To be able to use the web interface, we will use Nginx as a reverse proxy. To complete this, we first create the Nginx configuration:&#xA;&#xA;$: nano /usr/local/etc/nginx/vhosts/vaultwarden.conf =  server {&#xA;&#x9;listen 80;&#xA;&#xA;    servername vaultwarden.domain;&#xA;&#xA;    # Allow large attachments&#xA;    clientmaxbodysize 128M;&#xA;&#xA;    location / {&#xA;        proxypass http://127.0.0.1:4567;&#xA;        proxysetheader Host $host;&#xA;        proxysetheader X-Real-IP $remoteaddr;&#xA;        proxysetheader X-Forwarded-For $proxyaddxforwardedfor;&#xA;        proxysetheader X-Forwarded-Proto $scheme;&#xA;    }&#xA;&#xA;    location /notifications/hub {&#xA;        proxypass http://127.0.0.1:3012;&#xA;        proxysetheader Upgrade $httpupgrade;&#xA;        proxysetheader Connection &#34;upgrade&#34;;&#xA;    }&#xA;&#xA;    location /notifications/hub/negotiate {&#xA;       proxy_pass http://127.0.0.1:4567;&#xA;    }&#xA;}&#xA;&#xA;We need another entry in our host&#39;s file:&#xA;&#xA;$: nano /etc/hosts =  127.0.0.1 vaultwarden.domain&#xA;&#xA;Since it&#39;s more secure to deploy Vaultwarden over HTTPS, and we still need let&#39;s-encrypt certificates for that, we simply run the “certbot”&#xA;command in our terminal and let it automatically create a certificate for our new domain.&#xA;&#xA;Finally, we restart the Nginx once.&#xA;&#xA;$: service nginx restart&#xA;&#xA;Now we can open our freshly installed Vaultwarden service via the web browser.&#xA;&#xA;Here, we can create a new user and manage our passwords securely in the future.&#xA;&#xA;a href=&#34;https://remark.as/p/danschmid/install-vaultwarden-password-server-on-freebsd&#34;Discuss.../a &#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>In this guide, I explain how to install and set up Vaultwarden on FreeBSD.</p>



<h2 id="what-is-vaultwarden" id="what-is-vaultwarden">What is Vaultwarden</h2>

<p><a href="https://freshports.org/security/vaultwarden" rel="nofollow">Vaultwarden</a> is an alternative implementation of the Bitwarden server API, written in Rust and compatible with upstream Bitwarden clients. It is perfect for self-hosted use when using the official, resource-intensive service is not ideal.</p>

<p>We can install it as follows:</p>

<pre><code class="language-bash">$: pkg install vaultwarden
</code></pre>

<p>Then we copy the sample configuration:</p>

<pre><code class="language-bash">$: cp /usr/local/etc/rc.conf.d/vaultwarden.sample /usr/local/etc/rc.conf.d/vaultwarden
</code></pre>

<p>However, before we change our Vaultwarden configuration, we need an admin token, which we can create with the following command:</p>

<pre><code class="language-bash">$: openssl rand -base64 48
</code></pre>

<p>We now copy the created token and change the configuration.</p>

<p><strong>Note:</strong> If we want to use the web interface, we have to set SIGNUPS<em>ALLOWED to true. Under ADMIN</em>TOKEN we paste our copied token.
Furthermore, we can change our email server configuration here.</p>

<pre><code class="language-bash">$: nano /usr/local/etc/rc.conf.d/vaultwarden =&gt;

ROCKET_ADDRESS=127.0.0.1
export ROCKET_ADDRESS

ROCKET_PORT=4567 # your port here
export ROCKET_PORT

# ROCKET_TLS=&#39;{certs = &#34;/ssl/fullchain.pem&#34;, key = &#34;/ssl/key.pem&#34;}&#39;
# LOG_FILE=&#39;/data/bitwarden.log&#39;

SIGNUPS_ALLOWED=&#39;true&#39;
export SIGNUPS_ALLOWED

DOMAIN=&#39;https://vaultwarden.domain&#39;
export DOMAIN

ADMIN_TOKEN= # generate one with ~$ openssl rand -base64 48
export ADMIN_TOKEN

SMTP_HOST=localhost
export SMTP_HOST

SMTP_FROM=noreply@localhost
export SMTP_FROM

SMTP_PORT=25
export SMTP_PORT

SMTP_SSL=false
export SMTP_SSL

# SMTP_USERNAME=
# export SMTP_USERNAME

# SMTP_PASSWORD=
# export SMTP_PASSWORD
</code></pre>

<p>Now that we have changed our configuration, we can enable the Vaultwarden service and start it for the first time.</p>

<pre><code class="language-bash">$: service vaultwarden enable
$: service vaultwarden start
$: service vaultwarden status
</code></pre>

<p>To be able to use the web interface, we will use Nginx as a reverse proxy. To complete this, we first create the Nginx configuration:</p>

<pre><code class="language-bash">$: nano /usr/local/etc/nginx/vhosts/vaultwarden.conf =&gt;

server {
	listen 80;

    server_name vaultwarden.domain;

    # Allow large attachments
    client_max_body_size 128M;

    location / {
        proxy_pass http://127.0.0.1:4567;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    location /notifications/hub {
        proxy_pass http://127.0.0.1:3012;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &#34;upgrade&#34;;
    }

    location /notifications/hub/negotiate {
       proxy_pass http://127.0.0.1:4567;
    }
}
</code></pre>

<p>We need another entry in our host&#39;s file:</p>

<pre><code class="language-bash">$: nano /etc/hosts =&gt;

127.0.0.1 vaultwarden.domain
</code></pre>

<p>Since it&#39;s more secure to deploy Vaultwarden over HTTPS, and we still need let&#39;s-encrypt certificates for that, we simply run the “certbot”
command in our terminal and let it automatically create a certificate for our new domain.</p>

<p>Finally, we restart the Nginx once.</p>

<pre><code class="language-bash">$: service nginx restart
</code></pre>

<p>Now we can open our freshly installed Vaultwarden service via the web browser.</p>

<p><img src="https://i.snap.as/1Acs8RC8.png" alt=""/></p>

<p>Here, we can create a new user and manage our passwords securely in the future.</p>

<p><a href="https://remark.as/p/danschmid/install-vaultwarden-password-server-on-freebsd" rel="nofollow">Discuss...</a></p>


]]></content:encoded>
      <guid>https://danschmid.writeas.com/install-vaultwarden-password-server-on-freebsd</guid>
      <pubDate>Sun, 18 Sep 2022 07:51:58 +0000</pubDate>
    </item>
    <item>
      <title>Install Navidrome Music Server on FreeBSD</title>
      <link>https://danschmid.writeas.com/install-navidrome-music-server-on-freebsd?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[In this tutorial, I explain how to install the Navidrome music server on FreeBSD.&#xA;&#xA;!--more--&#xA;&#xA;What is Navidrome?&#xA;&#xA;Navidrome is an open-source web-based music collection server and streamer. It gives us the freedom to listen to our music collection from any browser&#xA;or mobile device. It&#39;s like our own personal Spotify!&#xA;&#xA;Furthermore, it offers the following feature:&#xA;&#xA;Manages huge music collections&#xA;Streams virtually any audio format available&#xA;Reads and uses all of our beautifully curated metadata&#xA;Great support for compilations (various artists&#39; albums) and box sets (multi-disc albums)&#xA;Multi-user, each user has their playlists, favorites, etc.&#xA;Very low resource consumption&#xA;Automatically monitors your library for changes, imports new files, and reloads new metadata&#xA;Modern and responsive web interface based on Material UI&#xA;Compatible with all Subsonic/Madsonic/Airsonic clients&#xA;Transcoding on the fly. It can be set per user/player. Opus encoding is supported.&#xA;&#xA;How can we install it?&#xA;&#xA;Installation is simple, we just need to run the following command:&#xA;&#xA;$: pkg install navidrome&#xA;&#xA;After the installation is through, we can then edit the corresponding configuration file.&#xA;&#xA;$: nano /usr/local/etc/navidrome/config.toml&#xA;&#xA;You can have a look at it. You will find a lot of configuration options.  What is important is that you set the path to your music collection correctly.&#xA;&#xA;If you have configured the whole thing according to your wishes, we still have to activate the RC service and then start it once.&#xA;&#xA;$: servive navidrome enable&#xA;$: servive navidrome start&#xA;&#xA;Nginx configuration&#xA;&#xA;We use Nginx as a reverse proxy server. Likewise, we now create the following file under /usr/local/etc/nginx/vhosts:&#xA;&#xA;$: nano /usr/local/etc/nginx/vhosts/navidrome.conf  ⇒&#xA;&#xA;server {&#xA;    servername navidrome.domain;&#xA;&#xA;    location / {&#xA;        proxypass http://127.0.0.1:4533;&#xA;        proxyhttpversion 1.1;&#xA;        proxycachebypass $httpupgrade;&#xA;&#xA;        # proxy headers&#xA;        proxysetheader Upgrade $httpupgrade;&#xA;        proxysetheader Connection &#34;upgrade&#34;;&#xA;        proxysetheader Host $host;&#xA;        proxysetheader X-Real-IP $remoteaddr;&#xA;        proxysetheader X-Forwarded-For $proxyaddxforwardedfor;&#xA;        proxysetheader X-Forwarded-Proto $scheme;&#xA;        proxysetheader X-Forwarded-Host $host;&#xA;        proxysetheader X-forwarded-port $serverport;&#xA;&#xA;        # proxy timeouts&#xA;        proxyconnecttimeout 60s;&#xA;        proxysendtimeout 60s;&#xA;        proxyreadtimeout 60s;&#xA;    }&#xA;}&#xA;&#xA;In our /etc/hosts, we add the following line.&#xA;&#xA;$: nano /etc/rc.conf ⇒&#xA;&#xA;127.0.0.1 navidrome.domain&#xA;&#xA;Then we restart the Nginx.&#xA;&#xA;$: service nginx restart&#xA;&#xA;We can now open Navidrome via the web browser.&#xA;&#xA;a href=&#34;https://remark.as/p/danschmid/install-navidrome-music-server-on-freebsd&#34;Discuss.../a &#xD;&#xA;&#xD;&#xA;!--emailsub--]]&gt;</description>
      <content:encoded><![CDATA[<p>In this tutorial, I explain how to install the Navidrome music server on FreeBSD.</p>



<h2 id="what-is-navidrome" id="what-is-navidrome">What is Navidrome?</h2>

<p>Navidrome is an open-source web-based music collection server and streamer. It gives us the freedom to listen to our music collection from any browser
or mobile device. It&#39;s like our own personal Spotify!</p>

<p>Furthermore, it offers the following feature:</p>
<ul><li>Manages huge music collections</li>
<li>Streams virtually any audio format available</li>
<li>Reads and uses all of our beautifully curated metadata</li>
<li>Great support for compilations (various artists&#39; albums) and box sets (multi-disc albums)</li>
<li>Multi-user, each user has their playlists, favorites, etc.</li>
<li>Very low resource consumption</li>
<li>Automatically monitors your library for changes, imports new files, and reloads new metadata</li>
<li>Modern and responsive web interface based on Material UI</li>
<li>Compatible with all Subsonic/Madsonic/Airsonic clients</li>
<li>Transcoding on the fly. It can be set per user/player. Opus encoding is supported.</li></ul>

<h2 id="how-can-we-install-it" id="how-can-we-install-it">How can we install it?</h2>

<p>Installation is simple, we just need to run the following command:</p>

<pre><code class="language-bash">$: pkg install navidrome
</code></pre>

<p>After the installation is through, we can then edit the corresponding configuration file.</p>

<pre><code class="language-bash">$: nano /usr/local/etc/navidrome/config.toml
</code></pre>

<p>You can have a look at it. You will find a lot of configuration options.  What is important is that you set the path to your music collection correctly.</p>

<p>If you have configured the whole thing according to your wishes, we still have to activate the RC service and then start it once.</p>

<pre><code class="language-bash">$: servive navidrome enable
$: servive navidrome start
</code></pre>

<h2 id="nginx-configuration" id="nginx-configuration">Nginx configuration</h2>

<p>We use Nginx as a reverse proxy server. Likewise, we now create the following file under /usr/local/etc/nginx/vhosts:</p>

<pre><code class="language-bash">$: nano /usr/local/etc/nginx/vhosts/navidrome.conf  ⇒

server {
    server_name navidrome.domain;

    location / {
        proxy_pass http://127.0.0.1:4533;
        proxy_http_version 1.1;
        proxy_cache_bypass $http_upgrade;

        # proxy headers
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection &#34;upgrade&#34;;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Forwarded-Host $host;
        proxy_set_header X-forwarded-port $server_port;

        # proxy timeouts
        proxy_connect_timeout 60s;
        proxy_send_timeout 60s;
        proxy_read_timeout 60s;
    }
}
</code></pre>

<p>In our /etc/hosts, we add the following line.</p>

<pre><code class="language-bash">$: nano /etc/rc.conf ⇒

127.0.0.1 navidrome.domain
</code></pre>

<p>Then we restart the Nginx.</p>

<pre><code class="language-bash">$: service nginx restart
</code></pre>

<p>We can now open Navidrome via the web browser.</p>

<p><img src="https://i.snap.as/StcgRdbs.png" alt=""/></p>

<p><a href="https://remark.as/p/danschmid/install-navidrome-music-server-on-freebsd" rel="nofollow">Discuss...</a></p>


]]></content:encoded>
      <guid>https://danschmid.writeas.com/install-navidrome-music-server-on-freebsd</guid>
      <pubDate>Sun, 18 Sep 2022 07:46:34 +0000</pubDate>
    </item>
    <item>
      <title>Install Airsonic on FreeBSD</title>
      <link>https://danschmid.writeas.com/install-airsonic-on-freebsd?pk_campaign=rss-feed</link>
      <description>&lt;![CDATA[In this tutorial, I&#39;ll explain how to install Airsonic on FreeBSD.&#xA;&#xA;!--more--&#xA;&#xA;What is Airsonic?&#xA;&#xA;It&#39;s a free, web-based media streamer that provides ubiquitous access t