This shows you the differences between two versions of the page.
| Next revision | Previous revision | ||
| computing:navidrome [2025/10/29 02:40] – created oemb1905 | computing:navidrome [2025/10/29 02:57] (current) – oemb1905 | ||
|---|---|---|---|
| Line 11: | Line 11: | ||
| ------------------------------------------- | ------------------------------------------- | ||
| - | This tutorial is for Debian Trixie users seeking to set up a production-ready Navidrome server. I used virsh+qemu to make a VM with 8TB of storage, and the VM is set up with a LAMP stack, a reverse proxy with Let's Encrypt, automated syncing, scanning, and some hardening measures. Im using fpm with the mpm_event handler for concurrency. My standard fail2ban setup is in place for protection. This instance is designed for public listening. The library is imaged off my master library via a remote source and includes aggressive cover art fetching. | + | This tutorial is for Debian Trixie users seeking to set up a production-ready Navidrome server. I used virsh+qemu to make a VM with 8TB of storage, and the VM is set up with a LAMP stack, a reverse proxy with Let's Encrypt, automated syncing, scanning, and some hardening measures. Im using fpm with the mpm_event handler for concurrency. My standard fail2ban setup is in place for protection. This instance is designed for public listening. The library is imaged off my master library via a remote source and includes aggressive cover art fetching. |
| - | + | ||
| - | Initial VM Prep and Navidrome Installation | + | |
| sudo apt update && sudo apt upgrade -y | sudo apt update && sudo apt upgrade -y | ||
| sudo apt install ffmpeg wget nano curl snapd ufw fail2ban postfix apache2 php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd php8.4-mbstring php8.4-xml php8.4-zip | sudo apt install ffmpeg wget nano curl snapd ufw fail2ban postfix apache2 php8.4-fpm php8.4-mysql php8.4-curl php8.4-gd php8.4-mbstring php8.4-xml php8.4-zip | ||
| - | Download | + | Next, we download |
| wget https:// | wget https:// | ||
| sudo apt install ./ | sudo apt install ./ | ||
| - | Set up music dir: | + | Let's set up a music directory: |
| sudo mkdir -p / | sudo mkdir -p / | ||
| Line 30: | Line 28: | ||
| sudo find / | sudo find / | ||
| - | Apache Reverse Proxy and Let's Encrypt and associated modules: | + | Make sure you enable proper modules |
| sudo a2enmod proxy proxy_http ssl headers rewrite proxy_fcgi setenvif | sudo a2enmod proxy proxy_http ssl headers rewrite proxy_fcgi setenvif | ||
| Line 36: | Line 34: | ||
| sudo a2dismod mpm_prefork php8.4 | sudo a2dismod mpm_prefork php8.4 | ||
| sudo a2enmod mpm_event | sudo a2enmod mpm_event | ||
| + | |||
| + | Setup regular Let's Encrypt with the default vhost and and then replace the vhost with the reverse proxy once everything is setup. Let's setup Let's Encrypt and TLS: | ||
| + | |||
| + | sudo a2ensite gnulinux.studio.conf | ||
| + | sudo apache2ctl configtest | ||
| + | sudo apt install certbot letsencrypt python3-certbot-apache | ||
| + | sudo certbot --authenticator standalone --installer apache -d gnulinux.studio --pre-hook " | ||
| | | ||
| - | Create vhost '' | + | Once the default configuration is working for both http and https, disable the let's encrypt configuration with '' |
| < | < | ||
| Line 64: | Line 69: | ||
| </ | </ | ||
| - | Enable | + | Since TLS was already setup under the regular vhost, and the reverse proxy configuration simply uses the same cert, you can just drop this in and restart apache '' |
| - | + | ||
| - | sudo a2ensite gnulinux.studio.conf | + | |
| - | sudo apache2ctl configtest | + | |
| - | sudo apt install certbot letsencrypt python3-certbot-apache | + | |
| - | sudo certbot --authenticator standalone --installer apache -d gnulinux.studio --pre-hook " | + | |
| - | + | ||
| - | Tune mpm_event in '' | + | |
| StartServers 4 | StartServers 4 | ||
| Line 82: | Line 80: | ||
| ServerLimit 16 | ServerLimit 16 | ||
| | | ||
| - | Once you've adjusted this, restart apache with '' | + | Once you've adjusted this, restart apache with '' |
| pm = dynamic | pm = dynamic | ||
| Line 130: | Line 128: | ||
| touch / | touch / | ||
| echo " | echo " | ||
| - | sudo rsync -ai --log-file=/ | + | sudo rsync -ai --log-file=/ |
| echo " | echo " | ||
| rm / | rm / | ||