Files
home_server/README.md
T
2024-02-03 10:55:57 +00:00

342 lines
8.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
## Directories in /srv
```bash
➜ /srv ls -la
total 64
drwxr-xr-x 16 null null 4096 Jul 15 06:23 .
drwxr-xr-x 26 root root 4096 Jun 24 06:11 ..
drwxr-xr-x 4 root root 4096 Dec 22 2020 convos
drwxrwxr-x 2 null null 4096 Jul 15 06:23 file_browser
drwxr-xr-x 5 root root 4096 Aug 8 2020 gitlab
drwxrwxr-x 3 root root 4096 Aug 7 2020 gitlab-runner
drwxrwxr-x 2 999 root 4096 Jun 10 11:33 hastebin
drwxrwxr-x 4 root root 4096 Aug 7 2020 jackett
drwxr-xr-x 3 root root 4096 Jan 7 2021 jellyfin
drwxrwxr-x 4 root root 4096 Aug 7 2020 mongodata
drwxr-xr-x 8 root root 4096 Aug 9 2020 nextcloud
drwxrwxr-x 4 root root 4096 Aug 7 2020 sonarr
drwx------ 4 null null 4096 May 8 19:30 syncthing
drwxrwxr-x 3 null null 4096 Oct 1 2020 traefik
drwxrwxr-x 3 null null 4096 Jan 28 12:25 xbs
drwxrwxr-x 5 null null 4096 Aug 7 2020 znc
```
OR tree:
```sh
.
├── cube
│   └── schema
├── dim
├── emby
│   ├── cache
│   ├── config
│   ├── data
│   ├── logs
│   ├── metadata
│   ├── plugins
│   ├── root
│   └── transcoding-temp
├── emu
│   ├── config
│   └── data
├── file_browser
├── ftp
├── gitea
│   ├── git
│   ├── gitea
│   └── ssh
├── gitlab
│   ├── config
│   ├── data
│   └── logs
├── gitlab-runner
├── http
├── jellyfin
│   └── config
├── kuma
│   ├── kuma.db
│   ├── kuma.db.bak0
│   ├── kuma.db-shm.bak0
│   ├── kuma.db-wal.bak0
│   └── upload
├── mastodon
│   ├── postgres14
│   ├── redis
│   ├── sidekiq
│   └── web
├── nextcloud
│   ├── apps
│   ├── config
│   ├── data
│   └── database
├── plausible-clickhouse
│   ├── clickhouse-config.xml
│   ├── clickhouse-user-config.xml
│   └── event-data
├── plausible-db-data [error opening dir]
├── plausible-geoip
├── plex
├── portainer
│   └── portainer-data
├── syncthing
│   ├── cert.pem
│   ├── config.xml
│   ├── config.xml.v0
│   ├── csrftokens.txt
│   ├── https-cert.pem
│   ├── https-key.pem
│   ├── index-v0.14.0.db
│   ├── key.pem
│   └── Sync
├── tmm
├── traefik
├── vaultwarden_data
│   ├── attachments
│   ├── db.sqlite3
│   ├── db.sqlite3-shm
│   ├── db.sqlite3-wal
│   ├── icon_cache
│   ├── rsa_key.pem
│   ├── rsa_key.pub.pem
│   ├── sends
│   ├── tmp
│   └── vaultwarden.log
├── vaultwarden_data_backup [error opening dir]
├── youtube_dl
│   ├── appdata
│   ├── db
│   └── users
└── znc
├── configs
├── moddata
├── users
└── znc.pem
```
Create the `traefik` network
```sh
docker network create traefik
```
## Docker Swarm
```sh
docker swarm init
```
## Mount NFS NAS Share
We need the `nfs-utils` package installed.
```sh
sudo mount -t nfs -o nfsvers=4 192.168.1.110:/media /WHERE/TO/MOUNT
sudo mount -t nfs -v 192.168.1.110:/media /home/knast/shares/disk1
```
if mounting on host, add to `fstab`
```sh
192.168.1.110:/media /home/null/shares/disk1 nfs rw,auto,vers=3,nofail,noatime,nolock,timeo=14 0 0
```
Or create a docker volume for the nfs mount that can then be accessed in compose file:
```sh
docker volume create --driver local --opt type=nfs --opt o=addr=192.168.1.110,rw,vers=4 --opt device=:/media --name nfs_data
```
The volume can then be mounted in the compose file in the following way:
```yml
version: "3"
services:
web-server:
image: nginx:latest
ports:
- 1212:80
volumes:
- nfs_data:/usr/share/nginx/html
volumes:
nfs_data:
external: true
networks:
traefik:
external: true
### Firewall
```sh
sudo ufw allow 80,443,22,8096,8097,8384,3040,51820,51821,21027,32400,2222,8888,4444,22000/tcp
sudo ufw allow 80,443,22,8096,8097,8384,3040,51820,51821,21027,32400,2222,8888,4444,22000/udp
```
```
## Fstab
using the `blkid` command to mount an external drive in fstab to use for restic backups
```sh
# /etc/fstab: static file system information.
UUID=6fb3bc60-e984-43ce-a688-151b49f558e0 /home/null/shares/disk2 auto defaults,nofail,x-systemd.automount 0 2
```
# Gitlab
After adding the domain name to the docker-compose.yml and the gitlab configuration:
``` yaml
hostname: 'gitlab.knast.cc'
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'https://gitlab.knast.cc'
```
We also need to please the dark lords of reverse proxying by adding the following lines to the gitlab.rb configuration:
```bash
nginx['listen_port'] = 80
nginx['listen_https'] = false
```
## Nextcloud
edit the nextcloud config.php to use the https protocol
```sh
nano /srv/nextcloud/config/config.php
```
```sh
We also use traefik and docker. I have added the following traefik label in our docker-compose.yml:
```yml
- "traefik.http.middlewares.nc-header.headers.customRequestHeaders.X-Forwarded-Proto=https"
```
And in the config.php, Ive also added some values regarding reverse proxies:
'forwarded_for_headers' =>
array (
1 => 'HTTP_X_FORWARDED',
2 => 'HTTP_FORWARDED_FOR',
3 => 'HTTP_FORWARDED',
0 => 'HTTP_X_FORWARDED_FOR',
),
'trusted_proxies' =>
array (
0 => '10.0.0.0/8',
),
```
#### Connecting a container directly to an NFS mount
```yml
version: "3"
services:
web-server:
image: nginx:latest
ports:
- 80:80
volumes:
- type: volume
source: nfs-volume
target: /nfs
volume:
nocopy: true
volumes:
nfs-volume:
driver_opts:
type: "nfs"
o: "addr=192.168.1.110,nolock,soft,rw"
device: ":/var/data"
```
NOTE: Just switch to syncthing
```sh
#SYNC MOVIES FROM UNITY TO DISK 2
# CRON JOB
* * * * * /usr/bin/flock -n /tmp/classics.lockfile /home/$USER/home_server/scripts/sync_classics.sh
* * * * * /usr/bin/flock -n /tmp/flims.lockfile /home/$USER/home_server/scripts/sync_flims.sh
* * * * * /usr/bin/flock -n /tmp/tv.lockfile /home/$USER/home_server/scripts/sync_tv.sh
# movie_sync.sh CONTENT
```
```sh
#!/bin/bash
echo "STARTING TV FILE SYNC RAN AT: " `date '+%Y-%m-%d %H:%M:%S'` >> /home/null/logs/film_cron.log
/usr/bin/rsync -ravz --bwlimit=5000 --stats --progress --exclude='/home/null/shares/disk2/media/movies/_movies' -e "ssh -i /home/null/.ssh/id_rsa_sync " 'invalid@unity.whatbox.ca:/home/invalid/files/_movies' '/home/null/shares/disk2/media/movies/_movies' >> /home/null/logs/film_cron.log
echo "CRON TV FILE SYNC RAN AT: " `date '+%Y-%m-%d %H:%M:%S'` >> /home/null/logs/film_cron.log
```
```sh
#SYNC TV FROM UNITY TO DISK 2
# CRON JOB
* * * * * /usr/bin/flock -n /tmp/fcj.lockfile /home/null/scrpts/tv_sync.sh
```
```sh
@reboot /usr/sbin/ddclient -daemon=0 -noquiet -debug -query > /home/knast/logs/dynamic_dns.log
#@reboot /usr/bin/mount -t nfs 192.168.1.110:/media /home/knast/shares/disk1
0 */2 * * * /usr/sbin/ddclient -daemon=0 -noquiet -debug -query > /home/knast/logs/dynamic_dns.log
*/5 * * * * /usr/bin/chmod -v 0777 -R /home/knast/shares/disk1/film/* > /home/knast/logs/film_chmod.log
*/15 * * * * /usr/bin/chmod -v 0777 -R /home/knast/shares/disk1/classics/* > /home/knast/logs/classic_chmod.log
*/25 * * * * /usr/bin/chmod -v 0777 -R /home/knast/shares/disk1/tv/* > /home/knast/logs/tv_chmod.log
```sh
# tv_sync.sh CONTENT
#!/bin/bash
echo "STARTING TV FILE SYNC RAN AT: " `date '+%Y-%m-%d %H:%M:%S'` >> /home/null/logs/tv_cron.log
/usr/bin/rsync -ravz --bwlimit=5000 --stats --progress --exclude='/home/null/shares/disk2/media/tv' -e "ssh -i /home/null/.ssh/id_rsa_sync " 'invalid@unity.whatbox.ca:/home/invalid/files/_tv' '/home/null/shares/disk2/media/tv' >> /home/null/logs/tv_cron.log
echo "CRON TV FILE SYNC RAN AT: " `date '+%Y-%m-%d %H:%M:%S'` >> /home/null/logs/tv_cron.log
```
### Dynamic IP for namecheap domains
in config file `/etc/ddclient.conf`
```conf
use=web, web=dynamicdns.park-your-domain.com/getip
protocol=namecheap
server=dynamicdns.park-your-domain.com
login=knast.cc
password=<NAMECHEAP_GENERATED_TOKEN>
@
```
and in the root crontab:
```sh
@reboot /usr/sbin/ddclient -daemon=0 -noquiet -debug > /home/null/dynamic_dns.log
0 */2 * * * /usr/sbin/ddclient -daemon=0 -noquiet -debug > /home/null/dynamic_dns.log
```