Coolify Setup: Application Deployment with Self-Hosted PaaS
Coolify installation, Docker and Git integration, application deployment, database management, SSL certificates, environment variables, and self-hosted PaaS alternative to Heroku/Netlify.
Jellyfin Docker installation, media library configuration, hardware transcoding, user management, remote access, Nginx reverse proxy and client applications.
Jellyfin is a free and open-source media server that lets you manage and stream your movies, TV shows, music, and photos from your own server. Unlike Plex and Emby, it is completely free and requires no subscription. You can access your media from all your devices and share it with friends.
Jellyfin started as an open-source fork of Emby and has grown into an independent project. Key features:
version: '3.8'
services:
jellyfin:
image: jellyfin/jellyfin:latest
container_name: jellyfin
restart: unless-stopped
user: "1000:1000"
environment:
- JELLYFIN_PublishedServerUrl=https://jellyfin.example.com
volumes:
- ./config:/config
- ./cache:/cache
- /mnt/media/movies:/media/movies:ro
- /mnt/media/tvshows:/media/tvshows:ro
- /mnt/media/music:/media/music:ro
ports:
- "127.0.0.1:8096:8096"
# For hardware transcoding (Intel)
devices:
- /dev/dri:/dev/dri
# Start the container
docker compose up -d
# Check logs
docker logs jellyfin -f
Mounting media directories as :ro (read-only) is recommended for security. Jellyfin doesn't need to modify media files.
/mnt/media/
├── movies/
│ ├── Inception (2010)/
│ │ └── Inception (2010).mkv
│ └── The Matrix (1999)/
│ └── The Matrix (1999).mp4
├── tvshows/
│ └── Breaking Bad/
│ ├── Season 01/
│ │ ├── S01E01.mkv
│ │ └── S01E02.mkv
│ └── Season 02/
└── music/
└── Artist/
└── Album/
└── 01 - Track.flac
After installation, go to http://SERVER_IP:8096:
/media/movies, /media/tvshows, etc.Dashboard → Libraries → [Library] → Edit
For Movies:
- TheMovieDb (TMDB) - recommended
- IMDb
- The Open Movie Database
For TV Shows:
- TheTVDB - recommended
- TheMovieDb
# Trigger manual scan (via API)
curl -X POST "http://localhost:8096/Library/Refresh" \
-H "X-Emby-Token: API_TOKEN"
# Scheduled scan: Dashboard → Scheduled Tasks
# docker-compose.yml
services:
jellyfin:
devices:
- /dev/dri:/dev/dri
group_add:
- "109" # render group
# Verify Intel GPU is available
ls /dev/dri
# Output: card0 renderD128
# Get render group ID
stat -c '%g' /dev/dri/renderD128
Enable in Jellyfin:
Dashboard → Playback → Transcoding
→ Hardware acceleration: Intel QuickSync (QSV)
→ Enable: H.264, H.265, VP9
# docker-compose.yml
services:
jellyfin:
image: jellyfin/jellyfin:latest
runtime: nvidia
environment:
- NVIDIA_VISIBLE_DEVICES=all
- NVIDIA_DRIVER_CAPABILITIES=all
# Install NVIDIA Container Toolkit
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | \
tee /etc/apt/sources.list.d/nvidia-docker.list
apt update && apt install -y nvidia-container-toolkit
nvidia-ctk runtime configure --runtime=docker
systemctl restart docker
Dashboard → Users → New User
- Username and password
- Library access permissions
- Parental controls (content rating)
- Remote access permission
User Settings → Parental Controls
- Maximum content rating: G, PG, PG-13, R
- Block access to specific libraries
- PIN protection
server {
listen 80;
server_name jellyfin.example.com;
return 301 https://$host$request_uri;
}
server {
listen 443 ssl http2;
server_name jellyfin.example.com;
ssl_certificate /etc/letsencrypt/live/jellyfin.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/jellyfin.example.com/privkey.pem;
add_header X-Frame-Options "SAMEORIGIN";
add_header X-Content-Type-Options "nosniff";
location / {
proxy_pass http://127.0.0.1:8096;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_buffering off;
proxy_read_timeout 3600;
}
}
https://jellyfin.example.com# Backup Jellyfin configuration
tar -czf jellyfin-config-$(date +%Y%m%d).tar.gz ./config/
# Automated backup
cat > /etc/cron.weekly/jellyfin-backup << 'EOF'
#!/bin/bash
tar -czf /backups/jellyfin-$(date +%Y%m%d).tar.gz /opt/jellyfin/config/
find /backups -name "jellyfin-*.tar.gz" -mtime +60 -delete
EOF
chmod +x /etc/cron.weekly/jellyfin-backup
You can use hardware transcoding on REXE dedicated servers. Our servers with Intel or NVIDIA GPUs are ideal for 4K content.
Jellyfin is completely free and open-source; unlike Plex, there is no subscription or premium feature. Plex may be more mature and user-friendly, but some features (offline sync, 4K transcoding) require Plex Pass. Jellyfin offers all features for free and your data is entirely under your control.
Hardware transcoding performs video conversion with the GPU instead of the CPU. This reduces CPU usage to 5-15% (vs 80-100% with CPU), supports more simultaneous streams, and enables smooth 4K playback. Intel QSV, NVIDIA NVENC, or AMD AMF compatible GPUs can be used.
You need to follow Jellyfin's file naming conventions. For movies: use 'Movie Name (Year)/Movie Name (Year).mkv' format. For TV shows: use 'Show Name/Season XX/S01E01.mkv' format. Special characters and incorrect year information can cause recognition issues. Search TMDB or TVDB to find the correct name.
Check your internet bandwidth. At least 25 Mbps upload speed is required for 4K content. If transcoding is enabled, check server CPU/GPU capacity. In Jellyfin, select a specific bitrate instead of 'Auto' quality. Enabling hardware transcoding significantly improves performance.
Create new users from Dashboard → Users. You can set library access permissions separately for each user. Add content restrictions with parental controls. Users can connect to Jellyfin from their own devices.
If using Docker: run docker compose pull && docker compose up -d. This updates only the Jellyfin image while preserving your configuration. It's recommended to back up the config directory before updating. Read release notes for major version updates.
Coolify installation, Docker and Git integration, application deployment, database management, SSL certificates, environment variables, and self-hosted PaaS alternative to Heroku/Netlify.
Nextcloud installation with Docker, Apache/Nginx configuration, database setup, SSL certificate, file synchronization, app store, and performance optimization.
Portainer CE installation, Docker and Kubernetes management, stack deployment, volume/network management, user authorization, webhook and GitOps integration.