PUQ Mautic

Installation and configuration guide

WHMCS setup(install/update)

Jellyfin Family module WHMCS 

 Order now | Download | FAQ

Module is coded ionCube v13

Supported php version:

To install and update a module, you must perform one and the same action.

1. Download the latest version of the module.

PHP 8.2

wget http://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/php82/PUQ_WHMCS-Jellyfin-Family-latest.zip

PHP 8.1

wget http://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/php81/PUQ_WHMCS-Jellyfin-Family-latest.zip

PHP 7.4

wget https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/php74/PUQ_WHMCS-Jellyfin-Family-latest.zip

All versions are available via link: http://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/

2. Unzip the archive with the module.
unzip PUQ_WHMCS-Jellyfin-Family-latest.zip
3. Copy and Replace "puqJellyfinFamily" to "WHMCS_WEB_DIR/modules/servers/"

Setup guide: Jellyfin setup

Jellyfin Family module WHMCS 

 Order now | Download | FAQ

1. Install Jellyfin on your server

To simplify deployment and help automate this for as many users as possible, we provide a BASH script to handle repo installation as well as installing Jellyfin. All you need to do is run this command on your system

 wget -O- https://repo.jellyfin.org/install-debuntu.sh | sudo bash

 

2. SSL certificate generation:

sudo apt install nginx certbot python3-certbot-nginx
sudo certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --email YOUR_EMAIL -d DOMAIN_NAME
echo "0 0 * * *  root  certbot renew --quiet --no-self-upgrade --post-hook 'systemctl reload nginx'" | sudo tee -a /etc/cron.d/renew_certbot

 

3. Configure nginx from a subdomain

Create a file named jellyfin.conf.

cd /etc/nginx/conf.d/
nano jellyfin.conf

Then, insert the following text, replacing DOMAIN_NAME with your domain.

# Uncomment the commented sections after you have acquired a SSL Certificate
server {
	listen 80;
	listen [::]:80;
	server_name DOMAIN_NAME;

	# Uncomment to redirect HTTP to HTTPS
	return 301 https://$host$request_uri;
}

server {
	listen 443 ssl http2;
	listen [::]:443 ssl http2;
	server_name DOMAIN_NAME;

	## The default `client_max_body_size` is 1M, this might not be enough for some posters, etc.
	client_max_body_size 20M;

	# use a variable to store the upstream proxy
	# in this example we are using a hostname which is resolved via DNS
	# (if you aren't using DNS remove the resolver line and change the variable to point to an IP address e.g `set $jellyfin 127.0.0.1`)
	set $jellyfin 127.0.0.1;
	resolver 127.0.0.1 valid=30;

	ssl_certificate /etc/letsencrypt/live/DOMAIN_NAME/fullchain.pem;
	ssl_certificate_key /etc/letsencrypt/live/DOMAIN_NAME/privkey.pem;
	include /etc/letsencrypt/options-ssl-nginx.conf;
	ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
	add_header Strict-Transport-Security "max-age=31536000" always;
	ssl_trusted_certificate /etc/letsencrypt/live/DOMAIN_NAME/chain.pem;
	ssl_stapling on;
	ssl_stapling_verify on;

	# Security / XSS Mitigation Headers
	# NOTE: X-Frame-Options may cause issues with the webOS app
	add_header X-Frame-Options "SAMEORIGIN";
	add_header X-XSS-Protection "0"; # Do NOT enable. This is obsolete/dangerous
	add_header X-Content-Type-Options "nosniff";

	# COOP/COEP. Disable if you use external plugins/images/assets
	add_header Cross-Origin-Opener-Policy "same-origin" always;
	add_header Cross-Origin-Embedder-Policy "require-corp" always;
	add_header Cross-Origin-Resource-Policy "same-origin" always;

	# Permissions policy. May cause issues on some clients
	add_header Permissions-Policy "accelerometer=(), ambient-light-sensor=(), battery=(), bluetooth=(), camera=(), clipboard-read=(), display-capture=(), document-domain=(), encrypted-media=(), gamepad=(), geolocation=(), gyroscope=(), hid=(), idle-detection=(), interest-cohort=(), keyboard-map=(), local-fonts=(), magnetometer=(), microphone=(), payment=(), publickey-credentials-get=(), serial=(), sync-xhr=(), usb=(), xr-spatial-tracking=()" always;

	# Tell browsers to use per-origin process isolation
	add_header Origin-Agent-Cluster "?1" always;


	# Content Security Policy
	# See: https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP
	# Enforces https content and restricts JS/CSS to origin
	# External Javascript (such as cast_sender.js for Chromecast) must be whitelisted.
	# NOTE: The default CSP headers may cause issues with the webOS app
	#add_header Content-Security-Policy "default-src https: data: blob: http://image.tmdb.org; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' https://www.gstatic.com https://www.youtube.com blob:; worker-src 'self' blob:; connect-src 'self'; object-src 'none'; frame-ancestors 'self'";

	location = / {
		return 302 http://$host/web/;
		#return 302 https://$host/web/;
	}

	location / {
		# Proxy main Jellyfin traffic
		proxy_pass http://$jellyfin: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_set_header X-Forwarded-Protocol $scheme;
		proxy_set_header X-Forwarded-Host $http_host;

		# Disable buffering when the nginx proxy gets very resource heavy upon streaming
		proxy_buffering off;
	}

	# location block for /web - This is purely for aesthetics so /web/#!/ works instead of having to go to /web/index.html/#!/
	location = /web/ {
		# Proxy main Jellyfin traffic
		proxy_pass http://$jellyfin:8096/web/index.html;
		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_set_header X-Forwarded-Protocol $scheme;
		proxy_set_header X-Forwarded-Host $http_host;
	}

	location /socket {
		# Proxy Jellyfin Websockets traffic
		proxy_pass http://$jellyfin:8096;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";
		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_set_header X-Forwarded-Protocol $scheme;
		proxy_set_header X-Forwarded-Host $http_host;
	}
}

