arnaucube
arnaucube/configsPublic Self-hosted repository
configs/server-dockers/docker-compose.yml
server-dockers/docker-compose.ymlRaw
  1#version: '3.8'
  2
  3#
  4# More info: https://arnaucube.com/media-setup/
  5#
  6#
  7# Usage
  8# -----
  9# - All commands from inside the same directory where this file is placed.
 10# - Replace the `/mnt/usb` to your custom location, usually an external hard
 11#   drive.
 12#
 13# Before running: mount the external hard drive!!
 14# > sudo mount /dev/sda /mnt/usb
 15#
 16# Run:
 17# > sudo docker compose up -d
 18#
 19# Stop:
 20# > sudo docker compose stop
 21#
 22# Remove containers (since the volumes are mapped to local directories, they
 23# will persist):
 24# > sudo docker compose down
 25#
 26#
 27# NOTE: the configurations is in the SSD disk, while the movies, shows, music are in the HHD
 28#
 29# Port of each service:
 30# - jellyfin: 8096
 31# - # emby: 8097
 32# - wallabag: 8098
 33# - slskd: 8099
 34# - metube: 8100
 35# - sonarr: 8101
 36# - prowlarr: 8102
 37# - bazarr: 8103
 38# - radarr: 8104
 39# - qui: 8105
 40# - jellystat: 8106
 41# - lingarr: 8107
 42# - libretranslate: 8108
 43# - lidarr: 8109
 44# - swiparr: 8110
 45# - jellyfin-news: 8111
 46# - qbittorrent: 8080
 47# - homepage: 8000
 48# - grafana: 3000
 49
 50services:
 51  jellyfin:
 52    image: jellyfin/jellyfin
 53    container_name: jellyfin
 54    ports:
 55      - "8096:8096"
 56    volumes:
 57      - /home/beelink/configurations/jellyfin:/config
 58      - /mnt/usb:/media
 59    restart: unless-stopped
 60    environment:
 61      - JELLYFIN_PublishedServerUrl=https://jellyfin.myserver.com
 62    devices:
 63      - /dev/dri/renderD128:/dev/dri/renderD128 # hardware accelerated transcoding
 64    group_add:
 65      - "993" # obtained from `getent group render | cut -d: -f3`
 66    networks:
 67      - cloudflared_net
 68
 69  wallabag:
 70    image: wallabag/wallabag
 71    container_name: wallabag
 72    ports:
 73      - "8098:80"
 74    volumes:
 75      - /home/beelink/configurations/wallabag/data:/var/www/wallabag/data
 76      - /home/beelink/configurations/wallabag/images:/var/www/wallabag/web/assets/images
 77    environment:
 78      - SYMFONY__ENV__DOMAIN_NAME=http://192.168.1.155:8098
 79    restart: unless-stopped
 80
 81  slskd:
 82    image: slskd/slskd
 83    container_name: slskd
 84    ports:
 85      - "8099:5030"
 86      - "50300:50300"
 87    volumes:
 88      - /home/beelink/configurations/slskd:/app
 89      - /mnt/usb/audio/slskd-downloads:/downloads # isolate it in a subdir, since slskd removes arbitrary files on that dir
 90    environment:
 91      - SLSKD_REMOTE_CONFIGURATION=true
 92    restart: unless-stopped
 93
 94  metube:
 95    image: ghcr.io/alexta69/metube
 96    container_name: metube
 97    ports:
 98      - "8100:8081"
 99    volumes:
