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