[{"data":1,"prerenderedAt":202},["ShallowReactive",2],{"seo-verification":3,"blog-hosting-filebrowser-on-your-own-vps-ma-en":6,"promo-bar-likely":201},{"google":4,"bing":5},"EycwPY2XMyTkVzas3n1ygeNJFGAH513qrMjfDljzsMQ","",{"key":7,"data":8},"blog-hosting-filebrowser-on-your-own-vps-ma-en",{"id":9,"slug":10,"slugs":11,"title":15,"excerpt":16,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":20,"updatedAt":21,"category":22,"categories":27,"featuredImage":29,"bgImage":30,"posterImage":31,"relatedSolution":32,"intro":35,"sections":36,"ctaTitle":143,"ctaBody":144,"ctaButton":145,"ctaUrl":146,"relatedPosts":147},90,"hosting-filebrowser-on-your-own-vps",{"fr":12,"en":10,"ar":13,"es":14},"heberger-filebrowser","استضافة-filebrowser-على-خادم-vps-الخاص-بك","alojar-filebrowser-en-un-vps","Hosting FileBrowser on your own VPS","Deploy FileBrowser self-hosted on a VPS with Docker, SSL and public shares. Complete guide: configuration, security, backups and customization.",7,0,false,"2026-03-22T00:00:00+00:00","2026-11-04T16:30:25+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},"Self-hosting","self-hosting","bg-indigo-500\u002F10 text-indigo-400","cloud",[28],{"id":17,"name":23,"slug":24,"color":25,"icon":26},null,"\u002Fblog\u002Fcovers\u002Fbg.svg","\u002Fblog\u002Fcovers\u002Fheberger-filebrowser-poster.svg",{"categorySlug":33,"appSlug":34},"application-deployment-devops","filebrowser","Sometimes you don't need a full Nextcloud, just a clean web interface to manage and share a VPS's files. FileBrowser does exactly that: a single binary, with no database to install, that turns any server folder into a web explorer with accounts, permissions and share links.",[37,41,83,95,98,120,123,134,137,140],{"type":38,"title":39,"body":40},"h2","Why self-host FileBrowser on a VPS","FileBrowser is a web file manager written in Go, distributed as a single binary. It exposes a folder of your server in a modern interface: upload, download, preview, text editing, user management and share links. It's the ideal tool when a Nextcloud would be oversized: no external database, no PHP, a footprint of a few tens of megabytes. On a VPS, it becomes the web access point to your server data — delivering files to a client, granting scoped access to a folder, or simply managing an application's files without going through SFTP. A VPS is required because FileBrowser must read\u002Fwrite in the file system and run as a daemon, which shared hosting does not allow.",{"type":42,"title":43,"headers":44,"rows":49},"comparison","FileBrowser vs self-hosted alternatives",[45,46,47,48],"Criterion","FileBrowser","Nextcloud","Seafile",[50,54,59,63,67,71,74,78],[51,52,53,53],"Database","Built-in SQLite","MySQL\u002FPostgreSQL required",[55,56,57,58],"Minimum RAM","~30 MB","~500 MB","~200 MB",[60,61,62,62],"Setup","One binary or Docker image","Multi-service Docker Compose",[64,65,66,66],"User management","Yes, with scopes","Yes, full-featured",[68,69,70,70],"Desktop sync client","No","Yes",[72,73,70,70],"Expiring share links","Yes, built-in",[75,76,77,69],"Online editing","Text only","Text, Office (OnlyOffice)",[79,80,81,82],"Primary use case","Lightweight access & sharing","Full office suite","Bulk data sync",{"type":84,"title":85,"items":86},"ul","Concrete benefits of self-hosted FileBrowser",[87,88,89,90,91,92,93,94],"Ultra-lightweight: a Go binary, built-in SQLite database, starts in a few milliseconds.","Fine-grained permission management: each user is confined to a subfolder (scope) with precise rights.","Share links with password and expiry: send a file without creating an account for the recipient.","Editing and preview in the browser (text, images, videos) without downloading.","Custom commands and hooks: trigger a script on upload (conversion, antivirus scan).","A clean web interface to replace SFTP for non-technical users.","Native dark theme, responsive interface on mobile.","Real-time filename search across the exposed directory tree.",{"type":38,"title":96,"body":97},"Technical prerequisites","FileBrowser is one of the most resource-efficient tools: 1 vCPU and 512 MB of RAM are more than enough, with disk space depending solely on the volume of files to serve. No external database is required — the configuration and accounts are stored in a local SQLite file. You need Docker and Docker Compose, a `files.yourdomain.com` subdomain pointed at the VPS, and a reverse proxy for HTTPS. Important: plan which host folder you want to expose (a dedicated `\u002Fsrv\u002Fshare` folder, never the system root) and mount it as a volume in the container. Verify that ports 80 and 443 are open on your firewall, and that your VPS has a DNS A record (or AAAA for IPv6) pointing to its public IP.",{"type":99,"title":100,"steps":101},"steps","Deploy FileBrowser step by step",[102,105,108,111,114,117],{"title":103,"body":104},"Prepare the folders and the config","On the VPS: `mkdir -p \u002Fopt\u002Ffilebrowser \u002Fsrv\u002Fshare`. Create an empty file for the database: `touch \u002Fopt\u002Fgtsteffaniak\u002Ffilebrowser.db`. The `\u002Fsrv\u002Fshare` folder is the one FileBrowser will expose. Adjust permissions so that the container UID can write to it: `chown -R 1000:1000 \u002Fsrv\u002Fshare \u002Fopt\u002Ffilebrowser`.",{"title":106,"body":107},"Write the docker-compose.yml","Base it on the `gtsteffaniak\u002Ffilebrowser:latest` image. Mount `\u002Fsrv\u002Fshare:\u002Fsrv` (the data), `\u002Fopt\u002Fgtsteffaniak\u002Ffilebrowser.db:\u002Fdatabase\u002Ffilebrowser.db` (the database) and set `PUID`\u002F`PGID` to 1000 (or the actual UID of the shared folder). Expose the internal port 80 to the reverse proxy only — do not map directly to 80\u002F443 on the host if Caddy or nginx is already using those ports. Add `restart: unless-stopped` so FileBrowser restarts automatically after a server reboot.",{"title":109,"body":110},"Start and retrieve the credentials","Start with `docker compose up -d`. On first launch, FileBrowser creates an `admin` account with a password shown in the logs: `docker compose logs filebrowser`. Note it down for the first login. If the logs don't show a password, log in with `admin`\u002F`admin` (the official image defaults) and change it immediately.",{"title":112,"body":113},"Set up the reverse proxy and SSL","Place FileBrowser behind an HTTPS reverse proxy. With Caddy: `files.yourdomain.com { reverse_proxy filebrowser:80 }`. The Let's Encrypt certificate is generated and renewed automatically. With nginx, create a dedicated vhost with `proxy_pass http:\u002F\u002F127.0.0.1:\u003Ccontainer_port>;` and an `ssl_certificate` block pointing to certbot files. Make sure the `X-Forwarded-For` header is passed so FileBrowser logs the real client IPs in its access logs.",{"title":115,"body":116},"Secure and create the accounts","Log in, immediately change the admin password, then create users limiting each to its scope (subfolder) with the appropriate rights. Enable the reverse proxy's two-factor authentication if the access is sensitive. In FileBrowser's settings, disable public registration (`allow registration: false`) and restrict the authentication methods. For very restricted access, configure a basic auth layer at the reverse proxy level as an additional barrier.",{"title":118,"body":119},"Test sharing and public links","Upload a test file, generate a share link with expiration (for example 7 days) and an optional password. Copy the link and open it in a private browser window to verify it works without an active session. Check that the expiration limit is properly enforced by inspecting the expiry time in the admin interface.",{"type":38,"title":121,"body":122},"Securing FileBrowser in production","Exposing a file manager on the internet without additional security layers is risky. Several complementary measures apply depending on your context: restrict access by IP at the reverse proxy level if the tool is only meant for a team on a fixed network; enforce HTTP basic authentication in front of FileBrowser to add a barrier even before the application's login screen; enable detailed access logs to detect brute-force attempts. FileBrowser does not natively offer account lockout after N failed attempts: if your VPS is publicly exposed, a fail2ban rule on nginx or Caddy logs matching 401 responses is an essential complement. Finally, the exposed folder must be strictly separate from the home or system folder — FileBrowser only sees what you mount into it.",{"type":84,"title":124,"items":125},"Security checklist before going live",[126,127,128,129,130,131,132,133],"Admin password changed on first launch.","Public registration disabled in FileBrowser settings.","HTTPS reverse proxy active, HTTP→HTTPS redirect enforced.","Each user limited to their own folder scope.","Fail2ban (or Crowdsec) configured on reverse proxy logs.","Default expiration enabled globally for all share links.","Regular backups of `\u002Fopt\u002Fgtsteffaniak\u002Ffilebrowser.db` (accounts, config, permissions).","IP-based access restriction at the reverse proxy if users have fixed addresses.",{"type":38,"title":135,"body":136},"Customizing FileBrowser: branding, commands and hooks","FileBrowser offers several levels of customization accessible from the admin interface. The Branding section lets you replace the logo, application name and colors — useful for delivering white-label access to clients. The Custom Commands section is one of the most powerful features: each scope can carry shell commands available at a single click in the interface. You can for example create a 'Compress to ZIP' command that calls a script and makes the archive downloadable. Hooks — `before_copy`, `after_copy`, `before_rename`, `after_rename`, `before_upload`, `after_upload`, `before_delete`, `after_delete` — allow automating actions without user intervention: generating a thumbnail on image upload, triggering a Slack webhook, launching a ClamAV scan, syncing to S3 object storage.",{"type":38,"title":138,"body":139},"Backing up and updating FileBrowser","FileBrowser stores all its configuration in a single SQLite file: `\u002Fopt\u002Fgtsteffaniak\u002Ffilebrowser.db`. This file holds accounts, scopes, permissions, share tokens and application settings. A daily backup of this file is sufficient to guarantee a full restore. Updating amounts to pulling the new Docker image: `docker compose pull && docker compose up -d`. FileBrowser automatically applies database migrations on startup — no manual intervention is required. Before any major update, copy the SQLite file outside the Docker folder to retain a safe rollback point. Check the project's GitHub changelog to identify breaking changes between versions, particularly any modifications to internal API URLs if you have scripts that rely on them.",{"type":141,"body":142},"tip","Make use of FileBrowser's 'custom commands' to automate post-processing: for example, associate a script triggered on each upload (`after_upload`) that generates a thumbnail or launches a ClamAV scan. For client shares, always create a dedicated user with a reduced scope rather than sharing the admin account, and enable automatic expiry on public links so that no file remains accessible indefinitely. To automate SQLite backups, a daily cron with `cp \u002Fopt\u002Fgtsteffaniak\u002Ffilebrowser.db \u002Fbackup\u002Ffilebrowser-$(date +%F).db` is sufficient — remember to purge copies older than 30 days to avoid filling the disk.","Deploy FileBrowser from the ServOrbit Marketplace","ServOrbit offers FileBrowser pre-configured on VPS: lightweight web file manager, under 50 MB RAM, persistent volumes set up automatically. No domain required — first access in seconds, files under your control.","Deploy FileBrowser","\u002Fapplications\u002Fapplication-deployment-devops\u002Ffilebrowser",[148,167,184],{"id":149,"slug":150,"slugs":151,"title":155,"excerpt":156,"readTime":157,"views":158,"isPinned":19,"noindex":19,"publishedAt":159,"updatedAt":160,"category":161,"categories":162,"featuredImage":29,"bgImage":30,"posterImage":164,"relatedSolution":165},71,"hosting-nextcloud-on-your-own-vps",{"fr":152,"en":150,"ar":153,"es":154},"heberger-nextcloud","استضافة-nextcloud-على-خادمك-الـvps-الخاص","alojar-nextcloud-en-su-propio-vps","Self-Host Nextcloud on VPS: NC 35, PHP 8.3 and MariaDB 11 Guide","Host Nextcloud on a VPS: Docker Compose, Redis, MariaDB backup, uploads over 40 GB behind Cloudflare and an alternative to Office 2021.",20,1,"2026-04-10T00:00:00+00:00","2026-11-08T16:32:50+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[163],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-nextcloud-poster.svg",{"categorySlug":24,"appSlug":166},"nextcloud",{"id":168,"slug":169,"slugs":170,"title":174,"excerpt":175,"readTime":176,"views":158,"isPinned":19,"noindex":19,"publishedAt":177,"updatedAt":21,"category":178,"categories":179,"featuredImage":29,"bgImage":30,"posterImage":181,"relatedSolution":182},72,"hosting-ghost-on-your-own-vps",{"fr":171,"en":169,"ar":172,"es":173},"heberger-ghost","استضافة-ghost-على-خادمك-الـvps-الخاص","alojar-ghost-en-un-vps","Hosting Ghost on your own VPS: complete 2026 guide","Deploy Ghost v6 on your VPS with Caddy, MySQL, Ghost CLI and Stripe Tax: installation, TLS reverse proxy, updates and troubleshooting common startup errors.",10,"2026-04-09T00:00:00+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[180],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-ghost-poster.svg",{"categorySlug":24,"appSlug":183},"ghost",{"id":185,"slug":186,"slugs":187,"title":191,"excerpt":192,"readTime":17,"views":18,"isPinned":19,"noindex":19,"publishedAt":193,"updatedAt":194,"category":195,"categories":196,"featuredImage":29,"bgImage":30,"posterImage":198,"relatedSolution":199},73,"host-wordpress-on-your-own-vps",{"fr":188,"en":186,"ar":189,"es":190},"heberger-wordpress","استضافة-wordpress-على-خادم-vps-الخاص-بك","alojar-wordpress-en-un-vps","Host WordPress on your own VPS","Host WordPress on your VPS for maximum performance and control: Docker, MariaDB, caching, reverse proxy and SSL.","2026-04-08T00:00:00+00:00","2026-11-09T20:55:18+00:00",{"id":17,"name":23,"slug":24,"color":25,"icon":26},[197],{"id":17,"name":23,"slug":24,"color":25,"icon":26},"\u002Fblog\u002Fcovers\u002Fheberger-wordpress-poster.svg",{"categorySlug":24,"appSlug":200},"wordpress",true,1794270417695]