100      - /mnt/usb/audio/from-youtube:/downloads
101    restart: unless-stopped
102
103  sonarr:
104    image: lscr.io/linuxserver/sonarr:latest
105    container_name: sonarr
106    environment:
107      - PUID=1000
108      - PGID=1000
109      - TZ=Europe/Amsterdam
110    volumes:
111      - /home/beelink/configurations/sonarr:/config
112      - /mnt/usb/torrent-downloads:/downloads
113      - /mnt/usb/shows:/data/shows
114    ports:
115      - 8101:8989
116    restart: unless-stopped
117
118  radarr:
119    image: lscr.io/linuxserver/radarr:latest
120    container_name: radarr
121    environment:
122      - PUID=1000
123      - PGID=1000
124      - TZ=Europe/Amsterdam
125    volumes:
126      - /home/beelink/configurations/radarr:/config
127      - /mnt/usb/torrent-downloads:/downloads
128      - /mnt/usb/movies:/movies
129    ports:
130      - 8104:7878
131    restart: unless-stopped
132
133  lidarr:
134    image: lscr.io/linuxserver/lidarr:latest
135    container_name: lidarr
136    environment:
137      - PUID=1000
138      - PGID=1000
139      - TZ=Europe/Amsterdam
140    volumes:
141      - /home/beelink/configurations/lidarr/config:/config
142      - /mnt/usb/audio:/music
143      - /mnt/usb/torrent-downloads:/downloads
144    ports:
145      - 8109:8686
146    restart: unless-stopped
147
148  bazarr:
149    image: lscr.io/linuxserver/bazarr:latest
150    container_name: bazarr
151    environment:
152      - PUID=1000
153      - PGID=1000
154      - TZ=Europe/Amsterdam
155    volumes:
156      - /home/beelink/configurations/bazarr:/config
157      - /mnt/usb/shows:/data/shows
158      - /mnt/usb/movies:/movies
159    ports:
160      - 8103:6767
161    restart: unless-stopped
162
163  lingarr:
164    image: ghcr.io/lingarr-translate/lingarr:latest # or lingarr/lingarr:latest
165    container_name: lingarr
166    restart: unless-stopped
167    environment:
168      - ASPNETCORE_URLS=http://+:9876
169      - DB_CONNECTION=mysql
170      - DB_HOST=lingarr-db
171      - DB_PORT=3306
172      - DB_DATABASE=lingarr
173      - DB_USERNAME=lingarr
174      - DB_PASSWORD=YOUR_DB_PASSW_HERE
175    ports:
176      - "8107:9876"
177    volumes:
178      - /mnt/usb/movies:/movies
179      - /mnt/usb/shows:/tv
180      - /home/beelink/configurations/lingarr:/app/config
181    # networks:
182    #   - lingarr
183    depends_on:
184      lingarr-db:
185        condition: service_healthy
186
187  lingarr-db:
188    image: mariadb:latest
189    container_name: lingarr-db
190    restart: unless-stopped
191    environment:
192      - MYSQL_DATABASE=lingarr
193      - MYSQL_USER=lingarr
194      - MYSQL_PASSWORD=YOUR_DB_PASSW_HERE
195      - MYSQL_ROOT_PASSWORD=YOUR_DB_PASSW_HERE
196    volumes:
197      - /home/beelink/configurations/lingarr:/var/lib/mysql
198    # networks:
199    #   - lingarr
200    healthcheck:
201      test: "mariadb $$MYSQL_DATABASE -u$$MYSQL_USER -p$$MYSQL_PASSWORD -e 'SELECT 1;'"
202      interval: 10s
203      timeout: 5s
204      retries: 5
205
206  LibreTranslate:
207    container_name: LibreTranslate
208    image: libretranslate/libretranslate:latest
209    restart: unless-stopped
210    environment:
211      - LT_LOAD_ONLY=en,es,ca
212      - LT_WORKERS=2
213    user: "1000:1000"
214    ports:
215      - 8108:5000
216    volumes:
217      # NOTE: on first run, needs:
218      # rm -rf ./libretranslate
219      # mkdir ./libretranslate/.config
220      # sudo chown -R 1000:1000 ./libretranslate/.config
221      # sudo chmod -R 755 ./libretranslate/.config
222      #
223      - /home/beelink/configurations/libretranslate:/home/libretranslate/.local
224      - /home/beelink/configurations/libretranslate/.config:/home/libretranslate/.config
225    healthcheck:
226      test: ["CMD-SHELL", "./venv/bin/python scripts/healthcheck.py"]
227
228  prowlarr:
229    container_name: prowlarr
230    image: ghcr.io/hotio/prowlarr
231    ports:
232      - "8102:9696"
233    environment:
234      - PUID=1000
235      - PGID=1000
236      - UMASK=002
237      - TZ=Europe/Amsterdam
238    volumes:
239      - /home/beelink/configurations/prowlarr:/config
240    restart: unless-stopped
241
242  qbittorrent-nox:
243    image: qbittorrentofficial/qbittorrent-nox:latest
244    container_name: qbittorrent-nox
245    ports:
246      - "8080:8080"
247      - "6881:6881/tcp"  # Torrent listening port
248      - "6881:6881/udp"
249    volumes:
250      - /home/beelink/configurations/qbittorrent:/config
251      - /mnt/usb/torrent-downloads:/downloads
252    environment:
253      - QBT_LEGAL_NOTICE=confirm
254      - WEBUI_PORT=8080
255    restart: unless-stopped
256
257  qui:
258    image: ghcr.io/autobrr/qui:latest
259    container_name: qui
260    restart: unless-stopped
261    ports:
262      - "8105:7476"
263    volumes:
264      - ./qui:/config
265
266  jellystat-db:
267    image: 'postgres:15.2'
268    shm_size: 1gb
269    container_name: jellystat-db
270    restart: unless-stopped
271    environment:
272      POSTGRES_USER: postgres
273      POSTGRES_PASSWORD: YOUR_DB_PASSW_HERE
274    volumes:
275      - '/home/beelink/configurations/postgres:/var/lib/postgresql/data'
276  jellystat:
277    image: 'cyfershepard/jellystat:latest'
278    container_name: jellystat
279    restart: unless-stopped
280    environment:
281      POSTGRES_USER: postgres
282      POSTGRES_PASSWORD: YOUR_DB_PASSW_HERE
283      POSTGRES_IP: jellystat-db
284      POSTGRES_PORT: 5432
285      JWT_SECRET: YOUR_JWT_SECRET_HERE
286      TZ: Europe/Madrid
287      MINIMUM_SECONDS_TO_INCLUDE_PLAYBACK: 300
288    volumes:
289      - '/home/beelink/configurations/jellystat-backup-data:/app/backend/backup-data'
290    ports:
291      - '8106:3000'
292    depends_on:
293      - jellystat-db
294
295  swiparr:
296    image: ghcr.io/m3sserstudi0s/swiparr:latest
297    container_name: swiparr
298    restart: unless-stopped
299    environment:
300      - PROVIDER=jellyfin
301      - JELLYFIN_URL=http://192.168.1.155:8096
302      - JELLYFIN_PUBLIC_URL=https://jellyfin.myserver.com
303    volumes:
304      - /home/beelink/configurations/swiparr:/app/data
305    ports:
306      - 8110:4321
307
308
309    jellyfin-news:
310      build: ./jellyfin-tools/jellyfin-news
311      restart: unless-stopped
312      env_file: ./jellyfin-tools/jellyfin-news/.env
313      ports:
314        - "8111:8080"
315
316  homepage:
317    image: ghcr.io/gethomepage/homepage:latest
318    container_name: homepage
319    environment:
320      HOMEPAGE_ALLOWED_HOSTS: 192.168.1.155:8000 # required, may need port. See gethomepage.dev/installation/#homepage_allowed_hosts
321    sysctls:
322      - net.ipv6.conf.all.disable_ipv6=1
323    ports:
324      - 8000:3000
325    volumes:
326      - /home/beelink/configurations/homepage:/app/config
327      - /mnt/usb:/mnt/usb:ro
328    restart: unless-stopped
329
330  # metrics related:
331  prometheus:
332    image: prom/prometheus:latest
333    container_name: prometheus
334    ports:
335      - "9090:9090"
336    volumes:
337      - ./prometheus.yml:/etc/prometheus/prometheus.yml
338      - prometheus_data:/prometheus
339    networks:
340      - monitoring
341    restart: unless-stopped
342 
343  node-exporter:
344    image: prom/node-exporter:latest
345    container_name: node-exporter
346    ports:
347      - "9100:9100"
348    volumes:
349      - /:/host:ro
350    networks:
351      - monitoring
352    restart: unless-stopped
353 
354  grafana:
355    image: grafana/grafana:latest
356    container_name: grafana
357    ports:
358      - "3000:3000"
359    environment:
360      - GF_SECURITY_ADMIN_PASSWORD=YOURPASSWORDHERE
361    volumes:
362      - grafana_data:/var/lib/grafana
363    networks:
364      - monitoring
365    depends_on:
366      - prometheus
367    restart: unless-stopped
368
369  cloudflared:
370    image: cloudflare/cloudflared:latest
371    container_name: cloudflared
372    restart: unless-stopped
373    command: tunnel run
374    volumes:
375      - /home/beelink/server-dockers/cloudflared:/etc/cloudflared
376      - /home/beelink/server-dockers/cloudflared/config:/home/nonroot/.cloudflared
377    networks:
378      - cloudflared_net
379    extra_hosts:
380      - "host.docker.internal:host-gateway"
381
382networks:
383  cloudflared_net:
384    driver: bridge
385  monitoring:
386    driver: bridge
387  # lingarr:
388  #   external: true
389
390volumes:
391 prometheus_data:
392   driver: local
393 grafana_data:
394   driver: local