2255 lines
107 KiB
HTML
2255 lines
107 KiB
HTML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
|
|
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
|
|
<head>
|
|
<!-- 2021-04-25 dim. 19:10 -->
|
|
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
|
<title>Home Server</title>
|
|
<meta name="author" content="Dehaeze Thomas" />
|
|
<meta name="generator" content="Org Mode" />
|
|
<link rel="stylesheet" type="text/css" href="./dist/style.css"/>
|
|
<script type="text/javascript" src="./dist/script.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="org-div-home-and-up">
|
|
<a accesskey="h" href="./index.html"> UP </a>
|
|
|
|
|
<a accesskey="H" href="./index.html"> HOME </a>
|
|
</div><div id="content">
|
|
<h1 class="title">Home Server</h1>
|
|
<div id="table-of-contents">
|
|
<h2>Table of Contents</h2>
|
|
<div id="text-table-of-contents">
|
|
<ul>
|
|
<li><a href="#orgb93bb73">Hardware</a></li>
|
|
<li><a href="#org1f7afb5">Installation</a>
|
|
<ul>
|
|
<li><a href="#orgcd06b2a">Ubuntu</a></li>
|
|
<li><a href="#orgbc4de87">Install Important software</a></li>
|
|
<li><a href="#org5a59bf0">Terminal Problem</a></li>
|
|
<li><a href="#org9b7e434">Minor Modifications of <code>~/.inputrc</code></a></li>
|
|
<li><a href="#orgf50ccc2">Partition and Format Disk Drives</a></li>
|
|
<li><a href="#orgf64f7a4">MergerFS and FStab</a></li>
|
|
<li><a href="#orgb67aa33">Automating with SnapRAID Runner</a></li>
|
|
<li><a href="#org1d4a03b">Install Docker</a></li>
|
|
<li><a href="#org1f7f7d7">Executing the Docker Command Without Sudo</a></li>
|
|
<li><a href="#org88013e8">Install Docker-Compose</a></li>
|
|
<li><a href="#orgd2ef096">Setup Docker Networks</a></li>
|
|
<li><a href="#orgefaaeb5">Change Timezone</a></li>
|
|
<li><a href="#org28378b4">Secure the Web Server</a></li>
|
|
<li><a href="#orgd02e736">Automatic Security Updates</a></li>
|
|
<li><a href="#orga975f26">Setup cronjobs</a></li>
|
|
<li><a href="#orgcb0d234">Run <code>docker-compose</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orge39332b">Maintenance - How To</a>
|
|
<ul>
|
|
<li><a href="#orgab9cc12">Update System/Packages</a></li>
|
|
<li><a href="#orgbd671d1">Docker Commands</a></li>
|
|
<li><a href="#orgc233df6">Add User and Password for Basic Authentication</a></li>
|
|
<li><a href="#org33e06c1">Snapraid</a></li>
|
|
<li><a href="#orged978b5">Restore Online backup with <code>restic</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orga8d1885">Docker-Compose</a>
|
|
<ul>
|
|
<li><a href="#orgff78ad6">Networks</a></li>
|
|
<li><a href="#org0110d65">Logging</a></li>
|
|
<li><a href="#org9442cd9"><code>traefik</code> - Application proxy</a>
|
|
<ul>
|
|
<li><a href="#org2e68b6a"><code>usersfile</code></a></li>
|
|
<li><a href="#org986ca95"><code>traefik.yaml</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org682fd4a"><code>homer</code> - Home page</a>
|
|
<ul>
|
|
<li><a href="#org66a172e"><code>config.yml</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orgba8c1aa"><code>snapraid</code> - Manage local backup with parity disk</a>
|
|
<ul>
|
|
<li><a href="#org243fb45"><code>snapraid.conf</code></a></li>
|
|
<li><a href="#orgf79de7e"><code>snapraid-runner.conf</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org1646b45"><code>portainer</code> - Manage docker</a></li>
|
|
<li><a href="#org42336f6"><code>wireguard</code> - VPN</a></li>
|
|
<li><a href="#org3bffa6e"><code>gitea</code> - Git server</a></li>
|
|
<li><a href="#org5079d4d"><code>caddy</code> - Research Pages</a>
|
|
<ul>
|
|
<li><a href="#orgcb02743"><code>Caddyfile</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org561b908"><code>caddy</code> - Dotfiles</a>
|
|
<ul>
|
|
<li><a href="#orgfd07272"><code>Caddyfile</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org1d70220"><code>nginx</code> - Root</a>
|
|
<ul>
|
|
<li><a href="#orga3c41af"><code>nginx.conf</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org361b49e"><code>hugo</code> - Wiki + Blog</a></li>
|
|
<li><a href="#orgeea56a9"><code>syncthing</code> - File Synchronization</a></li>
|
|
<li><a href="#org061c36c"><code>miniflux</code> - RSS reader</a></li>
|
|
<li><a href="#org51bdaa4"><code>homeassistant</code> - Home Automation</a></li>
|
|
<li><a href="#org675a101"><code>jellyfin</code> - Media server</a></li>
|
|
<li><a href="#orga8dc1e3"><code>filebrowser</code> - Web file browser</a>
|
|
<ul>
|
|
<li><a href="#org191aab8"><code>.filebrowser.json</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org3a5502c"><code>scrutiny</code> - Hard drive monitoring</a></li>
|
|
<li><a href="#org12e136c"><code>transmission</code> - Torrent server</a></li>
|
|
<li><a href="#orgceb876c"><code>aria2</code> - Download daemon</a>
|
|
<ul>
|
|
<li><a href="#orgaafd6da"><code>aria2.conf</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org759769e"><code>aria2-ui</code> - Download web UI</a></li>
|
|
<li><a href="#org98dce20"><code>linkding</code> - Bookmark manager</a></li>
|
|
<li><a href="#orgfab848b"><code>radicale</code> - CalDAC/CardDAV server (link)</a>
|
|
<ul>
|
|
<li><a href="#org99f7e08"><code>config</code></a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org7d77805"><code>restic</code> - Automatic online backups</a>
|
|
<ul>
|
|
<li><a href="#orge22af00"><code>exclude.txt</code> - Exclude files</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#org835dd0e"><code>octoprint</code> - Web interface for 3D printing</a></li>
|
|
<li><a href="#org4fdb420"><code>adguardhome</code> - Web interface for 3D printing</a></li>
|
|
<li><a href="#org5b7a10e"><code>mealie</code> - Recipe Manager</a></li>
|
|
<li><a href="#org63a3028"><code>diun</code> - Notification for Docker image updates</a></li>
|
|
</ul>
|
|
</li>
|
|
<li><a href="#orgbb869cd"><code>.env</code> - Variable used for Docker Compose</a></li>
|
|
<li><a href="#orgf0182df">Cron Jobs</a>
|
|
<ul>
|
|
<li><a href="#org34f5942">Caddy Update</a></li>
|
|
</ul>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgb93bb73" class="outline-2">
|
|
<h2 id="orgb93bb73">Hardware</h2>
|
|
<div class="outline-text-2" id="text-orgb93bb73">
|
|
<table border="2" cellspacing="0" cellpadding="6" rules="groups" frame="hsides">
|
|
<caption class="t-above"><span class="table-number">Table 1:</span> Home Server Hardware</caption>
|
|
|
|
<colgroup>
|
|
<col class="org-left" />
|
|
|
|
<col class="org-left" />
|
|
</colgroup>
|
|
<thead>
|
|
<tr>
|
|
<th scope="col" class="org-left"><b>Part</b></th>
|
|
<th scope="col" class="org-left"><b>Model</b></th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td class="org-left">Case</td>
|
|
<td class="org-left">Fractal Design Node 804</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Motherboard</td>
|
|
<td class="org-left">ASUS PRIME B450M-A</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">CPU</td>
|
|
<td class="org-left">AMD Ryzen 3 3200G</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">RAM</td>
|
|
<td class="org-left">Corsair Vengeance LPX 16Go (2x8Go) DDR4 3200MHz</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Cooler</td>
|
|
<td class="org-left">ARCTIC Freezer 34 eSports DUO</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">PSU</td>
|
|
<td class="org-left">Corsair SF450</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">SSD M.2</td>
|
|
<td class="org-left">Samsung 970 EVO Plus 250Gb</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="org-left">Disk Drives</td>
|
|
<td class="org-left">Various drives ranging from 3Tb to 8Tb</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org1f7afb5" class="outline-2">
|
|
<h2 id="org1f7afb5">Installation</h2>
|
|
<div class="outline-text-2" id="text-org1f7afb5">
|
|
</div>
|
|
<div id="outline-container-orgcd06b2a" class="outline-3">
|
|
<h3 id="orgcd06b2a">Ubuntu</h3>
|
|
<div class="outline-text-3" id="text-orgcd06b2a">
|
|
<ul class="org-ul">
|
|
<li>Download <b>Ubuntu Server 20.04 LTS</b> (<a href="https://ubuntu.com/download/server">link</a>).</li>
|
|
<li>Activate OpenSSH and add SSH Keys</li>
|
|
<li>Account: <code>thomas</code>, hostname: <code>homelab</code></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgbc4de87" class="outline-3">
|
|
<h3 id="orgbc4de87">Install Important software</h3>
|
|
<div class="outline-text-3" id="text-orgbc4de87">
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> apt install neovim tmux fd-find ripgrep apache2-utils unrar ranger fzf stow
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org5a59bf0" class="outline-3">
|
|
<h3 id="org5a59bf0">Terminal Problem</h3>
|
|
<div class="outline-text-3" id="text-org5a59bf0">
|
|
<p>
|
|
On the local host, using Termite:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">infocmp > termite.terminfo <span class="org-comment-delimiter"># </span><span class="org-comment">export Termite's Terminfo</span>
|
|
scp termite.terminfo user@remote-host:~/ <span class="org-comment-delimiter"># </span><span class="org-comment">or any other method to copy to the remote host</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
On the remote host, in the directory where you copied <code>termite.terminfo</code>:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">tic -x termite.terminfo <span class="org-comment-delimiter"># </span><span class="org-comment">import Terminfo for current user</span>
|
|
<span class="org-type">rm</span> termite.terminfo <span class="org-comment-delimiter"># </span><span class="org-comment">optional: remove Terminfo file</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org9b7e434" class="outline-3">
|
|
<h3 id="org9b7e434">Minor Modifications of <code>~/.inputrc</code></h3>
|
|
<div class="outline-text-3" id="text-org9b7e434">
|
|
<p>
|
|
Modify <code>~/.inputrc</code>, like so:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-string">"\e[A"</span>: history-search-backward <span class="org-comment-delimiter"># </span><span class="org-comment">arrow up</span>
|
|
<span class="org-string">"\e[B"</span>: history-search-forward <span class="org-comment-delimiter"># </span><span class="org-comment">arrow down</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgf50ccc2" class="outline-3">
|
|
<h3 id="orgf50ccc2">Partition and Format Disk Drives</h3>
|
|
<div class="outline-text-3" id="text-orgf50ccc2">
|
|
<p>
|
|
A nice tutorial is available <a href="https://www.digitalocean.com/community/tutorials/how-to-partition-and-format-storage-devices-in-linux">here</a>.
|
|
</p>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">lsblk
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> parted /dev/sda mklabel gpt
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> parted -a opt /dev/sda mkpart <span class="org-string">"partitionname"</span> ext4 0% 100%
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> mkfs.ext4 -L partitionname /dev/sda1
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgf64f7a4" class="outline-3">
|
|
<h3 id="orgf64f7a4">MergerFS and FStab</h3>
|
|
<div class="outline-text-3" id="text-orgf64f7a4">
|
|
<p>
|
|
<b>MergerFS</b> is a transparent layer that sits on top of the data drives providing a single mount point for reads / writes (<a href="https://selfhostedhome.com/combining-different-sized-drives-with-mergerfs-and-snapraid/">link</a>).
|
|
</p>
|
|
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> apt install mergerfs
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Create mount points
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> <span class="org-type">mkdir</span> /mnt/disk0
|
|
<span class="org-type">sudo</span> <span class="org-type">mkdir</span> /mnt/disk1
|
|
<span class="org-type">sudo</span> <span class="org-type">mkdir</span> /mnt/parity
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Create folder where disks will be merged.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> <span class="org-type">mkdir</span> /srv/storage
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Edit <code>/etc/fstab</code>.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">/dev/disk/by-uuid/7fb7873c-83bd-4805-98ab-506e6c7b56fa /mnt/disk0 ext4 defaults <span class="org-highlight-numbers-number">0</span> <span class="org-highlight-numbers-number">0</span>
|
|
/dev/disk/by-uuid/6574b7ae-321c-4078-9793-bc41a4fa5588 /mnt/disk1 ext4 defaults <span class="org-highlight-numbers-number">0</span> <span class="org-highlight-numbers-number">0</span>
|
|
/dev/disk/by-uuid/6fcd38b9-0886-46bd-900d-cb1f170dbcee /mnt/parity ext4 defaults <span class="org-highlight-numbers-number">0</span> <span class="org-highlight-numbers-number">0</span>
|
|
|
|
<span class="org-variable-name">/mnt/disk* /srv/storage fuse.mergerfs direct_io,defaults,allow_other,minfreespace</span>=50G,fsname=mergerfs <span class="org-highlight-numbers-number">0</span> <span class="org-highlight-numbers-number">0</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgb67aa33" class="outline-3">
|
|
<h3 id="orgb67aa33">Automating with SnapRAID Runner</h3>
|
|
<div class="outline-text-3" id="text-orgb67aa33">
|
|
<p>
|
|
<b>SnapRAID</b> is a snapshot parity calculation tool which acts at the block level independent of filesystem (<a href="https://selfhostedhome.com/combining-different-sized-drives-with-mergerfs-and-snapraid/">link</a>).
|
|
</p>
|
|
|
|
<p>
|
|
SnapRAID is here used inside a Docker container (<a href="https://hub.docker.com/r/xagaba/snapraid">link</a>).
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org1d4a03b" class="outline-3">
|
|
<h3 id="org1d4a03b">Install Docker</h3>
|
|
<div class="outline-text-3" id="text-org1d4a03b">
|
|
<p>
|
|
The procedure is well explained <a href="https://www.digitalocean.com/community/tutorials/how-to-install-and-use-docker-on-ubuntu-20-04">here</a>.
|
|
</p>
|
|
|
|
<p>
|
|
If docker is already installed, remove it:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> apt remove docker
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org1f7f7d7" class="outline-3">
|
|
<h3 id="org1f7f7d7">Executing the Docker Command Without Sudo</h3>
|
|
<div class="outline-text-3" id="text-org1f7f7d7">
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> usermod -aG docker $<span class="org-rainbow-delimiters-depth-1">{</span><span class="org-variable-name">USER</span><span class="org-rainbow-delimiters-depth-1">}</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
To apply the new group membership, log out of the server and back in, or type the following:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">su - $<span class="org-rainbow-delimiters-depth-1">{</span><span class="org-variable-name">USER</span><span class="org-rainbow-delimiters-depth-1">}</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org88013e8" class="outline-3">
|
|
<h3 id="org88013e8">Install Docker-Compose</h3>
|
|
<div class="outline-text-3" id="text-org88013e8">
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> apt install docker-compose
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgd2ef096" class="outline-3">
|
|
<h3 id="orgd2ef096">Setup Docker Networks</h3>
|
|
<div class="outline-text-3" id="text-orgd2ef096">
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker network create --gateway 192.168.90.1 --subnet 192.168.90.0/24 t2_proxy
|
|
docker network create docker_default
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgefaaeb5" class="outline-3">
|
|
<h3 id="orgefaaeb5">Change Timezone</h3>
|
|
<div class="outline-text-3" id="text-orgefaaeb5">
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> timedatectl set-timezone Europe/Paris
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org28378b4" class="outline-3">
|
|
<h3 id="org28378b4">Secure the Web Server</h3>
|
|
<div class="outline-text-3" id="text-org28378b4">
|
|
<p>
|
|
Most of it comes from <a href="https://github.com/imthenachoman/How-To-Secure-A-Linux-Server">here</a>.
|
|
</p>
|
|
|
|
<ul class="org-ul">
|
|
<li>Set <code>PasswordAuthentication</code> no in <code>/etc/ssh/sshd_config</code></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgd02e736" class="outline-3">
|
|
<h3 id="orgd02e736">Automatic Security Updates</h3>
|
|
<div class="outline-text-3" id="text-orgd02e736">
|
|
<p>
|
|
The procedure is well explained <a href="https://www.linuxbabe.com/ubuntu/automatic-security-update-unattended-upgrades-ubuntu">here</a>.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> apt install unattended-upgrades update-notifier-common
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Edit <code>/etc/apt/apt.conf.d/50unattended-upgrades</code>, and change the following lines:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">Unattended-Upgrade::Remove-Unused-Dependencies <span class="org-string">"true"</span>;
|
|
Unattended-Upgrade::Automatic-Reboot <span class="org-string">"true"</span>;
|
|
Unattended-Upgrade::Automatic-Reboot-Time <span class="org-string">"04:00"</span>;
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Edit <code>/etc/apt/apt.conf.d/20auto-upgrades</code>:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">APT::Periodic::Update-Package-Lists <span class="org-string">"1"</span>;
|
|
APT::Periodic::Unattended-Upgrade <span class="org-string">"1"</span>;
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orga975f26" class="outline-3">
|
|
<h3 id="orga975f26">Setup cronjobs</h3>
|
|
<div class="outline-text-3" id="text-orga975f26">
|
|
<p>
|
|
Create a folder <code>~/cron</code> with all the scripts and logs related to cron.
|
|
</p>
|
|
|
|
<p>
|
|
To edit the cron jobs, type <code>crontab -e</code> and add a line like:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">*/5 * * * * /home/thomas/cron/caddy_update.sh >> /home/thomas/cron/caddy_update.log 2>&1
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
That will run every 5 minutes.
|
|
To check how the first part of the crontab works, check <a href="https://crontab.guru/">this website</a>.
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgcb0d234" class="outline-3">
|
|
<h3 id="orgcb0d234">Run <code>docker-compose</code></h3>
|
|
<div class="outline-text-3" id="text-orgcb0d234">
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">cd</span> ~/docker && docker-compose up -d
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orge39332b" class="outline-2">
|
|
<h2 id="orge39332b">Maintenance - How To</h2>
|
|
<div class="outline-text-2" id="text-orge39332b">
|
|
</div>
|
|
<div id="outline-container-orgab9cc12" class="outline-3">
|
|
<h3 id="orgab9cc12">Update System/Packages</h3>
|
|
<div class="outline-text-3" id="text-orgab9cc12">
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">sudo</span> -- sh -c <span class="org-string">'apt-get update; apt-get upgrade -y; apt-get dist-upgrade -y; apt-get autoremove -y; apt-get autoclean -y'</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgbd671d1" class="outline-3">
|
|
<h3 id="orgbd671d1">Docker Commands</h3>
|
|
<div class="outline-text-3" id="text-orgbd671d1">
|
|
<ul class="org-ul">
|
|
<li>Starting a container: <code>$ docker start homeassistant</code></li>
|
|
<li>Stopping a container: <code>$ docker stop homeassistant</code></li>
|
|
<li>Restarting a container: <code>$ docker restart homeassistant</code></li>
|
|
<li>Listing the running containers: <code>$ docker ps or $ cd ~/docker/ && docker-compose ps</code></li>
|
|
<li>View the logs of a container: <code>$ docker logs -f homeassistant</code></li>
|
|
<li>Drop a shell into a container: <code>$ docker exec -it homeassistant /bin/bash</code></li>
|
|
<li>Update specific container: <code>docker-compose pull --ignore-pull-failures homeassistant</code></li>
|
|
</ul>
|
|
|
|
<p>
|
|
Update All Containers
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash"><span class="org-type">cd</span> ~/docker/ && docker-compose pull --ignore-pull-failures && docker-compose up -d
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Clean up Docker environment
|
|
This will delete all unused images, volumes and networks.
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker system prune -f && docker image prune -f && docker volume prune -f
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgc233df6" class="outline-3">
|
|
<h3 id="orgc233df6">Add User and Password for Basic Authentication</h3>
|
|
<div class="outline-text-3" id="text-orgc233df6">
|
|
<ul class="org-ul">
|
|
<li>Go to <a href="https://www.web2generators.com/apache-tools/htpasswd-generator">https://www.web2generators.com/apache-tools/htpasswd-generator</a> and type the username and password</li>
|
|
<li>Alternatively, type <code>htpasswd -nb username mystrongpassword</code> in the shell</li>
|
|
<li>Or use the following docker container:</li>
|
|
</ul>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker run --rm -it httpd <span class="org-type">echo</span> $<span class="org-rainbow-delimiters-depth-1">(</span><span class="org-sh-quoted-exec">htpasswd</span> -nb username-here password-here<span class="org-rainbow-delimiters-depth-1">)</span> | sed -e s/<span class="org-string">\\</span>$/<span class="org-string">\\</span>$<span class="org-string">\\</span>$/g
|
|
</pre>
|
|
</div>
|
|
<ul class="org-ul">
|
|
<li>Paste the output in <code>~/docker/shared/.htpasswd</code></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org33e06c1" class="outline-3">
|
|
<h3 id="org33e06c1">Snapraid</h3>
|
|
<div class="outline-text-3" id="text-org33e06c1">
|
|
<p>
|
|
To see all files “backed up” by snapraid, use:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker exec -ti snapraid snapraid list | fzf
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
In reality, snapraid is ran from the docker container:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker exec -ti snapraid snapraid fix -f <path_to_file>
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
The path to file should be relative: <code>/srv/storage/Cloud/org/file.org</code> -> <code>Cloud/org/file.org</code>
|
|
</p>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orged978b5" class="outline-3">
|
|
<h3 id="orged978b5">Restore Online backup with <code>restic</code></h3>
|
|
<div class="outline-text-3" id="text-orged978b5">
|
|
<p>
|
|
To list backups:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker exec restic restic snapshots
|
|
</pre>
|
|
</div>
|
|
|
|
<pre class="example">
|
|
ID Time Host Tags Paths
|
|
--------------------------------------------------------------------------------
|
|
a7b98408 2020-09-03 21:18:00 4803c2af7d4e /data/documents/manuals
|
|
088e31a4 2020-09-03 21:50:26 4803c2af7d4e /data/documents/manuals
|
|
9cf0b480 2020-09-03 22:05:47 4803c2af7d4e /data/documents/manuals
|
|
--------------------------------------------------------------------------------
|
|
3 snapshots
|
|
</pre>
|
|
|
|
|
|
<p>
|
|
Force backup of folder:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker exec restic restic backup /data/documents/manuals
|
|
</pre>
|
|
</div>
|
|
|
|
<pre class="example">
|
|
|
|
Files: 0 new, 2 changed, 8475 unmodified
|
|
Dirs: 0 new, 2 changed, 0 unmodified
|
|
Added to the repo: 1.010 KiB
|
|
|
|
processed 8477 files, 589.800 MiB in 0:02
|
|
snapshot 9cf0b480 saved
|
|
</pre>
|
|
|
|
|
|
<p>
|
|
Find the path to the file within the snapshot:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker exec restic restic <span class="org-type">find</span> file_name
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Find files only for a specific snapshot:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker exec restic restic <span class="org-type">find</span> -s latest file_name
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Restore files/folders (replace file/folders):
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker exec restic restic restore --include /data/documents/manuals --target / 088e31a4
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
You can use <code>latest</code> instead of the ID.
|
|
</p>
|
|
|
|
<p>
|
|
If indeed, we want to make a copy of the file, we can use the backup folder
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker exec restic restic restore --include /data/documents/manuals --target /backup 088e31a4
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orga8d1885" class="outline-2">
|
|
<h2 id="orga8d1885">Docker-Compose</h2>
|
|
<div class="outline-text-2" id="text-orga8d1885">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"><span class="org-variable-name">version</span>: <span class="org-string">"3.4"</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgff78ad6" class="outline-3">
|
|
<h3 id="orgff78ad6">Networks</h3>
|
|
<div class="outline-text-3" id="text-orgff78ad6">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"><span class="org-variable-name">networks</span>:
|
|
<span class="org-variable-name">t2_proxy</span>:
|
|
<span class="org-variable-name">external</span>:
|
|
<span class="org-variable-name">name</span>: t2_proxy
|
|
<span class="org-variable-name">backend</span>:
|
|
<span class="org-variable-name">external</span>: <span class="org-constant">false</span>
|
|
<span class="org-variable-name">default</span>:
|
|
<span class="org-variable-name">driver</span>: bridge
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org0110d65" class="outline-3">
|
|
<h3 id="org0110d65">Logging</h3>
|
|
<div class="outline-text-3" id="text-org0110d65">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"><span class="org-variable-name">x-logging</span>:
|
|
<span class="org-function-name">&default-logging</span>
|
|
<span class="org-variable-name">driver</span>: <span class="org-string">"json-file"</span>
|
|
<span class="org-variable-name">options</span>:
|
|
<span class="org-variable-name">max-size</span>: <span class="org-string">"200k"</span>
|
|
<span class="org-variable-name">max-file</span>: <span class="org-string">"10"</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org9442cd9" class="outline-3">
|
|
<h3 id="org9442cd9"><code>traefik</code> - Application proxy</h3>
|
|
<div class="outline-text-3" id="text-org9442cd9">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"><span class="org-variable-name">services</span>:
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">traefik</span>:
|
|
<span class="org-variable-name">container_name</span>: traefik
|
|
<span class="org-variable-name">image</span>: traefik:2.2.1
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
<span class="org-variable-name">t2_proxy</span>:
|
|
<span class="org-variable-name">ipv4_address</span>: 192.168.90.254 <span class="org-comment-delimiter"># </span><span class="org-comment">You can specify a static IP</span>
|
|
<span class="org-variable-name">security_opt</span>:
|
|
- no-new-privileges:true
|
|
<span class="org-variable-name">ports</span>:
|
|
- 80:80
|
|
- 443:443
|
|
- 8080:8080
|
|
- 8448:8448
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/traefik2/rules:/rules
|
|
- $CONFIGDIR/traefik2/acme/acme.json:/acme.json
|
|
- $CONFIGDIR/traefik2/shared:/shared
|
|
- $CONFIGDIR/traefik2/traefik.yaml:/etc/traefik/traefik.yaml
|
|
- $CONFIGDIR/traefik2/usersfile:/usersfile
|
|
- /var/log/traefik:/var/log
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
<span class="org-variable-name">environment</span>:
|
|
- CF_API_EMAIL=$CLOUDFLARE_EMAIL
|
|
- CF_API_KEY=$CLOUDFLARE_API_KEY
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">HTTP-to-HTTPS Redirect</span>
|
|
- <span class="org-string">"traefik.http.routers.http-catchall.entrypoints=http"</span>
|
|
- <span class="org-string">"traefik.http.routers.http-catchall.rule=HostRegexp(`{host:.+}`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.http-catchall.middlewares=redirect-to-https"</span>
|
|
- <span class="org-string">"traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">HTTP Routers</span>
|
|
- <span class="org-string">"traefik.http.routers.traefik-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.traefik-rtr.rule=Host(`traefik.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.traefik-rtr.tls=true"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- "traefik.http.routers.traefik-rtr.tls.certresolver=dns-cloudflare" # Comment out this line after first run of traefik to force the use of wildcard certs</span>
|
|
- <span class="org-string">"traefik.http.routers.traefik-rtr.tls.domains[0].main=$DOMAINNAME"</span>
|
|
- <span class="org-string">"traefik.http.routers.traefik-rtr.tls.domains[0].sans=*.$DOMAINNAME"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Services - API</span>
|
|
- <span class="org-string">"traefik.http.routers.traefik-rtr.service=api@internal"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Middlewares</span>
|
|
- <span class="org-string">"traefik.http.routers.traefik-rtr.middlewares=middlewares-basic-auth@file"</span>
|
|
- <span class="org-string">"traefik.http.routers.traefik-rtr.middlewares=middlewares-rate-limit@file,middlewares-basic-auth@file"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- "traefik.http.routers.traefik-rtr.middlewares=test"</span>
|
|
- <span class="org-string">"traefik.http.middlewares.traefik-auth.basicauth.users=tdehaeze:$$apr1$$d.JmbY5J$$K8btOi1fwwVYOkCnicCVi."</span>
|
|
- <span class="org-string">"traefik.http.middlewares.public-auth.basicauth.users=tdehaeze:$$apr1$$d.JmbY5J$$K8btOi1fwwVYOkCnicCVi.,dehaeze:$$apr1$$ICU0hKjc$$D7buBzZDvokvMP1O6ptc5/"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Authelia</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- 'traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://login.$DOMAINNAME/'</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- 'traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true'</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- 'traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User, Remote-Groups'</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org2e68b6a" class="outline-4">
|
|
<h4 id="org2e68b6a"><code>usersfile</code></h4>
|
|
<div class="outline-text-4" id="text-org2e68b6a">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">tdehaeze:$$apr1$$d.JmbY5J$$K8btOi1fwwVYOkCnicCVi.
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org986ca95" class="outline-4">
|
|
<h4 id="org986ca95"><code>traefik.yaml</code></h4>
|
|
<div class="outline-text-4" id="text-org986ca95">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"><span class="org-variable-name">global</span>:
|
|
<span class="org-variable-name">checkNewVersion</span>: <span class="org-constant">true</span>
|
|
<span class="org-variable-name">sendAnonymousUsage</span>: <span class="org-constant">false</span>
|
|
|
|
<span class="org-variable-name">entryPoints</span>:
|
|
<span class="org-variable-name">traefik</span>:
|
|
<span class="org-variable-name">address</span>: :8080
|
|
<span class="org-variable-name">http</span>:
|
|
<span class="org-variable-name">address</span>: :80
|
|
<span class="org-variable-name">https</span>:
|
|
<span class="org-variable-name">address</span>: :443
|
|
<span class="org-variable-name">forwardedHeaders</span>:
|
|
<span class="org-variable-name">trustedIPs</span>: 173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/12,172.64.0.0/13,131.0.72.0/22
|
|
<span class="org-variable-name">synapse</span>:
|
|
<span class="org-variable-name">address</span>: :8448
|
|
|
|
<span class="org-variable-name">api</span>:
|
|
<span class="org-variable-name">dashboard</span>: <span class="org-constant">true</span>
|
|
|
|
<span class="org-variable-name">log</span>:
|
|
<span class="org-variable-name">level</span>: ERROR
|
|
|
|
<span class="org-variable-name">accessLog</span>:
|
|
<span class="org-variable-name">filePath</span>: /var/log/access.log
|
|
<span class="org-variable-name">filters</span>:
|
|
<span class="org-variable-name">statusCodes</span>: 400-499
|
|
|
|
<span class="org-variable-name">providers</span>:
|
|
<span class="org-variable-name">docker</span>:
|
|
<span class="org-variable-name">endpoint</span>: unix:///var/run/docker.sock
|
|
<span class="org-variable-name">defaultrule</span>: Host(`{{ index .Labels <span class="org-string">"com.docker.compose.service"</span> }}.$DOMAINNAME`)
|
|
<span class="org-variable-name">exposedByDefault</span>: <span class="org-constant">false</span>
|
|
<span class="org-variable-name">network</span>: t2_proxy
|
|
<span class="org-variable-name">swarmMode</span>: <span class="org-constant">false</span>
|
|
<span class="org-variable-name">file</span>:
|
|
<span class="org-variable-name">directory</span>: /rules
|
|
<span class="org-variable-name">watch</span>: <span class="org-constant">true</span>
|
|
|
|
<span class="org-variable-name">certificatesResolvers</span>:
|
|
<span class="org-variable-name">dns-cloudflare</span>:
|
|
<span class="org-variable-name">acme</span>:
|
|
<span class="org-variable-name">email</span>: $CLOUDFLARE_EMAIL
|
|
<span class="org-variable-name">storage</span>: /acme.json
|
|
<span class="org-variable-name">dnsChallenge</span>:
|
|
<span class="org-variable-name">provider</span>: cloudflare
|
|
<span class="org-variable-name">resolvers</span>: 1.1.1.1:53,1.0.0.1:53
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org682fd4a" class="outline-3">
|
|
<h3 id="org682fd4a"><code>homer</code> - Home page</h3>
|
|
<div class="outline-text-3" id="text-org682fd4a">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">homer</span>:
|
|
<span class="org-variable-name">container_name</span>: homer
|
|
<span class="org-variable-name">image</span>: b4bz/homer
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- UID=$PUID
|
|
- GID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/homer/assets/:/www/assets
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.homer-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.homer-rtr.rule=Host(`homer.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.homer-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.homer-rtr.service=homer-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.homer-svc.loadbalancer.server.port=8080"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org66a172e" class="outline-4">
|
|
<h4 id="org66a172e"><code>config.yml</code></h4>
|
|
<div class="outline-text-4" id="text-org66a172e">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"><span class="org-comment">---</span>
|
|
<span class="org-variable-name">title</span>: <span class="org-string">"Homepage"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">""</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"assets/homer.png"</span>
|
|
<span class="org-variable-name">header</span>: <span class="org-constant">false</span>
|
|
<span class="org-variable-name">footer</span>: <span class="org-constant">false</span>
|
|
|
|
<span class="org-variable-name">columns</span>: <span class="org-string">"auto"</span>
|
|
<span class="org-variable-name">connectivityCheck</span>: <span class="org-constant">false</span>
|
|
|
|
<span class="org-variable-name">theme</span>: default
|
|
|
|
<span class="org-variable-name">links</span>: []
|
|
|
|
<span class="org-variable-name">services</span>:
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Websites"</span>
|
|
<span class="org-variable-name">icon</span>: <span class="org-string">"fas fa-desktop"</span>
|
|
<span class="org-variable-name">items</span>:
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Wiki"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/brain.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Digital Brain"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://brain.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Research"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/orgmode.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Research Pages"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://research.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Dotfiles"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/dotfiles.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"My Literate Dotfiles"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://dotfiles.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Miam"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/miam.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Personnal Recipes"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://miam.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Utilities"</span>
|
|
<span class="org-variable-name">icon</span>: <span class="org-string">"fas fa-rss"</span>
|
|
<span class="org-variable-name">items</span>:
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Miniflux"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/miniflux.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"RSS Feeds"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://rss.tdehaeze.xyz"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: "Bitwarden"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">logo: "/assets/tools/bitwarden.png"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">subtitle: "Password Manager"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">url: "https://bw.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Home Assistant"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/homeassistant.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Home Assistant"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"http://home.tdehaeze.xyz:8123"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: "Guacamole"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">logo: "/assets/tools/guacamole.png"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">subtitle: "SSH Access"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">url: "https://guacamole.tdehaeze.xyz/"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Cloud"</span>
|
|
<span class="org-variable-name">icon</span>: <span class="org-string">"fas fa-cloud"</span>
|
|
<span class="org-variable-name">items</span>:
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Cloud"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/cloud.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Simple Personnal Could"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://cloud.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Syncthing"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/syncthing.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"P2P Sync"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://syncthing.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Gitea"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/gitea.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Git Server"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://git.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Download"</span>
|
|
<span class="org-variable-name">icon</span>: <span class="org-string">"fas fa-download"</span>
|
|
<span class="org-variable-name">items</span>:
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Transmission"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/transmission.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Torrents"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://torrent.tdehaeze.xyz/transmission/web/"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: "transfer"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">logo: "/assets/tools/transfer.png"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">subtitle: "Transfer.sh"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">url: "https://file.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"deemix"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Download Music"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/deezer.png"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://deemix.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"qobuz"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Qobuz-DL"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/qobuz.png"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://qobuz.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Aria2"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/aria2.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Direct Downloads"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"http://dl.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Media"</span>
|
|
<span class="org-variable-name">icon</span>: <span class="org-string">"fas fa-film"</span>
|
|
<span class="org-variable-name">items</span>:
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Jellyfin"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/jellyfin.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Media Library"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://jellyfin.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Config"</span>
|
|
<span class="org-variable-name">icon</span>: <span class="org-string">"fas fa-cog"</span>
|
|
<span class="org-variable-name">items</span>:
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Portainer"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/portainer.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Manger Docker"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://portainer.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Traefik"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/traefik.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"Reverse Proxy"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://traefik.tdehaeze.xyz"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Local"</span>
|
|
<span class="org-variable-name">icon</span>: <span class="org-string">"fas fa-home"</span>
|
|
<span class="org-variable-name">items</span>:
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: "Jackett"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">logo: "/assets/tools/jackett.png"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">subtitle: "Download API"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">url: "http://192.168.1.150:9117/"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: "Radarr"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">logo: "/assets/tools/radarr.png"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">subtitle: "Movie Manager"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">url: "http://192.168.1.150:7878/"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: "Sonarr"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">logo: "/assets/tools/sonarr.png"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">subtitle: "TV Shows Manager"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">url: "http://192.168.1.150:8989/"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: "Ombi"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">logo: "/assets/tools/ombi.png"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">subtitle: "Request Content"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">url: "https://ombi.tdehaeze.xyz/"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- name: "Bazarr"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">logo: "/assets/tools/bazarr.png"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">subtitle: "Subtitles Manager"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">url: "http://192.168.1.150:6767/"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"Scrutiny"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/scrutiny.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"S.M.A.R.T"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"http://192.168.1.150:8089/web/dashboard"</span>
|
|
- <span class="org-variable-name">name</span>: <span class="org-string">"OctoPrint"</span>
|
|
<span class="org-variable-name">logo</span>: <span class="org-string">"/assets/tools/octoprint.png"</span>
|
|
<span class="org-variable-name">subtitle</span>: <span class="org-string">"3D-Printing"</span>
|
|
<span class="org-variable-name">url</span>: <span class="org-string">"https://octoprint.tdehaeze.xyz/"</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgba8c1aa" class="outline-3">
|
|
<h3 id="orgba8c1aa"><code>snapraid</code> - Manage local backup with parity disk</h3>
|
|
<div class="outline-text-3" id="text-orgba8c1aa">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">snapraid</span>:
|
|
<span class="org-variable-name">container_name</span>: snapraid
|
|
<span class="org-variable-name">image</span>: xagaba/snapraid
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">privileged</span>: <span class="org-constant">true</span>
|
|
<span class="org-variable-name">volumes</span>:
|
|
- /mnt:/mnt
|
|
- $CONFIGDIR/snapraid:/config
|
|
- <span class="org-variable-name">type</span>: <span class="org-string">"bind"</span>
|
|
<span class="org-variable-name">source</span>: /dev/disk
|
|
<span class="org-variable-name">target</span>: /dev/disk
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org243fb45" class="outline-4">
|
|
<h4 id="org243fb45"><code>snapraid.conf</code></h4>
|
|
<div class="outline-text-4" id="text-org243fb45">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-comment-delimiter"># </span><span class="org-comment">Defines the file to use as parity storage</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">It must NOT be in a data disk</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Format: "parity FILE_PATH"</span>
|
|
parity /mnt/parity/snapraid.parity
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Defines the files to use as content list</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">You can use multiple specification to store more copies</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">You must have least one copy for each parity file plus one. Some more don't</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">hurt</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">They can be in the disks used for data, parity or boot,</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">but each file must be in a different disk</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Format: "content FILE_PATH"</span>
|
|
content /var/snapraid.content
|
|
content /mnt/disk0/.snapraid.content
|
|
content /mnt/disk1/.snapraid.content
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Defines the data disks to use</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">The order is relevant for parity, do not change it</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Format: "disk DISK_NAME DISK_MOUNT_POINT"</span>
|
|
disk d0 /mnt/disk0
|
|
disk d1 /mnt/disk1
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Excludes hidden files and directories (uncomment to enable).</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">nohidden</span>
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Defines files and directories to exclude</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Remember that all the paths are relative at the mount points</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Format: "exclude FILE"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Format: "exclude DIR/"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Format: "exclude /PATH/FILE"</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Format: "exclude /PATH/DIR/"</span>
|
|
exclude *.unrecoverable
|
|
exclude /tmp/
|
|
exclude /lost+found/
|
|
exclude *.!sync
|
|
exclude .AppleDouble
|
|
exclude ._AppleDouble
|
|
exclude .DS_Store
|
|
exclude ._.DS_Store
|
|
exclude .Thumbs.db
|
|
exclude .fseventsd
|
|
exclude .Spotlight-V100
|
|
exclude .TemporaryItems
|
|
exclude .Trashes
|
|
exclude .AppleDB
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgf79de7e" class="outline-4">
|
|
<h4 id="orgf79de7e"><code>snapraid-runner.conf</code></h4>
|
|
<div class="outline-text-4" id="text-orgf79de7e">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">[<span class="org-type">snapraid</span>]
|
|
; path to the snapraid executable (e.g. /bin/snapraid)
|
|
<span class="org-variable-name">executable</span> = /usr/bin/snapraid
|
|
; path to the snapraid config to be used
|
|
<span class="org-variable-name">config</span> = /config/snapraid.conf
|
|
; abort operation if there are more deletes than this, set to -1 to disable
|
|
<span class="org-variable-name">deletethreshold</span> = -1
|
|
; if you want touch to be ran each time
|
|
<span class="org-variable-name">touch</span> = false
|
|
|
|
[<span class="org-type">logging</span>]
|
|
; logfile to write to, leave empty to disable
|
|
<span class="org-variable-name">file</span> = /config/snapraid.log
|
|
; maximum logfile size in KiB, leave empty for infinite
|
|
<span class="org-variable-name">maxsize</span> = <span class="org-highlight-numbers-number">5000</span>
|
|
|
|
; [email]
|
|
; ; when to send an email, comma-separated list of [success, error]
|
|
<span class="org-variable-name">; sendon</span> = success,error
|
|
; ; set to false to get full programm output via email
|
|
<span class="org-variable-name">; short</span> = true
|
|
<span class="org-variable-name">; subject</span> = [SnapRAID] Status Report:
|
|
<span class="org-variable-name">; from</span> =
|
|
<span class="org-variable-name">; to</span> =
|
|
; ; maximum email size in KiB
|
|
<span class="org-variable-name">; maxsize</span> = <span class="org-highlight-numbers-number">500</span>
|
|
;
|
|
; [smtp]
|
|
<span class="org-variable-name">; host</span> =
|
|
; ; leave empty for default port
|
|
<span class="org-variable-name">; port</span> =
|
|
; ; set to <span class="org-string">"true"</span> to activate
|
|
<span class="org-variable-name">; ssl</span> = false
|
|
<span class="org-variable-name">; tls</span> = false
|
|
<span class="org-variable-name">; user</span> =
|
|
<span class="org-variable-name">; password</span> =
|
|
|
|
[<span class="org-type">scrub</span>]
|
|
; set to true to run scrub after sync
|
|
<span class="org-variable-name">enabled</span> = false
|
|
<span class="org-variable-name">percentage</span> = <span class="org-highlight-numbers-number">12</span>
|
|
<span class="org-variable-name">older-than</span> = <span class="org-highlight-numbers-number">10</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
|
|
<div id="outline-container-org1646b45" class="outline-3">
|
|
<h3 id="org1646b45"><code>portainer</code> - Manage docker</h3>
|
|
<div class="outline-text-3" id="text-org1646b45">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">portainer</span>:
|
|
<span class="org-variable-name">container_name</span>: portainer
|
|
<span class="org-variable-name">image</span>: portainer/portainer
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">command</span>: -H unix:///var/run/docker.sock
|
|
<span class="org-variable-name">command</span>: --no-auth
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">security_opt</span>:
|
|
- no-new-privileges:true
|
|
<span class="org-variable-name">volumes</span>:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
- $CONFIGDIR/portainer:/data
|
|
<span class="org-variable-name">environment</span>:
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.portainer-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.portainer-rtr.rule=Host(`portainer.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.portainer-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.portainer-rtr.service=portainer-svc"</span>
|
|
- <span class="org-string">"traefik.http.routers.portainer-rtr.middlewares=traefik-auth"</span>
|
|
- <span class="org-string">"traefik.http.services.portainer-svc.loadbalancer.server.port=9000"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org42336f6" class="outline-3">
|
|
<h3 id="org42336f6"><code>wireguard</code> - VPN</h3>
|
|
<div class="outline-text-3" id="text-org42336f6">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">wireguard</span>:
|
|
<span class="org-variable-name">container_name</span>: wireguard
|
|
<span class="org-variable-name">image</span>: linuxserver/wireguard
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">cap_add</span>:
|
|
- NET_ADMIN
|
|
- SYS_MODULE
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
- SERVERURL=wireguard.tdehaeze.xyz
|
|
- SERVERPORT=51820
|
|
- PEERS=3
|
|
- PEERDNS=auto
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/wireguard:/config
|
|
- /lib/modules:/lib/modules
|
|
<span class="org-variable-name">ports</span>:
|
|
- 51820:51820/udp
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org3bffa6e" class="outline-3">
|
|
<h3 id="org3bffa6e"><code>gitea</code> - Git server</h3>
|
|
<div class="outline-text-3" id="text-org3bffa6e">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">gitea</span>:
|
|
<span class="org-variable-name">container_name</span>: git
|
|
<span class="org-variable-name">image</span>: gitea/gitea:1.13.2
|
|
<span class="org-variable-name">depends_on</span>:
|
|
- gitea_db
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
- backend
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/gitea:/data
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
- SSH_PORT=$GITEA_SSH_PORT
|
|
<span class="org-variable-name">ports</span>:
|
|
- <span class="org-string">"2222:22"</span>
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.git-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.git-rtr.rule=Host(`git.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.git-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.git-rtr.service=git-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.git-svc.loadbalancer.server.port=3000"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">gitea_db</span>:
|
|
<span class="org-variable-name">container_name</span>: gitea_db
|
|
<span class="org-variable-name">image</span>: mariadb:10
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- backend
|
|
<span class="org-variable-name">ports</span>:
|
|
- 3306:3306
|
|
<span class="org-variable-name">environment</span>:
|
|
- MYSQL_ROOT_PASSWORD=$GITEA_DB_MYSQL_ROOT_PASSWORD
|
|
- MYSQL_DATABASE=gitea
|
|
- MYSQL_USER=gitea
|
|
- MYSQL_PASSWORD=$GITEA_DB_MYSQL_PASSWORD
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/mariadb:/var/lib/mysql
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org5079d4d" class="outline-3">
|
|
<h3 id="org5079d4d"><code>caddy</code> - Research Pages</h3>
|
|
<div class="outline-text-3" id="text-org5079d4d">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">caddy</span>:
|
|
<span class="org-variable-name">container_name</span>: caddy
|
|
<span class="org-variable-name">image</span>: abiosoft/caddy:1.0.3-no-stats
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
- PLUGINS=git
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/caddy/Caddyfile:/etc/Caddyfile
|
|
- $CONFIGDIR/web:/srv
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- ~/.ssh:/root/.ssh</span>
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.caddy-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.caddy-rtr.rule=Host(`research.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.caddy-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.caddy-rtr.service=caddy-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.caddy-svc.loadbalancer.server.port=2015"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgcb02743" class="outline-4">
|
|
<h4 id="orgcb02743"><code>Caddyfile</code></h4>
|
|
<div class="outline-text-4" id="text-orgcb02743">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">0.0.0.0:<span class="org-highlight-numbers-number">2015</span> {
|
|
root /srv/www/
|
|
|
|
<span class="org-type">git</span> {
|
|
repo https://git.tdehaeze.xyz/tdehaeze/research-home-page
|
|
path /srv/www/
|
|
interval -1
|
|
hook /research-home-page/webhook QHZgAKjD8q2v54Ru
|
|
then git submodule update --init --recursive --merge
|
|
}
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org561b908" class="outline-3">
|
|
<h3 id="org561b908"><code>caddy</code> - Dotfiles</h3>
|
|
<div class="outline-text-3" id="text-org561b908">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">dotfiles</span>:
|
|
<span class="org-variable-name">container_name</span>: dotfiles
|
|
<span class="org-variable-name">image</span>: abiosoft/caddy:1.0.3-no-stats
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
- PLUGINS=git
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/dotfiles/Caddyfile:/etc/Caddyfile
|
|
- $CONFIGDIR/dotfiles/www:/srv/www
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.dotfiles-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.dotfiles-rtr.rule=Host(`dotfiles.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.dotfiles-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.dotfiles-rtr.service=dotfiles-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.dotfiles-svc.loadbalancer.server.port=2015"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgfd07272" class="outline-4">
|
|
<h4 id="orgfd07272"><code>Caddyfile</code></h4>
|
|
<div class="outline-text-4" id="text-orgfd07272">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">0.0.0.0:<span class="org-highlight-numbers-number">2015</span> {
|
|
root /srv/www/docs/
|
|
|
|
<span class="org-type">git</span> {
|
|
repo https://git.tdehaeze.xyz/tdehaeze/literate-dotfiles
|
|
path /srv/www/
|
|
interval -1
|
|
hook /literate-dotfiles/webhook QHZgAKjD8q2v54Ru
|
|
}
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org1d70220" class="outline-3">
|
|
<h3 id="org1d70220"><code>nginx</code> - Root</h3>
|
|
<div class="outline-text-3" id="text-org1d70220">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">root</span>:
|
|
<span class="org-variable-name">container_name</span>: root
|
|
<span class="org-variable-name">image</span>: nginx
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/root/nginx.conf:/etc/nginx/nginx.conf
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.root-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.root-rtr.rule=Host(`$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.root-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.root-rtr.service=root-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.root-svc.loadbalancer.server.port=8080"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orga3c41af" class="outline-4">
|
|
<h4 id="orga3c41af"><code>nginx.conf</code></h4>
|
|
<div class="outline-text-4" id="text-orga3c41af">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-type">events</span> {
|
|
|
|
}
|
|
|
|
<span class="org-type">http</span> {
|
|
<span class="org-type">server</span> {
|
|
server_name tdehaeze.xyz;
|
|
listen <span class="org-highlight-numbers-number">8080</span>;
|
|
|
|
<span class="org-type">location /.well-known/matrix/client</span> {
|
|
proxy_pass https://matrix.tdehaeze.xyz/.well-known/matrix/client;
|
|
proxy_set_header X-Forwarded-For $remote_addr;
|
|
}
|
|
|
|
<span class="org-type">location /.well-known/matrix/server</span> {
|
|
proxy_pass https://matrix.tdehaeze.xyz/.well-known/matrix/server;
|
|
proxy_set_header X-Forwarded-For $remote_addr;
|
|
}
|
|
}
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org361b49e" class="outline-3">
|
|
<h3 id="org361b49e"><code>hugo</code> - Wiki + Blog</h3>
|
|
<div class="outline-text-3" id="text-org361b49e">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">hugo</span>:
|
|
<span class="org-variable-name">container_name</span>: hugo
|
|
<span class="org-variable-name">image</span>: tdehaeze/hugo-caddy
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- REPO=git.tdehaeze.xyz/tdehaeze/digital-brain
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.hugo-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.hugo-rtr.rule=Host(`brain.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.hugo-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.hugo-rtr.service=hugo-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.hugo-svc.loadbalancer.server.port=2015"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgeea56a9" class="outline-3">
|
|
<h3 id="orgeea56a9"><code>syncthing</code> - File Synchronization</h3>
|
|
<div class="outline-text-3" id="text-orgeea56a9">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">syncthing</span>:
|
|
<span class="org-variable-name">container_name</span>: syncthing
|
|
<span class="org-variable-name">image</span>: linuxserver/syncthing
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
- UMASK_SET=022
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/syncthing:/config
|
|
- /srv/storage/Cloud:/Cloud
|
|
- /srv/storage/Cloud/pictures/phone:/Pictures
|
|
- /srv/storage/Cloud/pdfs:/Onyx/Download
|
|
- /srv/storage/Cloud/pdfs-notes:/Onyx/note
|
|
- /srv/storage/Cloud/.stfolder:/Onyx/.stfolder
|
|
- /srv/storage/.password-store:/.password-store
|
|
<span class="org-variable-name">ports</span>:
|
|
- 22000:22000
|
|
- 21027:21027/udp
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.syncthing-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.syncthing-rtr.rule=Host(`syncthing.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.syncthing-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.syncthing-rtr.service=syncthing-svc"</span>
|
|
- <span class="org-string">"traefik.http.routers.syncthing-rtr.middlewares=traefik-auth"</span>
|
|
- <span class="org-string">"traefik.http.services.syncthing-svc.loadbalancer.server.port=8384"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org061c36c" class="outline-3">
|
|
<h3 id="org061c36c"><code>miniflux</code> - RSS reader</h3>
|
|
<div class="outline-text-3" id="text-org061c36c">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">miniflux</span>:
|
|
<span class="org-variable-name">container_name</span>: miniflux
|
|
<span class="org-variable-name">image</span>: miniflux/miniflux
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
- backend
|
|
<span class="org-variable-name">depends_on</span>:
|
|
- miniflux_db
|
|
<span class="org-variable-name">environment</span>:
|
|
- DATABASE_URL=postgres://miniflux:SCJWWXqHwehP7f8g@miniflux_db/miniflux?sslmode=disable
|
|
- RUN_MIGRATIONS=1
|
|
- CREATE_ADMIN=1
|
|
- ADMIN_USERNAME=$MINIFLUX_ADMIN_NAME
|
|
- ADMIN_PASSWORD=$MINIFLUX_ADMIN_PASS
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.miniflux-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.miniflux-rtr.rule=Host(`rss.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.miniflux-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.miniflux-rtr.service=miniflux-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.miniflux-svc.loadbalancer.server.port=8080"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">miniflux_db</span>:
|
|
<span class="org-variable-name">container_name</span>: miniflux_db
|
|
<span class="org-variable-name">image</span>: postgres:12
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- backend
|
|
<span class="org-variable-name">environment</span>:
|
|
- POSTGRES_USER=miniflux
|
|
- POSTGRES_PASSWORD=$MINIFLUX_POSTGRES_PASSWORD
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/miniflux_db:/var/lib/postgresql/data
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org51bdaa4" class="outline-3">
|
|
<h3 id="org51bdaa4"><code>homeassistant</code> - Home Automation</h3>
|
|
<div class="outline-text-3" id="text-org51bdaa4">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">homeassistant</span>:
|
|
<span class="org-variable-name">container_name</span>: homeassistant
|
|
<span class="org-variable-name">image</span>: homeassistant/home-assistant
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">networks:</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- t2_proxy</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">ports:</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- target: 8123</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">published: 8123</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">protocol: tcp</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">mode: host</span>
|
|
<span class="org-variable-name">privileged</span>: <span class="org-constant">true</span>
|
|
<span class="org-variable-name">network_mode</span>: host
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/homeassistant:/config
|
|
- /etc/localtime:/etc/localtime:ro
|
|
- /dev/bus/usb:/dev/bus/usb
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">- ${USERDIR}/docker/shared:/shared</span>
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.homeassistant-rtr.entrypoints=https,http"</span>
|
|
- <span class="org-string">"traefik.http.routers.homeassistant-rtr.rule=Host(`home.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.homeassistant-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.homeassistant-rtr.service=homeassistant-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.homeassistant-svc.loadbalancer.servers.url=http://172.17.0.1:8123"</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">- "traefik.http.services.homeassistant-svc.loadbalancer.server.port=8123"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org675a101" class="outline-3">
|
|
<h3 id="org675a101"><code>jellyfin</code> - Media server</h3>
|
|
<div class="outline-text-3" id="text-org675a101">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">jellyfin</span>:
|
|
<span class="org-variable-name">container_name</span>: jellyfin
|
|
<span class="org-variable-name">image</span>: linuxserver/jellyfin
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/jellyfin:/config
|
|
- /srv/storage/TVShows:/data/tvshows
|
|
- /srv/storage/LiveMusic:/data/livemusic
|
|
- /srv/storage/Animes:/data/animes
|
|
- /srv/storage/Movies:/data/movies
|
|
- /srv/storage/Music:/data/music
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.jellyfin-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.jellyfin-rtr.rule=Host(`jellyfin.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.jellyfin-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.jellyfin-rtr.service=jellyfin-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.jellyfin-svc.loadbalancer.server.port=8096"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orga8dc1e3" class="outline-3">
|
|
<h3 id="orga8dc1e3"><code>filebrowser</code> - Web file browser</h3>
|
|
<div class="outline-text-3" id="text-orga8dc1e3">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">filebrowser</span>:
|
|
<span class="org-variable-name">container_name</span>: filebrowser
|
|
<span class="org-variable-name">image</span>: filebrowser/filebrowser
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/filebrowser/database.db:/database.db
|
|
- $CONFIGDIR/filebrowser/.filebrowser.json:/.filebrowser.json
|
|
- /srv/storage:/srv/storage
|
|
<span class="org-variable-name">user</span>: <span class="org-string">"${PUID}:${PGID}"</span>
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.filebrowser-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.filebrowser-rtr.rule=Host(`cloud.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.filebrowser-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.filebrowser-rtr.service=filebrowser-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.filebrowser-svc.loadbalancer.server.port=80"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org191aab8" class="outline-4">
|
|
<h4 id="org191aab8"><code>.filebrowser.json</code></h4>
|
|
<div class="outline-text-4" id="text-org191aab8">
|
|
<div class="org-src-container">
|
|
<pre class="src src-json">{
|
|
<span class="org-keyword">"port"</span>: <span class="org-highlight-numbers-number">80</span>,
|
|
<span class="org-keyword">"baseURL"</span>: <span class="org-string">""</span>,
|
|
<span class="org-keyword">"address"</span>: <span class="org-string">""</span>,
|
|
<span class="org-keyword">"log"</span>: <span class="org-string">"stdout"</span>,
|
|
<span class="org-keyword">"database"</span>: <span class="org-string">"/database.db"</span>,
|
|
<span class="org-keyword">"root"</span>: <span class="org-string">"/srv/storage"</span>
|
|
}
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org3a5502c" class="outline-3">
|
|
<h3 id="org3a5502c"><code>scrutiny</code> - Hard drive monitoring</h3>
|
|
<div class="outline-text-3" id="text-org3a5502c">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">scrutiny</span>:
|
|
<span class="org-variable-name">container_name</span>: scrutiny
|
|
<span class="org-variable-name">image</span>: linuxserver/scrutiny
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- backend
|
|
<span class="org-variable-name">cap_add</span>:
|
|
- SYS_RAWIO
|
|
- SYS_ADMIN
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- SCRUTINY_API_ENDPOINT=http://localhost:8080
|
|
- TZ=$TZ
|
|
- SCRUTINY_WEB=true
|
|
- SCRUTINY_COLLECTOR=true
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/scrutiny:/config
|
|
- /run/udev:/run/udev:ro
|
|
<span class="org-variable-name">devices</span>:
|
|
- /dev/sda:/dev/sda
|
|
- /dev/sdb:/dev/sdb
|
|
- /dev/sdc:/dev/sdc
|
|
- /dev/sdd:/dev/sdd
|
|
- /dev/nvme0n1:/dev/nvme0n1
|
|
<span class="org-variable-name">ports</span>:
|
|
- 8089:8080
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org12e136c" class="outline-3">
|
|
<h3 id="org12e136c"><code>transmission</code> - Torrent server</h3>
|
|
<div class="outline-text-3" id="text-org12e136c">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">transmission-openvpn</span>:
|
|
<span class="org-variable-name">container_name</span>: transmission
|
|
<span class="org-variable-name">image</span>: haugene/transmission-openvpn
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
- backend
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
- CREATE_TUN_DEVICE=true
|
|
- ENABLE_UFW=true
|
|
- WEBPROXY_ENABLED=false
|
|
- TRANSMISSION_WEB_UI=combustion
|
|
- OPENVPN_PROVIDER=NORDVPN
|
|
- OPENVPN_USERNAME=$NORDVPN_NAME
|
|
- OPENVPN_PASSWORD=$NORDVPN_PASS
|
|
- NORDVPN_COUNTRY=FR
|
|
- NORDVPN_CATEGORY=P2P
|
|
- NORDVPN_PROTOCOL=tcp
|
|
- LOCAL_NETWORK=192.168.0.0/16
|
|
<span class="org-variable-name">volumes</span>:
|
|
- /srv/storage/Downloads:/data
|
|
- /etc/localtime:/etc/localtime:ro
|
|
<span class="org-variable-name">cap_add</span>:
|
|
- NET_ADMIN
|
|
<span class="org-variable-name">ports</span>:
|
|
- 9091:9091
|
|
- 51413:51413
|
|
- 51413:51413/udp
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.transmission-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.transmission-rtr.rule=Host(`torrent.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.transmission-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.transmission-rtr.service=transmission-svc"</span>
|
|
- <span class="org-string">"traefik.http.routers.transmission-rtr.middlewares=traefik-auth"</span>
|
|
- <span class="org-string">"traefik.http.services.transmission-svc.loadbalancer.server.port=9091"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgceb876c" class="outline-3">
|
|
<h3 id="orgceb876c"><code>aria2</code> - Download daemon</h3>
|
|
<div class="outline-text-3" id="text-orgceb876c">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">aria2</span>:
|
|
<span class="org-variable-name">container_name</span>: aria2
|
|
<span class="org-variable-name">image</span>: opengg/aria2
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
<span class="org-variable-name">user</span>: <span class="org-string">"${PUID}:${PGID}"</span>
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/aria2:/config
|
|
- /srv/storage/Downloads:/downloads
|
|
<span class="org-variable-name">ports</span>:
|
|
- 6800:6800
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgaafd6da" class="outline-4">
|
|
<h4 id="orgaafd6da"><code>aria2.conf</code></h4>
|
|
<div class="outline-text-4" id="text-orgaafd6da">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">save-session</span>=/config/aria2.session
|
|
<span class="org-variable-name">input-file</span>=/config/aria2.session
|
|
<span class="org-variable-name">save-session-interval</span>=<span class="org-highlight-numbers-number">60</span>
|
|
|
|
<span class="org-variable-name">dir</span>=/downloads
|
|
|
|
<span class="org-variable-name">file-allocation</span>=prealloc
|
|
<span class="org-variable-name">disk-cache</span>=128M
|
|
|
|
<span class="org-variable-name">enable-rpc</span>=true
|
|
<span class="org-variable-name">rpc-listen-port</span>=<span class="org-highlight-numbers-number">6800</span>
|
|
<span class="org-variable-name">rpc-allow-origin-all</span>=true
|
|
<span class="org-variable-name">rpc-listen-all</span>=true
|
|
|
|
<span class="org-variable-name">rpc-secret</span>=<<get-password(passname=<span class="org-string">"nas/aria2"</span>)>>
|
|
|
|
<span class="org-variable-name">auto-file-renaming</span>=false
|
|
|
|
<span class="org-variable-name">max-connection-per-server</span>=<span class="org-highlight-numbers-number">16</span>
|
|
<span class="org-variable-name">min-split-size</span>=1M
|
|
<span class="org-variable-name">split</span>=<span class="org-highlight-numbers-number">16</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org759769e" class="outline-3">
|
|
<h3 id="org759769e"><code>aria2-ui</code> - Download web UI</h3>
|
|
<div class="outline-text-3" id="text-org759769e">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">aria2-ui</span>:
|
|
<span class="org-variable-name">container_name</span>: aria2-ui
|
|
<span class="org-variable-name">image</span>: p3terx/ariang
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
<span class="org-variable-name">ports</span>:
|
|
- 6880:6880
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.aria2-rtr.entrypoints=http"</span>
|
|
- <span class="org-string">"traefik.http.routers.aria2-rtr.rule=Host(`dl.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.aria2-rtr.tls=false"</span>
|
|
- <span class="org-string">"traefik.http.routers.aria2-rtr.service=aria2-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.aria2-svc.loadbalancer.server.port=6880"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org98dce20" class="outline-3">
|
|
<h3 id="org98dce20"><code>linkding</code> - Bookmark manager</h3>
|
|
<div class="outline-text-3" id="text-org98dce20">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">linkding</span>:
|
|
<span class="org-variable-name">container_name</span>: linkding
|
|
<span class="org-variable-name">image</span>: sissbruecker/linkding:latest
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/linkding:/etc/linkding/data
|
|
<span class="org-variable-name">environment</span>:
|
|
- TZ=$TZ
|
|
- PUID=$PUID
|
|
- PGID=$PGID
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.linkding-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.linkding-rtr.rule=Host(`bm.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.linkding-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.linkding-rtr.service=linkding-svc"</span>
|
|
- <span class="org-string">"traefik.http.routers.linkding-rtr.middlewares=traefik-auth"</span>
|
|
- <span class="org-string">"traefik.http.services.linkding-svc.loadbalancer.server.port=9090"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgfab848b" class="outline-3">
|
|
<h3 id="orgfab848b"><code>radicale</code> - CalDAC/CardDAV server (<a href="https://github.com/tomsquest/docker-radicale">link</a>)</h3>
|
|
<div class="outline-text-3" id="text-orgfab848b">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">radicale</span>:
|
|
<span class="org-variable-name">container_name</span>: radicale
|
|
<span class="org-variable-name">image</span>: tomsquest/docker-radicale:latest
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/radicale/config:/config:ro
|
|
- $CONFIGDIR/radicale/data:/data
|
|
<span class="org-variable-name">environment</span>:
|
|
- TZ=$TZ
|
|
- UID=$PUID
|
|
- GID=$PGID
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.radicale-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.radicale-rtr.rule=Host(`radicale.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.radicale-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.radicale-rtr.service=radicale-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.radicale-svc.loadbalancer.server.port=5232"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org99f7e08" class="outline-4">
|
|
<h4 id="org99f7e08"><code>config</code></h4>
|
|
<div class="outline-text-4" id="text-org99f7e08">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">[<span class="org-type">server</span>]
|
|
<span class="org-variable-name">hosts</span> = 0.0.0.0:<span class="org-highlight-numbers-number">5232</span>
|
|
|
|
[<span class="org-type">auth</span>]
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Authentication method</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Value: none | htpasswd | remote_user | http_x_remote_user</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">type = none</span>
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Htpasswd filename</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">htpasswd_filename = /etc/radicale/users</span>
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Htpasswd encryption method</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Value: plain | bcrypt | md5</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">bcrypt requires the installation of radicale[bcrypt].</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">htpasswd_encryption = md5</span>
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Incorrect authentication delay (seconds)</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">delay = 1</span>
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Message displayed in the client when a password is needed</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">realm = Radicale - Password Required</span>
|
|
|
|
|
|
[<span class="org-type">rights</span>]
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Rights backend</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Value: none | authenticated | owner_only | owner_write | from_file</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">type = owner_only</span>
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">File for rights management from_file</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">file = /etc/radicale/rights</span>
|
|
|
|
|
|
[<span class="org-type">storage</span>]
|
|
<span class="org-variable-name">filesystem_folder</span> = /data/collections
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Delete sync token that are older (seconds)</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">max_sync_token_age = 2592000</span>
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Command that is run after changes to storage</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Example: ([ -d .git ] || git init) && git add -A && (git diff --cached --quiet || git commit -m "Changes by "%(user)s)</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">hook = ([ -d .git ] || git init) && git add -A && (git diff --cached --quiet || git commit -m "Changes by "%(user)s)</span>
|
|
|
|
|
|
[<span class="org-type">web</span>]
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Web interface backend</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Value: none | internal</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">type = internal</span>
|
|
|
|
|
|
[<span class="org-type">logging</span>]
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Threshold for the logger</span>
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Value: debug | info | warning | error | critical</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">level = warning</span>
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Don't include passwords in logs</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">mask_passwords = True</span>
|
|
|
|
|
|
[<span class="org-type">headers</span>]
|
|
|
|
<span class="org-comment-delimiter"># </span><span class="org-comment">Additional HTTP headers</span>
|
|
<span class="org-comment-delimiter">#</span><span class="org-comment">Access-Control-Allow-Origin = *</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org7d77805" class="outline-3">
|
|
<h3 id="org7d77805"><code>restic</code> - Automatic online backups</h3>
|
|
<div class="outline-text-3" id="text-org7d77805">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">restic</span>:
|
|
<span class="org-variable-name">container_name</span>: restic
|
|
<span class="org-variable-name">image</span>: mazzolino/restic
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- BACKUP_CRON=0 30 0 * * *
|
|
- RESTIC_REPOSITORY=b2:tdehaeze:/restic
|
|
- RESTIC_PASSWORD=$RESTIC_PASSWORD
|
|
- RESTIC_BACKUP_SOURCES=/source
|
|
- RESTIC_FORGET_ARGS=--keep-daily 7 --keep-weekly 4 --keep-monthly 12
|
|
- RESTIC_BACKUP_ARGS=--exclude-file /exclude.txt
|
|
- B2_ACCOUNT_ID=$RESTIC_B2_ACCOUNT_ID
|
|
- B2_ACCOUNT_KEY=$RESTIC_B2_ACCOUNT_KEY
|
|
- UID=$PUID
|
|
- GID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/restic/exclude.txt:/exclude.txt:ro
|
|
- /srv/storage/Cloud/thesis:/source/Cloud/thesis:ro
|
|
- /home/thomas/docker:/source/docker:ro
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orge22af00" class="outline-4">
|
|
<h4 id="orge22af00"><code>exclude.txt</code> - Exclude files</h4>
|
|
<div class="outline-text-4" id="text-orge22af00">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">*.db
|
|
*.log
|
|
*.log.*
|
|
/source/docker/config/gitea/git/
|
|
/source/docker/config/guacamole/
|
|
/source/docker/config/guacamole_db/
|
|
/source/docker/config/mariadb/
|
|
/source/docker/config/miniflux_db/
|
|
/source/docker/config/jellyfin/data/
|
|
/source/docker/config/dotfiles/www/
|
|
/source/docker/config/web/www/
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org835dd0e" class="outline-3">
|
|
<h3 id="org835dd0e"><code>octoprint</code> - Web interface for 3D printing</h3>
|
|
<div class="outline-text-3" id="text-org835dd0e">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">octoprint</span>:
|
|
<span class="org-variable-name">container_name</span>: octoprint
|
|
<span class="org-variable-name">image</span>: octoprint/octoprint
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- UID=$PUID
|
|
- GID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">privileged</span>: <span class="org-constant">true</span>
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/octoprint:/octoprint
|
|
- /dev/bus/usb:/dev/bus/usb
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.octoprint-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.octoprint-rtr.rule=Host(`octoprint.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.octoprint-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.octoprint-rtr.service=octoprint-svc"</span>
|
|
- <span class="org-string">"traefik.http.routers.octoprint-rtr.middlewares=traefik-auth"</span>
|
|
- <span class="org-string">"traefik.http.services.octoprint-svc.loadbalancer.server.port=80"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org4fdb420" class="outline-3">
|
|
<h3 id="org4fdb420"><code>adguardhome</code> - Web interface for 3D printing</h3>
|
|
<div class="outline-text-3" id="text-org4fdb420">
|
|
<p>
|
|
ports for DHCP server:
|
|
</p>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">adguardhome</span>:
|
|
<span class="org-variable-name">container_name</span>: adguardhome
|
|
<span class="org-variable-name">image</span>: adguard/adguardhome
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- UID=$PUID
|
|
- GID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/adguardhome/work:/opt/adguardhome/work
|
|
- $CONFIGDIR/adguardhome/conf:/opt/adguardhome/conf
|
|
<span class="org-variable-name">ports</span>:
|
|
- 53:53
|
|
- 853:853
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.adguardhome-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.adguardhome-rtr.rule=Host(`adguardhome.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.adguardhome-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.adguardhome-rtr.service=adguardhome-svc"</span>
|
|
- <span class="org-string">"traefik.http.routers.adguardhome-rtr.middlewares=traefik-auth"</span>
|
|
- <span class="org-string">"traefik.http.services.adguardhome-svc.loadbalancer.server.port=3000"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org5b7a10e" class="outline-3">
|
|
<h3 id="org5b7a10e"><code>mealie</code> - Recipe Manager</h3>
|
|
<div class="outline-text-3" id="text-org5b7a10e">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">miam</span>:
|
|
<span class="org-variable-name">container_name</span>: miam
|
|
<span class="org-variable-name">image</span>: hkotel/mealie
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- t2_proxy
|
|
<span class="org-variable-name">environment</span>:
|
|
- db_type=sqlite
|
|
- UID=$PUID
|
|
- GID=$PGID
|
|
- TZ=$TZ
|
|
<span class="org-variable-name">volumes</span>:
|
|
- $CONFIGDIR/mealie:/app/data
|
|
<span class="org-variable-name">labels</span>:
|
|
- <span class="org-string">"traefik.enable=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.miam-rtr.entrypoints=https"</span>
|
|
- <span class="org-string">"traefik.http.routers.miam-rtr.rule=Host(`miam.$DOMAINNAME`)"</span>
|
|
- <span class="org-string">"traefik.http.routers.miam-rtr.tls=true"</span>
|
|
- <span class="org-string">"traefik.http.routers.miam-rtr.service=miam-svc"</span>
|
|
- <span class="org-string">"traefik.http.services.miam-svc.loadbalancer.server.port=80"</span>
|
|
<span class="org-variable-name">logging</span>: <span class="org-function-name">*default-logging</span>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-org63a3028" class="outline-3">
|
|
<h3 id="org63a3028"><code>diun</code> - Notification for Docker image updates</h3>
|
|
<div class="outline-text-3" id="text-org63a3028">
|
|
<div class="org-src-container">
|
|
<pre class="src src-yaml"> <span class="org-variable-name">diun</span>:
|
|
<span class="org-variable-name">container_name</span>: diun
|
|
<span class="org-variable-name">image</span>: crazymax/diun
|
|
<span class="org-variable-name">restart</span>: unless-stopped
|
|
<span class="org-variable-name">networks</span>:
|
|
- backend
|
|
<span class="org-variable-name">environment</span>:
|
|
- TZ=$TZ
|
|
- LOG_LEVEL=info
|
|
- LOG_JSON=false
|
|
- DIUN_WATCH_WORKERS=20
|
|
- DIUN_WATCH_SCHEDULE=0 7 * * 6
|
|
- DIUN_PROVIDERS_DOCKER=true
|
|
- DIUN_PROVIDERS_DOCKER_WATCHBYDEFAULT=true
|
|
- DIUN_NOTIF_MAIL_HOST=smtp.gmail.com
|
|
- DIUN_NOTIF_MAIL_PORT=587
|
|
- DIUN_NOTIF_MAIL_SSL=true
|
|
- DIUN_NOTIF_MAIL_USERNAME=tdehaeze.xyz@gmail.com
|
|
- DIUN_NOTIF_MAIL_PASSWORD=$GMAIL_PASS
|
|
- DIUN_NOTIF_MAIL_FROM=tdehaeze.xyz@gmail.com
|
|
- DIUN_NOTIF_MAIL_TO=dehaeze.thomas@gmail.com
|
|
<span class="org-variable-name">volumes</span>:
|
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
|
- $CONFIGDIR/diun:/data
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgbb869cd" class="outline-2">
|
|
<h2 id="orgbb869cd"><code>.env</code> - Variable used for Docker Compose</h2>
|
|
<div class="outline-text-2" id="text-orgbb869cd">
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">PUID</span>=<span class="org-highlight-numbers-number">1000</span>
|
|
<span class="org-variable-name">PGID</span>=<span class="org-highlight-numbers-number">1000</span>
|
|
<span class="org-variable-name">TZ</span>=Europe/Paris
|
|
<span class="org-variable-name">CONFIGDIR</span>=/home/thomas/docker/config
|
|
<span class="org-variable-name">DOMAINNAME</span>=tdehaeze.xyz
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">CLOUDFLARE_EMAIL</span>=dehaeze.thomas@gmail.com
|
|
<span class="org-variable-name">CLOUDFLARE_API_KEY</span>=<<get-password(passname=<span class="org-string">"nas/cloudflare_api_key"</span>)>>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">MINIFLUX_ADMIN_NAME</span>=tdehaeze
|
|
<span class="org-variable-name">MINIFLUX_ADMIN_PASS</span>=<<get-password(passname=<span class="org-string">"nas/miniflux_admin_pass"</span>)>>
|
|
<span class="org-variable-name">MINIFLUX_POSTGRES_PASSWORD</span>=<<get-password(passname=<span class="org-string">"nas/miniflux_postgres_pass"</span>)>>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">RESTIC_PASSWORD</span>=<<get-password(passname=<span class="org-string">"nas/restic_pass"</span>)>>
|
|
<span class="org-variable-name">RESTIC_B2_ACCOUNT_ID</span>=<<get-password(passname=<span class="org-string">"nas/restic_B2_id"</span>)>>
|
|
<span class="org-variable-name">RESTIC_B2_ACCOUNT_KEY</span>=<<get-password(passname=<span class="org-string">"nas/restic_B2_key"</span>)>>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">GITEA_DB_MYSQL_ROOT_PASSWORD</span>=<<get-password(passname=<span class="org-string">"nas/gitea_mysql_root_pass"</span>)>>
|
|
<span class="org-variable-name">GITEA_DB_MYSQL_PASSWORD</span>=<<get-password(passname=<span class="org-string">"nas/gitea_mysql_pass"</span>)>>
|
|
<span class="org-variable-name">GITEA_SSH_PORT</span>=<span class="org-highlight-numbers-number">2222</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">NORDVPN_NAME</span>=dehaeze.thomas@gmail.com
|
|
<span class="org-variable-name">NORDVPN_PASS</span>=<<get-password(passname=<span class="org-string">"nordvpn.com/dehaeze.thomas@gmail.com"</span>)>>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">QOBUZNAME</span>=jeanmarie.dehaeze@wanadoo.fr
|
|
<span class="org-variable-name">QOBUZPASS</span>=<<get-password(passname=<span class="org-string">"qobuz.com/jeanmarie.dehaeze@wanadoo.fr"</span>)>>
|
|
<span class="org-variable-name">JELLYFINTOKEN</span>=<<get-password(passname=<span class="org-string">"nas/jellyfin_token"</span>)>>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">GOTIFY_DEFAULTUSER_NAME</span>=tdehaeze
|
|
<span class="org-variable-name">GOTIFY_DEFAULTUSER_PASS</span>=<<get-password(passname=<span class="org-string">"nas/gotify_pass"</span>)>>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">GUACAMOLE_POSTGRES_PASSWORD</span>=<<get-password(passname=<span class="org-string">"nas/guacamole_postgres_pass"</span>)>>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">DEEMIX_ARL</span>=<<get-password(passname=<span class="org-string">"nas/deemix_arl"</span>)>>
|
|
</pre>
|
|
</div>
|
|
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf"><span class="org-variable-name">GMAIL_PASS</span>=<<get-password(passname=<span class="org-string">"google.com/tdehaeze.xyz"</span>)>>
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<div id="outline-container-orgf0182df" class="outline-2">
|
|
<h2 id="orgf0182df">Cron Jobs</h2>
|
|
<div class="outline-text-2" id="text-orgf0182df">
|
|
</div>
|
|
<div id="outline-container-org34f5942" class="outline-3">
|
|
<h3 id="org34f5942">Caddy Update</h3>
|
|
<div class="outline-text-3" id="text-org34f5942">
|
|
<p>
|
|
Create a script <code>~/cron/caddy_update.sh</code> with:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-bash">docker exec caddy /bin/sh -c <span class="org-string">"</span><span class="org-type"><span class="org-string">cd</span></span><span class="org-string"> /srv/www && </span><span class="org-type"><span class="org-string">echo</span></span><span class="org-string"> -e \"Update repo </span><span class="org-string"><span class="org-sh-quoted-exec">$(</span></span><span class="org-sh-quoted-exec">date</span><span class="org-string"><span class="org-sh-quoted-exec">)</span></span><span class="org-string">\" && </span><span class="org-type"><span class="org-string">git</span></span><span class="org-string"> submodule update --recursive --remote --merge"</span>
|
|
</pre>
|
|
</div>
|
|
|
|
<p>
|
|
Type <code>crontab -e</code> and add this line:
|
|
</p>
|
|
<div class="org-src-container">
|
|
<pre class="src src-conf">*/5 * * * * /home/thomas/cron/caddy_update.sh >> /home/thomas/cron/caddy_update.log 2>&1
|
|
</pre>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div id="postamble" class="status">
|
|
<p class="author">Author: Dehaeze Thomas</p>
|
|
<p class="date">Created: 2021-04-25 dim. 19:10</p>
|
|
</div>
|
|
</body>
|
|
</html>
|