## 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, I’ve 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= @ ``` 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 ```