Initial commit
This commit is contained in:
commit
54fa8e9a03
3
.vscode/settings.json
vendored
Normal file
3
.vscode/settings.json
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
{
|
||||
"ansible.python.interpreterPath": "/bin/python3"
|
||||
}
|
2
ansible.cfg
Normal file
2
ansible.cfg
Normal file
@ -0,0 +1,2 @@
|
||||
[defaults]
|
||||
inventory = hosts.yml
|
24
assets/arrstack/prowlarr/config.xml
Normal file
24
assets/arrstack/prowlarr/config.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<Config>
|
||||
<BindAddress>*</BindAddress>
|
||||
<Port>9696</Port>
|
||||
<SslPort>6969</SslPort>
|
||||
<EnableSsl>False</EnableSsl>
|
||||
<LaunchBrowser>True</LaunchBrowser>
|
||||
<ApiKey>prowlarr123</ApiKey>
|
||||
<AuthenticationMethod>Forms</AuthenticationMethod>
|
||||
<AuthenticationRequired>Enabled</AuthenticationRequired>
|
||||
<Branch>develop</Branch>
|
||||
<LogLevel>debug</LogLevel>
|
||||
<SslCertPath></SslCertPath>
|
||||
<SslCertPassword></SslCertPassword>
|
||||
<UrlBase></UrlBase>
|
||||
<InstanceName>Prowlarr</InstanceName>
|
||||
<UpdateMechanism>Docker</UpdateMechanism>
|
||||
|
||||
<PostgresUser>arrstack</PostgresUser>
|
||||
<PostgresPassword>password</PostgresPassword>
|
||||
<PostgresPort>5432</PostgresPort>
|
||||
<PostgresHost>10.89.0.102</PostgresHost>
|
||||
<PostgresMainDb>arrstack_prowlarr_main</PostgresMainDb>
|
||||
<PostgresLogDb>arrstack_prowlarr_log</PostgresLogDb>
|
||||
</Config>
|
59
assets/arrstack/qbittorrent/qBittorrent.conf
Normal file
59
assets/arrstack/qbittorrent/qBittorrent.conf
Normal file
@ -0,0 +1,59 @@
|
||||
[Application]
|
||||
FileLogger\Age=1
|
||||
FileLogger\AgeType=1
|
||||
FileLogger\Backup=true
|
||||
FileLogger\DeleteOld=true
|
||||
FileLogger\Enabled=true
|
||||
FileLogger\MaxSizeBytes=66560
|
||||
FileLogger\Path=/config/qBittorrent/logs
|
||||
|
||||
[AutoRun]
|
||||
enabled=false
|
||||
program=
|
||||
|
||||
[BitTorrent]
|
||||
Session\AddTorrentStopped=false
|
||||
Session\DefaultSavePath=/data/torrents
|
||||
Session\ExcludedFileNames=
|
||||
Session\Port=6881
|
||||
Session\QueueingSystemEnabled=true
|
||||
Session\SSL\Port=47017
|
||||
Session\ShareLimitAction=Stop
|
||||
Session\TempPath=/data/torrents/incomplete
|
||||
Session\TempPathEnabled=true
|
||||
|
||||
[Core]
|
||||
AutoDeleteAddedTorrentFile=Never
|
||||
|
||||
[LegalNotice]
|
||||
Accepted=true
|
||||
|
||||
[Meta]
|
||||
MigrationVersion=8
|
||||
|
||||
[Network]
|
||||
Cookies=@Invalid()
|
||||
PortForwardingEnabled=false
|
||||
Proxy\HostnameLookupEnabled=false
|
||||
Proxy\Profiles\BitTorrent=true
|
||||
Proxy\Profiles\Misc=true
|
||||
Proxy\Profiles\RSS=true
|
||||
|
||||
[Preferences]
|
||||
Connection\PortRangeMin=6881
|
||||
Connection\UPnP=false
|
||||
Downloads\SavePath=/downloads/
|
||||
Downloads\TempPath=/downloads/incomplete/
|
||||
General\Locale=en
|
||||
MailNotification\req_auth=true
|
||||
WebUI\Address=*
|
||||
WebUI\AlternativeUIEnabled=true
|
||||
WebUI\AuthSubnetWhitelist=@Invalid()
|
||||
WebUI\Password_PBKDF2="@ByteArray(4s/z5haZUWwVroTF8nQ3sg==:gmUsUm24faCVh9K3r41OIaz5XHGRBReP0dBnu2Iu6+j77N39SG4wR/C6VDPYDr5PW+vlQzwNKTy6+XGsr8xO9A==)"
|
||||
WebUI\Port=5007
|
||||
WebUI\RootFolder=/themepark
|
||||
WebUI\ServerDomains=*
|
||||
|
||||
[RSS]
|
||||
AutoDownloader\DownloadRepacks=true
|
||||
AutoDownloader\SmartEpisodeFilter=s(\\d+)e(\\d+), (\\d+)x(\\d+), "(\\d{4}[.\\-]\\d{1,2}[.\\-]\\d{1,2})", "(\\d{1,2}[.\\-]\\d{1,2}[.\\-]\\d{4})"
|
24
assets/arrstack/radarr/config.xml
Normal file
24
assets/arrstack/radarr/config.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<Config>
|
||||
<BindAddress>*</BindAddress>
|
||||
<Port>7878</Port>
|
||||
<SslPort>8787</SslPort>
|
||||
<EnableSsl>False</EnableSsl>
|
||||
<LaunchBrowser>True</LaunchBrowser>
|
||||
<ApiKey>radarr123</ApiKey>
|
||||
<AuthenticationMethod>External</AuthenticationMethod>
|
||||
<AuthenticationRequired>Enabled</AuthenticationRequired>
|
||||
<Branch>main</Branch>
|
||||
<LogLevel>debug</LogLevel>
|
||||
<SslCertPath></SslCertPath>
|
||||
<SslCertPassword></SslCertPassword>
|
||||
<UrlBase></UrlBase>
|
||||
<InstanceName>Radarr</InstanceName>
|
||||
<UpdateMechanism>Docker</UpdateMechanism>
|
||||
|
||||
<PostgresUser>arrstack</PostgresUser>
|
||||
<PostgresPassword>password</PostgresPassword>
|
||||
<PostgresPort>5432</PostgresPort>
|
||||
<PostgresHost>10.89.0.102</PostgresHost>
|
||||
<PostgresMainDb>arrstack_radarr_main</PostgresMainDb>
|
||||
<PostgresLogDb>arrstack_radarr_log</PostgresLogDb>
|
||||
</Config>
|
25
assets/arrstack/readarr/config.xml
Normal file
25
assets/arrstack/readarr/config.xml
Normal file
@ -0,0 +1,25 @@
|
||||
<Config>
|
||||
<BindAddress>*</BindAddress>
|
||||
<Port>8787</Port>
|
||||
<SslPort>7854</SslPort>
|
||||
<EnableSsl>False</EnableSsl>
|
||||
<LaunchBrowser>True</LaunchBrowser>
|
||||
<ApiKey>readarr123</ApiKey>
|
||||
<AuthenticationMethod>External</AuthenticationMethod>
|
||||
<AuthenticationRequired>Enabled</AuthenticationRequired>
|
||||
<Branch>main</Branch>
|
||||
<LogLevel>debug</LogLevel>
|
||||
<SslCertPath></SslCertPath>
|
||||
<SslCertPassword></SslCertPassword>
|
||||
<UrlBase></UrlBase>
|
||||
<InstanceName>Readarr</InstanceName>
|
||||
<UpdateMechanism>Docker</UpdateMechanism>
|
||||
|
||||
<PostgresUser>arrstack</PostgresUser>
|
||||
<PostgresPassword>password</PostgresPassword>
|
||||
<PostgresPort>5432</PostgresPort>
|
||||
<PostgresHost>10.89.0.102</PostgresHost>
|
||||
<PostgresMainDb>arrstack_readarr_main</PostgresMainDb>
|
||||
<PostgresLogDb>arrstack_readarr_log</PostgresLogDb>
|
||||
<PostgresCacheDb>arrstack_readarr_cache</PostgresCacheDb>
|
||||
</Config>
|
24
assets/arrstack/sonarr/config.xml
Normal file
24
assets/arrstack/sonarr/config.xml
Normal file
@ -0,0 +1,24 @@
|
||||
<Config>
|
||||
<BindAddress>*</BindAddress>
|
||||
<Port>8989</Port>
|
||||
<SslPort>9898</SslPort>
|
||||
<EnableSsl>False</EnableSsl>
|
||||
<LaunchBrowser>True</LaunchBrowser>
|
||||
<ApiKey>sonarr123</ApiKey>
|
||||
<AuthenticationMethod>Forms</AuthenticationMethod>
|
||||
<AuthenticationRequired>Enabled</AuthenticationRequired>
|
||||
<Branch>main</Branch>
|
||||
<LogLevel>debug</LogLevel>
|
||||
<SslCertPath></SslCertPath>
|
||||
<SslCertPassword></SslCertPassword>
|
||||
<UrlBase></UrlBase>
|
||||
<InstanceName>Sonarr</InstanceName>
|
||||
<UpdateMechanism>Docker</UpdateMechanism>
|
||||
|
||||
<PostgresUser>arrstack</PostgresUser>
|
||||
<PostgresPassword>password</PostgresPassword>
|
||||
<PostgresPort>5432</PostgresPort>
|
||||
<PostgresHost>10.89.0.102</PostgresHost>
|
||||
<PostgresMainDb>arrstack_sonarr_main</PostgresMainDb>
|
||||
<PostgresLogDb>arrstack_sonarr_log</PostgresLogDb>
|
||||
</Config>
|
17
assets/scripts/installdocker.sh
Normal file
17
assets/scripts/installdocker.sh
Normal file
@ -0,0 +1,17 @@
|
||||
# Add Docker's official GPG key:
|
||||
sudo apt-get update
|
||||
sudo apt-get install ca-certificates curl -y
|
||||
sudo install -y -m 0755 -d /etc/apt/keyrings
|
||||
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
|
||||
sudo chmod a+r /etc/apt/keyrings/docker.asc
|
||||
|
||||
# Add the repository to Apt sources:
|
||||
echo \
|
||||
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
|
||||
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" |
|
||||
sudo tee /etc/apt/sources.list.d/docker.list >/dev/null
|
||||
sudo apt-get update
|
||||
|
||||
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y
|
||||
|
||||
sudo docker run hello-world
|
0
databases.yml
Normal file
0
databases.yml
Normal file
2
deps.sh
Executable file
2
deps.sh
Executable file
@ -0,0 +1,2 @@
|
||||
sudo apt install python3-psycopg2
|
||||
sudo apt install sshpass
|
96
docker/arrstack/.env
Normal file
96
docker/arrstack/.env
Normal file
@ -0,0 +1,96 @@
|
||||
#################################################################################
|
||||
#################################################################################
|
||||
#################################################################################
|
||||
##
|
||||
## Docker Compose Environment Variable file for Jellyfin / *ARR Media Stack
|
||||
##
|
||||
## Update any of the environment variables below as required.
|
||||
##
|
||||
## It is highly recommended Linux users set up a "docker" user, so the
|
||||
## applications can access the local filesystem with this user's access
|
||||
## privileges. Use PUID / PGID to map user access between the Docker apps
|
||||
## and local filesystem.
|
||||
##
|
||||
## The MediaStack Guide is located at https://MediaStack.Guide
|
||||
##
|
||||
#################################################################################
|
||||
#################################################################################
|
||||
#################################################################################
|
||||
|
||||
# Name of the project in Docker
|
||||
COMPOSE_PROJECT_NAME=arrstack
|
||||
|
||||
# This is the network subnet which will be used inside the docker "media_network", change as required.
|
||||
# LOCAL_SUBNET is your home network and is needed so the VPN client allows access to your home computers.
|
||||
LOCAL_SUBNET=10.89.0.0/24 # This is the IP Subnet used on your home network
|
||||
LOCAL_DOCKER_IP=10.89.0.107
|
||||
|
||||
# Each of the "*ARR" applications have been configured so the theme can be changed to your needs.
|
||||
# Refer to Theme Park for more info / options: https://docs.theme-park.dev/theme-options/aquamarine/
|
||||
TP_THEME=nord
|
||||
|
||||
# These are the folders on your local host computer / NAS running docker, they MUST exist
|
||||
# and have correct permissions for PUID and PGUI prior to running the docker compose.
|
||||
#
|
||||
# Use the commands in the Guide to create all the sub-folders in each of these folders.
|
||||
|
||||
# Host Data Folders - Will accept Linux, Windows, NAS folders.
|
||||
# Make sure these folders exists before running the "docker compose" command.
|
||||
FOLDER_FOR_MEDIA=/home/docker/media
|
||||
FOLDER_FOR_DATA=/home/docker/arrstack
|
||||
|
||||
# File access, date and time details for the containers / applications to use.
|
||||
# Run "sudo id docker" on host computer to find PUID / PGID and update these to suit.
|
||||
PUID=1000
|
||||
PGID=1000
|
||||
UMASK=0002
|
||||
TIMEZONE=America/New_York
|
||||
|
||||
# Update your own Internet VPN provide details below
|
||||
# Online documentation: https://github.com/qdm12/gluetun-wiki/tree/main/setup/providers
|
||||
VPN_TYPE=openvpn
|
||||
VPN_SERVICE_PROVIDER=protonvpn
|
||||
VPN_USERNAME=RKACGjQuepNsr84Y
|
||||
VPN_PASSWORD=kYWSKvCzkefrsnUuZ8Ig7YkTPSO4KSVN
|
||||
|
||||
# You MUST provide at least one entry to the SERVER variables below, that supports your VPN provider's settings.
|
||||
# If you want to add more than one entry per line, use comma separated values: "one,two,three" etc...
|
||||
SERVER_COUNTRIES="United States"
|
||||
SERVER_REGIONS=
|
||||
SERVER_CITIES=
|
||||
SERVER_HOSTNAMES=
|
||||
SERVER_CATEGORIES=
|
||||
|
||||
# Fill in this item ONLY if you're using a custom OpenVPN configuration
|
||||
# Should be inside gluetun data folder - Example: /gluetun/custom-openvpn.conf
|
||||
# You can then edit it inside the FOLDER_FOR_DATA location for gluetun.
|
||||
OPENVPN_CUSTOM_CONFIG=
|
||||
GLUETUN_CONTROL_PORT=8320
|
||||
|
||||
# Fill in these items ONLY if you change VPN_TYPE to "wireguard"
|
||||
VPN_ENDPOINT_IP=
|
||||
VPN_ENDPOINT_PORT=
|
||||
WIREGUARD_PUBLIC_KEY=
|
||||
WIREGUARD_PRIVATE_KEY=
|
||||
WIREGUARD_PRESHARED_KEY=
|
||||
WIREGUARD_ADDRESSES=
|
||||
|
||||
# These are the default ports used to access each of the application in your web browser.
|
||||
# You can safely change these if you need, but they can't conflict with other active ports.
|
||||
QBIT_PORT=6881
|
||||
FLARESOLVERR_PORT=8191
|
||||
|
||||
TDARR_SERVER_PORT=8266
|
||||
|
||||
WEBUI_PORT_PROWLARR=5001
|
||||
WEBUI_PORT_SONARR=5002
|
||||
WEBUI_PORT_RADARR=5003
|
||||
WEBUI_PORT_WHISPARR=5005
|
||||
WEBUI_PORT_READARR=5006
|
||||
WEBUI_PORT_QBITTORRENT=5007
|
||||
WEBUI_PORT_LIDARR=5008
|
||||
WEBUI_PORT_MYLAR=5009
|
||||
WEBUI_PORT_FILEBOT=5010
|
||||
WEBUI_PORT_JELLYSEERR=5011
|
||||
WEBUI_PORT_TDARR=5012
|
||||
WEBUI_PORT_SABNZBD=5013
|
385
docker/arrstack/docker-compose.yml
Normal file
385
docker/arrstack/docker-compose.yml
Normal file
@ -0,0 +1,385 @@
|
||||
# TODO: Fix path mappings in containers since it's currently /data/data and /media/media
|
||||
## Function: VPN Client
|
||||
## Documentation: https://github.com/qdm12/gluetun-wiki
|
||||
services:
|
||||
gluetun:
|
||||
image: qmcgaw/gluetun:latest
|
||||
container_name: gluetun
|
||||
restart: always
|
||||
cap_add:
|
||||
- NET_ADMIN
|
||||
devices:
|
||||
- /dev/net/tun:/dev/net/tun
|
||||
ports:
|
||||
- "8888:8888/tcp" # Gluetun Local Network HTTP proxy
|
||||
- "8388:8388/tcp" # Gluetun Local Network Shadowsocks
|
||||
- "8388:8388/udp" # Gluetun Local Network Shadowsocks
|
||||
- "${WEBUI_PORT_QBITTORRENT:?err}:${WEBUI_PORT_QBITTORRENT:?err}" # WebUI Portal: qBittorrent
|
||||
- "${QBIT_PORT:?err}:6881" # Transmission Torrent Port
|
||||
|
||||
volumes:
|
||||
- ${FOLDER_FOR_DATA:?err}/gluetun:/gluetun
|
||||
environment:
|
||||
- PUID=${PUID:?err}
|
||||
- PGID=${PGID:?err}
|
||||
- UMASK=${UMASK:?err}
|
||||
- TZ=${TIMEZONE:?err}
|
||||
- VPN_SERVICE_PROVIDER=${VPN_SERVICE_PROVIDER:?err}
|
||||
- OPENVPN_USER=${VPN_USERNAME:?err}
|
||||
- OPENVPN_PASSWORD=${VPN_PASSWORD:?err}
|
||||
- SERVER_COUNTRIES=${SERVER_COUNTRIES}
|
||||
- SERVER_REGIONS=${SERVER_REGIONS}
|
||||
- SERVER_CITIES=${SERVER_CITIES}
|
||||
- SERVER_HOSTNAMES=${SERVER_HOSTNAMES}
|
||||
- SERVER_CATEGORIES=${SERVER_CATEGORIES}
|
||||
- FIREWALL_OUTBOUND_SUBNETS=${LOCAL_SUBNET:?err}
|
||||
- OPENVPN_CUSTOM_CONFIG=${OPENVPN_CUSTOM_CONFIG}
|
||||
- HTTP_CONTROL_SERVER_ADDRESS=:${GLUETUN_CONTROL_PORT:?err}
|
||||
- VPN_TYPE=${VPN_TYPE}
|
||||
- VPN_ENDPOINT_IP=${VPN_ENDPOINT_IP}
|
||||
- VPN_ENDPOINT_PORT=${VPN_ENDPOINT_PORT}
|
||||
- WIREGUARD_PUBLIC_KEY=${WIREGUARD_PUBLIC_KEY}
|
||||
- WIREGUARD_PRIVATE_KEY=${WIREGUARD_PRIVATE_KEY}
|
||||
- WIREGUARD_PRESHARED_KEY=${WIREGUARD_PRESHARED_KEY}
|
||||
- WIREGUARD_ADDRESSES=${WIREGUARD_ADDRESSES}
|
||||
- HTTPPROXY=on
|
||||
- SHADOWSOCKS=on
|
||||
|
||||
## Function: Cloudflare Proxy Server
|
||||
## Documentation: https://github.com/FlareSolverr/FlareSolverr
|
||||
##########################################################################
|
||||
flaresolverr:
|
||||
image: ghcr.io/flaresolverr/flaresolverr:latest
|
||||
container_name: flaresolverr
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "${FLARESOLVERR_PORT:?err}:8191"
|
||||
environment:
|
||||
- LOG_LEVEL=info
|
||||
- LOG_HTML=false
|
||||
- CAPTCHA_SOLVER=none
|
||||
- TZ=${TIMEZONE:?err}
|
||||
|
||||
## Function: Indexer and Search Manager
|
||||
## Documentation: https://docs.linuxserver.io/images/docker-prowlarr
|
||||
prowlarr:
|
||||
image: lscr.io/linuxserver/prowlarr:develop
|
||||
container_name: prowlarr
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /home/docker/prowlarr:/config
|
||||
ports:
|
||||
- "${WEBUI_PORT_PROWLARR:?err}:9696"
|
||||
environment:
|
||||
- PUID=${PUID:?err}
|
||||
- PGID=${PGID:?err}
|
||||
- TZ=${TIMEZONE:?err}
|
||||
- DOCKER_MODS=ghcr.io/themepark-dev/theme.park:prowlarr
|
||||
- TP_THEME=${TP_THEME:?err}
|
||||
|
||||
## Function: Torrent Download Client
|
||||
## Documentation: https://docs.linuxserver.io/images/docker-qbittorrent
|
||||
qbittorrent:
|
||||
image: lscr.io/linuxserver/qbittorrent:latest
|
||||
container_name: qbittorrent
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /home/docker/qbittorrent:/config
|
||||
- /home/docker/media/torrents:/data/torrents
|
||||
environment:
|
||||
- PUID=${PUID:?err}
|
||||
- PGID=${PGID:?err}
|
||||
- UMASK=${UMASK:?err}
|
||||
- TZ=${TIMEZONE:?err}
|
||||
- WEBUI_PORT=${WEBUI_PORT_QBITTORRENT:?err}
|
||||
- DOCKER_MODS=ghcr.io/themepark-dev/theme.park:qbittorrent
|
||||
- TP_THEME=${TP_THEME:?err}
|
||||
network_mode: "service:gluetun"
|
||||
|
||||
## Function: Series Library Manager (TV Shows)
|
||||
## Documentation: https://docs.linuxserver.io/images/docker-sonarr
|
||||
sonarr:
|
||||
image: lscr.io/linuxserver/sonarr:latest
|
||||
container_name: sonarr
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /home/docker/sonarr:/config
|
||||
- /home/docker/media:/data
|
||||
ports:
|
||||
- "${WEBUI_PORT_SONARR:?err}:8989"
|
||||
environment:
|
||||
- PUID=${PUID:?err}
|
||||
- PGID=${PGID:?err}
|
||||
- TZ=${TIMEZONE:?err}
|
||||
- DOCKER_MODS=ghcr.io/themepark-dev/theme.park:sonarr
|
||||
- TP_THEME=${TP_THEME:?err}
|
||||
|
||||
## Function: Movie Library Manager
|
||||
## Documentation: https://docs.linuxserver.io/images/docker-radarr
|
||||
radarr:
|
||||
image: lscr.io/linuxserver/radarr:latest
|
||||
container_name: radarr
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /home/docker/radarr:/config
|
||||
- /home/docker/media:/data
|
||||
ports:
|
||||
- "${WEBUI_PORT_RADARR:?err}:7878"
|
||||
environment:
|
||||
- PUID=${PUID:?err}
|
||||
- PGID=${PGID:?err}
|
||||
- TZ=${TIMEZONE:?err}
|
||||
- DOCKER_MODS=ghcr.io/themepark-dev/theme.park:radarr
|
||||
- TP_THEME=${TP_THEME:?err}
|
||||
|
||||
## Function: Usenet Download Client
|
||||
## Documentation: https://docs.linuxserver.io/images/docker-sabnzbd
|
||||
sabnzbd:
|
||||
image: lscr.io/linuxserver/sabnzbd:latest
|
||||
container_name: sabnzbd
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /home/docker/sabnzbd:/config
|
||||
- /home/docker/media/usenet:/data/usenet
|
||||
ports:
|
||||
- "${WEBUI_PORT_SABNZBD:?err}:8080"
|
||||
environment:
|
||||
- PUID=${PUID:?err}
|
||||
- PGID=${PGID:?err}
|
||||
- TZ=${TIMEZONE:?err}
|
||||
- DOCKER_MODS=ghcr.io/themepark-dev/theme.park:sabnzbd
|
||||
- TP_THEME=${TP_THEME:?err}
|
||||
|
||||
## Function: Book Library Manager
|
||||
## Documentation: https://docs.linuxserver.io/images/docker-readarr
|
||||
readarr:
|
||||
image: lscr.io/linuxserver/readarr:develop
|
||||
container_name: readarr
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- /home/docker/readarr:/config
|
||||
- /home/docker/media:/data
|
||||
ports:
|
||||
- "${WEBUI_PORT_READARR:?err}:8787"
|
||||
environment:
|
||||
- PUID=${PUID:?err}
|
||||
- PGID=${PGID:?err}
|
||||
- TZ=${TIMEZONE:?err}
|
||||
- DOCKER_MODS=ghcr.io/themepark-dev/theme.park:readarr
|
||||
- TP_THEME=${TP_THEME:?err}
|
||||
|
||||
|
||||
|
||||
|
||||
## Function: Lookup and Rename Media from Internet Databases
|
||||
## Docker Page: https://github.com/filebot/filebot-docker#filebot-xpra
|
||||
## Homepage: https://www.filebot.net/
|
||||
## User Forum: https://www.filebot.net/forums
|
||||
# filebot:
|
||||
# image: rednoah/filebot:xpra
|
||||
# container_name: filebot
|
||||
# restart: unless-stopped
|
||||
# ports:
|
||||
# - "${WEBUI_PORT_FILEBOT:?err}:5454"
|
||||
# volumes:
|
||||
# - ${FOLDER_FOR_DATA:?err}/filebot:/data/filebot
|
||||
# - ${FOLDER_FOR_MEDIA:?err}/filebot:/filebot
|
||||
# environment:
|
||||
# # - XPRA_AUTH=password:value=YOUR_PASSWORD
|
||||
# - PUID=${PUID:?err}
|
||||
# - PGID=${PGID:?err}
|
||||
# - UMASK=${UMASK:?err}
|
||||
# - TZ=${TIMEZONE:?err}
|
||||
# - DARK_MODE=1
|
||||
|
||||
## Function: Media Request Manager
|
||||
## Documentation: https://hub.docker.com/r/fallenbagel/jellyseerr
|
||||
# jellyseerr:
|
||||
# image: fallenbagel/jellyseerr:latest
|
||||
# container_name: jellyseerr
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - ${FOLDER_FOR_DATA:?err}/jellyseerr:/app/config
|
||||
# ports:
|
||||
# - "${WEBUI_PORT_JELLYSEERR:?err}:5055"
|
||||
# environment:
|
||||
# - PUID=${PUID:?err}
|
||||
# - PGID=${PGID:?err}
|
||||
# - UMASK=${UMASK:?err}
|
||||
# - TZ=${TIMEZONE:?err}
|
||||
|
||||
## Function: Music Library Manager
|
||||
## Documentation: https://docs.linuxserver.io/images/docker-lidarr
|
||||
# lidarr:
|
||||
# image: lscr.io/linuxserver/lidarr:latest
|
||||
# container_name: lidarr
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - ${FOLDER_FOR_DATA:?err}/lidarr:/config
|
||||
# - ${FOLDER_FOR_MEDIA:?err}:/data
|
||||
# ports:
|
||||
# - "${WEBUI_PORT_LIDARR:?err}:8686"
|
||||
# environment:
|
||||
# - PUID=${PUID:?err}
|
||||
# - PGID=${PGID:?err}
|
||||
# - TZ=${TIMEZONE:?err}
|
||||
# - DOCKER_MODS=ghcr.io/themepark-dev/theme.park:lidarr
|
||||
# - TP_THEME=${TP_THEME:?err}
|
||||
|
||||
## Function: Comic Library Manager
|
||||
## Documentation: https://github.com/mylar3/mylar3/wiki
|
||||
# mylar:
|
||||
# image: lscr.io/linuxserver/mylar3:latest
|
||||
# container_name: mylar
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - ${FOLDER_FOR_DATA:?err}/mylar:/config
|
||||
# - ${FOLDER_FOR_MEDIA:?err}:/data
|
||||
# ports:
|
||||
# - "${WEBUI_PORT_MYLAR:?err}:8090"
|
||||
# environment:
|
||||
# - PUID=${PUID:?err}
|
||||
# - PGID=${PGID:?err}
|
||||
# - TZ=${TIMEZONE:?err}
|
||||
# - DOCKER_MODS=ghcr.io/themepark-dev/theme.park:mylar3
|
||||
# - TP_THEME=${TP_THEME:?err}
|
||||
|
||||
|
||||
|
||||
|
||||
## Function: Tdarr V2 - Audio/Video library transcoding automation (Contains Tdarr_Server and WebUI )
|
||||
## Documentation: https://docs.tdarr.io/docs/installation/docker/run-compose/
|
||||
## https://docs.tdarr.io/docs/installation/docker/hardware-transcoding
|
||||
# tdarr:
|
||||
# image: ghcr.io/haveagitgat/tdarr:latest
|
||||
# container_name: tdarr
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - ${FOLDER_FOR_DATA:?err}/tdarr/server:/app/server
|
||||
# - ${FOLDER_FOR_DATA:?err}/tdarr/configs:/app/configs
|
||||
# - ${FOLDER_FOR_DATA:?err}/tdarr/logs:/app/logs
|
||||
# - ${FOLDER_FOR_DATA:?err}/tdarr_transcode_cache:/temp
|
||||
# - ${FOLDER_FOR_MEDIA:?err}/media:/data
|
||||
# ports:
|
||||
# - "${TDARR_SERVER_PORT:?err}:${TDARR_SERVER_PORT:?err}"
|
||||
# - "${WEBUI_PORT_TDARR:?err}:${WEBUI_PORT_TDARR:?err}"
|
||||
# environment:
|
||||
# - PUID=${PUID:?err}
|
||||
# - PGID=${PGID:?err}
|
||||
# - UMASK=${UMASK:?err}
|
||||
# - TZ=${TIMEZONE:?err}
|
||||
# - serverIP=0.0.0.0
|
||||
# - serverPort=${TDARR_SERVER_PORT:?err}
|
||||
# - webUIPort=${WEBUI_PORT_TDARR:?err}
|
||||
# - internalNode=true
|
||||
# - nodeID=Tdarr_Server
|
||||
|
||||
# tdarr-node:
|
||||
# image: ghcr.io/haveagitgat/tdarr_node:latest
|
||||
# container_name: tdarr-node
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - ${FOLDER_FOR_DATA:?err}/tdarr/configs:/app/configs
|
||||
# - ${FOLDER_FOR_DATA:?err}/tdarr/logs:/app/logs
|
||||
# - ${FOLDER_FOR_DATA:?err}/tdarr_transcode_cache:/temp
|
||||
# - ${FOLDER_FOR_MEDIA:?err}/media:/data
|
||||
# environment:
|
||||
# - PUID=${PUID:?err}
|
||||
# - PGID=${PGID:?err}
|
||||
# - UMASK=${UMASK:?err}
|
||||
# - TZ=${TIMEZONE:?err}
|
||||
# - nodeID=Tdarr_Node_1
|
||||
# - serverIP=0.0.0.0
|
||||
# - serverPort=${TDARR_SERVER_PORT:?err}
|
||||
|
||||
# ## Function: Archive Media Extraction
|
||||
# ## Documentation: https://github.com/davidnewhall/unpackerr
|
||||
# ## https://github.com/davidnewhall/unpackerr/blob/master/examples/docker-compose.yml
|
||||
# unpackerr:
|
||||
# image: ghcr.io/hotio/unpackerr:latest
|
||||
# container_name: unpackerr
|
||||
# restart: unless-stopped
|
||||
# volumes:
|
||||
# - ${FOLDER_FOR_DATA:?err}/unpackerr:/config
|
||||
# - ${FOLDER_FOR_MEDIA:?err}:/data
|
||||
# environment:
|
||||
# - PUID=${PUID:?err}
|
||||
# - PGID=${PGID:?err}
|
||||
# - UMASK=${UMASK:?err}
|
||||
# - TZ=${TIMEZONE:?err}
|
||||
# # Documentation on all Environment Variables can be found at:
|
||||
# # https://github.com/davidnewhall/unpackerr#docker-env-variables
|
||||
# - UN_DEBUG=false
|
||||
# - UN_LOG_FILE=
|
||||
# - UN_LOG_FILES=10
|
||||
# - UN_LOG_FILE_MB=10
|
||||
# - UN_INTERVAL=2m
|
||||
# - UN_START_DELAY=1m
|
||||
# - UN_RETRY_DELAY=5m
|
||||
# - UN_MAX_RETRIES=3
|
||||
# - UN_PARALLEL=1
|
||||
# - UN_FILE_MODE=0664
|
||||
# - UN_DIR_MODE=0775
|
||||
# # Sonarr Config - Copy API Key from: http://sonarr:8989/general/settings
|
||||
# - UN_SONARR_0_URL=http://sonarr:8989
|
||||
# - UN_SONARR_0_API_KEY=
|
||||
# - UN_SONARR_0_PATHS_0=/data/torrents/anime
|
||||
# - UN_SONARR_0_PATHS_1=/data/torrents/tv
|
||||
# - UN_SONARR_0_PROTOCOLS=torrent
|
||||
# - UN_SONARR_0_TIMEOUT=10s
|
||||
# - UN_SONARR_0_DELETE_ORIG=false
|
||||
# - UN_SONARR_0_DELETE_DELAY=5m
|
||||
# # Radarr Config - Copy API Key from: http://radarr:7878/general/settings
|
||||
# - UN_RADARR_0_URL=http://radarr:7878
|
||||
# - UN_RADARR_0_API_KEY=
|
||||
# - UN_RADARR_0_PATHS_0=/data/torrents/movies
|
||||
# - UN_RADARR_0_PROTOCOLS=torrent
|
||||
# - UN_RADARR_0_TIMEOUT=10s
|
||||
# - UN_RADARR_0_DELETE_ORIG=false
|
||||
# - UN_RADARR_0_DELETE_DELAY=5m
|
||||
# # Lidarr Config - Copy API Key from: http://lidarr:8686/general/settings
|
||||
# - UN_LIDARR_0_URL=http://lidarr:8686
|
||||
# - UN_LIDARR_0_API_KEY=
|
||||
# - UN_LIDARR_0_PATHS_0=/data/torrents/music
|
||||
# - UN_LIDARR_0_PROTOCOLS=torrent
|
||||
# - UN_LIDARR_0_TIMEOUT=10s
|
||||
# - UN_LIDARR_0_DELETE_ORIG=false
|
||||
# - UN_LIDARR_0_DELETE_DELAY=5m
|
||||
# # Readarr Config - Copy API Key from: http://readarr:8787/general/settings
|
||||
# - UN_READARR_0_URL=http://readarr:8787
|
||||
# - UN_READARR_0_API_KEY=
|
||||
# - UN_READARR_0_PATHS_0=/data/torrents/books
|
||||
# - UN_READARR_0_PROTOCOLS=torrent
|
||||
# - UN_READARR_0_TIMEOUT=10s
|
||||
# - UN_READARR_0_DELETE_ORIG=false
|
||||
# - UN_READARR_0_DELETE_DELAY=5m
|
||||
# # Folder Config
|
||||
# - UN_FOLDER_0_PATH=
|
||||
# - UN_FOLDER_0_EXTRACT_PATH=
|
||||
# - UN_FOLDER_0_DELETE_AFTER=10m
|
||||
# - UN_FOLDER_0_DELETE_ORIGINAL=false
|
||||
# - UN_FOLDER_0_DELETE_FILES=false
|
||||
# - UN_FOLDER_0_MOVE_BACK=false
|
||||
# # Webhook Config
|
||||
# - UN_WEBHOOK_0_URL=
|
||||
# - UN_WEBHOOK_0_NAME=
|
||||
# - UN_WEBHOOK_0_NICKNAME=Unpackerr
|
||||
# - UN_WEBHOOK_0_CHANNEL=
|
||||
# - UN_WEBHOOK_0_TIMEOUT=10s
|
||||
# - UN_WEBHOOK_0_SILENT=false
|
||||
# - UN_WEBHOOK_0_IGNORE_SSL=false
|
||||
# - UN_WEBHOOK_0_EXCLUDE_0=
|
||||
# - UN_WEBHOOK_0_EVENTS_0=0
|
||||
# - UN_WEBHOOK_0_TEMPLATE_PATH=
|
||||
# - UN_WEBHOOK_0_CONTENT_TYPE=application/json
|
||||
# # Command Hook Config
|
||||
# - UN_CMDHOOK_0_COMMAND=
|
||||
# - UN_CMDHOOK_0_NAME=
|
||||
# - UN_CMDHOOK_0_TIMEOUT=10s
|
||||
# - UN_CMDHOOK_0_SILENT=false
|
||||
# - UN_CMDHOOK_0_SHELL=false
|
||||
# - UN_CMDHOOK_0_EXCLUDE_0=
|
||||
# - UN_CMDHOOK_0_EVENTS_0=0
|
||||
# security_opt:
|
||||
# - no-new-privileges:true
|
||||
# network_mode: none
|
30
docker/jellyfin/docker-compose.yml
Normal file
30
docker/jellyfin/docker-compose.yml
Normal file
@ -0,0 +1,30 @@
|
||||
---
|
||||
services:
|
||||
jellyfin:
|
||||
image: jellyfin/jellyfin
|
||||
container_name: jellyfin
|
||||
ports:
|
||||
- "5001:8096"
|
||||
devices:
|
||||
- /dev/dri:/dev/dri
|
||||
volumes:
|
||||
- /home/docker/jellyfin:/config
|
||||
- /home/docker/jellyfin/cache:/cache
|
||||
- type: bind
|
||||
source: /home/docker/media
|
||||
target: /media
|
||||
restart: 'unless-stopped'
|
||||
environment:
|
||||
- JELLYFIN_PublishedServerUrl=https://watch.blinker.club
|
||||
jellyseerr:
|
||||
image: fallenbagel/jellyseerr
|
||||
restart: unless-stopped
|
||||
volumes:
|
||||
- '/home/docker/jellyseer:/app/config'
|
||||
ports:
|
||||
- '5002:5055'
|
||||
environment:
|
||||
- PORT=5055
|
||||
- TZ=America/New_York
|
||||
- LOG_LEVEL=debug
|
||||
container_name: jellyseerr
|
34
docker/stash/docker-compose.yml
Normal file
34
docker/stash/docker-compose.yml
Normal file
@ -0,0 +1,34 @@
|
||||
---
|
||||
services:
|
||||
stash:
|
||||
image: stashapp/stash:latest
|
||||
container_name: stash
|
||||
restart: unless-stopped
|
||||
ports:
|
||||
- "6969:9999"
|
||||
logging:
|
||||
driver: "json-file"
|
||||
options:
|
||||
max-file: "10"
|
||||
max-size: "2m"
|
||||
environment:
|
||||
- STASH_STASH=/data/
|
||||
- STASH_GENERATED=/generated/
|
||||
- STASH_METADATA=/metadata/
|
||||
- STASH_CACHE=/cache/
|
||||
- STASH_PORT=9999
|
||||
- STASH_DOCKER_FOLDER=/home/docker/stash
|
||||
volumes:
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
## Keep configs, scrapers, and plugins here.
|
||||
- ${STASH_DOCKER_FOLDER}/config:/root/.stash
|
||||
## Point this at your collection.
|
||||
- /home/docker/xrandr:/data
|
||||
## This is where your stash's metadata lives
|
||||
- ${STASH_DOCKER_FOLDER}/metadata:/metadata
|
||||
## Any other cache content
|
||||
- ${STASH_DOCKER_FOLDER}/cache:/cache
|
||||
## Where to store binary blob data (scene covers, images)
|
||||
- ${STASH_DOCKER_FOLDER}/blobs:/blobs
|
||||
## Where to store generated content (screenshots,previews,transcodes,sprites)
|
||||
- ${STASH_DOCKER_FOLDER}/generated:/generated
|
36
docker/wizarr/docker-compose.yml
Normal file
36
docker/wizarr/docker-compose.yml
Normal file
@ -0,0 +1,36 @@
|
||||
---
|
||||
name: wizarr
|
||||
services:
|
||||
wizarr-server:
|
||||
container_name: wizarr_server
|
||||
image: ghcr.io/wizarrrrr/wizarr:${WIZARR_IMAGE_VERSION:-release}
|
||||
volumes:
|
||||
- /home/docker/wizarr:/usr/wizarr/data/storage
|
||||
- /etc/localtime:/etc/localtime:ro
|
||||
environment:
|
||||
- DATABASE_TYPE=postgres
|
||||
- DB_USERNAME=wizarr
|
||||
- DB_PASSWORD=password
|
||||
- DB_HOST=10.89.0.102
|
||||
- DB_DATABASE_NAME=wizarr
|
||||
- WIZARR_IMAGE_VERSION=release
|
||||
- REDIS_HOST=redis
|
||||
- REDIS_PORT=6379
|
||||
- TZ=America/New_York
|
||||
ports:
|
||||
- "5003:5690"
|
||||
depends_on:
|
||||
- redis
|
||||
restart: always
|
||||
healthcheck:
|
||||
test: ["CMD", "curl", "-f", "http://localhost:5690/api/health"]
|
||||
interval: 30s
|
||||
timeout: 10s
|
||||
retries: 5
|
||||
|
||||
redis:
|
||||
container_name: wizarr_redis
|
||||
image: docker.io/redis:6.2-alpine@sha256:eaba718fecd1196d88533de7ba49bf903ad33664a92debb24660a922ecd9cac8
|
||||
healthcheck:
|
||||
test: redis-cli ping || exit 1
|
||||
restart: unless-stopped
|
1
group_vars/all.yml
Normal file
1
group_vars/all.yml
Normal file
@ -0,0 +1 @@
|
||||
ansible_become_pass: Cinnamonbun89$
|
27
hosts.yml
Normal file
27
hosts.yml
Normal file
@ -0,0 +1,27 @@
|
||||
---
|
||||
all:
|
||||
children:
|
||||
servers:
|
||||
hosts:
|
||||
node1:
|
||||
ansible_host: 10.89.0.13
|
||||
node2:
|
||||
ansible_host: 10.89.0.11
|
||||
node3:
|
||||
ansible_host: 10.89.0.12
|
||||
virtual_machines:
|
||||
hosts:
|
||||
portainer_main:
|
||||
ansible_host: 10.89.0.101
|
||||
prod_services:
|
||||
ansible_host: 11.89.0.102
|
||||
stash:
|
||||
ansible_host: 10.89.0.103
|
||||
plane_so:
|
||||
ansible_host: 10.89.0.104
|
||||
dev_services:
|
||||
ansible_host: 10.89.0.105
|
||||
streaming_services:
|
||||
ansible_host: 10.89.0.106
|
||||
streaming:
|
||||
ansible_host: 10.89.0.107
|
1
makerole.sh
Executable file
1
makerole.sh
Executable file
@ -0,0 +1 @@
|
||||
ROLE="$1"
|
108
playbooks/arrstack.yml
Normal file
108
playbooks/arrstack.yml
Normal file
@ -0,0 +1,108 @@
|
||||
---
|
||||
- name: Set up the arrstack
|
||||
hosts: streaming
|
||||
vars:
|
||||
apps:
|
||||
- sonarr
|
||||
configs:
|
||||
- src: '../assets/arrstack/sonarr/config.xml'
|
||||
dest: '/home/docker/sonarr/config.xml'
|
||||
- src: '../assets/arrstack/prowlarr/config.xml'
|
||||
dest: '/home/docker/prowlarr/config.xml'
|
||||
- src: '../assets/arrstack/radarr/config.xml'
|
||||
dest: '/home/docker/radarr/config.xml'
|
||||
- src: '../assets/arrstack/readarr/config.xml'
|
||||
dest: '/home/docker/readarr/config.xml'
|
||||
- src: '../assets/arrstack/qbittorrent/qBittorrent.conf'
|
||||
dest: '/home/docker/qbittorrent/qBittorrent.conf'
|
||||
dbs:
|
||||
- arrstack_sonarr_main
|
||||
- arrstack_sonarr_log
|
||||
- arrstack_radarr_main
|
||||
- arrstack_radarr_log
|
||||
- arrstack_prowlarr_main
|
||||
- arrstack_prowlarr_log
|
||||
- arrstack_readarr_main
|
||||
- arrstack_readarr_log
|
||||
- arrstack_readarr_cache
|
||||
tasks:
|
||||
- name: Mount the media share to the VM
|
||||
ansible.builtin.include_tasks:
|
||||
file: ../tasks/mount_nfs.yml
|
||||
vars:
|
||||
mount_path: "/home/docker/media"
|
||||
mount_source: "10.89.0.15:/mnt/main/media"
|
||||
|
||||
- name: Create arrstack user on postgres
|
||||
ansible.builtin.include_tasks:
|
||||
file: '../tasks/postgres/create_user.yml'
|
||||
vars:
|
||||
user: arrstack
|
||||
password: password
|
||||
|
||||
- name: Create app databases on postgres
|
||||
ansible.builtin.include_tasks:
|
||||
file: '../tasks/postgres/create_database.yml'
|
||||
vars:
|
||||
database: "{{ item }}"
|
||||
loop: "{{ dbs }}"
|
||||
|
||||
- name: Give the arrstack user full privs on the databases
|
||||
ansible.builtin.include_tasks:
|
||||
file: '../tasks/postgres/give_user_full_privs.yml'
|
||||
vars:
|
||||
user: arrstack
|
||||
database: "{{ item }}"
|
||||
loop: "{{ dbs }}"
|
||||
|
||||
- name: Ensure config directories exist
|
||||
ansible.builtin.file:
|
||||
path: "{{ item.dest | dirname }}"
|
||||
state: directory
|
||||
mode: '0777'
|
||||
become: true
|
||||
loop: "{{ configs }}"
|
||||
|
||||
- name: Copy configuration files
|
||||
ansible.builtin.copy:
|
||||
src: "{{ item.src }}"
|
||||
dest: "{{ item.dest }}"
|
||||
owner: javi
|
||||
group: javi
|
||||
mode: '0777'
|
||||
loop: "{{ configs }}"
|
||||
|
||||
- name: Ensure docker compose folder exists
|
||||
ansible.builtin.file:
|
||||
path: /home/javi/docker/arrstack
|
||||
state: directory
|
||||
mode: '0777'
|
||||
become: true
|
||||
|
||||
- name: Copy docker-compose.yml to server
|
||||
ansible.builtin.copy:
|
||||
src: '../docker/arrstack/docker-compose.yml'
|
||||
dest: '/home/javi/docker/arrstack/docker-compose.yml'
|
||||
owner: javi
|
||||
group: javi
|
||||
mode: '0777'
|
||||
|
||||
- name: Copy docker .env to server
|
||||
ansible.builtin.copy:
|
||||
src: '../docker/arrstack/.env'
|
||||
dest: '/home/javi/docker/arrstack/.env'
|
||||
owner: javi
|
||||
group: javi
|
||||
mode: '0777'
|
||||
|
||||
- name: Start up the containers
|
||||
ansible.builtin.command: docker compose up -d
|
||||
args:
|
||||
chdir: /home/javi/docker/arrstack
|
||||
become: true
|
||||
|
||||
# - name: Restart just in case
|
||||
# ansible.builtin.command: docker compose restart
|
||||
# args:
|
||||
# chdir: /home/javi/docker/arrstack
|
||||
# become: true
|
30
playbooks/databases.yml
Normal file
30
playbooks/databases.yml
Normal file
@ -0,0 +1,30 @@
|
||||
# Also create users
|
||||
# Assign a user all priviledges on it's databases
|
||||
---
|
||||
- name: Ensure databases exist
|
||||
hosts: localhost
|
||||
connection: local
|
||||
vars_files:
|
||||
- ../../vars/pg_main.yml
|
||||
vars:
|
||||
dbs:
|
||||
- arrstack_sonarr_main
|
||||
- arrstack_sonarr_log
|
||||
- arrstack_radarr_main
|
||||
- arrstack_radarr_log
|
||||
- arrstack_readarr_main
|
||||
- arrstack_readarr_log
|
||||
- arrstack_lidarr_main
|
||||
- arrstack_lidarr_log
|
||||
- arrstack_prowlarr_main
|
||||
- arrstack_prowlarr_log
|
||||
- planeso
|
||||
- readeck
|
||||
- spacebin
|
||||
- linkwarden
|
||||
- opengist
|
||||
tasks:
|
||||
- include_tasks: "../tasks/create_db.yml"
|
||||
vars:
|
||||
name: "{{ item }}"
|
||||
loop: "{{ dbs }}"
|
10
playbooks/distribute_ssh_key.yml
Normal file
10
playbooks/distribute_ssh_key.yml
Normal file
@ -0,0 +1,10 @@
|
||||
---
|
||||
- name: Distribute SSH public key to my hosts
|
||||
hosts: all
|
||||
become: true
|
||||
tasks:
|
||||
- name: Add SSH key for remote user
|
||||
ansible.posix.authorized_key:
|
||||
user: javi
|
||||
state: present
|
||||
key: "{{ lookup('file', '/home/javi/.ssh/homelab_keypair_ed25519.pub') }}"
|
28
playbooks/ftp.yml
Normal file
28
playbooks/ftp.yml
Normal file
@ -0,0 +1,28 @@
|
||||
---
|
||||
- name: Setup FTP server on Ubuntu
|
||||
hosts: all
|
||||
become: true
|
||||
|
||||
tasks:
|
||||
- name: Update apt cache
|
||||
ansible.builtin.apt:
|
||||
update_cache: true
|
||||
|
||||
- name: Install proftpd package
|
||||
ansible.builtin.apt:
|
||||
name: proftpd
|
||||
state: present
|
||||
|
||||
- name: Ensure proftpd is enabled and started
|
||||
ansible.builtin.service:
|
||||
name: proftpd
|
||||
state: started
|
||||
enabled: true
|
||||
become: true
|
||||
|
||||
- name: Allow FTP through UFW firewall (if UFW is enabled)
|
||||
ansible.builtin.ufw:
|
||||
rule: allow
|
||||
port: 21
|
||||
proto: tcp
|
||||
ignore_errors: false
|
20
playbooks/initial_server_setup.yml
Normal file
20
playbooks/initial_server_setup.yml
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
- name: Set up a new virtual machine
|
||||
hosts: all
|
||||
become: true
|
||||
tasks:
|
||||
- name: Install Docker
|
||||
ansible.builtin.include_tasks:
|
||||
file: '../tasks/provisioning/install_docker.yml'
|
||||
- name: Pull and run the portainer agent
|
||||
community.docker.docker_container:
|
||||
name: portainer_agent
|
||||
image: portainer/agent:2.27.0
|
||||
state: started
|
||||
restart_policy: always
|
||||
published_ports:
|
||||
- "9001:9001"
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
- /var/lib/docker/volumes:/var/lib/docker/volumes
|
||||
- /:/host
|
42
playbooks/jellyfin.yml
Normal file
42
playbooks/jellyfin.yml
Normal file
@ -0,0 +1,42 @@
|
||||
---
|
||||
- name: Set up jellyfin
|
||||
hosts: streaming_services
|
||||
become: true
|
||||
tasks:
|
||||
- name: Mount the media share to the VM
|
||||
ansible.builtin.include_tasks:
|
||||
file: ../tasks/mount_nfs.yml
|
||||
vars:
|
||||
mount_path: "/home/docker/media"
|
||||
mount_source: "10.89.0.15:/mnt/main/media"
|
||||
|
||||
- name: Create app mount directory
|
||||
ansible.builtin.file:
|
||||
path: /home/docker/jellyfin
|
||||
state: directory
|
||||
mode: '0777'
|
||||
|
||||
- name: Ensure jellyfin docker compose folder exists
|
||||
ansible.builtin.file:
|
||||
path: /home/javi/docker/jellyfin
|
||||
state: directory
|
||||
mode: '0777'
|
||||
|
||||
- name: Ensure jellyseer docker compose folder exists
|
||||
ansible.builtin.file:
|
||||
path: /home/javi/docker/jellyseer
|
||||
state: directory
|
||||
mode: '0777'
|
||||
|
||||
- name: Copy docker-compose.yml to server
|
||||
ansible.builtin.copy:
|
||||
src: '../docker/jellyfin/docker-compose.yml'
|
||||
dest: '/home/javi/docker/jellyfin/docker-compose.yml'
|
||||
owner: javi
|
||||
group: javi
|
||||
mode: '0777'
|
||||
|
||||
- name: Start up the containers
|
||||
ansible.builtin.command: docker compose up -d
|
||||
args:
|
||||
chdir: /home/javi/docker/jellyfin
|
16
playbooks/standard_user.yml
Normal file
16
playbooks/standard_user.yml
Normal file
@ -0,0 +1,16 @@
|
||||
---
|
||||
- name: Create standardized admin on all hosts
|
||||
hosts: virtual_machines
|
||||
become: true
|
||||
vars:
|
||||
username: serveradmin
|
||||
password: "Cinnamonbun89$"
|
||||
tasks:
|
||||
- name: Create the standard user on the host
|
||||
ansible.builtin.user:
|
||||
name: "{{ username }}"
|
||||
state: present
|
||||
shell: /bin/bash
|
||||
create_home: true
|
||||
groups: sudo
|
||||
append: true
|
44
playbooks/webmin.yml
Normal file
44
playbooks/webmin.yml
Normal file
@ -0,0 +1,44 @@
|
||||
---
|
||||
- name: Install Webmin on Debian/Ubuntu
|
||||
hosts: all
|
||||
become: true
|
||||
tasks:
|
||||
- name: Install required dependencies
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- wget
|
||||
- apt-transport-https
|
||||
- software-properties-common
|
||||
state: present
|
||||
update_cache: true
|
||||
|
||||
- name: Add Webmin repository
|
||||
ansible.builtin.copy:
|
||||
dest: /etc/apt/sources.list.d/webmin.list
|
||||
content: "deb http://download.webmin.com/download/repository sarge contrib"
|
||||
owner: javi
|
||||
group: javi
|
||||
mode: '0777'
|
||||
|
||||
- name: Add Webmin GPG key
|
||||
ansible.builtin.apt_key:
|
||||
url: https://www.webmin.com/jcameron-key.asc
|
||||
state: present
|
||||
|
||||
- name: Update apt cache
|
||||
ansible.builtin.apt:
|
||||
update_cache: true
|
||||
|
||||
- name: Install Webmin with recommended packages
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- webmin
|
||||
state: present
|
||||
update_cache: true
|
||||
install_recommends: true
|
||||
|
||||
- name: Ensure Webmin service is enabled and running
|
||||
systemd:
|
||||
name: webmin
|
||||
enabled: true
|
||||
state: started
|
39
playbooks/wizarr.yml
Normal file
39
playbooks/wizarr.yml
Normal file
@ -0,0 +1,39 @@
|
||||
---
|
||||
- name: Set up wizarr
|
||||
hosts: streaming_services
|
||||
become: true
|
||||
tasks:
|
||||
- name: Create app DB
|
||||
ansible.builtin.include_tasks:
|
||||
file: '../tasks/create_app_db.yml'
|
||||
vars:
|
||||
app: wizarr
|
||||
|
||||
- name: Make sure UUID PG extension is installed
|
||||
ansible.builtin.include_tasks:
|
||||
file: '../tasks/postgres/install_extension.yml'
|
||||
vars:
|
||||
extension: uuid-ossp
|
||||
database: wizarr
|
||||
|
||||
- name: Ensure config directories exist
|
||||
ansible.builtin.file:
|
||||
path: "{{ item }}"
|
||||
state: directory
|
||||
mode: '0777'
|
||||
loop:
|
||||
- '/home/docker/wizarr'
|
||||
- '/home/javi/docker/wizarr'
|
||||
|
||||
- name: Copy docker-compose.yml to server
|
||||
ansible.builtin.copy:
|
||||
src: '../docker/wizarr/docker-compose.yml'
|
||||
dest: '/home/javi/docker/wizarr/docker-compose.yml'
|
||||
owner: javi
|
||||
group: javi
|
||||
mode: '0777'
|
||||
|
||||
- name: Start up the containers
|
||||
ansible.builtin.command: docker compose up -d
|
||||
args:
|
||||
chdir: /home/javi/docker/wizarr
|
20
tasks/create_app_db.yml
Normal file
20
tasks/create_app_db.yml
Normal file
@ -0,0 +1,20 @@
|
||||
---
|
||||
- name: Create db user
|
||||
ansible.builtin.include_tasks:
|
||||
file: './postgres/create_user.yml'
|
||||
vars:
|
||||
user: "{{ app }}"
|
||||
password: "password"
|
||||
|
||||
- name: Create database
|
||||
ansible.builtin.include_tasks:
|
||||
file: './postgres/create_database.yml'
|
||||
vars:
|
||||
database: "{{ app }}"
|
||||
|
||||
- name: Give user permissions on database
|
||||
ansible.builtin.include_tasks:
|
||||
file: './postgres/give_user_full_privs.yml'
|
||||
vars:
|
||||
database: "{{ app }}"
|
||||
user: "{{ app }}"
|
21
tasks/mount_nfs.yml
Normal file
21
tasks/mount_nfs.yml
Normal file
@ -0,0 +1,21 @@
|
||||
---
|
||||
- name: Ensure NFS client is installed
|
||||
ansible.builtin.package:
|
||||
name: nfs-common
|
||||
state: present
|
||||
become: true
|
||||
|
||||
- name: Create mount point directory
|
||||
ansible.builtin.file:
|
||||
path: "{{ mount_path }}"
|
||||
state: directory
|
||||
mode: '0777'
|
||||
become: true
|
||||
|
||||
- name: Mount share
|
||||
ansible.posix.mount:
|
||||
src: "{{ mount_source }}"
|
||||
path: "{{ mount_path }}"
|
||||
fstype: nfs
|
||||
state: mounted
|
||||
become: true
|
13
tasks/postgres/create_database.yml
Normal file
13
tasks/postgres/create_database.yml
Normal file
@ -0,0 +1,13 @@
|
||||
---
|
||||
- name: Load connection variables
|
||||
include_vars: "../vars/pg_main.yml"
|
||||
|
||||
- name: Create database
|
||||
delegate_to: localhost
|
||||
community.postgresql.postgresql_db:
|
||||
name: "{{ database }}"
|
||||
state: present
|
||||
login_host: "{{ db_host }}"
|
||||
login_port: "{{ db_port }}"
|
||||
login_user: "{{ db_user }}"
|
||||
login_password: "{{ db_password }}"
|
14
tasks/postgres/create_user.yml
Normal file
14
tasks/postgres/create_user.yml
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Include connection variables
|
||||
ansible.builtin.include_vars: "../vars/pg_main.yml"
|
||||
|
||||
- name: Create postgres user
|
||||
delegate_to: localhost
|
||||
community.postgresql.postgresql_user:
|
||||
name: "{{ user }}"
|
||||
password: "{{ password }}"
|
||||
state: present
|
||||
login_host: "{{ db_host }}"
|
||||
login_port: "{{ db_port }}"
|
||||
login_user: "{{ db_user }}"
|
||||
login_password: "{{ db_password }}"
|
17
tasks/postgres/give_user_full_privs.yml
Normal file
17
tasks/postgres/give_user_full_privs.yml
Normal file
@ -0,0 +1,17 @@
|
||||
---
|
||||
- name: Include connection variables
|
||||
include_vars: "../vars/pg_main.yml"
|
||||
|
||||
- name: Give user full priviledges on database
|
||||
delegate_to: localhost
|
||||
community.postgresql.postgresql_privs:
|
||||
db: "{{ database }}"
|
||||
type: schema
|
||||
objs: public
|
||||
privs: ALL
|
||||
role: "{{ user }}"
|
||||
state: present
|
||||
login_host: "{{ db_host }}"
|
||||
login_port: "{{ db_port }}"
|
||||
login_user: "{{ db_user }}"
|
||||
login_password: "{{ db_password }}"
|
14
tasks/postgres/install_extension.yml
Normal file
14
tasks/postgres/install_extension.yml
Normal file
@ -0,0 +1,14 @@
|
||||
---
|
||||
- name: Load connection variables
|
||||
include_vars: "../vars/pg_main.yml"
|
||||
|
||||
- name: Install extension on database
|
||||
delegate_to: localhost
|
||||
community.postgresql.postgresql_ext:
|
||||
name: "{{ extension }}"
|
||||
db: "{{ database }}"
|
||||
state: present
|
||||
login_host: "{{ db_host }}"
|
||||
login_port: "{{ db_port }}"
|
||||
login_user: "{{ db_user }}"
|
||||
login_password: "{{ db_password }}"
|
54
tasks/provisioning/install_docker.yml
Normal file
54
tasks/provisioning/install_docker.yml
Normal file
@ -0,0 +1,54 @@
|
||||
---
|
||||
- name: Update apt cache
|
||||
ansible.builtin.apt:
|
||||
update_cache: yes
|
||||
|
||||
- name: Install prerequisite packages
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- ca-certificates
|
||||
- curl
|
||||
state: present
|
||||
|
||||
- name: Create apt keyrings directory
|
||||
ansible.builtin.file:
|
||||
path: /etc/apt/keyrings
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: Download Docker GPG key
|
||||
ansible.builtin.get_url:
|
||||
url: "https://download.docker.com/linux/ubuntu/gpg"
|
||||
dest: /etc/apt/keyrings/docker.asc
|
||||
mode: '0644'
|
||||
|
||||
- name: Add Docker apt repository
|
||||
ansible.builtin.apt_repository:
|
||||
repo: "deb [arch={{ docker_arch }} signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu {{ ansible_distribution_release }} stable"
|
||||
filename: docker
|
||||
state: present
|
||||
vars:
|
||||
docker_arch: "{{ ansible_architecture | regex_replace('x86_64', 'amd64') }}"
|
||||
|
||||
- name: Update apt cache after adding Docker repository
|
||||
ansible.builtin.apt:
|
||||
update_cache: yes
|
||||
|
||||
- name: Install Docker packages
|
||||
ansible.builtin.apt:
|
||||
name:
|
||||
- docker-ce
|
||||
- docker-ce-cli
|
||||
- containerd.io
|
||||
- docker-buildx-plugin
|
||||
- docker-compose-plugin
|
||||
state: present
|
||||
|
||||
# - name: Test Docker installation by running hello-world
|
||||
# ansible.builtin.command: docker run hello-world
|
||||
# register: docker_test
|
||||
# ignore_errors: yes
|
||||
|
||||
# - name: Display Docker test output
|
||||
# ansible.builtin.debug:
|
||||
# msg: "{{ docker_test.stdout }}"
|
4
vars/pg_main.yml
Normal file
4
vars/pg_main.yml
Normal file
@ -0,0 +1,4 @@
|
||||
db_host: 10.89.0.102
|
||||
db_port: 5432
|
||||
db_user: postgres
|
||||
db_password: password
|
Loading…
x
Reference in New Issue
Block a user