Add Homarr support

This commit is contained in:
Luctia
2025-05-02 16:09:26 +02:00
parent d6433a0b84
commit d4263027db
4 changed files with 37 additions and 4 deletions

View File

@@ -19,6 +19,7 @@ It's set up to follow the [TRaSH guidelines](https://trash-guides.info/Hardlinks
the process within Prowlarr is the same as for the other containers (add app). You'll have to add the process within Prowlarr is the same as for the other containers (add app). You'll have to add
an API key within Mylar3, yourself. an API key within Mylar3, yourself.
- [Audiobookshelf](https://www.audiobookshelf.org/) is a self-hosted audiobook and podcast server. - [Audiobookshelf](https://www.audiobookshelf.org/) is a self-hosted audiobook and podcast server.
- [Homarr](https://homarr.dev/) is _a sleek, modern dashboard that puts all of your apps and services at your fingertips._
- [Prowlarr](https://wiki.servarr.com/prowlarr) can keep track of indexers, which are services that - [Prowlarr](https://wiki.servarr.com/prowlarr) can keep track of indexers, which are services that
keep track of Torrent or UseNet links. One can search an indexer for certain content and find a keep track of Torrent or UseNet links. One can search an indexer for certain content and find a
where to download this. **Note**: when adding an indexer, please do not set the "seed ratio" to where to download this. **Note**: when adding an indexer, please do not set the "seed ratio" to
@@ -42,8 +43,8 @@ It's set up to follow the [TRaSH guidelines](https://trash-guides.info/Hardlinks
- [Jellyseerr](https://github.com/Fallenbagel/jellyseerr) is like Overseerr, but for Jellyfin. - [Jellyseerr](https://github.com/Fallenbagel/jellyseerr) is like Overseerr, but for Jellyfin.
## Requirements ## Requirements
Currently this script only works on Linux. There is a chance that the sample docker compose file will work on Windows, although untested. Currently, this script only works on Linux. There is a chance that the sample docker compose file will work on Windows,
The only requirements other than that are **Python 3** and **docker** with **docker-compose-v2**. although untested. The only requirements other than that are **Python 3** and **docker** with **docker-compose-v2**.
While this script _may_ work on docker-compose-v1 it's made to be and highly recommended to be run using v2. While this script _may_ work on docker-compose-v1 it's made to be and highly recommended to be run using v2.
The easiest way to install these dependencies on Ubuntu and other Debian-based distors is by running: The easiest way to install these dependencies on Ubuntu and other Debian-based distors is by running:
``` ```
@@ -73,7 +74,8 @@ If you're coming from an older version or reinstalling with different IDs, run `
6. Take a look at the `docker-compose.yml` file. If there are services you would like to ignore 6. Take a look at the `docker-compose.yml` file. If there are services you would like to ignore
(for example, running PleX and Jellyfin at the same time is a bit unusual), you can comment them (for example, running PleX and Jellyfin at the same time is a bit unusual), you can comment them
out by placing `#` in front of the lines. This ensures they are ignored by Docker compose. out by placing `#` in front of the lines. This ensures they are ignored by Docker compose.
Double check that your .env file is set up properly. Double check that your .env file is set up properly. Also make sure to add a newly generated encryption key to the
Homarr section, if you want to use it.
7. Run `docker compose up -d` to start the containers. If it complains about permissions run the following commands to add your current user to the docker group and apply changes: 7. Run `docker compose up -d` to start the containers. If it complains about permissions run the following commands to add your current user to the docker group and apply changes:
``` ```
sudo groupadd docker sudo groupadd docker

View File

@@ -17,6 +17,7 @@ class ContainerConfig:
self.comic_dir = root_dir + '/media/comics' self.comic_dir = root_dir + '/media/comics'
self.torrent_dir = root_dir + '/data/torrents' self.torrent_dir = root_dir + '/data/torrents'
self.usenet_dir = root_dir + '/data/usenet' self.usenet_dir = root_dir + '/data/usenet'
self.homarr_dir = root_dir + '/data/homarr/appdata'
self.UID = os.popen('id -u').read().rstrip('\n') self.UID = os.popen('id -u').read().rstrip('\n')
def plex(self): def plex(self):
@@ -213,6 +214,22 @@ class ContainerConfig:
' restart: unless-stopped\n\n' ' restart: unless-stopped\n\n'
) )
def homarr(self):
key = os.urandom(124).hex()
return (
' homarr:\n'
' image: ghcr.io/homarr-labs/homarr:latest\n'
' container_name: homarr\n'
' environment:\n'
' - SECRET_ENCRYPTION_KEY=' + key + '\n'
' volumes:\n'
' - ' + self.homarr_dir + ':/appdata\n'
' - /var/run/docker.sock:/var/run/docker.sock\n'
' ports:\n'
' - "7575:7575"\n'
' restart: unless-stopped\n\n'
)
def qbittorrent(self): def qbittorrent(self):
return ( return (
' qbittorrent:\n' ' qbittorrent:\n'

View File

@@ -145,6 +145,18 @@ services:
ports: ports:
- "9696:9696" - "9696:9696"
restart: unless-stopped restart: unless-stopped
homarr:
container_name: homarr
image: ghcr.io/homarr-labs/homarr:latest
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock # Optional, only if you want docker integration
- ./homarr/appdata:/appdata
environment:
- SECRET_ENCRYPTION_KEY=
ports:
- "7575:7575"
jackett: jackett:
image: lscr.io/linuxserver/jackett:latest image: lscr.io/linuxserver/jackett:latest

View File

@@ -59,6 +59,8 @@ print('Use Mylar3? [Y/n]', end=" ")
take_input('mylar3', 'servarr') take_input('mylar3', 'servarr')
print('Use Audiobookshelf? [Y/n]', end=" ") print('Use Audiobookshelf? [Y/n]', end=" ")
take_input('audiobookshelf', 'servarr') take_input('audiobookshelf', 'servarr')
print('Use Homarr? [Y/n]', end=" ")
take_input('homarr', 'servarr')
if len(services_classed['servarr']) == 0: if len(services_classed['servarr']) == 0:
print('Warning: no media management services selected.') print('Warning: no media management services selected.')
if services_classed['servarr'].__contains__('sonarr') or services_classed['servarr'].__contains__('radarr'): if services_classed['servarr'].__contains__('sonarr') or services_classed['servarr'].__contains__('radarr'):
@@ -122,7 +124,7 @@ print('\n===CONFIGURATION===')
print('Please enter your timezone (like "Europe/Amsterdam") or press enter to use your system\'s configured timezone:', end=' ') print('Please enter your timezone (like "Europe/Amsterdam") or press enter to use your system\'s configured timezone:', end=' ')
timezone = input() timezone = input()
if (timezone == ''): if timezone == '':
timezone = get_system_timezone() timezone = get_system_timezone()
if len(timezone) == 0: # if user pressed enter and reading timezone from /etc/localtime failed then default to Amsterdam if len(timezone) == 0: # if user pressed enter and reading timezone from /etc/localtime failed then default to Amsterdam