{"id":30749591,"url":"https://github.com/devopspradeepyadav/movieserver","last_synced_at":"2026-02-15T17:01:52.352Z","repository":{"id":312381024,"uuid":"1047319897","full_name":"devopspradeepyadav/MovieServer","owner":"devopspradeepyadav","description":"Create your own movie server and enjoy netflix like interface.","archived":false,"fork":false,"pushed_at":"2025-08-30T07:25:48.000Z","size":11,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-30T08:24:46.254Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":null,"has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devopspradeepyadav.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-30T06:38:28.000Z","updated_at":"2025-08-30T07:25:51.000Z","dependencies_parsed_at":"2025-08-30T08:24:47.755Z","dependency_job_id":"d46ec685-853c-4fa3-9d0e-a167e74ee044","html_url":"https://github.com/devopspradeepyadav/MovieServer","commit_stats":null,"previous_names":["devopspradeepyadav/movieserver-jellyfin"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/devopspradeepyadav/MovieServer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devopspradeepyadav%2FMovieServer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devopspradeepyadav%2FMovieServer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devopspradeepyadav%2FMovieServer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devopspradeepyadav%2FMovieServer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devopspradeepyadav","download_url":"https://codeload.github.com/devopspradeepyadav/MovieServer/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devopspradeepyadav%2FMovieServer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273561490,"owners_count":25127396,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-04T02:00:08.968Z","response_time":61,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-09-04T06:09:34.616Z","updated_at":"2026-02-15T17:01:52.254Z","avatar_url":"https://github.com/devopspradeepyadav.png","language":null,"funding_links":[],"categories":[],"sub_categories":[],"readme":"# Jellyfin Movie Server with Nginx Reverse Proxy\n\nThis project provides a detailed guide on setting up a **Jellyfin Movie Server** using **Docker** and **Nginx** for reverse proxying. It also explains how to expose Jellyfin to the internet and configure HTTPS using **Certbot**.\n\n\n\u003cimg width=\"1919\" height=\"1007\" alt=\"Screenshot From 2025-08-30 12-43-45\" src=\"https://github.com/user-attachments/assets/d0a142db-798f-4064-955e-b7f29f7dfe01\" /\u003e\n\n## Prerequisites\n\n* **Ubuntu 20.04/22.04/24.04/latest** or any other similar Linux-based OS.\n* **Docker** \u0026 **Docker Compose** installed.\n* **Nginx** installed for reverse proxying.\n* A registered domain (e.g., `movies.example.com`) pointing to your server's public IP.\n* Optionally, **Certbot** for SSL certificate management.\n\n## Steps to Set Up Jellyfin Server\n\n### 1. **Clone the Repository**\n\nClone this repository to your server:\n\n```bash\ngit clone https://github.com/devopspradeepyadav/MovieServer.git\ncd MovieServer\n````\n\nInstall docker and docker compose :\n```bash\ncurl https://get.docker.com | bash\nsudo usermod -aG docker $USER\nnewgrp docker\n````\n\n### 2. **Start Jellyfin with Docker Compose**\n\nRun the following command to start Jellyfin using Docker Compose:\n\n```bash\ndocker-compose up -d\n```\n\nThis will download the necessary Docker image and start the container in detached mode. Once started, Jellyfin will be accessible at `http://localhost:8096`.\n\n### 3. **Configure Nginx as a Reverse Proxy**\n\n#### 3.1 **Install Nginx**\n\nIf you don't have Nginx installed, run the following command:\n\n```bash\nsudo apt update\nsudo apt install nginx\n```\n\n#### 3.2 **Create Nginx Configuration File**\n\nCreate a new Nginx configuration file for your domain:\n\n```bash\nsudo nano /etc/nginx/sites-available/movies.example.com\n```\n\nAdd the following configuration:\n\n#### **For HTTP Only (No SSL)**\n\n```nginx\nserver {\n    listen 80;\n    server_name movies.example.com www.movies.example.com;\n\n    location / {\n        proxy_pass http://localhost:8096;  # Forward traffic to Jellyfin on port 8096\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n\n    error_log /var/log/nginx/movies.example.com_error.log;\n    access_log /var/log/nginx/movies.example.com_access.log;\n}\n```\n\n#### **For HTTPS with SSL (Secure Setup)**\n\n```nginx\nserver {\n    listen 80;\n    server_name movies.example.com www.movies.example.com;\n    return 301 https://$host$request_uri;  # HTTP to HTTPS redirection\n}\n\nserver {\n    listen 443 ssl;\n    server_name movies.example.com www.movies.example.com;\n\n    ssl_certificate /etc/nginx/ssl/movies.example.com.crt;\n    ssl_certificate_key /etc/nginx/ssl/movies.example.com.key;\n\n    location / {\n        proxy_pass http://localhost:8096;  # Forward traffic to Jellyfin on port 8096\n        proxy_set_header Host $host;\n        proxy_set_header X-Real-IP $remote_addr;\n        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;\n        proxy_set_header X-Forwarded-Proto $scheme;\n    }\n\n    error_log /var/log/nginx/movies.example.com_error.log;\n    access_log /var/log/nginx/movies.example.com_access.log;\n}\n```\n\n**Notes:**\n\n* Replace `movies.example.com` with your actual domain.\n* The `ssl_certificate` and `ssl_certificate_key` should point to your SSL certificate and private key files.\n* Make sure to replace `localhost` with the internal Docker IP or `localhost` if you’re directly forwarding from the host.\n\n#### 3.3 **Enable the Nginx Configuration**\n\nCreate a symlink in the `sites-enabled` directory to enable the site:\n\n```bash\nsudo ln -s /etc/nginx/sites-available/yourmovieserver.com /etc/nginx/sites-enabled/\n```\n\n#### 3.4 **Test Nginx Configuration**\n\nMake sure your Nginx configuration is valid by running:\n\n```bash\nsudo nginx -t\n```\n\nIf everything is good, restart Nginx to apply the changes:\n\n```bash\nsudo systemctl restart nginx\n```\n\n### 4. **Set Up SSL with Certbot**\n\nTo secure your site with HTTPS, use **Certbot** to obtain an SSL certificate:\n\n1. Install Certbot and the Nginx plugin:\n\n   ```bash\n   sudo apt install certbot python3-certbot-nginx\n   ```\n\n2. Obtain an SSL certificate and configure Nginx for HTTPS:\n\n   ```bash\n   sudo certbot --nginx -d yourmovieserver.com -d www.yourmovieserver.com\n   ```\n\n3. Follow the prompts and Certbot will automatically configure your Nginx for HTTPS.\n\n\n## **4. Automating SSL Certificate Renewal (If Using Let's Encrypt)**\n\nSSL certificates provided by Let's Encrypt are valid for 90 days. To ensure they automatically renew, set up a cron job:\n\n```bash\nsudo crontab -e\n```\n\nAdd the following line to renew the certificates:\n\n```bash\n0 0,12 * * * certbot renew --quiet \u0026\u0026 systemctl reload nginx\n```\n\nThis will check for renewals twice daily and reload Nginx to apply any updated certificates.\n\n---\n\n## **5. Testing and Monitoring**\n\n### **Test the Movie Server**\n\nTo confirm the server is working:\n\n1. Open a web browser.\n2. Navigate to `http://movies.example.com` or `https://movies.example.com` (depending on whether SSL is configured).\n3. Log in to Jellyfin, and check that your media libraries and other configurations are intact.\n4. Keep the movies under the folder `/home/ubuntu/movies` or the respective directory\n\u003cimg width=\"1920\" height=\"928\" alt=\"image\" src=\"https://github.com/user-attachments/assets/fc8fb631-315c-44b4-a9b5-752e51cb38e2\" /\u003e\n \n\n### **Monitor the Server**\n\nUse monitoring tools like **Prometheus**, **Grafana**, or **Datadog** to keep an eye on server metrics like CPU usage, memory, and network traffic. This is especially important for production systems.\n\nAdditionally, check logs periodically:\n\n* **Jellyfin logs**: Located in the Docker container or mounted volume at `./config/logs`.\n* **Nginx logs**: Located at `/var/log/nginx/`.\n\n## **6. Setting up DNS**\n\n### **Setup DNS record for pointing the website to your Domain Name**\n\n``` Type A\nName @\nData \u003cyour-server-ip\u003e\nTTL 3600/1 Hour\n\nfor ex- \n\nType Name Data              TTL\nA\t @\t  210.79.129.50\t    1 Hour\t\t\n```\n\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n```\n\n### Key Details:\n- **Clone the Repository**: Instructions for cloning the GitHub repo and navigating into the project directory.\n- **Docker Compose Setup**: How to run Jellyfin using Docker Compose.\n- **Nginx Configuration**: Full steps to set up Nginx as a reverse proxy, including SSL setup with Certbot.\n- **Customization**: Notes to customize domain and configuration as needed.\n\nFeel free to replace placeholders (like `yourmovieserver.com`) with your actual domain and adjust any paths if necessary!\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevopspradeepyadav%2Fmovieserver","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevopspradeepyadav%2Fmovieserver","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevopspradeepyadav%2Fmovieserver/lists"}