Add a Linux tips section and move Docker stacks to /srv/docker
This commit is contained in:
@@ -66,3 +66,23 @@ Switches, NICs, and cabling
|
|||||||
A budget N100 home server build
|
A budget N100 home server build
|
||||||
::
|
::
|
||||||
::
|
::
|
||||||
|
|
||||||
|
### Linux tips for dummies
|
||||||
|
|
||||||
|
:::div{class="relative"}
|
||||||
|
:ellipsis{left=0px width=40rem top=10rem blur=140px}
|
||||||
|
:::
|
||||||
|
|
||||||
|
::card-group
|
||||||
|
::card{icon="i-lucide-terminal" title="Command Line Basics" to="/general/linux/cli-basics"}
|
||||||
|
How a command is built, and the ones you'll actually use
|
||||||
|
::
|
||||||
|
|
||||||
|
::card{icon="i-lucide-folder-tree" title="Folders and Partitions" to="/general/linux/filesystem"}
|
||||||
|
What lives where on Debian, and the habits that keep it tidy
|
||||||
|
::
|
||||||
|
|
||||||
|
::card{icon="i-lucide-wrench" title="Handy CLI Tools" to="/general/linux/handy-tools"}
|
||||||
|
Terminal tools worth installing, and how to set them up
|
||||||
|
::
|
||||||
|
::
|
||||||
|
|||||||
@@ -0,0 +1,2 @@
|
|||||||
|
title: Linux tips for dummies
|
||||||
|
icon: i-lucide-terminal
|
||||||
@@ -0,0 +1,255 @@
|
|||||||
|
---
|
||||||
|
title: Command line basics
|
||||||
|
description: Understand how a Linux command is built, learn the essential terminal commands, what their names mean, and get a cheat sheet to keep at hand.
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
|
||||||
|
|
||||||
|
A server has no desktop, no icons and no mouse. Everything happens in a terminal, and that black window with a blinking cursor is the single thing that puts people off self-hosting. It shouldn't: the terminal is just a conversation. You type one line, the machine does exactly that and answers. Nothing more magic than a search bar, except it does far more and never hides an option behind three menus.
|
||||||
|
|
||||||
|
The good news is that you don't need to know a hundred commands. Ten of them cover almost everything you'll do on a home server, and they all follow the same pattern. Learn the pattern first, and every command you meet later becomes readable, even the ones you've never seen.
|
||||||
|
|
||||||
|
## How a command is built
|
||||||
|
|
||||||
|
Every command line, without exception, is the same sentence: **what to run**, **how to run it**, **what to run it on**.
|
||||||
|
|
||||||
|
```text [Anatomy of a command]
|
||||||
|
sudo apt install -y nano
|
||||||
|
│ │ │ │ └─ argument: what the command works on
|
||||||
|
│ │ │ └──── option: changes how it behaves
|
||||||
|
│ │ └──────────── subcommand: what the program should do
|
||||||
|
│ └──────────────── the program you're running
|
||||||
|
└───────────────────── run it with administrator rights
|
||||||
|
```
|
||||||
|
|
||||||
|
Read out loud, that line says "as an administrator, ask the package manager to install the nano package, and don't ask me to confirm". Spaces are what separate the pieces, which is why a folder named `My Backups` has to be quoted (`cd "My Backups"`) or the shell reads it as two different things.
|
||||||
|
|
||||||
|
### Options, short and long
|
||||||
|
|
||||||
|
Options change how a command behaves. They come in two flavours, and most commands accept both:
|
||||||
|
|
||||||
|
- **Short**, a single dash and a single letter: `ls -a`. They can be stacked, so `ls -l -a -h` is usually written `ls -lah`.
|
||||||
|
- **Long**, two dashes and a whole word: `ls --all`. Longer to type, but you can still tell what it does six months later, which is why they're the better choice in a script.
|
||||||
|
|
||||||
|
Some options expect a value right after them: `ssh-keygen -t ed25519` (`-t` for type), `rsync --exclude @eaDir`. And case matters, always. In `ls`, `-r` reverses the sort order while `-R` walks into subfolders. Two different things, one letter apart.
|
||||||
|
|
||||||
|
### Arguments and paths
|
||||||
|
|
||||||
|
The argument is the target: a file, a folder, a package name, an address. Many commands accept several at once, separated by spaces, which is what makes the terminal fast: `rm file1.txt file2.txt file3.txt` deletes three files in one go.
|
||||||
|
|
||||||
|
When the target is a place on the disk, you write it as a path, and there are a few shortcuts worth knowing:
|
||||||
|
|
||||||
|
| Path | Means |
|
||||||
|
| --- | --- |
|
||||||
|
| `/` | the root of the whole system, everything lives under it |
|
||||||
|
| `~` | your own home folder, `/home/username` |
|
||||||
|
| `.` | the folder you're currently in |
|
||||||
|
| `..` | the folder just above |
|
||||||
|
| `/var/log` | an **absolute** path, same result from anywhere |
|
||||||
|
| `logs/today` | a **relative** path, understood from where you currently stand |
|
||||||
|
|
||||||
|
Which folder holds what is a subject of its own, covered in [folders and partitions](/general/linux/filesystem).
|
||||||
|
|
||||||
|
The prompt itself tells you where you are: in `username@serveex:~/docker$`, you're logged in as `username` on the machine named `serveex`, inside the `docker` folder of your home. That final `$` means a normal user. If it ever shows `#`, you're root and every typo counts double.
|
||||||
|
|
||||||
|
### Getting help
|
||||||
|
|
||||||
|
Two habits make you independent from tutorials. `command --help` prints a quick summary of every option, and `man command` opens the full manual (`man` for *manual*), which you leave by pressing :kbd{value="Q"}.
|
||||||
|
|
||||||
|
::tip{icon=""}
|
||||||
|
✨ __Tip:__ three keyboard habits that change everything: :kbd{value="Tab"} completes the file or folder name you started typing, so you almost never type a full path; the :kbd{value="Up"} arrow brings back your previous commands, which saves retyping a long line for one character; and :kbd{value="Ctrl"} + :kbd{value="C"} stops whatever is currently running.
|
||||||
|
::
|
||||||
|
|
||||||
|
### Chaining commands
|
||||||
|
|
||||||
|
Once the pattern clicks, commands can be plugged into each other:
|
||||||
|
|
||||||
|
- `&&` runs the next one only if the previous one succeeded: `sudo apt update && sudo apt full-upgrade`
|
||||||
|
- `|`, the pipe, feeds the output of one command into another: `ls -l | grep backup` lists the folder, then keeps only the lines containing "backup"
|
||||||
|
- `>` writes the output into a file instead of the screen, and `>>` adds to the end of that file: `df -h > disk-report.txt`
|
||||||
|
|
||||||
|
## The commands you'll actually use
|
||||||
|
|
||||||
|
Most command names are abbreviations of an English phrase. Once you know what they stand for, they stop looking like keyboard noise.
|
||||||
|
|
||||||
|
### pwd, print working directory
|
||||||
|
|
||||||
|
Tells you where you are. It changes nothing, it just answers the question.
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
pwd
|
||||||
|
```
|
||||||
|
|
||||||
|
```console [Output]
|
||||||
|
/home/username/docker
|
||||||
|
```
|
||||||
|
|
||||||
|
### ls, list
|
||||||
|
|
||||||
|
Lists what's in the current folder. On its own it prints bare names, so it's almost always used with options: `-l` for the long format with sizes, dates and permissions, `-a` to also show hidden files (the ones starting with a dot), `-h` for sizes in K/M/G instead of raw bytes.
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
ls -lah
|
||||||
|
```
|
||||||
|
|
||||||
|
```console [Output]
|
||||||
|
total 20K
|
||||||
|
drwxr-xr-x 4 username username 4.0K Sep 5 10:12 .
|
||||||
|
drwxr-xr-x 18 username username 4.0K Sep 4 21:03 ..
|
||||||
|
-rw-r--r-- 1 username username 512 Sep 5 10:12 .env
|
||||||
|
-rw-r--r-- 1 username username 1.2K Sep 5 09:58 compose.yaml
|
||||||
|
drwxr-xr-x 3 username username 4.0K Sep 2 18:44 immich
|
||||||
|
```
|
||||||
|
|
||||||
|
The first column is the permissions, `d` at the very start meaning it's a folder. Then the owner, the size, the date of the last change, and the name.
|
||||||
|
|
||||||
|
### cd, change directory
|
||||||
|
|
||||||
|
Moves you around. With a path it goes there, with `..` it goes up one level, and with nothing at all it takes you back home.
|
||||||
|
|
||||||
|
```console [Terminal]
|
||||||
|
username@serveex:~/docker$ cd /var/log
|
||||||
|
username@serveex:/var/log$ cd ..
|
||||||
|
username@serveex:/$ cd
|
||||||
|
username@serveex:~$
|
||||||
|
```
|
||||||
|
|
||||||
|
Notice the prompt following you around: it always shows where you currently stand, so you rarely need `pwd` in practice.
|
||||||
|
|
||||||
|
### mkdir, make directory
|
||||||
|
|
||||||
|
Creates a folder. Several at once if you list them, and `-p` creates the whole chain of parents in one shot, which is the version you'll actually use.
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
mkdir backups
|
||||||
|
mkdir -p docker/immich/config
|
||||||
|
```
|
||||||
|
|
||||||
|
```console [Output]
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
Nothing. That's not a bug, it's the rule: most commands say nothing when they succeed and only speak up when something goes wrong. Silence is good news, and `ls` confirms the folder is there.
|
||||||
|
|
||||||
|
### cp and mv, copy and move
|
||||||
|
|
||||||
|
`cp` copies, `mv` moves. Same shape both times: first the source, then the destination. Copying a folder needs `-r`, for *recursive*, since a folder means everything inside it too. `mv` doubles as the rename command, because renaming a file is just moving it to a new name.
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
cp compose.yaml compose.yaml.bak
|
||||||
|
cp -r config/ config-backup/
|
||||||
|
mv old-name.txt new-name.txt
|
||||||
|
ls
|
||||||
|
```
|
||||||
|
|
||||||
|
```console [Output]
|
||||||
|
compose.yaml compose.yaml.bak config config-backup new-name.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
Three silent commands, and `ls` showing the result: the copy sits next to the original, the folder was duplicated, and `old-name.txt` is gone because moving it to another name is exactly what renaming means.
|
||||||
|
|
||||||
|
### rm, remove
|
||||||
|
|
||||||
|
Deletes. There is no recycle bin, no undo, no confirmation dialog. `-r` deletes a folder and its contents, `-f` forces without asking.
|
||||||
|
|
||||||
|
::warning
|
||||||
|
`rm -rf` is the command that wipes homelabs. It doesn't check, doesn't warn, and doesn't stop. Read the path twice before pressing :kbd{value="Enter"}, especially when the line starts with `sudo` and contains a `/` or a `*`.
|
||||||
|
::
|
||||||
|
|
||||||
|
### cat and nano, read and edit
|
||||||
|
|
||||||
|
`cat` (short for *concatenate*) dumps a whole file to the screen, perfect for a short config. For anything longer, `less` scrolls through it (named as a joke on `more`, the older pager it replaced), and you quit it with :kbd{value="Q"}.
|
||||||
|
|
||||||
|
To actually change a file, `nano` opens a simple editor: arrows to move, :kbd{value="Ctrl"} + :kbd{value="O"} to save, :kbd{value="Ctrl"} + :kbd{value="X"} to leave.
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
cat .env
|
||||||
|
```
|
||||||
|
|
||||||
|
```properties [Output]
|
||||||
|
PUID=1000
|
||||||
|
PGID=1000
|
||||||
|
TZ=Europe/Paris
|
||||||
|
```
|
||||||
|
|
||||||
|
### grep, search inside files
|
||||||
|
|
||||||
|
`grep` stands for *global regular expression print*, which is a mouthful for "find me this text". You give it what to look for and where, and it prints every matching line. `-r` searches a whole folder, `-i` ignores upper and lower case, `-n` shows line numbers.
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
grep -rin "password" /home/username/docker
|
||||||
|
```
|
||||||
|
|
||||||
|
```console [Output]
|
||||||
|
/home/username/docker/immich/.env:6:DB_PASSWORD=changeme
|
||||||
|
/home/username/docker/vaultwarden/compose.yaml:14: ADMIN_PASSWORD=hunter2
|
||||||
|
```
|
||||||
|
|
||||||
|
Each line is the file, then the line number inside it, then the matching line itself. Very handy for the day you can't remember which stack holds a setting.
|
||||||
|
|
||||||
|
### sudo, run as administrator
|
||||||
|
|
||||||
|
*Substitute user do*. A normal user can't touch the system's files, which is exactly what protects you from wrecking the machine by accident. Prefixing a command with `sudo` runs that single command with administrator rights, and asks for your password the first time.
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
nano /etc/ssh/sshd_config
|
||||||
|
```
|
||||||
|
|
||||||
|
```console [Output]
|
||||||
|
Error writing /etc/ssh/sshd_config: Permission denied
|
||||||
|
```
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo nano /etc/ssh/sshd_config
|
||||||
|
```
|
||||||
|
|
||||||
|
```console [Output]
|
||||||
|
[sudo] password for username:
|
||||||
|
```
|
||||||
|
|
||||||
|
::note
|
||||||
|
If a command answers `Permission denied`, that's usually the whole problem: it needed `sudo`. Resist the reflex of putting `sudo` on everything though, a file created as root will keep annoying you afterwards because your normal user no longer owns it.
|
||||||
|
::
|
||||||
|
|
||||||
|
## Cheat sheet
|
||||||
|
|
||||||
|
The ones worth keeping at hand, and where their names come from.
|
||||||
|
|
||||||
|
| Command | Short for | What it does |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `pwd` | print working directory | Shows where you are |
|
||||||
|
| `ls` | list | Lists files and folders |
|
||||||
|
| `cd` | change directory | Moves you somewhere else |
|
||||||
|
| `mkdir` | make directory | Creates a folder |
|
||||||
|
| `touch` | plain English | Creates an empty file, or refreshes its date |
|
||||||
|
| `cp` | copy | Copies a file or folder |
|
||||||
|
| `mv` | move | Moves or renames |
|
||||||
|
| `rm` | remove | Deletes, permanently |
|
||||||
|
| `cat` | concatenate | Prints a file to the screen |
|
||||||
|
| `less` | a pun on `more` | Scrolls through a long file |
|
||||||
|
| `nano` | the editor replacing Pico | Edits a file |
|
||||||
|
| `grep` | global regular expression print | Searches for text |
|
||||||
|
| `find` | plain English | Searches for files by name, size or date |
|
||||||
|
| `man` | manual | Opens a command's full documentation |
|
||||||
|
| `df` | disk free | Shows free space per partition |
|
||||||
|
| `lsblk` | list block devices | Draws the tree of disks and partitions |
|
||||||
|
| `du` | disk usage | Shows what a folder weighs |
|
||||||
|
| `ps` | process status | Lists running processes |
|
||||||
|
| `htop` | Hisham's `top` | Live view of CPU, RAM and processes |
|
||||||
|
| `kill` | plain English | Stops a process by its number |
|
||||||
|
| `chmod` | change mode | Changes a file's permissions |
|
||||||
|
| `chown` | change owner | Changes who owns a file |
|
||||||
|
| `sudo` | substitute user do | Runs one command as administrator |
|
||||||
|
| `apt` | advanced package tool | Installs, updates and removes packages |
|
||||||
|
| `systemctl` | control systemd | Starts, stops and enables services |
|
||||||
|
| `ssh` | secure shell | Opens a session on a remote machine |
|
||||||
|
| `scp` | secure copy | Copies files over SSH |
|
||||||
|
| `tar` | tape archive | Packs and unpacks archives |
|
||||||
|
| `wget` | web get | Downloads a file from a URL |
|
||||||
|
| `curl` | client URL | Sends a request to a URL |
|
||||||
|
| `history` | plain English | Lists the commands you typed before |
|
||||||
|
|
||||||
|
::tip{icon=""}
|
||||||
|
✨ __Tip:__ nobody memorises this. You'll look up the same three options for weeks, then one day realise you're typing them without thinking. Until then, `--help` and this table are perfectly legitimate.
|
||||||
|
::
|
||||||
@@ -0,0 +1,59 @@
|
|||||||
|
---
|
||||||
|
title: Folders and partitions
|
||||||
|
description: How the Debian filesystem is organised, what each top-level folder holds, how partitions differ from folders, and the habits that keep a server tidy.
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
|
||||||
|
|
||||||
|
Windows gives every disk its own letter. Linux doesn't: there is exactly one tree, it starts at `/`, and everything else hangs off it, including your other disks. A second drive isn't `D:`, it's *mounted* at a folder of the tree, `/mnt/data` for example, and from that point on it looks like any other folder. Odd at first, very practical afterwards, since a program never has to care which physical disk it's writing to.
|
||||||
|
|
||||||
|
## The tree
|
||||||
|
|
||||||
|
That tree isn't arbitrary either. Every Debian install has the same folders in the same places, which is why a tutorial written for someone else's server applies to yours.
|
||||||
|
|
||||||
|
| Folder | What's in it |
|
||||||
|
| --- | --- |
|
||||||
|
| `/home` | Users' files. Yours is `/home/username`, also written `~` |
|
||||||
|
| `/root` | The root account's own home, not to be confused with `/` |
|
||||||
|
| `/etc` | System configuration, all of it plain text files |
|
||||||
|
| `/var` | Data that grows: logs in `/var/log`, Docker in `/var/lib/docker` |
|
||||||
|
| `/tmp` | Temporary files, emptied at every reboot |
|
||||||
|
| `/usr` | The installed programs themselves, managed by `apt` |
|
||||||
|
| `/opt` | Software installed outside the package manager |
|
||||||
|
| `/mnt` and `/media` | Where extra disks get mounted, `/media` for removable ones |
|
||||||
|
| `/boot` | The kernel and the bootloader, on a small partition of its own |
|
||||||
|
| `/dev` | Your hardware, exposed as files (`/dev/sda` is a disk) |
|
||||||
|
| `/proc` and `/sys` | The kernel's live state, invented on the fly, not real files |
|
||||||
|
|
||||||
|
## Folders are not partitions
|
||||||
|
|
||||||
|
Partitions are a different question from folders. A minimal Debian install typically creates two, one for `/` and one for swap, so every folder above except `/boot` lives on the same partition and shares the same free space. Two commands to see the reality of it: `lsblk` draws the tree of disks and partitions, `df -h` shows how full each one is.
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
lsblk
|
||||||
|
```
|
||||||
|
|
||||||
|
```console [Output]
|
||||||
|
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
|
||||||
|
sda 8:0 0 465.8G 0 disk
|
||||||
|
├─sda1 8:1 0 512M 0 part /boot/efi
|
||||||
|
├─sda2 8:2 0 461.3G 0 part /
|
||||||
|
└─sda3 8:3 0 4G 0 part [SWAP]
|
||||||
|
sdb 8:16 0 3.6T 0 disk
|
||||||
|
└─sdb1 8:17 0 3.6T 0 part /mnt/data
|
||||||
|
```
|
||||||
|
|
||||||
|
## A few habits worth taking
|
||||||
|
|
||||||
|
- **Give your Docker stacks one home, and keep them there.** `/srv` is the folder the standard reserves for data served by the machine, which makes it the tidiest choice for compose files and their bind mounts. [Serveex](/serveex/introduction) puts everything in `/srv/docker`, one folder per stack. What matters is picking one place and staying there, rather than scattering half of them into your home folder.
|
||||||
|
- **Your own files go in your home.** Scripts in `~/bin`, notes, downloads, anything personal. `/root` is the root account's home, not a convenient place to drop things.
|
||||||
|
- **Never edit anything under `/usr` or `/bin` by hand.** `apt` owns those, and your changes disappear at the next upgrade. What you're allowed to configure lives in `/etc`.
|
||||||
|
- **In `/etc`, prefer a drop-in file over editing the main one.** Many services read every `.conf` in a `something.d/` folder next to their main config, `/etc/ssh/sshd_config.d/` for instance. Your file then survives a package upgrade that rewrites the original.
|
||||||
|
- **Mount data disks by UUID, not by `/dev/sdb`.** Device letters are assigned in the order the kernel finds the disks, so they can swap after a reboot or a new drive. `lsblk -f` gives you the UUID to put in `/etc/fstab`.
|
||||||
|
- **Keep an eye on `/var`.** Docker images, container logs and system logs all pile up there, on the same partition as the rest. `du -sh /var/lib/docker` tells you what the containers weigh, `df -h` whether you should worry.
|
||||||
|
- **Don't create your files with `sudo` when you don't have to.** A file created as root inside your home stays owned by root, and you'll be fighting permission errors over it for weeks.
|
||||||
|
|
||||||
|
::note{to="/general/linux/cli-basics"}
|
||||||
|
Everything here assumes you can already move around a terminal. If `cd`, `ls` and `sudo` don't mean much yet, start with the **command line basics**.
|
||||||
|
::
|
||||||
@@ -0,0 +1,200 @@
|
|||||||
|
---
|
||||||
|
title: Handy CLI tools
|
||||||
|
description: A handful of terminal tools worth installing on a home server, what each one replaces, and step-by-step instructions to install and use them.
|
||||||
|
---
|
||||||
|
|
||||||
|
|
||||||
|
:ellipsis{left=0px width=40rem top=10rem blur=140px zIndex=60}
|
||||||
|
|
||||||
|
A minimal Debian install ships with the strict minimum, which means the tools you get are the ones from 1995. They work, but reading `df` output or hunting for what filled a disk with `du` is needlessly painful when better versions exist and cost nothing to install.
|
||||||
|
|
||||||
|
Everything below except the last one comes straight from Debian's repositories, so there's no third-party source to trust and `apt` keeps them updated along with the rest of the system.
|
||||||
|
|
||||||
|
::note{to="/general/linux/cli-basics"}
|
||||||
|
Every command here is typed in a terminal over SSH. If `sudo`, `apt` and `cd` don't mean much yet, start with the **command line basics**.
|
||||||
|
::
|
||||||
|
|
||||||
|
## The short version
|
||||||
|
|
||||||
|
| Tool | Replaces | What for |
|
||||||
|
| --- | --- | --- |
|
||||||
|
| `btop` | `top`, `htop` | Watching CPU, RAM and processes |
|
||||||
|
| `duf` | `df -h` | Free space, readable |
|
||||||
|
| `ncdu` | `du -sh` | Finding what filled the disk |
|
||||||
|
| `tldr` | `man` | The five commands you actually need |
|
||||||
|
| `lazydocker` | `docker ps` and friends | Managing containers over SSH |
|
||||||
|
|
||||||
|
## The impatient version
|
||||||
|
|
||||||
|
One line installs all the packaged ones, and each section below explains what you just got.
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo apt update
|
||||||
|
sudo apt install btop duf ncdu tealdeer
|
||||||
|
```
|
||||||
|
|
||||||
|
## btop, watching what the machine is doing
|
||||||
|
|
||||||
|
The modern replacement for `top` and `htop`: CPU, RAM, disks, network and processes on one screen, with graphs, colors and a working mouse. This is what you open when something feels slow.
|
||||||
|
|
||||||
|
::steps{level="4"}
|
||||||
|
#### Install it
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo apt install btop
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Run it
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo btop
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Click a process to select it, :kbd{value="Esc"} opens the menu, :kbd{value="Q"} quits. The `+` and `-` keys fold and unfold the panels if the screen feels crowded.
|
||||||
|
|
||||||
|
#### Done !
|
||||||
|
::
|
||||||
|
|
||||||
|
## duf, disk space that reads like a table
|
||||||
|
|
||||||
|
`df -h` prints every loop device Docker ever created and leaves you squinting at the columns. `duf` shows the same information grouped, aligned and colored, with a usage bar per filesystem.
|
||||||
|
|
||||||
|
::steps{level="4"}
|
||||||
|
#### Install it
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo apt install duf
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Run it
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo duf
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
Local disks, network shares and system mounts are grouped separately. Add `--only local` to hide the pseudo-filesystems Docker leaves behind.
|
||||||
|
|
||||||
|
#### Done !
|
||||||
|
::
|
||||||
|
|
||||||
|
## ncdu, finding what ate the disk
|
||||||
|
|
||||||
|
When `duf` tells you the disk is full, `ncdu` tells you why. It walks a folder, sorts everything by real size, and lets you drill down with the arrow keys instead of running `du -sh *` twenty times.
|
||||||
|
|
||||||
|
::steps{level="4"}
|
||||||
|
#### Install it
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo apt install ncdu
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Point it at a folder
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo ncdu /srv/docker
|
||||||
|
```
|
||||||
|
|
||||||
|
Arrows to move, :kbd{value="Enter"} to open a folder, :kbd{value="D"} to delete the selected item, :kbd{value="Q"} to quit. On a big disk the first scan takes a moment, it's reading everything.
|
||||||
|
|
||||||
|
::warning
|
||||||
|
:kbd{value="D"} deletes immediately, with a single confirmation and no recycle bin. Run `ncdu` without `sudo` when you're only looking, so a mistyped key can't touch anything the system owns.
|
||||||
|
::
|
||||||
|
|
||||||
|
#### Done !
|
||||||
|
::
|
||||||
|
|
||||||
|
## tldr, the manual without the 400 lines
|
||||||
|
|
||||||
|
`man tar` is exhaustive and unreadable. `tldr tar` gives you the five commands people actually type, with a one-line explanation each. It's community-maintained examples rather than a substitute for the real manual, and on Debian the client is packaged as `tealdeer`.
|
||||||
|
|
||||||
|
::steps{level="4"}
|
||||||
|
#### Install it
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo apt install tealdeer
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Download the page cache
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
tldr --update
|
||||||
|
```
|
||||||
|
|
||||||
|
The examples are fetched once and stored locally, so the command works offline afterwards. Run it again every few months.
|
||||||
|
|
||||||
|
#### Ask it something
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
tldr rsync
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Done !
|
||||||
|
::
|
||||||
|
|
||||||
|
## lazydocker, managing containers from the terminal
|
||||||
|
|
||||||
|
The one exception: it isn't packaged by Debian. It's a full text interface for Docker, containers, images, volumes and logs in one screen, with keys to restart, stop or follow the logs of anything. Handy when you're already in SSH and don't feel like opening Dockge.
|
||||||
|
|
||||||
|
::steps{level="4"}
|
||||||
|
#### Download the latest release
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
curl -Lo /tmp/lazydocker.tar.gz "https://github.com/jesseduffield/lazydocker/releases/latest/download/lazydocker_0.25.2_Linux_x86_64.tar.gz"
|
||||||
|
```
|
||||||
|
|
||||||
|
Check the [releases page](https://github.com/jesseduffield/lazydocker/releases) for the current version number, and take `arm64` instead of `x86_64` if the server is a Raspberry Pi or similar.
|
||||||
|
|
||||||
|
#### Install the binary
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo tar -xzf /tmp/lazydocker.tar.gz -C /usr/local/bin lazydocker
|
||||||
|
rm /tmp/lazydocker.tar.gz
|
||||||
|
```
|
||||||
|
|
||||||
|
`/usr/local/bin` is the folder meant for software you install yourself, which is why `apt` never touches it.
|
||||||
|
|
||||||
|
#### Check it landed
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
lazydocker --version
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Run it
|
||||||
|
|
||||||
|
```bash [Terminal]
|
||||||
|
sudo lazydocker
|
||||||
|
```
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
It needs access to the Docker socket, hence the `sudo` unless your user is in the `docker` group. The keys worth knowing:
|
||||||
|
|
||||||
|
| Key | What it does |
|
||||||
|
| --- | --- |
|
||||||
|
| `1` to `6` | Jump to a panel: projects, services, containers, images, volumes, networks |
|
||||||
|
| Arrows | Move inside the panel, the right side follows the selection |
|
||||||
|
| :kbd{value="Enter"} | Focus the main panel on the right, :kbd{value="Esc"} comes back |
|
||||||
|
| `x` | Open the menu of everything you can do with what's selected |
|
||||||
|
| `m` | Follow the logs |
|
||||||
|
| `s` / `r` / `p` | Stop, restart, pause the selected container |
|
||||||
|
| `E` | Open a shell inside the container |
|
||||||
|
| `d` | Remove it |
|
||||||
|
| `b` | Bulk commands, pruning images and volumes among others |
|
||||||
|
| `/` | Filter the list |
|
||||||
|
| `+` and `_` | Grow or shrink the panels |
|
||||||
|
| `q` | Quit |
|
||||||
|
|
||||||
|
Case matters: `E` opens a shell in the container, `e` hides the stopped ones.
|
||||||
|
|
||||||
|
The [full list](https://github.com/jesseduffield/lazydocker/blob/master/docs/keybindings/Keybindings_en.md) is in the project's documentation.
|
||||||
|
|
||||||
|
::note
|
||||||
|
Being outside `apt` also means it won't be updated by `apt full-upgrade`. Repeat these steps when you want a newer version.
|
||||||
|
::
|
||||||
|
|
||||||
|
#### Done !
|
||||||
|
::
|
||||||
@@ -14,8 +14,8 @@ The other reason is that it stays out of your way. Appliance systems like Unraid
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
::note{icon="" to="https://www.iamtimsmith.com/blog/getting-started-with-the-linux-cli" target="_blank"}
|
::note{icon="" to="/general/linux/cli-basics"}
|
||||||
📋 __Prerequisite:__ everything past this point happens in a terminal, so you should be comfortable with the basics: moving around with `cd`, listing with `ls`, editing a file with `nano`, and reading what a command tells you when it fails. If any of that is new, **start with the Linux CLI** and come back.
|
📋 __Prerequisite:__ everything past this point happens in a terminal, so you should be comfortable with the basics: moving around with `cd`, listing with `ls`, editing a file with `nano`, and reading what a command tells you when it fails. If any of that is new, **start with the command line basics** and come back.
|
||||||
::
|
::
|
||||||
|
|
||||||
### BIOS setup
|
### BIOS setup
|
||||||
@@ -342,13 +342,12 @@ Some essential apps you’ll likely need at some point, so might as well install
|
|||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo apt update
|
sudo apt update
|
||||||
sudo apt upgrade
|
sudo apt upgrade
|
||||||
sudo apt install nano btop ranger git duf neofetch samba cifs-utils tree unzip
|
sudo apt install nano btop ranger git duf samba cifs-utils tree unzip
|
||||||
```
|
```
|
||||||
|
|
||||||
Additionally:
|
::note{to="/general/linux/handy-tools"}
|
||||||
|
What each of these does, plus a few more worth adding like `ncdu` and `lazydocker`, is detailed in **handy CLI tools**.
|
||||||
- [gping](https://www.linode.com/docs/guides/how-to-use-gping-on-linux/) - Graphical ping tool
|
::
|
||||||
- [lazydocker](https://github.com/jesseduffield/lazydocker) - CLI Docker container manager
|
|
||||||
|
|
||||||
## Useful Features
|
## Useful Features
|
||||||
### Firewall
|
### Firewall
|
||||||
|
|||||||
@@ -49,9 +49,9 @@ sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin
|
|||||||
|
|
||||||
::note
|
::note
|
||||||
|
|
||||||
From here on, we assume the stacks are installed in the `/docker` folder, created using the command:
|
From here on, we assume the stacks are installed in the `/srv/docker` folder, created using the command:
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir /docker
|
sudo mkdir /srv/docker
|
||||||
```
|
```
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -67,9 +67,10 @@ sudo mkdir /docker
|
|||||||
label: File structure we will create
|
label: File structure we will create
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- dockge:
|
- docker:
|
||||||
- compose.yml
|
- dockge:
|
||||||
|
- compose.yml
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -77,14 +78,14 @@ tree:
|
|||||||
#### Create the stack folder
|
#### Create the stack folder
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
cd /docker
|
cd /srv/docker
|
||||||
sudo mkdir dockge
|
sudo mkdir dockge
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Create the compose file
|
#### Create the compose file
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
cd /docker/dockge
|
cd /srv/docker/dockge
|
||||||
sudo nano compose.yml
|
sudo nano compose.yml
|
||||||
```
|
```
|
||||||
Paste the following:
|
Paste the following:
|
||||||
@@ -101,10 +102,10 @@ services:
|
|||||||
|
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- /docker/dockge/data:/app/data
|
- /srv/docker/dockge/data:/app/data
|
||||||
- /docker:/docker
|
- /srv/docker:/srv/docker
|
||||||
environment:
|
environment:
|
||||||
- DOCKGE_STACKS_DIR=/docker
|
- DOCKGE_STACKS_DIR=/srv/docker
|
||||||
```
|
```
|
||||||
|
|
||||||
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
|
Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ctrl+X"} to exit.
|
||||||
@@ -112,7 +113,7 @@ Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ct
|
|||||||
#### Launch the container
|
#### Launch the container
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
cd /docker/dockge
|
cd /srv/docker/dockge
|
||||||
sudo docker compose up -d
|
sudo docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -57,12 +57,13 @@ __Warning__: If your IP is not static, use a Dynamic DNS service ([DynDNS](https
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- wg-easy:
|
- docker:
|
||||||
- config:
|
- wg-easy:
|
||||||
- etc_wireguard/
|
- config:
|
||||||
- compose.yaml
|
- etc_wireguard/
|
||||||
- .env
|
- compose.yaml
|
||||||
|
- .env
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -191,11 +192,12 @@ We assume the client server runs Linux with Docker installed.
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- wireguard:
|
- docker:
|
||||||
- config:
|
- wireguard:
|
||||||
- wg_confs/
|
- config:
|
||||||
- compose.yaml
|
- wg_confs/
|
||||||
|
- compose.yaml
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -203,7 +205,7 @@ tree:
|
|||||||
### Create the folder
|
### Create the folder
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir -p /docker/wireguard/config/wg_confs
|
sudo mkdir -p /srv/docker/wireguard/config/wg_confs
|
||||||
```
|
```
|
||||||
|
|
||||||
::tip{icon="" to="/serveex/files/file-browser-quantum"}
|
::tip{icon="" to="/serveex/files/file-browser-quantum"}
|
||||||
@@ -213,7 +215,7 @@ sudo mkdir -p /docker/wireguard/config/wg_confs
|
|||||||
### Create the wg0.conf file
|
### Create the wg0.conf file
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/wireguard/config/wg_confs/wg0.conf
|
sudo nano /srv/docker/wireguard/config/wg_confs/wg0.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the downloaded configuration, then save with :kbd{value="Ctrl+O"}, :kbd{value="Enter"}, and exit with :kbd{value="Ctrl+X"}.
|
Paste the downloaded configuration, then save with :kbd{value="Ctrl+O"}, :kbd{value="Enter"}, and exit with :kbd{value="Ctrl+X"}.
|
||||||
@@ -221,13 +223,13 @@ Paste the downloaded configuration, then save with :kbd{value="Ctrl+O"}, :kbd{va
|
|||||||
::tip{icon=""}
|
::tip{icon=""}
|
||||||
✨ **Alternative method:** Transfer the file via SFTP and move it:
|
✨ **Alternative method:** Transfer the file via SFTP and move it:
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo cp ~/wg0.conf /docker/wireguard/config/wg_confs
|
sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs
|
||||||
```
|
```
|
||||||
::
|
::
|
||||||
|
|
||||||
### Create the compose file
|
### Create the compose file
|
||||||
|
|
||||||
Create the `compose.yaml` file in `/docker/wireguard`:
|
Create the `compose.yaml` file in `/srv/docker/wireguard`:
|
||||||
|
|
||||||
```yaml [compose.yaml]
|
```yaml [compose.yaml]
|
||||||
---
|
---
|
||||||
@@ -242,7 +244,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/wireguard/config:/config
|
- /srv/docker/wireguard/config:/config
|
||||||
- /lib/modules:/lib/modules
|
- /lib/modules:/lib/modules
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
```
|
```
|
||||||
@@ -250,7 +252,7 @@ services:
|
|||||||
### Start the container
|
### Start the container
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
cd /docker/wireguard
|
cd /srv/docker/wireguard
|
||||||
sudo docker compose up -d
|
sudo docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -31,18 +31,19 @@ This tutorial assumes you have a domain name pointing to your server, and that y
|
|||||||
label: File structure to modify
|
label: File structure to modify
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- swag:
|
- docker:
|
||||||
- config:
|
- swag:
|
||||||
- dns-conf:
|
- config:
|
||||||
- ovh.ini
|
- dns-conf:
|
||||||
- nginx:
|
- ovh.ini
|
||||||
- dbip.conf
|
- nginx:
|
||||||
- nginx.conf
|
- dbip.conf
|
||||||
- proxy-confs:
|
- nginx.conf
|
||||||
- dockge.subdomain.conf
|
- proxy-confs:
|
||||||
- compose.yml
|
- dockge.subdomain.conf
|
||||||
- .env
|
- compose.yml
|
||||||
|
- .env
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -71,7 +72,7 @@ services:
|
|||||||
- EMAIL=${EMAIL}
|
- EMAIL=${EMAIL}
|
||||||
- DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload
|
- DOCKER_MODS=linuxserver/mods:swag-dbip|linuxserver/mods:swag-dashboard|linuxserver/mods:swag-auto-reload
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/swag/config:/config
|
- /srv/docker/swag/config:/config
|
||||||
ports:
|
ports:
|
||||||
- 80:80
|
- 80:80
|
||||||
- 443:443
|
- 443:443
|
||||||
@@ -131,7 +132,7 @@ You can use **File Browser Quantum** to browse and edit files instead of using t
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/dns-conf/ovh.ini
|
sudo nano /srv/docker/swag/config/dns-conf/ovh.ini
|
||||||
```
|
```
|
||||||
|
|
||||||
You should see:
|
You should see:
|
||||||
@@ -163,7 +164,7 @@ Save with :kbd{value="Ctrl+O"}, then :kbd{value="Enter"}, and exit with :kbd{val
|
|||||||
Now configure swag to access DBIP, the geolocation-based access control module. Open the `nginx.conf` file:
|
Now configure swag to access DBIP, the geolocation-based access control module. Open the `nginx.conf` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/nginx.conf
|
sudo nano /srv/docker/swag/config/nginx/nginx.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the following line below the `http` section:
|
Add the following line below the `http` section:
|
||||||
@@ -184,7 +185,7 @@ On the left, you'll see a list of currently "proxied" services (none yet). On th
|
|||||||

|

|
||||||
|
|
||||||
## DBIP
|
## DBIP
|
||||||
DBIP allows you to block connections based on countries. It relies on the configuration file named `dbip.conf` located in `/docker/swag/config/nginx`. [More info here](https://virtualize.link/secure/).
|
DBIP allows you to block connections based on countries. It relies on the configuration file named `dbip.conf` located in `/srv/docker/swag/config/nginx`. [More info here](https://virtualize.link/secure/).
|
||||||
|
|
||||||
In this example, we’ll configure it to block a list of countries known to be the source of most malicious traffic. We’ll also configure a variable to allow internal server traffic, your box’s local network, and a potential VPN in the 10.x.x.x range to access your services, but not the open internet.
|
In this example, we’ll configure it to block a list of countries known to be the source of most malicious traffic. We’ll also configure a variable to allow internal server traffic, your box’s local network, and a potential VPN in the 10.x.x.x range to access your services, but not the open internet.
|
||||||
|
|
||||||
@@ -194,7 +195,7 @@ This configuration can be enabled or disabled per service (see the Dockge exampl
|
|||||||
### Open dbip.conf
|
### Open dbip.conf
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/dbip.conf
|
sudo nano /srv/docker/swag/config/nginx/dbip.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
### Make your changes
|
### Make your changes
|
||||||
@@ -298,7 +299,7 @@ Dockge does not support multi-factor authentication. Exposing it online could co
|
|||||||
Open the `dockge.subdomain.conf` file:
|
Open the `dockge.subdomain.conf` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Configure it like this:
|
Configure it like this:
|
||||||
@@ -389,7 +390,7 @@ Wait a moment, then visit `https://dockge.mydomain.com` in your browser. You sho
|
|||||||
SWAG includes templates for most known services, named `servicename.subdomain.conf.sample`. Just create the subdomain in your registrar's DNS zone (like OVH), point it to your main domain via a CNAME, then copy and rename the sample file:
|
SWAG includes templates for most known services, named `servicename.subdomain.conf.sample`. Just create the subdomain in your registrar's DNS zone (like OVH), point it to your main domain via a CNAME, then copy and rename the sample file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
cd /docker/swag/config/proxy-confs
|
cd /srv/docker/swag/config/proxy-confs
|
||||||
sudo cp servicename.subdomain.conf.sample servicename.subdomain.conf
|
sudo cp servicename.subdomain.conf.sample servicename.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -83,7 +83,7 @@ Create a file `tunnelconfig.yml` to reference in your SWAG `compose.yaml`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/tunnelconfig.yml
|
sudo nano /srv/docker/swag/config/tunnelconfig.yml
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste:
|
Paste:
|
||||||
@@ -108,7 +108,7 @@ Now configure _Cloudflare Real IP_.
|
|||||||
Open the `nginx.conf` file:
|
Open the `nginx.conf` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/nginx.conf
|
sudo nano /srv/docker/swag/config/nginx/nginx.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the following at the end of the `http` section:
|
Add the following at the end of the `http` section:
|
||||||
@@ -157,8 +157,8 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 81:81
|
- 81:81
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/swag/config:/config
|
- /srv/docker/swag/config:/config
|
||||||
- /docker/swag/config/fail2ban/fail2ban.sqlite3:/dashboard/fail2ban.sqlite3:ro
|
- /srv/docker/swag/config/fail2ban/fail2ban.sqlite3:/dashboard/fail2ban.sqlite3:ro
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -21,11 +21,12 @@ It supports a simple local username/password login out of the box, which is what
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- tinyauth:
|
- docker:
|
||||||
- compose.yaml
|
- tinyauth:
|
||||||
- .env
|
- compose.yaml
|
||||||
- data/
|
- .env
|
||||||
|
- data/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ tree:
|
|||||||
### Create the data folder
|
### Create the data folder
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir -p /docker/tinyauth/data
|
sudo mkdir -p /srv/docker/tinyauth/data
|
||||||
```
|
```
|
||||||
|
|
||||||
### Generate a password hash
|
### Generate a password hash
|
||||||
@@ -61,7 +62,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/tinyauth/data:/data
|
- /srv/docker/tinyauth/data:/data
|
||||||
ports:
|
ports:
|
||||||
- 3000:3000
|
- 3000:3000
|
||||||
```
|
```
|
||||||
@@ -180,7 +181,7 @@ In the Swag folders, create the file `tinyauth.subdomain.conf`:
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/tinyauth.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/tinyauth.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following configuration:
|
Paste the following configuration:
|
||||||
@@ -230,7 +231,7 @@ Swag doesn't ship a ready-made include file for TinyAuth, so we'll add the forwa
|
|||||||
### Open the app's subdomain.conf file
|
### Open the app's subdomain.conf file
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
### Add the forward-auth check
|
### Add the forward-auth check
|
||||||
|
|||||||
@@ -21,11 +21,12 @@ This makes it a good fit if you just need a simple, fast SSO backend, for exampl
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- pocket-id:
|
- docker:
|
||||||
- compose.yaml
|
- pocket-id:
|
||||||
- .env
|
- compose.yaml
|
||||||
- data/
|
- .env
|
||||||
|
- data/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ tree:
|
|||||||
### Create the data folder
|
### Create the data folder
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir -p /docker/pocket-id/data
|
sudo mkdir -p /srv/docker/pocket-id/data
|
||||||
```
|
```
|
||||||
|
|
||||||
### Generate an encryption key
|
### Generate an encryption key
|
||||||
@@ -58,7 +59,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/pocket-id/data:/app/data
|
- /srv/docker/pocket-id/data:/app/data
|
||||||
ports:
|
ports:
|
||||||
- 1411:1411
|
- 1411:1411
|
||||||
healthcheck:
|
healthcheck:
|
||||||
@@ -159,7 +160,7 @@ In the Swag folders, create the file `id.subdomain.conf`:
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/id.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/id.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following configuration:
|
Paste the following configuration:
|
||||||
@@ -243,7 +244,7 @@ https://tinyauth.mydomain.com/api/oauth/callback/pocketid
|
|||||||
Copy the __Client ID__ and __Client Secret__ Pocket ID gives you, then edit TinyAuth's `.env` file:
|
Copy the __Client ID__ and __Client Secret__ Pocket ID gives you, then edit TinyAuth's `.env` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/tinyauth/.env
|
sudo nano /srv/docker/tinyauth/.env
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the following:
|
Add the following:
|
||||||
|
|||||||
@@ -14,10 +14,11 @@ description: Install Uptime-Kuma to monitor your self-hosted services uptime, se
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- uptime-kuma:
|
- docker:
|
||||||
- data/
|
- uptime-kuma:
|
||||||
- compose.yaml
|
- data/
|
||||||
|
- compose.yaml
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -33,7 +34,7 @@ services:
|
|||||||
image: louislam/uptime-kuma:2-slim
|
image: louislam/uptime-kuma:2-slim
|
||||||
container_name: uptime-kuma
|
container_name: uptime-kuma
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/uptime-kuma/uptime-kuma-data:/app/data
|
- /srv/docker/uptime-kuma/uptime-kuma-data:/app/data
|
||||||
ports:
|
ports:
|
||||||
- 3200:3001 # <Host Port>:<Container Port>
|
- 3200:3001 # <Host Port>:<Container Port>
|
||||||
restart: always
|
restart: always
|
||||||
@@ -87,7 +88,7 @@ you can use **File Browser Quantum** to browse and edit your files instead of us
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/stats.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/stats.subdomain.conf
|
||||||
```
|
```
|
||||||
Paste the following config:
|
Paste the following config:
|
||||||
|
|
||||||
@@ -184,7 +185,7 @@ That's it! Uptime-Kuma is now exposed, and you can access it via `https://stats.
|
|||||||
### Open the subdomain.conf file
|
### Open the subdomain.conf file
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/stats.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/stats.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
### Add the forward-auth check and public paths
|
### Add the forward-auth check and public paths
|
||||||
|
|||||||
@@ -17,11 +17,12 @@ description: Install Dozzle to monitor Docker container logs in real time from a
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- dozzle:
|
- docker:
|
||||||
- compose.yaml
|
- dozzle:
|
||||||
- .env
|
- compose.yaml
|
||||||
- data/
|
- .env
|
||||||
|
- data/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -125,7 +126,7 @@ In the Swag folder, create the `dozzle.subdomain.conf` file.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/dozzle.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dozzle.subdomain.conf
|
||||||
```
|
```
|
||||||
Paste the configuration below:
|
Paste the configuration below:
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,13 @@ We will use the Docker image maintained by **LinuxServer.io**
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- speedtest-tracker:
|
- docker:
|
||||||
- compose.yaml
|
- speedtest-tracker:
|
||||||
- .env
|
- compose.yaml
|
||||||
- data:
|
- .env
|
||||||
- config/
|
- data:
|
||||||
|
- config/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -61,7 +62,7 @@ services:
|
|||||||
- DB_CONNECTION=sqlite
|
- DB_CONNECTION=sqlite
|
||||||
- SPEEDTEST_SCHEDULE=${SCHEDULE}
|
- SPEEDTEST_SCHEDULE=${SCHEDULE}
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/speedtest-tracker/data/config:/config
|
- /srv/docker/speedtest-tracker/data/config:/config
|
||||||
```
|
```
|
||||||
|
|
||||||
### Set your environment variables
|
### Set your environment variables
|
||||||
@@ -110,7 +111,7 @@ Speedtest Tracker does not use multi-factor authentication. Exposing it on the i
|
|||||||
Open the `speedtest.subdomain.conf` file:
|
Open the `speedtest.subdomain.conf` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/speedtest.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/speedtest.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Configure it like this:
|
Configure it like this:
|
||||||
|
|||||||
@@ -18,12 +18,13 @@ Beszel includes a hub with a web UI and an agent that collects data from your se
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- beszel:
|
- docker:
|
||||||
- compose.yaml
|
- beszel:
|
||||||
- .env
|
- compose.yaml
|
||||||
- data/
|
- .env
|
||||||
- socket/
|
- data/
|
||||||
|
- socket/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -195,7 +196,7 @@ In Swag’s config folders, create `beszel.subdomain.conf`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/beszel.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/beszel.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste:
|
Paste:
|
||||||
|
|||||||
@@ -16,11 +16,12 @@ description: Install UpSnap to remotely wake up machines on your local network v
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- upsnap:
|
- docker:
|
||||||
- compose.yaml
|
- upsnap:
|
||||||
- .env
|
- compose.yaml
|
||||||
- data/
|
- .env
|
||||||
|
- data/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -38,7 +39,7 @@ services:
|
|||||||
network_mode: host
|
network_mode: host
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/upsnap/data:/app/pb_data
|
- /srv/docker/upsnap/data:/app/pb_data
|
||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
- UPSNAP_SCAN_RANGE=${SCAN_RANGE}
|
- UPSNAP_SCAN_RANGE=${SCAN_RANGE}
|
||||||
@@ -137,7 +138,7 @@ In the Swag folders, create the file `upsnap.subdomain.conf`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/upsnap.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/upsnap.subdomain.conf
|
||||||
```
|
```
|
||||||
And paste the following configuration:
|
And paste the following configuration:
|
||||||
|
|
||||||
|
|||||||
@@ -25,11 +25,12 @@ Unlike Plex, Jellyfin has no cloud relay: to access your server outside your loc
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- jellyfin:
|
- docker:
|
||||||
- compose.yaml
|
- jellyfin:
|
||||||
- .env
|
- compose.yaml
|
||||||
- config/
|
- .env
|
||||||
|
- config/
|
||||||
- media:
|
- media:
|
||||||
- tvseries/
|
- tvseries/
|
||||||
- movies/
|
- movies/
|
||||||
@@ -61,7 +62,7 @@ services:
|
|||||||
- PGID=${GUID}
|
- PGID=${GUID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/jellyfin/config:/config
|
- /srv/docker/jellyfin/config:/config
|
||||||
- /media:/media
|
- /media:/media
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
devices:
|
devices:
|
||||||
|
|||||||
@@ -26,13 +26,14 @@ Here’s the system we’ll set up:
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- seedbox:
|
- docker:
|
||||||
- qbittorrent:
|
- seedbox:
|
||||||
- config/
|
- qbittorrent:
|
||||||
- gluetun/
|
- config/
|
||||||
- compose.yaml
|
- gluetun/
|
||||||
- .env
|
- compose.yaml
|
||||||
|
- .env
|
||||||
- "media # linked to Jellyfin and Qbittorrent":
|
- "media # linked to Jellyfin and Qbittorrent":
|
||||||
- "downloads/ # generic downloads, selected in settings"
|
- "downloads/ # generic downloads, selected in settings"
|
||||||
- "movies/ # used for downloading movies"
|
- "movies/ # used for downloading movies"
|
||||||
@@ -72,7 +73,7 @@ services:
|
|||||||
- GSP_QBT_USERNAME=${ID}
|
- GSP_QBT_USERNAME=${ID}
|
||||||
- GSP_QBT_PASSWORD=${PW}
|
- GSP_QBT_PASSWORD=${PW}
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/seedbox/qbittorrent/config:/config
|
- /srv/docker/seedbox/qbittorrent/config:/config
|
||||||
- /media:/media
|
- /media:/media
|
||||||
depends_on:
|
depends_on:
|
||||||
- gluetun
|
- gluetun
|
||||||
@@ -83,7 +84,7 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
mem_limit: 4g
|
mem_limit: 4g
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/gluetun/config.toml:/gluetun/auth/config.toml:ro
|
- /srv/docker/gluetun/config.toml:/gluetun/auth/config.toml:ro
|
||||||
devices:
|
devices:
|
||||||
- /dev/net/tun:/dev/net/tun
|
- /dev/net/tun:/dev/net/tun
|
||||||
ports:
|
ports:
|
||||||
@@ -133,16 +134,16 @@ Open a terminal to generate the authentication key:
|
|||||||
sudo docker run --rm qmcgaw/gluetun genkey
|
sudo docker run --rm qmcgaw/gluetun genkey
|
||||||
```
|
```
|
||||||
|
|
||||||
Note the key, then create the `/docker/gluetun` folder:
|
Note the key, then create the `/srv/docker/gluetun` folder:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir /docker/gluetun
|
sudo mkdir /srv/docker/gluetun
|
||||||
```
|
```
|
||||||
|
|
||||||
Create the `config.toml` file:
|
Create the `config.toml` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/gluetun/config.toml
|
sudo nano /srv/docker/gluetun/config.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
Enter:
|
Enter:
|
||||||
@@ -272,7 +273,7 @@ Now create/edit `seedbox.subdomain.conf`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following config (check the port):
|
Paste the following config (check the port):
|
||||||
|
|||||||
@@ -23,21 +23,22 @@ We’ll start by deploying the stack and then proceed to configure each app and
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- jellyfin:
|
- docker:
|
||||||
- compose.yml
|
- jellyfin:
|
||||||
- .env
|
- compose.yml
|
||||||
- config/
|
- .env
|
||||||
- sonarr:
|
- config/
|
||||||
- config/
|
- sonarr:
|
||||||
- radarr:
|
- config/
|
||||||
- config/
|
- radarr:
|
||||||
- bazarr:
|
- config/
|
||||||
- config/
|
- bazarr:
|
||||||
- prowlarr:
|
- config/
|
||||||
- config/
|
- prowlarr:
|
||||||
- seerr:
|
- config/
|
||||||
- config/
|
- seerr:
|
||||||
|
- config/
|
||||||
- media:
|
- media:
|
||||||
- downloads/
|
- downloads/
|
||||||
- tvseries/
|
- tvseries/
|
||||||
@@ -66,7 +67,7 @@ services:
|
|||||||
- PGID=${PGID}
|
- PGID=${PGID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/jellyfin/config:/config
|
- /srv/docker/jellyfin/config:/config
|
||||||
- ${MEDIA_PATH}:/media
|
- ${MEDIA_PATH}:/media
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
devices:
|
devices:
|
||||||
@@ -82,7 +83,7 @@ services:
|
|||||||
- PGID=${PGID}
|
- PGID=${PGID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/sonarr/config:/config
|
- /srv/docker/sonarr/config:/config
|
||||||
- ${MEDIA_PATH}:/media
|
- ${MEDIA_PATH}:/media
|
||||||
ports:
|
ports:
|
||||||
- 8989:8989
|
- 8989:8989
|
||||||
@@ -96,7 +97,7 @@ services:
|
|||||||
- PGID=${PGID}
|
- PGID=${PGID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/radarr/config:/config
|
- /srv/docker/radarr/config:/config
|
||||||
- ${MEDIA_PATH}:/media
|
- ${MEDIA_PATH}:/media
|
||||||
ports:
|
ports:
|
||||||
- 7878:7878
|
- 7878:7878
|
||||||
@@ -110,7 +111,7 @@ services:
|
|||||||
- PGID=${PGID}
|
- PGID=${PGID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/prowlarr/data:/config
|
- /srv/docker/prowlarr/data:/config
|
||||||
ports:
|
ports:
|
||||||
- 9696:9696
|
- 9696:9696
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -122,7 +123,7 @@ services:
|
|||||||
- LOG_LEVEL=info
|
- LOG_LEVEL=info
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/seerr/config:/app/config
|
- /srv/docker/seerr/config:/app/config
|
||||||
ports:
|
ports:
|
||||||
- 5055:5055
|
- 5055:5055
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -136,7 +137,7 @@ services:
|
|||||||
- PGID=1000
|
- PGID=1000
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/bazarr/config:/config
|
- /srv/docker/bazarr/config:/config
|
||||||
- ${MEDIA_PATH}:/media
|
- ${MEDIA_PATH}:/media
|
||||||
ports:
|
ports:
|
||||||
- 6767:6767
|
- 6767:6767
|
||||||
@@ -173,10 +174,10 @@ MEDIA_PATH=
|
|||||||
|
|
||||||
::note
|
::note
|
||||||
|
|
||||||
Unlike the other containers here, Seerr's image doesn't use `PUID`/`PGID`; it always runs as UID `1000`. Make sure `/docker/seerr/config` is owned by that user, or Seerr won't be able to write to it:
|
Unlike the other containers here, Seerr's image doesn't use `PUID`/`PGID`; it always runs as UID `1000`. Make sure `/srv/docker/seerr/config` is owned by that user, or Seerr won't be able to write to it:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo chown -R 1000:1000 /docker/seerr/config
|
sudo chown -R 1000:1000 /srv/docker/seerr/config
|
||||||
```
|
```
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -434,7 +435,7 @@ Create and edit the file `films.subdomain.conf`:
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/films.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/films.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following:
|
Paste the following:
|
||||||
|
|||||||
@@ -16,11 +16,12 @@ description: Install Immich, a self-hosted alternative to Google Photos and iClo
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- immich:
|
- docker:
|
||||||
- library/
|
- immich:
|
||||||
- compose.yaml
|
- library/
|
||||||
- .env
|
- compose.yaml
|
||||||
|
- .env
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -100,7 +101,7 @@ In the SWAG folders, create a file named `immich.subdomain.conf`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/immich.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/immich.subdomain.conf
|
||||||
```
|
```
|
||||||
Then paste the following configuration:
|
Then paste the following configuration:
|
||||||
|
|
||||||
|
|||||||
@@ -20,12 +20,13 @@ We'll be using the Docker image maintained by **LinuxServer.io**
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- nextcloud:
|
- docker:
|
||||||
- config/
|
- nextcloud:
|
||||||
- data/
|
- config/
|
||||||
- compose.yaml
|
- data/
|
||||||
- .env
|
- compose.yaml
|
||||||
|
- .env
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -45,8 +46,8 @@ services:
|
|||||||
- PGID=${GUID}
|
- PGID=${GUID}
|
||||||
- TZ=Etc/UTC
|
- TZ=Etc/UTC
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/nextcloud/config:/config
|
- /srv/docker/nextcloud/config:/config
|
||||||
- /docker/nextcloud/data:/data
|
- /srv/docker/nextcloud/data:/data
|
||||||
ports:
|
ports:
|
||||||
- ${PORT}:443
|
- ${PORT}:443
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -54,7 +55,7 @@ services:
|
|||||||
|
|
||||||
::note{to="/general/networking/samba"}
|
::note{to="/general/networking/samba"}
|
||||||
|
|
||||||
If you’re using a NAS or network-shared drive via **Samba**, replace `/docker/nextcloud/data` with the path to your shared folder.
|
If you’re using a NAS or network-shared drive via **Samba**, replace `/srv/docker/nextcloud/data` with the path to your shared folder.
|
||||||
::
|
::
|
||||||
|
|
||||||
### Set your environment variables
|
### Set your environment variables
|
||||||
@@ -129,7 +130,7 @@ In Nextcloud’s files, edit the `config.php` file:
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/nextcloud/config/www/nextcloud/config/config.php
|
sudo nano /srv/docker/nextcloud/config/www/nextcloud/config/config.php
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following before the final `);`:
|
Paste the following before the final `);`:
|
||||||
@@ -157,7 +158,7 @@ Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ct
|
|||||||
In Swag’s folders, create the file `nextcloud.subdomain.conf`:
|
In Swag’s folders, create the file `nextcloud.subdomain.conf`:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/nextcloud.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/nextcloud.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following:
|
Paste the following:
|
||||||
|
|||||||
@@ -16,12 +16,13 @@ description: Install File Browser Quantum, a modernized fork of File Browser, to
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- filebrowser-quantum:
|
- docker:
|
||||||
- compose.yaml
|
- filebrowser-quantum:
|
||||||
- data:
|
- compose.yaml
|
||||||
- config.yaml
|
- data:
|
||||||
- filebrowser.sqlite
|
- config.yaml
|
||||||
|
- filebrowser.sqlite
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -31,13 +32,13 @@ tree:
|
|||||||
Create the data folder:
|
Create the data folder:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir -p /docker/filebrowser-quantum/data
|
sudo mkdir -p /srv/docker/filebrowser-quantum/data
|
||||||
```
|
```
|
||||||
|
|
||||||
Create the `config.yaml` file:
|
Create the `config.yaml` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/filebrowser-quantum/data/config.yaml
|
sudo nano /srv/docker/filebrowser-quantum/data/config.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following, adding one `sources` entry per folder you want to browse:
|
Paste the following, adding one `sources` entry per folder you want to browse:
|
||||||
@@ -46,7 +47,7 @@ Paste the following, adding one `sources` entry per folder you want to browse:
|
|||||||
server:
|
server:
|
||||||
cacheDir: /home/filebrowser/data/tmp
|
cacheDir: /home/filebrowser/data/tmp
|
||||||
sources:
|
sources:
|
||||||
- path: /docker
|
- path: /srv/docker
|
||||||
config:
|
config:
|
||||||
defaultEnabled: true
|
defaultEnabled: true
|
||||||
- path: /media
|
- path: /media
|
||||||
@@ -68,16 +69,16 @@ services:
|
|||||||
image: gtstef/filebrowser:beta
|
image: gtstef/filebrowser:beta
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
volumes:
|
volumes:
|
||||||
- /docker:/docker
|
- /srv/docker:/srv/docker
|
||||||
- /media:/media
|
- /media:/media
|
||||||
- /docker/filebrowser-quantum/data:/home/filebrowser/data
|
- /srv/docker/filebrowser-quantum/data:/home/filebrowser/data
|
||||||
ports:
|
ports:
|
||||||
- 8020:80
|
- 8020:80
|
||||||
```
|
```
|
||||||
|
|
||||||
::note
|
::note
|
||||||
|
|
||||||
Mount every folder you listed under `sources` in `config.yaml` at the same path inside the container (here `/docker` and `/media`), otherwise File Browser Quantum won't find them.
|
Mount every folder you listed under `sources` in `config.yaml` at the same path inside the container (here `/srv/docker` and `/media`), otherwise File Browser Quantum won't find them.
|
||||||
::
|
::
|
||||||
|
|
||||||
::tip{icon=""}
|
::tip{icon=""}
|
||||||
@@ -151,7 +152,7 @@ Restart the stack by clicking "deploy" and wait for SWAG to fully initialize.
|
|||||||
In the Swag folders, create the file `fbq.subdomain.conf`.
|
In the Swag folders, create the file `fbq.subdomain.conf`.
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/fbq.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/fbq.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
And paste the following configuration:
|
And paste the following configuration:
|
||||||
|
|||||||
@@ -27,9 +27,9 @@ services:
|
|||||||
ports:
|
ports:
|
||||||
- 3600:3000
|
- 3600:3000
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/pingvin/data:/opt/app/backend/data
|
- /srv/docker/pingvin/data:/opt/app/backend/data
|
||||||
- /docker/pingvin/data/img:/opt/app/frontend/public/img
|
- /srv/docker/pingvin/data/img:/opt/app/frontend/public/img
|
||||||
- /docker/pingvin/uploads:/opt/app/backend/uploads # path to the folder where you want to store files uploaded to pingvin. Change to your preference.
|
- /srv/docker/pingvin/uploads:/opt/app/backend/uploads # path to the folder where you want to store files uploaded to pingvin. Change to your preference.
|
||||||
depends_on:
|
depends_on:
|
||||||
clamav:
|
clamav:
|
||||||
condition: service_healthy
|
condition: service_healthy
|
||||||
@@ -121,7 +121,7 @@ In the Swag folders, create the `pingvin.subdomain.conf` file.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/pingvin.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/pingvin.subdomain.conf
|
||||||
```
|
```
|
||||||
Paste the configuration below:
|
Paste the configuration below:
|
||||||
|
|
||||||
|
|||||||
@@ -29,11 +29,12 @@ For this setup, we’ll use the **image maintained by LinuxServer.io**.
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- code-server:
|
- docker:
|
||||||
- compose.yaml
|
- code-server:
|
||||||
- .env
|
- compose.yaml
|
||||||
- config/
|
- .env
|
||||||
|
- config/
|
||||||
- (any folder you want to mount in VS Code)/
|
- (any folder you want to mount in VS Code)/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
@@ -55,7 +56,7 @@ services:
|
|||||||
- TZ=Etc/UTC
|
- TZ=Etc/UTC
|
||||||
- HASHED_PASSWORD=${PW}
|
- HASHED_PASSWORD=${PW}
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/code-server/config:/config
|
- /srv/docker/code-server/config:/config
|
||||||
# add folders to mount in VS Code
|
# add folders to mount in VS Code
|
||||||
# - /path/to/folder:/folder
|
# - /path/to/folder:/folder
|
||||||
ports:
|
ports:
|
||||||
@@ -172,7 +173,7 @@ Inside the Swag config folders, create the file `code.subdomain.conf`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/code.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/code.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following configuration:
|
Paste the following configuration:
|
||||||
|
|||||||
@@ -17,11 +17,12 @@ description: Install Forgejo, a lightweight self-hosted Git service to manage yo
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- forgejo:
|
- docker:
|
||||||
- compose.yaml
|
- forgejo:
|
||||||
- .env
|
- compose.yaml
|
||||||
- data/
|
- .env
|
||||||
|
- data/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -118,7 +119,7 @@ Inside the Swag folders, create the file `forgejo.subdomain.conf`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/forgejo.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/forgejo.subdomain.conf
|
||||||
```
|
```
|
||||||
Paste the configuration below:
|
Paste the configuration below:
|
||||||
|
|
||||||
@@ -186,7 +187,7 @@ Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ct
|
|||||||
Now open the `app.ini` file from the container's file system:
|
Now open the `app.ini` file from the container's file system:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/forgejo/data/gitea/conf/app.ini
|
sudo nano /srv/docker/forgejo/data/gitea/conf/app.ini
|
||||||
```
|
```
|
||||||
|
|
||||||
Then modify the server section with your domain information:
|
Then modify the server section with your domain information:
|
||||||
|
|||||||
@@ -102,7 +102,7 @@ Inside the Swag folders, create the file `tools.subdomain.conf`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/tools.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/tools.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the configuration below:
|
Paste the configuration below:
|
||||||
|
|||||||
@@ -35,18 +35,19 @@ This is how ads and malicious domains are blocked: Adguard blocks only the bad d
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- adguard:
|
- docker:
|
||||||
- confdir/
|
- adguard:
|
||||||
- workdir/
|
- confdir/
|
||||||
- compose.yaml
|
- workdir/
|
||||||
- .env
|
- compose.yaml
|
||||||
|
- .env
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
::note
|
::note
|
||||||
|
|
||||||
We will also mount the `/docker/swag/config/etc/letsencrypt` folder to access Swag's SSL certificate.
|
We will also mount the `/srv/docker/swag/config/etc/letsencrypt` folder to access Swag's SSL certificate.
|
||||||
::
|
::
|
||||||
|
|
||||||
::steps{level="3"}
|
::steps{level="3"}
|
||||||
@@ -70,9 +71,9 @@ services:
|
|||||||
- 853:853/tcp
|
- 853:853/tcp
|
||||||
- 3000:3000/tcp
|
- 3000:3000/tcp
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/adguardhome/confdir:/opt/adguardhome/conf
|
- /srv/docker/adguardhome/confdir:/opt/adguardhome/conf
|
||||||
- /docker/adguardhome/workdir:/opt/adguardhome/work
|
- /srv/docker/adguardhome/workdir:/opt/adguardhome/work
|
||||||
- /docker/swag/config/etc/letsencrypt:/swag-ssl:ro
|
- /srv/docker/swag/config/etc/letsencrypt:/swag-ssl:ro
|
||||||
```
|
```
|
||||||
|
|
||||||
::tip{icon=""}
|
::tip{icon=""}
|
||||||
@@ -149,7 +150,7 @@ You can use **File Browser Quantum** to browse and edit files instead of using t
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/adguard.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/adguard.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the configuration below:
|
Paste the configuration below:
|
||||||
|
|||||||
@@ -18,11 +18,12 @@ Vaultwarden is a fork of [Bitwarden](https://bitwarden.com/fr-fr/help/).
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- vaultwarden:
|
- docker:
|
||||||
- data/
|
- vaultwarden:
|
||||||
- compose.yaml
|
- data/
|
||||||
- .env
|
- compose.yaml
|
||||||
|
- .env
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -152,7 +153,7 @@ In SWAG's config folder, create the file `vault.subdomain.conf`:
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/vault.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/vault.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
And paste the following configuration:
|
And paste the following configuration:
|
||||||
@@ -267,7 +268,7 @@ https://vault.yourdomain.com/identity/connect/oidc-signin
|
|||||||
Edit Vaultwarden's `.env` file:
|
Edit Vaultwarden's `.env` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/vaultwarden/.env
|
sudo nano /srv/docker/vaultwarden/.env
|
||||||
```
|
```
|
||||||
|
|
||||||
Add the following:
|
Add the following:
|
||||||
|
|||||||
@@ -39,14 +39,15 @@ Both modes can be configured on a per-application basis.
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- authentik:
|
- docker:
|
||||||
- .env
|
- authentik:
|
||||||
- compose.yml
|
- .env
|
||||||
- media/
|
- compose.yml
|
||||||
- certs/
|
- media/
|
||||||
- custom-template/
|
- certs/
|
||||||
- ssh/
|
- custom-template/
|
||||||
|
- ssh/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -54,12 +55,12 @@ tree:
|
|||||||
### Create the folders
|
### Create the folders
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir -p /docker/authentik/media /docker/authentik/certs /docker/authentik/custom-template /docker/authentik/ssh
|
sudo mkdir -p /srv/docker/authentik/media /srv/docker/authentik/certs /srv/docker/authentik/custom-template /srv/docker/authentik/ssh
|
||||||
```
|
```
|
||||||
|
|
||||||
### Generate secrets
|
### Generate secrets
|
||||||
|
|
||||||
Navigate to the `authentik` folder via `cd /docker/authentik` and generate a password and secret key to include in the `.env` file:
|
Navigate to the `authentik` folder via `cd /srv/docker/authentik` and generate a password and secret key to include in the `.env` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo echo "PG_PASS=$(openssl rand 36 | base64)" >> .env
|
sudo echo "PG_PASS=$(openssl rand 36 | base64)" >> .env
|
||||||
@@ -70,7 +71,7 @@ sudo echo "AUTHENTIK_SECRET_KEY=$(openssl rand 60 | base64)" >> .env
|
|||||||
|
|
||||||
To generate the keys, we created the folders ahead of deployment using Dockge. Dockge will prevent you from creating a stack with the same name in these folders unless a `compose.yml` file exists. So, create an empty `compose.yml` so it appears as an inactive stack:
|
To generate the keys, we created the folders ahead of deployment using Dockge. Dockge will prevent you from creating a stack with the same name in these folders unless a `compose.yml` file exists. So, create an empty `compose.yml` so it appears as an inactive stack:
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/authentik/compose.yml
|
sudo nano /srv/docker/authentik/compose.yml
|
||||||
```
|
```
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -216,7 +217,7 @@ You can use **File Browser Quantum** to navigate and edit files instead of using
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/authentik-server.conf
|
sudo nano /srv/docker/swag/config/nginx/authentik-server.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Verify that the following variables are set correctly:
|
Verify that the following variables are set correctly:
|
||||||
@@ -233,7 +234,7 @@ If not, make the necessary changes, then save with :kbd{value="Ctrl+O"}, :kbd{va
|
|||||||
Create the `auth.subdomain.conf` file:
|
Create the `auth.subdomain.conf` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/auth.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/auth.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following configuration:
|
Paste the following configuration:
|
||||||
@@ -356,7 +357,7 @@ Why do this when Dockge already has authentication? Because Dockge uses weak HTT
|
|||||||
Edit the file `dockge.mydomain.com`:
|
Edit the file `dockge.mydomain.com`:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/dockge.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Uncomment the two lines `#include /config/nginx/authentik-server.conf;`
|
Uncomment the two lines `#include /config/nginx/authentik-server.conf;`
|
||||||
@@ -437,10 +438,10 @@ We assume you’ve already installed [Docker](/serveex/core/docker) and [SWAG](/
|
|||||||
|
|
||||||
On your remote machine, use [Dockge](/serveex/core/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs) to create a stack named `authentik-outpost`.
|
On your remote machine, use [Dockge](/serveex/core/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs) to create a stack named `authentik-outpost`.
|
||||||
|
|
||||||
If you haven’t installed [Dockge](/serveex/core/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs), create a folder `/docker/authentik-outpost`, or directly via command line:
|
If you haven’t installed [Dockge](/serveex/core/docker/#installer-dockge-pour-gérer-et-déployer-les-conteneurs), create a folder `/srv/docker/authentik-outpost`, or directly via command line:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir -P /docker/authentik-outpost
|
sudo mkdir -P /srv/docker/authentik-outpost
|
||||||
```
|
```
|
||||||
|
|
||||||
::tip{icon="" to="/serveex/files/file-browser-quantum"}
|
::tip{icon="" to="/serveex/files/file-browser-quantum"}
|
||||||
@@ -455,7 +456,7 @@ Create the `compose.yaml` file or paste the configuration directly into Dockge i
|
|||||||
Via command line:
|
Via command line:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/authentik-outpost/compose.yaml
|
sudo nano /srv/docker/authentik-outpost/compose.yaml
|
||||||
```
|
```
|
||||||
Paste the following configuration, updating the version in `{AUTHENTIK_TAG:proxy:2024.2.3}`{lang=properties} to match your Authentik server version.
|
Paste the following configuration, updating the version in `{AUTHENTIK_TAG:proxy:2024.2.3}`{lang=properties} to match your Authentik server version.
|
||||||
|
|
||||||
@@ -485,7 +486,7 @@ services:
|
|||||||
Go to the SWAG stack on the remote machine (or edit directly using Dockge) and add the authentik-outpost network in the configuration file like this (see `networks` section):
|
Go to the SWAG stack on the remote machine (or edit directly using Dockge) and add the authentik-outpost network in the configuration file like this (see `networks` section):
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/compose.yaml
|
sudo nano /srv/docker/swag/compose.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
```yaml [compose.yaml]
|
```yaml [compose.yaml]
|
||||||
@@ -519,7 +520,7 @@ If using [Dockge](/serveex/core/docker/#installer-dockge-pour-gérer-et-déploye
|
|||||||
Otherwise, via terminal:
|
Otherwise, via terminal:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
cd /docker/swag/
|
cd /srv/docker/swag/
|
||||||
sudo docker compose up -d
|
sudo docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -530,7 +531,7 @@ Create (or fill using Dockge) the `.env` file in the `authentik-outpost` directo
|
|||||||
Via command line:
|
Via command line:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/authentik-outpost/.env
|
sudo nano /srv/docker/authentik-outpost/.env
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following configuration:
|
Paste the following configuration:
|
||||||
@@ -556,7 +557,7 @@ If using Dockge, deploy the stack.
|
|||||||
Otherwise, via terminal:
|
Otherwise, via terminal:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
cd /docker/authentik-outpost/
|
cd /srv/docker/authentik-outpost/
|
||||||
sudo docker compose up -d
|
sudo docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -569,7 +570,7 @@ Now, let’s configure SWAG.
|
|||||||
Open the `authentik-server.conf` file:
|
Open the `authentik-server.conf` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/authentik-server.conf
|
sudo nano /srv/docker/swag/config/nginx/authentik-server.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
In the file, change `authentik-server` to `authentik-outpost` as shown:
|
In the file, change `authentik-server` to `authentik-outpost` as shown:
|
||||||
|
|||||||
@@ -29,11 +29,12 @@ Arcane needs access to the Docker socket to manage containers, which is effectiv
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- arcane:
|
- docker:
|
||||||
- compose.yaml
|
- arcane:
|
||||||
- .env
|
- compose.yaml
|
||||||
- data/
|
- .env
|
||||||
|
- data/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -61,7 +62,7 @@ services:
|
|||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/arcane/data:/app/data
|
- /srv/docker/arcane/data:/app/data
|
||||||
networks:
|
networks:
|
||||||
- arcane-internal
|
- arcane-internal
|
||||||
ports:
|
ports:
|
||||||
@@ -200,7 +201,7 @@ In the Swag folders, create the file `arcane.subdomain.conf`:
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/arcane.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/arcane.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following configuration:
|
Paste the following configuration:
|
||||||
@@ -275,7 +276,7 @@ services:
|
|||||||
- MANAGER_API_URL=http://10.8.0.3:3552
|
- MANAGER_API_URL=http://10.8.0.3:3552
|
||||||
volumes:
|
volumes:
|
||||||
- /var/run/docker.sock:/var/run/docker.sock
|
- /var/run/docker.sock:/var/run/docker.sock
|
||||||
- /docker/arcane-agent/data:/app/data
|
- /srv/docker/arcane-agent/data:/app/data
|
||||||
```
|
```
|
||||||
|
|
||||||
::note
|
::note
|
||||||
|
|||||||
@@ -60,12 +60,13 @@ __Warning:__ This guide uses version `14` of **wg-easy**. Version `15` introduce
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- wg-easy:
|
- docker:
|
||||||
- config:
|
- wg-easy:
|
||||||
- etc_wireguard/
|
- config:
|
||||||
- compose.yaml
|
- etc_wireguard/
|
||||||
- .env
|
- compose.yaml
|
||||||
|
- .env
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -98,7 +99,7 @@ services:
|
|||||||
image: ghcr.io/wg-easy/wg-easy:14
|
image: ghcr.io/wg-easy/wg-easy:14
|
||||||
container_name: wg-easy
|
container_name: wg-easy
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/wg_easy/config/etc_wireguard:/etc/wireguard
|
- /srv/docker/wg_easy/config/etc_wireguard:/etc/wireguard
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
cap_add:
|
cap_add:
|
||||||
- NET_ADMIN
|
- NET_ADMIN
|
||||||
@@ -175,25 +176,26 @@ Assumes the client is a Linux server with Docker installed
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- wireguard:
|
- docker:
|
||||||
- config:
|
- wireguard:
|
||||||
- wg_confs/
|
- config:
|
||||||
- compose.yaml
|
- wg_confs/
|
||||||
|
- compose.yaml
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
::steps{level="3"}
|
::steps{level="3"}
|
||||||
### Create the config folder
|
### Create the config folder
|
||||||
|
|
||||||
Create the folder `/docker/wireguard/config/wg_confs`:
|
Create the folder `/srv/docker/wireguard/config/wg_confs`:
|
||||||
|
|
||||||
::tip{icon="" to="/serveex/files/file-browser-quantum"}
|
::tip{icon="" to="/serveex/files/file-browser-quantum"}
|
||||||
✨ __Tip:__ Use **File Browser** to browse and edit files without terminal
|
✨ __Tip:__ Use **File Browser** to browse and edit files without terminal
|
||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir -p /docker/wireguard/config/wg_confs
|
sudo mkdir -p /srv/docker/wireguard/config/wg_confs
|
||||||
```
|
```
|
||||||
|
|
||||||
### Copy the configuration file
|
### Copy the configuration file
|
||||||
@@ -204,16 +206,16 @@ Copy the `wg0.conf` file downloaded earlier:
|
|||||||
✨ __Tip:__ Easiest way is to transfer the file via SFTP to `/home/youruser`, then move it:
|
✨ __Tip:__ Easiest way is to transfer the file via SFTP to `/home/youruser`, then move it:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo cp ~/wg0.conf /docker/wireguard/config/wg_confs
|
sudo cp ~/wg0.conf /srv/docker/wireguard/config/wg_confs
|
||||||
```
|
```
|
||||||
::
|
::
|
||||||
|
|
||||||
### Deploy the container
|
### Deploy the container
|
||||||
|
|
||||||
Create `compose.yaml` in `/docker/wireguard`:
|
Create `compose.yaml` in `/srv/docker/wireguard`:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/wireguard/compose.yaml
|
sudo nano /srv/docker/wireguard/compose.yaml
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste:
|
Paste:
|
||||||
@@ -231,7 +233,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/wireguard/config:/config
|
- /srv/docker/wireguard/config:/config
|
||||||
- /lib/modules:/lib/modules #optional
|
- /lib/modules:/lib/modules #optional
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
```
|
```
|
||||||
@@ -241,7 +243,7 @@ Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ct
|
|||||||
Start the container:
|
Start the container:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
cd /docker/wireguard
|
cd /srv/docker/wireguard
|
||||||
sudo docker compose up -d
|
sudo docker compose up -d
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -28,8 +28,8 @@ services:
|
|||||||
filebrowser:
|
filebrowser:
|
||||||
container_name: filebrowser
|
container_name: filebrowser
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/filebrowser/config:/config/
|
- /srv/docker/filebrowser/config:/config/
|
||||||
- /path/to/your/folders:/yourfolders #add your folders to browse as /docker:/docker for exemple
|
- /path/to/your/folders:/yourfolders #add your folders to browse as /srv/docker:/srv/docker for exemple
|
||||||
ports:
|
ports:
|
||||||
- 8010:80
|
- 8010:80
|
||||||
image: filebrowser/filebrowser:s6
|
image: filebrowser/filebrowser:s6
|
||||||
@@ -106,7 +106,7 @@ Restart the stack by clicking "deploy" and wait for SWAG to fully initialize.
|
|||||||
In the Swag folders, create the file `files.subdomain.conf`.
|
In the Swag folders, create the file `files.subdomain.conf`.
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/files.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/files.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
And paste the following configuration:
|
And paste the following configuration:
|
||||||
|
|||||||
@@ -33,14 +33,15 @@ You’ll need to create a *Plex.tv* account. You don’t need to expose your Ple
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- plex:
|
- docker:
|
||||||
- compose.yml
|
- plex:
|
||||||
- .env
|
- compose.yml
|
||||||
- config/
|
- .env
|
||||||
- transcode/
|
- config/
|
||||||
- tautulli:
|
- transcode/
|
||||||
- config/
|
- tautulli:
|
||||||
|
- config/
|
||||||
- media:
|
- media:
|
||||||
- tvseries/
|
- tvseries/
|
||||||
- movies/
|
- movies/
|
||||||
@@ -75,8 +76,8 @@ services:
|
|||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
- VERSION=docker
|
- VERSION=docker
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/plex/config:/config
|
- /srv/docker/plex/config:/config
|
||||||
- /docker/plex/transcode:/transcode
|
- /srv/docker/plex/transcode:/transcode
|
||||||
- /media:/media
|
- /media:/media
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
mem_limit: 4096m
|
mem_limit: 4096m
|
||||||
@@ -92,7 +93,7 @@ services:
|
|||||||
- PGID=${GUID}
|
- PGID=${GUID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/tautulli/config:/config
|
- /srv/docker/tautulli/config:/config
|
||||||
ports:
|
ports:
|
||||||
- 8181:8181
|
- 8181:8181
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -220,8 +221,8 @@ Copy and rename the file `tautulli.subdomain.conf.sample` to `tautulli.subdomain
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo cp /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf.sample /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
|
sudo cp /srv/docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf.sample /srv/docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/tautulli.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Ensure the configuration matches the following, and edit it if needed:
|
Ensure the configuration matches the following, and edit it if needed:
|
||||||
|
|||||||
@@ -31,13 +31,14 @@ Here’s the system we’ll set up:
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- seedbox:
|
- docker:
|
||||||
- qbittorrent:
|
- seedbox:
|
||||||
- config/
|
- qbittorrent:
|
||||||
- gluetun/
|
- config/
|
||||||
- compose.yaml
|
- gluetun/
|
||||||
- .env
|
- compose.yaml
|
||||||
|
- .env
|
||||||
- "media # linked to Plex and Qbittorrent":
|
- "media # linked to Plex and Qbittorrent":
|
||||||
- "downloads/ # generic downloads, selected in settings"
|
- "downloads/ # generic downloads, selected in settings"
|
||||||
- "movies/ # used for downloading movies"
|
- "movies/ # used for downloading movies"
|
||||||
@@ -77,7 +78,7 @@ services:
|
|||||||
- GSP_QBT_USERNAME=${ID}
|
- GSP_QBT_USERNAME=${ID}
|
||||||
- GSP_QBT_PASSWORD=${PW}
|
- GSP_QBT_PASSWORD=${PW}
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/seedbox/qbittorrent/config:/config
|
- /srv/docker/seedbox/qbittorrent/config:/config
|
||||||
- /media:/media
|
- /media:/media
|
||||||
depends_on:
|
depends_on:
|
||||||
- gluetun
|
- gluetun
|
||||||
@@ -88,7 +89,7 @@ services:
|
|||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
mem_limit: 4g
|
mem_limit: 4g
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/gluetun/config.toml:/gluetun/auth/config.toml:ro
|
- /srv/docker/gluetun/config.toml:/gluetun/auth/config.toml:ro
|
||||||
devices:
|
devices:
|
||||||
- /dev/net/tun:/dev/net/tun
|
- /dev/net/tun:/dev/net/tun
|
||||||
ports:
|
ports:
|
||||||
@@ -138,16 +139,16 @@ Open a terminal to generate the authentication key:
|
|||||||
sudo docker run --rm qmcgaw/gluetun genkey
|
sudo docker run --rm qmcgaw/gluetun genkey
|
||||||
```
|
```
|
||||||
|
|
||||||
Note the key, then create the `/docker/gluetun` folder:
|
Note the key, then create the `/srv/docker/gluetun` folder:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo mkdir /docker/gluetun
|
sudo mkdir /srv/docker/gluetun
|
||||||
```
|
```
|
||||||
|
|
||||||
Create the `config.toml` file:
|
Create the `config.toml` file:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/gluetun/config.toml
|
sudo nano /srv/docker/gluetun/config.toml
|
||||||
```
|
```
|
||||||
|
|
||||||
Enter:
|
Enter:
|
||||||
@@ -273,7 +274,7 @@ Now create/edit `seedbox.subdomain.conf`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/seedbox.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following config (check the port):
|
Paste the following config (check the port):
|
||||||
|
|||||||
@@ -28,23 +28,24 @@ We’ll start by deploying the stack and then proceed to configure each app and
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- plex:
|
- docker:
|
||||||
- compose.yml
|
- plex:
|
||||||
- config/
|
- compose.yml
|
||||||
- transcode/
|
- config/
|
||||||
- tautulli:
|
- transcode/
|
||||||
- config/
|
- tautulli:
|
||||||
- sonarr:
|
- config/
|
||||||
- config/
|
- sonarr:
|
||||||
- radarr:
|
- config/
|
||||||
- config/
|
- radarr:
|
||||||
- bazarr:
|
- config/
|
||||||
- config/
|
- bazarr:
|
||||||
- prowlarr:
|
- config/
|
||||||
- config/
|
- prowlarr:
|
||||||
- overseerr:
|
- config/
|
||||||
- config/
|
- overseerr:
|
||||||
|
- config/
|
||||||
- media:
|
- media:
|
||||||
- downloads/
|
- downloads/
|
||||||
- tvseries/
|
- tvseries/
|
||||||
@@ -78,8 +79,8 @@ services:
|
|||||||
- VERSION=docker
|
- VERSION=docker
|
||||||
- PLEX_CLAIM= #optional
|
- PLEX_CLAIM= #optional
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/plex/config:/config
|
- /srv/docker/plex/config:/config
|
||||||
- /docker/plex/transcode:/transcode #optional
|
- /srv/docker/plex/transcode:/transcode #optional
|
||||||
- ${MEDIA_PATH}:/media
|
- ${MEDIA_PATH}:/media
|
||||||
labels:
|
labels:
|
||||||
- com.centurylinklabs.watchtower.enable=true
|
- com.centurylinklabs.watchtower.enable=true
|
||||||
@@ -95,7 +96,7 @@ services:
|
|||||||
environment:
|
environment:
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/tautulli/config:/config
|
- /srv/docker/tautulli/config:/config
|
||||||
ports:
|
ports:
|
||||||
- 8181:8181
|
- 8181:8181
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -108,7 +109,7 @@ services:
|
|||||||
- PGID=${PGID}
|
- PGID=${PGID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/sonarr/config:/config
|
- /srv/docker/sonarr/config:/config
|
||||||
- ${MEDIA_PATH}:/media
|
- ${MEDIA_PATH}:/media
|
||||||
ports:
|
ports:
|
||||||
- 8989:8989
|
- 8989:8989
|
||||||
@@ -122,7 +123,7 @@ services:
|
|||||||
- PGID=${PGID}
|
- PGID=${PGID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/radarr/config:/config
|
- /srv/docker/radarr/config:/config
|
||||||
- ${MEDIA_PATH}:/media
|
- ${MEDIA_PATH}:/media
|
||||||
ports:
|
ports:
|
||||||
- 7878:7878
|
- 7878:7878
|
||||||
@@ -136,7 +137,7 @@ services:
|
|||||||
- PGID=${PGID}
|
- PGID=${PGID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/prowlarr/data:/config
|
- /srv/docker/prowlarr/data:/config
|
||||||
ports:
|
ports:
|
||||||
- 9696:9696
|
- 9696:9696
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -152,7 +153,7 @@ services:
|
|||||||
- PGID=${PGID}
|
- PGID=${PGID}
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/overseerr/config:/config
|
- /srv/docker/overseerr/config:/config
|
||||||
ports:
|
ports:
|
||||||
- 5055:5055
|
- 5055:5055
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
@@ -166,7 +167,7 @@ services:
|
|||||||
- PGID=1000
|
- PGID=1000
|
||||||
- TZ=Europe/Paris
|
- TZ=Europe/Paris
|
||||||
volumes:
|
volumes:
|
||||||
- /docker/bazarr/config:/config
|
- /srv/docker/bazarr/config:/config
|
||||||
- ${MEDIA_PATH}:/media
|
- ${MEDIA_PATH}:/media
|
||||||
ports:
|
ports:
|
||||||
- 6767:6767
|
- 6767:6767
|
||||||
@@ -455,7 +456,7 @@ Create and edit the file `films.subdomain.conf`:
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/films.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/films.subdomain.conf
|
||||||
```
|
```
|
||||||
|
|
||||||
Paste the following:
|
Paste the following:
|
||||||
|
|||||||
@@ -21,9 +21,10 @@ This is an alternative to **Forgejo**, the community-run fork created after Gite
|
|||||||
---
|
---
|
||||||
tree:
|
tree:
|
||||||
/:
|
/:
|
||||||
- docker:
|
- srv:
|
||||||
- gitea:
|
- docker:
|
||||||
- data/
|
- gitea:
|
||||||
|
- data/
|
||||||
---
|
---
|
||||||
::
|
::
|
||||||
|
|
||||||
@@ -120,7 +121,7 @@ Inside the Swag folders, create the file `gitea.subdomain.conf`.
|
|||||||
::
|
::
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/swag/config/nginx/proxy-confs/gitea.subdomain.conf
|
sudo nano /srv/docker/swag/config/nginx/proxy-confs/gitea.subdomain.conf
|
||||||
```
|
```
|
||||||
Paste the configuration below:
|
Paste the configuration below:
|
||||||
|
|
||||||
@@ -188,7 +189,7 @@ Press :kbd{value="Ctrl+O"}, then :kbd{value="Enter"} to save, and :kbd{value="Ct
|
|||||||
Now open the `app.ini` file from the container's file system:
|
Now open the `app.ini` file from the container's file system:
|
||||||
|
|
||||||
```bash [Terminal]
|
```bash [Terminal]
|
||||||
sudo nano /docker/gitea/data/gitea/conf/app.ini
|
sudo nano /srv/docker/gitea/data/gitea/conf/app.ini
|
||||||
```
|
```
|
||||||
|
|
||||||
Then modify the server section with your domain information:
|
Then modify the server section with your domain information:
|
||||||
|
|||||||
Binary file not shown.
|
After Width: | Height: | Size: 490 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 171 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 760 KiB |
Reference in New Issue
Block a user