Restarting nginx

sudo service nginx restart

Setup guide: WHMCS setup

Jellyfin Family module WHMCS 

 Order now | Download | FAQ
1. Download the latest version of the module.

PHP 8.1

wget https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/PUQ_WHMCS-Jellyfin-Family-latest.zip

PHP 7.4

wget https://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/php74/PUQ_WHMCS-Jellyfin-Family-latest.zip

All versions are available via link: http://download.puqcloud.com/WHMCS/servers/PUQ_WHMCS-Jellyfin-Family/

2. Unzip the archive with the module.
unzip PUQ_WHMCS-Jellyfin-Family-latest.zip
3. Copy "puqJellyfinFamily" to "WHMCS_WEB_DIR/modules/servers/"
4. Create new server Jellyfin in WHMCS (System Settings->Products/Services->Servers)
System Settings->Servers->Add New Server

2023-11-02_14-40.png

image-1714985395240.png

5. Create a new Products/Services
System Settings->Products/Services->Create a New Product

In the Module settings section, select the "PUQ Jellyfin Family" module

image-1714985504828.png

Libraries:
User Configuration:
Allow playback (Restricting access to transcoding may cause playback failures in clients due to unsupported media formats)
Feature access:

Add server (Jellyfin server)

Jellyfin Family module WHMCS 

 Order now | Download | FAQ
Add a new server to the system WHMCS.
System Settings->Servers->Add New Server

2023-11-02_14-40.png

image-1714985395240.png

Product Configuration

Jellyfin Family module WHMCS 

 Order now | Download | FAQ
Create a new Products/Services
System Settings->Products/Services->Create a New Product

In the Module settings section, select the "PUQ Jellyfin Family" module

image-1714985504828.png

Libraries:
User Configuration:
Allow playback (Restricting access to transcoding may cause playback failures in clients due to unsupported media formats)
Feature access:

Add new library/item in Jellyfin

Jellyfin Family module WHMCS 

 Order now | Download | FAQ

New library:

To create a new library, you should to create a folder in your jellyfin server.

First, navigate to the root of your project "/" and enter the following commands:

cd mnt
mkdir LIBRARY_NAME

LIBRARY_NAME - The name of the new library. 

After creating a folder, let's create a library in Jellyfin: 

Add a new library:

2023-11-03_10-33.png

Assign the appropriate folder to this library:

2023-11-03_10-34_1.png

2023-11-03_10-34_2.png

 

New item:

To download a new item, navigate to the root of your project "/" and enter the following commands:

cd mnt/LIBRARY_NAME
wget DOWNLOAD_ITEM_URL

LIBRARY_NAME - The name of the library. 

DOWNLOAD_ITEM_URL - The download URL of the item you want to upload to the server.

 

After all

Scan all libraries by clicking on the "Scan All Libraries" button, or scan the specific library by clicking on the three dots and selecting "Scan Library."

2023-11-03_10-35.png2023-11-03_10-45.png

 

Getting Access Hash (API key)

Jellyfin Family module WHMCS 

 Order now | Download | FAQ
Dashboard -> API Keys
Create a new API Key

123.png

 

Whrite an App Name

2023-11-02_12-27.png

 

Now you can getting an API key

1.png