What is Self-Hosting? What Can You Host on Your Own Server?
What is self-hosting, why do it, popular self-hosted apps (Nextcloud, Vaultwarden, Jellyfin, Gitea, n8n), Docker setup and comparison with cloud services.
Table of Contents
What is Self-Hosting? What Can You Host on Your Own Server?
Self-hosting means running applications on your own server that you normally use through cloud services (Google Drive, Dropbox, Netflix, GitHub, etc.). You have full control over your data, get rid of monthly subscription fees, and protect your privacy.
Why Should You Self-Host?
1. Privacy and Data Control
Cloud services analyze your data, create advertising profiles, and may share with third parties. With self-hosting, your data stays only on your server.
2. Cost Savings
In the long run, self-hosting can be much more economical than cloud subscriptions.
Monthly Cost Comparison (approximate):
Cloud Services:
- Google One 2TB: ~$10/month
- Dropbox Plus: ~$12/month
- Netflix Standard: ~$15/month
- GitHub Pro: ~$4/month
- Notion Plus: ~$8/month
Total: ~$49/month
Self-Hosted (REXE VDS):
- Server cost: ~$15-30/month
- All services included
Savings: ~$20-35/month
3. Customization and Control
Cloud services offer you limited customization options. With self-hosting, you can configure the application however you want.
4. Independence
Cloud services can shut down, raise prices, or remove features. With self-hosting, you're independent from these risks.
Popular Self-Hosted Applications
File Storage and Sync
Nextcloud — Google Drive Alternative
docker run -d \
--name nextcloud \
-p 8080:80 \
-v nextcloud_data:/var/www/html \
-e MYSQL_HOST=db \
-e MYSQL_DATABASE=nextcloud \
-e MYSQL_USER=nextcloud \
-e MYSQL_PASSWORD=password \
nextcloud:latest
Nextcloud features:
- File storage and sync
- Calendar and contacts (CalDAV/CardDAV)
- Video conferencing (Talk)
- Office document editing (Collabora/OnlyOffice)
- Photo gallery
Password Manager
Vaultwarden — Bitwarden Alternative
docker run -d \
--name vaultwarden \
-p 8080:80 \
-v vaultwarden_data:/data \
-e DOMAIN=https://vault.example.com \
-e SIGNUPS_ALLOWED=false \
vaultwarden/server:latest
Vaultwarden features:
- Password management
- 2FA support
- Secure note storage
- Organization and sharing
- Compatible with all Bitwarden clients
Media Server
Jellyfin — Netflix/Plex Alternative
docker run -d \
--name jellyfin \
-p 8096:8096 \
-v /path/to/media:/media \
-v jellyfin_config:/config \
jellyfin/jellyfin:latest
Jellyfin features:
- Movie and series streaming
- Music library
- Live TV and DVR
- Multi-user support
- Mobile and TV apps
Code Repository
Gitea/Forgejo — GitHub Alternative
docker run -d \
--name gitea \
-p 3000:3000 \
-p 222:22 \
-v gitea_data:/data \
gitea/gitea:latest
Uptime Monitoring
Uptime Kuma — Uptime Robot Alternative
docker run -d \
--name uptime-kuma \
-p 3001:3001 \
-v uptime_kuma_data:/app/data \
louislam/uptime-kuma:latest
Automation
n8n — Zapier/Make Alternative
docker run -d \
--name n8n \
-p 5678:5678 \
-v n8n_data:/home/node/.n8n \
-e N8N_BASIC_AUTH_ACTIVE=true \
-e N8N_BASIC_AUTH_USER=admin \
-e N8N_BASIC_AUTH_PASSWORD=password \
n8nio/n8n:latest
Blog/CMS
Ghost — Medium/WordPress Alternative
docker run -d \
--name ghost \
-p 2368:2368 \
-v ghost_content:/var/lib/ghost/content \
-e url=https://blog.example.com \
ghost:latest
Full Self-Hosting Stack with Docker Compose
version: '3.8'
services:
nextcloud:
image: nextcloud:latest
ports:
- "8080:80"
volumes:
- nextcloud_data:/var/www/html
environment:
- MYSQL_HOST=db
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${DB_PASSWORD}
depends_on:
- db
vaultwarden:
image: vaultwarden/server:latest
ports:
- "8081:80"
volumes:
- vaultwarden_data:/data
environment:
- DOMAIN=https://vault.example.com
- SIGNUPS_ALLOWED=false
jellyfin:
image: jellyfin/jellyfin:latest
ports:
- "8096:8096"
volumes:
- /media:/media:ro
- jellyfin_config:/config
uptime-kuma:
image: louislam/uptime-kuma:latest
ports:
- "3001:3001"
volumes:
- uptime_kuma_data:/app/data
db:
image: mariadb:latest
volumes:
- db_data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${DB_ROOT_PASSWORD}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_PASSWORD=${DB_PASSWORD}
volumes:
nextcloud_data:
vaultwarden_data:
jellyfin_config:
uptime_kuma_data:
db_data:
Hardware Requirements
| Use Case | CPU | RAM | Storage |
|---|---|---|---|
| Basic (Vaultwarden + Uptime Kuma) | 1 vCPU | 1 GB | 10 GB |
| Medium (+ Nextcloud + Gitea) | 2 vCPU | 2-4 GB | 50+ GB |
| Full Stack (+ Jellyfin + n8n) | 4 vCPU | 4-8 GB | 100+ GB |
| Media-Heavy (4K streaming) | 4+ vCPU | 8+ GB | 500+ GB |
REXE's VDS plans are ideal for getting started with self-hosting. With 2 vCPU and 4 GB RAM, you can comfortably run Nextcloud, Vaultwarden, Gitea, and Uptime Kuma.
Self-Hosting Pros and Cons
Pros
- Full data control and privacy
- Long-term cost savings
- Unlimited customization
- No dependency on cloud services
- Learning opportunity
Cons
- Requires technical knowledge
- Maintenance and update responsibility
- Initial setup time
- Backup responsibility
- No uptime guarantee (your responsibility)
Related Articles
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.
Nextcloud Setup: Self-Hosted Cloud Storage and Collaboration
Nextcloud installation with Docker, Apache/Nginx configuration, database setup, SSL certificate, file synchronization, app store, and performance optimization.
Docker Management with Portainer: Web-Based Container Control
Portainer CE installation, Docker and Kubernetes management, stack deployment, volume/network management, user authorization, webhook and GitOps integration.