mirror of
https://github.com/TheBinaryNinja/tvapp2.git
synced 2026-06-04 02:35:42 -04:00
build: push tvapp v2 docker files
This commit is contained in:
18
root/custom-cont-init.d/plugins
Normal file
18
root/custom-cont-init.d/plugins
Normal file
@@ -0,0 +1,18 @@
|
||||
#!/bin/bash
|
||||
|
||||
# #
|
||||
# @project tvapp2
|
||||
# @usage docker image which allows you to download a m3u playlist and EPG guide data for the
|
||||
# IPTV service TheTvApp.
|
||||
# @file plugins
|
||||
# @repo https://github.com/Aetherinox/docker-base-alpine
|
||||
# https://git.binaryninja.net/pub_projects/tvapp2
|
||||
# #
|
||||
|
||||
PLUGINS_PATH="/config/www/plugins"
|
||||
|
||||
# #
|
||||
# Plugins > Start
|
||||
# #
|
||||
|
||||
echo -e " Loader : Checking tvapp2-plugins"
|
||||
@@ -1,12 +1,13 @@
|
||||
# #
|
||||
# @project thetvapp-docker
|
||||
# @about Nginx site-configs default configuration file
|
||||
# @file /root/defaults/nginx/nginx.conf.sample
|
||||
# @repo https://github.com/Aetherinox/thetvapp-docker
|
||||
# @generated 2024-11-30
|
||||
# @project tvapp2
|
||||
# @usage docker image which allows you to download a m3u playlist and EPG guide data for the
|
||||
# IPTV service TheTvApp.
|
||||
# @file nginx.conf.sample
|
||||
# @repo https://github.com/Aetherinox/docker-base-alpine
|
||||
# https://git.binaryninja.net/pub_projects/tvapp2
|
||||
# #
|
||||
|
||||
user abc;
|
||||
user dockerx;
|
||||
|
||||
# Set number of worker processes automatically based on number of CPU cores.
|
||||
include /config/nginx/worker_processes.conf;
|
||||
@@ -39,7 +40,7 @@ http
|
||||
|
||||
# Name servers used to resolve names of upstream servers into addresses.
|
||||
# It's also needed when using tcpsocket and udpsocket in Lua modules.
|
||||
#resolver 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001;
|
||||
# resolver 1.1.1.1 1.0.0.1 2606:4700:4700::1111 2606:4700:4700::1001;
|
||||
include /config/nginx/resolver.conf;
|
||||
|
||||
# Don't tell nginx version to the clients. Default is 'on'.
|
||||
@@ -63,7 +64,7 @@ http
|
||||
# included in server blocks where listen 443 is defined
|
||||
|
||||
# Enable gzipping of responses.
|
||||
#gzip on;
|
||||
# gzip on;
|
||||
|
||||
# Set the Vary HTTP header as defined in the RFC 2616. Default is 'off'.
|
||||
gzip_vary on;
|
||||
|
||||
@@ -1,9 +1,10 @@
|
||||
# #
|
||||
# @project thetvapp-docker
|
||||
# @about Nginx site-configs default configuration file
|
||||
# @file /root/defaults/nginx/site-confs/default.conf
|
||||
# @repo https://github.com/Aetherinox/thetvapp-docker
|
||||
# @generated 2024-11-30
|
||||
# @project tvapp2
|
||||
# @usage docker image which allows you to download a m3u playlist and EPG guide data for the
|
||||
# IPTV service TheTvApp.
|
||||
# @file nginx.conf.sample
|
||||
# @repo https://github.com/Aetherinox/docker-base-alpine
|
||||
# https://git.binaryninja.net/pub_projects/tvapp2
|
||||
# #
|
||||
|
||||
server
|
||||
@@ -29,39 +30,35 @@ server
|
||||
location /
|
||||
{
|
||||
# enable for basic auth
|
||||
# auth_basic "Restricted";
|
||||
# auth_basic_user_file /config/nginx/.htpasswd;
|
||||
#auth_basic "Restricted";
|
||||
#auth_basic_user_file /config/nginx/.htpasswd;
|
||||
|
||||
# index > fancy
|
||||
fancyindex on;
|
||||
fancyindex_header "/theme/header.html";
|
||||
fancyindex_footer "/theme/footer.html";
|
||||
fancyindex_ignore "theme";
|
||||
fancyindex_time_format "%m-%d-%Y %l:%M:%S %P";
|
||||
fancyindex_directories_first on;
|
||||
fancyindex_localtime on;
|
||||
fancyindex_name_length 255;
|
||||
fancyindex_show_path off;
|
||||
fancyindex_show_dotfiles off;
|
||||
fancyindex_hide_symlinks on;
|
||||
fancyindex_hide_parent_dir on;
|
||||
fancyindex_default_sort name;
|
||||
fancyindex on;
|
||||
fancyindex_header "/theme/header.html";
|
||||
fancyindex_footer "/theme/footer.html";
|
||||
fancyindex_ignore "theme";
|
||||
fancyindex_time_format "%m-%d-%Y %T";
|
||||
fancyindex_name_length 255;
|
||||
fancyindex_show_dotfiles off;
|
||||
fancyindex_hide_symlinks on;
|
||||
fancyindex_default_sort name;
|
||||
|
||||
# index > auto
|
||||
autoindex_exact_size off;
|
||||
autoindex_format html;
|
||||
autoindex_localtime on;
|
||||
autoindex_exact_size off;
|
||||
autoindex_format html;
|
||||
autoindex_localtime on;
|
||||
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_types text/css text/javascript text/xml application/atom+xml application/rss+xml text/markdown text/mathml text/plain text/vnd.sun.j2me.app-descriptor text/vnd.wap.wml text/x-component application/json application/xhtml+xml application/xspf+xml font/woff font/woff2 image/avif image/bmp image/png image/svg+xml image/tiff image/vnd.wap.wbmp image/webp image/x-icon image/x-jng audio/midi audio/mpeg audio/ogg audio/x-m4a audio/x-realaudio;
|
||||
gzip_proxied any;
|
||||
gzip_comp_level 1;
|
||||
gzip_http_version 1.0;
|
||||
gunzip on;
|
||||
gzip_static on;
|
||||
gzip on;
|
||||
gzip_vary on;
|
||||
gzip_types text/css text/javascript text/xml application/atom+xml application/rss+xml text/markdown text/mathml text/plain text/vnd.sun.j2me.app-descriptor text/vnd.wap.wml text/x-component application/json application/xhtml+xml application/xspf+xml font/woff font/woff2 image/avif image/bmp image/png image/svg+xml image/tiff image/vnd.wap.wbmp image/webp image/x-icon image/x-jng audio/midi audio/mpeg audio/ogg audio/x-m4a audio/x-realaudio;
|
||||
gzip_proxied any;
|
||||
gzip_comp_level 1;
|
||||
gzip_http_version 1.0;
|
||||
gunzip on;
|
||||
gzip_static on;
|
||||
|
||||
try_files $uri $uri/ /index.html /index.htm /index.php$is_args$args;
|
||||
try_files $uri $uri/ /index.html /index.htm /index.php$is_args$args;
|
||||
}
|
||||
|
||||
location ~ ^(.+\.php)(.*)$
|
||||
|
||||
@@ -1,45 +1,67 @@
|
||||
|
||||
# #
|
||||
# @project thetvapp-docker
|
||||
# @about Nginx site-configs default configuration file
|
||||
# @file /root/defaults/nginx/ssl.conf.sample
|
||||
# @repo https://github.com/Aetherinox/thetvapp-docker
|
||||
# @generated 2024-11-30
|
||||
# @project tvapp2
|
||||
# @usage docker image which allows you to download a m3u playlist and EPG guide data for the
|
||||
# IPTV service TheTvApp.
|
||||
# @file nginx.conf.sample
|
||||
# @repo https://github.com/Aetherinox/docker-base-alpine
|
||||
# https://git.binaryninja.net/pub_projects/tvapp2
|
||||
# #
|
||||
|
||||
### Mozilla Recommendations
|
||||
# generated 2023-06-25, Mozilla Guideline v5.7, nginx 1.24.0, OpenSSL 3.1.1, intermediate configuration
|
||||
# https://ssl-config.mozilla.org/#server=nginx&version=1.24.0&config=intermediate&openssl=3.1.1&guideline=5.7
|
||||
# #
|
||||
# generated 2023-06-25, Mozilla Guideline v5.7, nginx 1.24.0, OpenSSL 3.1.1, intermediate configuration
|
||||
# https://ssl-config.mozilla.org/#server=nginx&version=1.24.0&config=intermediate&openssl=3.1.1&guideline=5.7
|
||||
# #
|
||||
|
||||
ssl_certificate /config/keys/cert.crt;
|
||||
ssl_certificate_key /config/keys/cert.key;
|
||||
ssl_session_timeout 1d;
|
||||
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
|
||||
ssl_session_tickets off;
|
||||
ssl_certificate /config/keys/cert.crt;
|
||||
ssl_certificate_key /config/keys/cert.key;
|
||||
ssl_session_timeout 1d;
|
||||
ssl_session_cache shared:MozSSL:10m; # about 40000 sessions
|
||||
ssl_session_tickets off;
|
||||
|
||||
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
|
||||
ssl_dhparam /config/nginx/dhparams.pem;
|
||||
# #
|
||||
# curl https://ssl-config.mozilla.org/ffdhe2048.txt > /path/to/dhparam
|
||||
# #
|
||||
|
||||
# intermediate configuration
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
|
||||
ssl_prefer_server_ciphers off;
|
||||
ssl_dhparam /config/nginx/dhparams.pem;
|
||||
|
||||
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
|
||||
#add_header Strict-Transport-Security "max-age=63072000" always;
|
||||
# #
|
||||
# intermediate configuration
|
||||
# #
|
||||
|
||||
# OCSP stapling
|
||||
#ssl_stapling on;
|
||||
#ssl_stapling_verify on;
|
||||
ssl_protocols TLSv1.2 TLSv1.3;
|
||||
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256;
|
||||
ssl_prefer_server_ciphers on;
|
||||
|
||||
# verify chain of trust of OCSP response using Root CA and Intermediate certs
|
||||
#ssl_trusted_certificate /config/keys/cert.crt;
|
||||
# #
|
||||
# OCSP stapling
|
||||
# #
|
||||
|
||||
# Optional additional headers
|
||||
#add_header Cache-Control "no-transform" always;
|
||||
#add_header Content-Security-Policy "upgrade-insecure-requests; frame-ancestors 'self'" always;
|
||||
#add_header Permissions-Policy "interest-cohort=()" always;
|
||||
#add_header Referrer-Policy "same-origin" always;
|
||||
#add_header X-Content-Type-Options "nosniff" always;
|
||||
#add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
#add_header X-UA-Compatible "IE=Edge" always;
|
||||
#add_header X-XSS-Protection "1; mode=block" always;
|
||||
# ssl_stapling on;
|
||||
# ssl_stapling_verify on;
|
||||
|
||||
# #
|
||||
# verify chain of trust of OCSP response using Root CA and Intermediate certs
|
||||
# #
|
||||
|
||||
# ssl_trusted_certificate /config/keys/cert.crt;
|
||||
|
||||
# #
|
||||
# HSTS (ngx_http_headers_module is required) (63072000 seconds)
|
||||
# #
|
||||
|
||||
add_header X-Content-Type-Options nosniff;
|
||||
add_header Strict-Transport-Security "max-age=31536000; includeSubdomains" always;
|
||||
|
||||
# #
|
||||
# Optional additional headers
|
||||
# #
|
||||
|
||||
# add_header Cache-Control "no-transform" always;
|
||||
# add_header Content-Security-Policy "upgrade-insecure-requests; frame-ancestors 'self'" always;
|
||||
# add_header Permissions-Policy "interest-cohort=()" always;
|
||||
# add_header Referrer-Policy "same-origin" always;
|
||||
# add_header X-Content-Type-Options "nosniff" always;
|
||||
# add_header X-Frame-Options "SAMEORIGIN" always;
|
||||
# add_header X-UA-Compatible "IE=Edge" always;
|
||||
# add_header X-XSS-Protection "1; mode=block" always;
|
||||
|
||||
@@ -1,34 +0,0 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Welcome to our server</title>
|
||||
<style>
|
||||
body{
|
||||
font-family: Helvetica, Arial, sans-serif;
|
||||
}
|
||||
.message{
|
||||
width:330px;
|
||||
padding:20px 40px;
|
||||
margin:0 auto;
|
||||
background-color:#f9f9f9;
|
||||
border:1px solid #ddd;
|
||||
}
|
||||
center{
|
||||
margin:40px 0;
|
||||
}
|
||||
h1{
|
||||
font-size: 18px;
|
||||
line-height: 26px;
|
||||
}
|
||||
p{
|
||||
font-size: 12px;
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="message">
|
||||
<h1>Welcome to our server</h1>
|
||||
<p>The website is currently being setup under this address.</p>
|
||||
<p>For help and support, please contact: <a href="me@example.com">me@example.com</a></p>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
1
root/defaults/www/theme/css/ui.min.css
vendored
1
root/defaults/www/theme/css/ui.min.css
vendored
File diff suppressed because one or more lines are too long
@@ -1,21 +0,0 @@
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<footer class="footer navbar">
|
||||
<div class="container">
|
||||
<div class="col text-center text-muted text-small text-nowrap">
|
||||
<small>Developed by Aetherinox - <a href="https://github.com/Aetherinox/thetvapp-docker">TheTVApp Grabber</a></small><br />
|
||||
<small>Lists generated by <a href="https://github.com/dtankdempse/thetvapp-m3u">dtankdempse</a></small>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script type="text/javascript">
|
||||
CreateBreadcrumbs();
|
||||
GenerateFileIcons();
|
||||
</script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.10.0/js/lightbox-plus-jquery.min.js"></script>
|
||||
</body>
|
||||
|
||||
</html>
|
||||
@@ -1,38 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
|
||||
<head>
|
||||
<meta charset="utf-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||
|
||||
<title>TheTvApp for Docker</title>
|
||||
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css">
|
||||
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/lightbox2/2.10.0/css/lightbox.min.css">
|
||||
<link rel="stylesheet" href="/theme/css/ui.min.css">
|
||||
<link rel="stylesheet" href="/theme/theme.css">
|
||||
|
||||
<script type="text/javascript" src="/theme/js/interface.min.js"></script>
|
||||
<script type="text/javascript" src="/theme/js/breadcrumbs.js"></script>
|
||||
<script type="text/javascript" src="/theme/js/fileicons.js"></script>
|
||||
</head>
|
||||
|
||||
<body>
|
||||
<div class="header">
|
||||
<nav class="navbar sticky-top container">
|
||||
<div class="navbar-brand">
|
||||
<i class="fa-sharp-duotone fa-regular fa-tv" style="--fa-primary-color: rgb(255, 255, 255); --fa-secondary-color: rgb(255, 255, 255);" aria-hidden="true"></i>
|
||||
<a href="https://github.com/Aetherinox/thetvapp-docker">TheTvApp for Docker</a>
|
||||
</div>
|
||||
</nav>
|
||||
</div>
|
||||
|
||||
<div class="container">
|
||||
<nav aria-label="breadcrumb">
|
||||
<ol class="breadcrumb" id="breadcrumbs"/>
|
||||
</nav>
|
||||
|
||||
<div class="row">
|
||||
<div class="col">
|
||||
<div class="about">This page displays your most recent copies of TheTvApp's <code>.m3u8</code> playlist and <code>.xml</code> EPG guide data. Right-click each file, select <span class="text-accent">Copy Link</span> and paste the URLs within your IPTV apps such as Jellyfin. The <code>.m3u8</code> and <code>.m3u8.gz</code> are identical guide lists, but the <code>.xml.gz</code> is compressed and will import into your IPTV application much faster.</div>
|
||||
@@ -1,10 +0,0 @@
|
||||
/*
|
||||
@app thetvapp grabber
|
||||
@author Aetherinox
|
||||
@url https://github.com/Aetherinox/thetvapp-docker
|
||||
https://hub.docker.com/repository/docker/aetherinox/thetvapp
|
||||
|
||||
Generate breadcrumbs for header
|
||||
*/
|
||||
|
||||
function CreateBreadcrumbs(){for(var e,a,n,r=window.location.pathname.replace(/\/$/,"").split("/"),t="",c="",o=0;o<r.length;o++)c+=r[o]+"/",t+=(e=0==o?"Home":decodeURIComponent(r[o]),a=c,'<li class="breadcrumb-item'+((n=o==r.length-1)?' active aria-current="page':"")+'">'+(n?"":'<a href="'+a+'">')+e+(n?"":"</a>"));document.getElementById("breadcrumbs").innerHTML=t}
|
||||
@@ -1,203 +0,0 @@
|
||||
/*
|
||||
@app thetvapp grabber
|
||||
@author Aetherinox
|
||||
@url https://github.com/Aetherinox/thetvapp-docker
|
||||
https://hub.docker.com/repository/docker/aetherinox/thetvapp
|
||||
|
||||
Generate icons for each file shown in list
|
||||
*/
|
||||
|
||||
function GenerateFileIcons()
|
||||
{
|
||||
function e(e)
|
||||
{
|
||||
return '<i class="fa fa-fw ' + e + '" aria-hidden="true"></i>'
|
||||
}
|
||||
|
||||
var a = document.getElementById("list");
|
||||
a.removeAttribute("cellpadding"), a.removeAttribute("cellspacing"), a.classList.add("table", "table-sm", "table-hover", "text-nowrap"), a.tHead.children[0].classList.add("d-none", "d-md-table-row"), "/" != window.location.pathname && a.deleteRow(1);
|
||||
|
||||
for (var s, c = 0; s = a.rows[c]; c++) filetype = function(e)
|
||||
{
|
||||
if (e.endsWith("/"))
|
||||
return "fa-duotone fa-solid fa-folder";
|
||||
|
||||
switch (e.split(".").pop().toLowerCase())
|
||||
{
|
||||
case "txt":
|
||||
return "fa-solid fa-file-lines";
|
||||
case "pdf":
|
||||
return "fa-solid fa-file-pdf";
|
||||
case "bmp":
|
||||
return "fa-solid fa-file-image";
|
||||
case "gif":
|
||||
return "fa-solid fa-file-gif";
|
||||
case "jpeg":
|
||||
return "fa-solid fa-file-jpg";
|
||||
case "jpg":
|
||||
return "fa-solid fa-file-jpg";
|
||||
case "png":
|
||||
return "fa-solid fa-file-png";
|
||||
case "tif":
|
||||
return "fa-solid fa-file-image";
|
||||
case "tiff":
|
||||
return "fa-solid fa-file-image";
|
||||
case "aac":
|
||||
return "fa-solid fa-file-music";
|
||||
case "aiff":
|
||||
return "fa-solid fa-file-audio";
|
||||
case "m4a":
|
||||
return "fa-solid fa-file-audio";
|
||||
case "mp3":
|
||||
return "fa-solid fa-file-mp3";
|
||||
case "ogg":
|
||||
return "fa-solid fa-file-music";
|
||||
case "opus":
|
||||
return "fa-solid fa-file-music";
|
||||
case "m3u":
|
||||
return "fa-solid fa-file-lines";
|
||||
case "m3u8":
|
||||
return "fa-solid fa-file-lines";
|
||||
case "wav":
|
||||
return "fa-solid fa-file-audio";
|
||||
case "amv":
|
||||
return "fa-solid fa-file-video";
|
||||
case "avi":
|
||||
return "fa-solid fa-file-video";
|
||||
case "flv":
|
||||
return "fa-solid fa-file-video";
|
||||
case "m4v":
|
||||
return "fa-solid fa-file-video";
|
||||
case "mkv":
|
||||
return "fa-solid fa-file-video";
|
||||
case "mov":
|
||||
return "fa-solid fa-file-mov";
|
||||
case "mp4":
|
||||
return "fa-solid fa-file-mp4";
|
||||
case "m4p":
|
||||
return "fa-solid fa-file-audio";
|
||||
case "mpeg":
|
||||
return "fa-solid fa-file-mp4"
|
||||
case "mpg":
|
||||
return "fa-solid fa-file-video";
|
||||
case "ogv":
|
||||
return "fa-solid fa-file-video";
|
||||
case "vob":
|
||||
return "fa-duotone fa-solid fa-photo-film";
|
||||
case "webm":
|
||||
return "fa-solid fa-file-video";
|
||||
case "wmv":
|
||||
return "fa-solid fa-file-video";
|
||||
case "7z":
|
||||
return "fa-solid fa-file-zipper";
|
||||
case "a":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "apk":
|
||||
return "fa-solid fa-box-archive";
|
||||
case "ar":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "bin":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "bz2":
|
||||
return "fa-solid fa-file-zipper";
|
||||
case "cab":
|
||||
return "fa-solid fa-cabinet-filing";
|
||||
case "dmg":
|
||||
return "fa-solid fa-tablet-button";
|
||||
case "gz":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "xml":
|
||||
return "fa-solid fa-file-xml"
|
||||
case "iso":
|
||||
return "fa-duotone fa-regular fa-compact-disc";
|
||||
case "jar":
|
||||
return "fa-solid fa-jar";
|
||||
case "lz":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "lzma":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "lzo":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "pak":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "partimg":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "rar":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "s7z":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "tar":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "tbz2":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "tgz":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "tlz":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "txz":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "xz":
|
||||
return "fa-solid fa-file-zipper"
|
||||
case "zip":
|
||||
return "fa-solid fa-file-zip";
|
||||
case "doc":
|
||||
return "fa-solid fa-file-doc";
|
||||
case "docx":
|
||||
return "fa-solid fa-file-doc";
|
||||
case "odt":
|
||||
return "fa-solid fa-file-lines";
|
||||
case "rtf":
|
||||
return "fa-solid fa-file-word";
|
||||
case "csv":
|
||||
return "fa-solid fa-file-csv";
|
||||
case "ods":
|
||||
return "fa-solid fa-file-spreadsheet";
|
||||
case "xls":
|
||||
return "fa-solid fa-file-xls";
|
||||
case "xlsx":
|
||||
return "fa-solid fa-file-xls";
|
||||
case "odp":
|
||||
return "fa-solid fa-file-powerpoint";
|
||||
case "ppt":
|
||||
return "fa-solid fa-file-ppt";
|
||||
case "pptx":
|
||||
return "fa-solid fa-file-powerpoint";
|
||||
case "c":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "class":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "cpp":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "cs":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "h":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "hpp":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "hxx":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "java":
|
||||
return "fa-solid fa-file-binary";
|
||||
case "py":
|
||||
return "fa-solid fa-file-code";
|
||||
case "sh":
|
||||
return "fa-solid fa-file-code";
|
||||
case "swift":
|
||||
return "fa-solid fa-file-code";
|
||||
case "vb":
|
||||
return "fa-solid fa-file-code";
|
||||
case "svg":
|
||||
return "fa-solid fa-file-svg";
|
||||
case "pem":
|
||||
return "fa-solid fa-file-lock";
|
||||
case "key":
|
||||
return "fa-solid fa-file-lock";
|
||||
case "eps":
|
||||
return "fa-solid fa-file-eps";
|
||||
case "cad":
|
||||
return "fa-solid fa-file-cad";
|
||||
default:
|
||||
return "fa-solid fa-file"
|
||||
}
|
||||
}(s.cells[0].children[0].innerHTML), s.insertCell(0).innerHTML = 0 < c ? e(filetype) : "", s.cells[0].classList.add("col-auto"), s.cells[1].classList.add("col", "filename"), s.cells[2].classList.add("col-auto", "d-none", "d-md-table-cell"), s.cells[3].classList.add("col-auto", "d-none", "d-md-table-cell"), "image" == filetype && s.cells[1].children[0].setAttribute("data-lightbox", "roadtrip")
|
||||
}
|
||||
1
root/defaults/www/theme/js/interface.min.js
vendored
1
root/defaults/www/theme/js/interface.min.js
vendored
File diff suppressed because one or more lines are too long
@@ -1,195 +0,0 @@
|
||||
/*
|
||||
@app thetvapp grabber
|
||||
@author Aetherinox
|
||||
@url https://github.com/Aetherinox/thetvapp-docker
|
||||
https://hub.docker.com/repository/docker/aetherinox/thetvapp
|
||||
|
||||
Primary theme CSS
|
||||
*/
|
||||
|
||||
body
|
||||
{
|
||||
background-color: #f8f9fa;
|
||||
padding-bottom: 20px;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark)
|
||||
{
|
||||
body
|
||||
{
|
||||
background-color: #262626;
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
.container nav
|
||||
{
|
||||
margin-left: -8px;
|
||||
}
|
||||
|
||||
.container .about
|
||||
{
|
||||
padding-left: 8px;
|
||||
padding-bottom: 40px;
|
||||
font-size: 9.3pt;
|
||||
}
|
||||
|
||||
.breadcrumb
|
||||
{
|
||||
background-color: transparent;
|
||||
padding: 0rem 1rem;
|
||||
}
|
||||
|
||||
.breadcrumb .breadcrumb-item a
|
||||
{
|
||||
color: #4caf50;
|
||||
}
|
||||
|
||||
html
|
||||
{
|
||||
position: relative;
|
||||
min-height: 100%;
|
||||
}
|
||||
|
||||
.footer
|
||||
{
|
||||
position: absolute;
|
||||
bottom: 0;
|
||||
width: 100%;
|
||||
margin-bottom: 0;
|
||||
padding-bottom: 20px;
|
||||
padding-top: 20px;
|
||||
background-color: #151515;
|
||||
}
|
||||
|
||||
.footer a,
|
||||
.footer a:focus,
|
||||
.footer a:hover
|
||||
{
|
||||
color: #FFFFFF;
|
||||
}
|
||||
|
||||
.footer a
|
||||
{
|
||||
color: #f7296c;
|
||||
}
|
||||
|
||||
.navbar
|
||||
{
|
||||
padding: 15px 1rem;
|
||||
}
|
||||
|
||||
.header
|
||||
{
|
||||
background-color: #a82147;
|
||||
color: #fff;
|
||||
height: 55px;
|
||||
}
|
||||
|
||||
.header .navbar-brand
|
||||
{
|
||||
padding: 0 8px;
|
||||
font-size: 16px;
|
||||
line-height: 24px;
|
||||
height: 24px;
|
||||
}
|
||||
|
||||
.header a
|
||||
{
|
||||
color: #FFF;
|
||||
text-decoration: none;
|
||||
padding-left: 7px;
|
||||
}
|
||||
|
||||
#breadcrumbs::before
|
||||
{
|
||||
margin-top: 4px;
|
||||
content: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 576 512' fill='white' width='19px' height='19px'%3E%3Cdefs%3E%3Cstyle%3E.fa-secondary%7Bopacity:.4%7D%3C/style%3E%3C/defs%3E%3Cpath class='fa-primary' d='M160 384H512c35.3 0 64-28.7 64-64V160c0-35.3-28.7-64-64-64H394.5c-17 0-33.3-6.7-45.3-18.7L322.7 50.7c-12-12-28.3-18.7-45.3-18.7H160c-35.3 0-64 28.7-64 64V320c0 35.3 28.7 64 64 64z'%3E%3C/path%3E%3Cpath class='fa-secondary' d='M24 96c13.3 0 24 10.7 24 24V344c0 48.6 39.4 88 88 88H456c13.3 0 24 10.7 24 24s-10.7 24-24 24H136C60.9 480 0 419.1 0 344V120c0-13.3 10.7-24 24-24z'%3E%3C/path%3E%3C/svg%3E");
|
||||
}
|
||||
|
||||
.breadcrumb-item.active
|
||||
{
|
||||
color: #6c757d;
|
||||
padding-left: 10px;
|
||||
}
|
||||
|
||||
.breadcrumb
|
||||
{
|
||||
padding-top: 30px;
|
||||
}
|
||||
|
||||
#list a,
|
||||
#list a:focus
|
||||
{
|
||||
color: #FFF !important;
|
||||
}
|
||||
|
||||
#list a:hover
|
||||
{
|
||||
color: #ff275d !important;
|
||||
}
|
||||
|
||||
#list colgroup
|
||||
{
|
||||
display: none;
|
||||
}
|
||||
|
||||
#list .filename
|
||||
{
|
||||
word-break: break-all;
|
||||
white-space: normal;
|
||||
}
|
||||
|
||||
.table thead th a
|
||||
{
|
||||
color: #9b9b9b !important;
|
||||
font-weight: normal;
|
||||
}
|
||||
|
||||
.table td, .table th
|
||||
{
|
||||
padding: .75rem;
|
||||
vertical-align: top;
|
||||
border-top: 0px solid #dee2e6;
|
||||
}
|
||||
|
||||
.table thead tr
|
||||
{
|
||||
border-bottom: 2px solid #575757;
|
||||
background-color: #181818;
|
||||
}
|
||||
|
||||
.table thead th
|
||||
{
|
||||
vertical-align: bottom;
|
||||
border-bottom: 0px solid #575757;
|
||||
}
|
||||
|
||||
.table-hover tbody tr:hover
|
||||
{
|
||||
background-color: rgba(155, 155, 155, 0.075);
|
||||
}
|
||||
|
||||
.text-accent
|
||||
{
|
||||
font-weight: bold;
|
||||
color: #d0c273;
|
||||
}
|
||||
|
||||
code
|
||||
{
|
||||
font-size: 96%;
|
||||
color: #ff4985;
|
||||
word-break: break-word;
|
||||
padding-right: 5px;
|
||||
padding-left: 4px;
|
||||
}
|
||||
|
||||
@media (prefers-color-scheme: dark)
|
||||
{
|
||||
#list a,
|
||||
#list a:focus,
|
||||
#list a:hover {
|
||||
color: #fff;
|
||||
}
|
||||
}
|
||||
@@ -10,5 +10,5 @@
|
||||
postrotate
|
||||
s6-svc -1 /run/service/svc-nginx
|
||||
endscript
|
||||
su abc abc
|
||||
su dockerx dockerx
|
||||
}
|
||||
|
||||
@@ -10,5 +10,5 @@
|
||||
postrotate
|
||||
s6-svc -t /run/service/svc-php-fpm
|
||||
endscript
|
||||
su abc abc
|
||||
su dockerx dockerx
|
||||
}
|
||||
|
||||
@@ -1,9 +1,19 @@
|
||||
───────────────────────────────────────────────────────────────
|
||||
TheTvApp Docker Container
|
||||
───────────────────────────────────────────────────────────────
|
||||
This container automatically downloads the m3u8 and xml
|
||||
guide data from
|
||||
- https://github.com/dtankdempse/thetvapp-m3u
|
||||
──────────────────────────────────────────────────────────────────────────────────────────
|
||||
TVApp2 Docker Image
|
||||
──────────────────────────────────────────────────────────────────────────────────────────
|
||||
The TvApp2 image allows you to fetch m3u playlist and EPG data for numerous
|
||||
IPTV services online.
|
||||
|
||||
Once the data is downloaded, you can access the files from
|
||||
the container's webserver.
|
||||
Once the files are fetched by the image, you can visit the self-hosted webpage,
|
||||
copy the links to the m3u and EPG files; and add them to your favorite IPTV app
|
||||
such as Jellyfin, Plex, or Emby.
|
||||
|
||||
For more information about this project; visit the links below:
|
||||
|
||||
TVApp2 Repo https://git.binaryninja.net/pub_projects/tvapp2
|
||||
Base Alpine Image https://github.com/Aetherinox/docker-base-alpine
|
||||
|
||||
If you are making this container available on a public-facing domain,
|
||||
please consider using Traefik and Authentik to protect this container from
|
||||
outside access. Your M3U and EPG files will be available for the public to
|
||||
download and use.
|
||||
|
||||
@@ -4,34 +4,29 @@
|
||||
PUID=${PUID:-911}
|
||||
PGID=${PGID:-911}
|
||||
|
||||
if [[ -z ${AETHERX_READ_ONLY_FS} ]] && [[ -z ${AETHERX_NON_ROOT_USER} ]]; then
|
||||
groupmod -o -g "$PGID" abc
|
||||
usermod -o -u "$PUID" abc
|
||||
if [[ -z ${TVAPP_READ_ONLY_FS} ]] && [[ -z ${TVAPP_NON_ROOT_USER} ]]; then
|
||||
groupmod -o -g "$PGID" dockerx
|
||||
usermod -o -u "$PUID" dockerx
|
||||
fi
|
||||
|
||||
if { [[ -z ${AETHERX_READ_ONLY_FS} ]] && [[ -z ${AETHERX_NON_ROOT_USER} ]]; } || [[ ! ${LSIO_FIRST_PARTY} = "true" ]]; then
|
||||
if { [[ -z ${TVAPP_READ_ONLY_FS} ]] && [[ -z ${TVAPP_NON_ROOT_USER} ]]; } || [[ ! ${TVAPP_FIRST_PARTY} = "true" ]]; then
|
||||
cat /etc/s6-overlay/s6-rc.d/init-adduser/branding
|
||||
else
|
||||
cat /run/branding
|
||||
fi
|
||||
|
||||
if [[ -z ${AETHERX_NON_ROOT_USER} ]]; then
|
||||
echo "
|
||||
User ID ........... $(id -u abc)
|
||||
Group ID .......... $(id -g abc)"
|
||||
if [[ -z ${TVAPP_NON_ROOT_USER} ]]; then
|
||||
echo ""
|
||||
echo " User:Group $(id -u dockerx):$(id -g dockerx)"
|
||||
else
|
||||
echo "
|
||||
User ID ........... $(stat /run -c %u)
|
||||
Group ID .......... $(stat /run -c %g)"
|
||||
echo " User:Group $(stat /run -c %u):$(stat /run -c %g)"
|
||||
fi
|
||||
echo "
|
||||
Port HTTP ......... $(echo $PORT_HTTP)
|
||||
Port HTTPS ........ $(echo $PORT_HTTPS)"
|
||||
echo " (Ports) HTTP/HTTPS $(echo $PORT_HTTP)"
|
||||
echo ""
|
||||
echo '──────────────────────────────────────────────────────────────────────────────────────────'
|
||||
|
||||
echo '───────────────────────────────────────────────────────────────'
|
||||
|
||||
if [[ -z ${AETHERX_READ_ONLY_FS} ]] && [[ -z ${AETHERX_NON_ROOT_USER} ]]; then
|
||||
lsiown abc:abc /app
|
||||
lsiown abc:abc /config
|
||||
lsiown abc:abc /defaults
|
||||
if [[ -z ${TVAPP_READ_ONLY_FS} ]] && [[ -z ${TVAPP_NON_ROOT_USER} ]]; then
|
||||
aetherxown dockerx:dockerx /app
|
||||
aetherxown dockerx:dockerx /config
|
||||
aetherxown dockerx:dockerx /defaults
|
||||
fi
|
||||
|
||||
@@ -1,10 +1,10 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
# shellcheck shell=bash
|
||||
|
||||
for cron_user in abc root; do
|
||||
if [[ -z ${AETHERX_READ_ONLY_FS} ]] && [[ -z ${AETHERX_NON_ROOT_USER} ]]; then
|
||||
for cron_user in dockerx root; do
|
||||
if [[ -z ${TVAPP_READ_ONLY_FS} ]] && [[ -z ${TVAPP_NON_ROOT_USER} ]]; then
|
||||
if [[ -f "/etc/crontabs/${cron_user}" ]]; then
|
||||
lsiown "${cron_user}":"${cron_user}" "/etc/crontabs/${cron_user}"
|
||||
aetherxown "${cron_user}":"${cron_user}" "/etc/crontabs/${cron_user}"
|
||||
crontab -u "${cron_user}" "/etc/crontabs/${cron_user}"
|
||||
fi
|
||||
fi
|
||||
@@ -38,7 +38,8 @@ for cron_user in abc root; do
|
||||
# set perms and import user crontabs
|
||||
# #
|
||||
|
||||
lsiown "${cron_user}":"${cron_user}" "/config/crontabs/${cron_user}"
|
||||
aetherxown "${cron_user}":"${cron_user}" "/config/crontabs/${cron_user}"
|
||||
crontab -u "${cron_user}" "/config/crontabs/${cron_user}"
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
@@ -6,17 +6,17 @@ SCRIPTS_DIR="/custom-cont-init.d"
|
||||
|
||||
# Make sure custom init directory exists and has files in it
|
||||
if [[ -e "${SCRIPTS_DIR}" ]] && [[ -n "$(/bin/ls -A ${SCRIPTS_DIR} 2>/dev/null)" ]]; then
|
||||
echo -e " Loader : Custom files found, loading them ..."
|
||||
echo -e " Loader : Plugins found, loading them ..."
|
||||
for SCRIPT in "${SCRIPTS_DIR}"/*; do
|
||||
NAME="$(basename "${SCRIPT}")"
|
||||
if [[ -f "${SCRIPT}" ]]; then
|
||||
echo -e " Loader : Executing ..."
|
||||
/bin/bash "${SCRIPT}"
|
||||
echo -e " Loader : ${NAME}: Exited $?"
|
||||
echo -e " Loader : ${NAME}: Ran Successfully with code [$?]"
|
||||
elif [[ ! -f "${SCRIPT}" ]]; then
|
||||
echo -e " Loader : ${NAME}: Not a valid file"
|
||||
fi
|
||||
done
|
||||
else
|
||||
echo -e " Loader : No custom files found, skipping..."
|
||||
echo -e " Loader : No Plugins found, skipping..."
|
||||
fi
|
||||
|
||||
@@ -2,13 +2,15 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
# #
|
||||
# @project thetvapp-docker
|
||||
# @about Manages self-signed ssl certificates
|
||||
# @file /root/etc/s6-overlay/s6-rc.d/init-keygen/run
|
||||
# @repo https://github.com/Aetherinox/thetvapp-docker
|
||||
# @project tvapp2
|
||||
# @usage docker image which allows you to download a m3u playlist and EPG guide data for the
|
||||
# IPTV service TheTvApp.
|
||||
# @file nginx.conf.sample
|
||||
# @repo https://github.com/Aetherinox/docker-base-alpine
|
||||
# https://git.binaryninja.net/pub_projects/tvapp2
|
||||
# #
|
||||
|
||||
SUBJECT="/C=NA/ST=NA/L=NA/O=thetvapp-docker/OU=Aetherinox TheTvApp/CN=*"
|
||||
SUBJECT="/C=NA/ST=NA/L=NA/O=BinaryNinja/OU=TVApp2 Docker Image/CN=*"
|
||||
if [[ -f /config/keys/cert.key && -f /config/keys/cert.crt ]]; then
|
||||
echo -e " SSL : Using existing keys found in /config/keys"
|
||||
else
|
||||
|
||||
@@ -1 +1 @@
|
||||
# This file doesn't do anything, it's just the end of the mod init process
|
||||
# Empty placeholder for end of mod init process
|
||||
|
||||
@@ -1,108 +1,2 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
# shellcheck shell=bash
|
||||
|
||||
# #
|
||||
# precreate log files
|
||||
# #
|
||||
|
||||
for file in /config/log/nginx/access.log /config/log/nginx/error.log; do
|
||||
if [[ ! -f "${file}" ]]; then
|
||||
touch "${file}"
|
||||
fi
|
||||
done
|
||||
|
||||
# #
|
||||
# copy default config files if they don't exist
|
||||
# #
|
||||
|
||||
if [[ ! -f /config/nginx/nginx.conf ]]; then
|
||||
cp /defaults/nginx/nginx.conf.sample /config/nginx/nginx.conf
|
||||
fi
|
||||
|
||||
if [[ ! -f /config/nginx/ssl.conf ]]; then
|
||||
cp /defaults/nginx/ssl.conf.sample /config/nginx/ssl.conf
|
||||
fi
|
||||
|
||||
if [[ ! -f /config/nginx/site-confs/default.conf ]]; then
|
||||
cp /defaults/nginx/site-confs/default.conf.sample /config/nginx/site-confs/default.conf
|
||||
fi
|
||||
|
||||
# #
|
||||
# force nginx.conf to include site-confs/*.conf instead of site-confs/*
|
||||
# #
|
||||
|
||||
sed -i -E "s#^(\s*)include /config/nginx/site-confs/\*;#\1include /config/nginx/site-confs/\*.conf;#" /config/nginx/nginx.conf
|
||||
|
||||
# #
|
||||
# copy index.html if no index file exists
|
||||
# #
|
||||
|
||||
INDEX_EXISTS=false
|
||||
for file in /config/www/index.*; do
|
||||
if [[ -e "${file}" ]]; then
|
||||
INDEX_EXISTS=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
THEME_EXISTS=false
|
||||
for file in /config/www/theme/*; do
|
||||
if [[ -e "${file}" ]]; then
|
||||
THEME_EXISTS=true
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# dont add an index, we want fancy indexing
|
||||
# if [[ ${INDEX_EXISTS} == false ]] && grep -Eq '^\s*index[^#]*index\.html' /config/nginx/**/*.conf; then
|
||||
# cp /defaults/www/index.html /config/www/index.html
|
||||
# fi
|
||||
|
||||
if [[ ${THEME_EXISTS} == false ]]; then
|
||||
cp -r /defaults/www/theme /config/www/
|
||||
fi
|
||||
|
||||
# #
|
||||
# copy pre-generated dhparams or generate if needed
|
||||
# #
|
||||
|
||||
if [[ ! -f /config/nginx/dhparams.pem ]]; then
|
||||
cp /defaults/nginx/dhparams.pem /config/nginx/dhparams.pem
|
||||
fi
|
||||
|
||||
if ! grep -q 'PARAMETERS' "/config/nginx/dhparams.pem"; then
|
||||
curl -o /config/nginx/dhparams.pem -L "https://ssl-config.mozilla.org/ffdhe4096.txt"
|
||||
fi
|
||||
|
||||
# #
|
||||
# Set resolver, ignore ipv6 addresses
|
||||
# #
|
||||
|
||||
touch /config/nginx/resolver.conf
|
||||
if ! grep -q 'resolver' /config/nginx/resolver.conf; then
|
||||
RESOLVERRAW=$(awk 'BEGIN{ORS=" "} $1=="nameserver" {print $2}' /etc/resolv.conf)
|
||||
for i in ${RESOLVERRAW}; do
|
||||
if [[ "$(awk -F ':' '{print NF-1}' <<<"${i}")" -le 2 ]]; then
|
||||
RESOLVER="${RESOLVER} ${i}"
|
||||
fi
|
||||
done
|
||||
|
||||
if [[ -z "${RESOLVER}" ]]; then
|
||||
RESOLVER="127.0.0.11"
|
||||
fi
|
||||
|
||||
echo "[ Resolver ]: Setting to ${RESOLVER}"
|
||||
RESOLVEROUTPUT="# This file is auto-generated only on first start, based on the container's /etc/resolv.conf file. Feel free to modify it as you wish.\n\nresolver ${RESOLVER} valid=30s;"
|
||||
echo -e "${RESOLVEROUTPUT}" >/config/nginx/resolver.conf
|
||||
fi
|
||||
|
||||
# #
|
||||
# Set worker_processes
|
||||
# #
|
||||
|
||||
touch /config/nginx/worker_processes.conf
|
||||
if ! grep -q 'worker_processes' /config/nginx/worker_processes.conf; then
|
||||
WORKER_PROCESSES=$(nproc)
|
||||
echo "[ Worker ]: Setting worker_processes to ${WORKER_PROCESSES}"
|
||||
echo -e "# This file is auto-generated only on first start, based on the cpu cores detected. Feel free to change it to any other number or to auto to let nginx handle it automatically.\n\nworker_processes ${WORKER_PROCESSES};" >/config/nginx/worker_processes.conf
|
||||
fi
|
||||
|
||||
@@ -2,17 +2,17 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
# permissions
|
||||
lsiown -R abc:abc \
|
||||
aetherxown -R dockerx:dockerx \
|
||||
/var/lib/nginx \
|
||||
/var/tmp/nginx
|
||||
|
||||
lsiown -R abc:abc \
|
||||
aetherxown -R dockerx:dockerx \
|
||||
/config/keys \
|
||||
/config/log \
|
||||
/config/nginx \
|
||||
/config/php
|
||||
|
||||
lsiown abc:abc \
|
||||
aetherxown dockerx:dockerx \
|
||||
/config/www
|
||||
|
||||
chmod -R g+w \
|
||||
|
||||
@@ -2,27 +2,10 @@
|
||||
# shellcheck shell=bash
|
||||
|
||||
# #
|
||||
# @project thetvapp-docker
|
||||
# @about Manages sample files such as nginx
|
||||
# @file /root/etc/s6-overlay/s6-rc.d/init-samples/run
|
||||
# @repo https://github.com/Aetherinox/thetvapp-docker
|
||||
# @project tvapp2
|
||||
# @usage docker image which allows you to download a m3u playlist and EPG guide data for the
|
||||
# IPTV service TheTvApp.
|
||||
# @file nginx.conf.sample
|
||||
# @repo https://github.com/Aetherinox/docker-base-alpine
|
||||
# https://git.binaryninja.net/pub_projects/tvapp2
|
||||
# #
|
||||
|
||||
# remove old samples
|
||||
find /config/nginx/ \
|
||||
-name "*.conf.sample" \
|
||||
-type f \
|
||||
-delete
|
||||
|
||||
# copy new samples
|
||||
find /defaults/nginx/ \
|
||||
-maxdepth 3 \
|
||||
-name "*.conf.sample" \
|
||||
-type f \
|
||||
-exec cp "{}" /config/nginx/ \;
|
||||
|
||||
find /defaults/nginx/site-confs/ \
|
||||
-maxdepth 1 \
|
||||
-name "*.conf.sample" \
|
||||
-type f \
|
||||
-exec cp "{}" /config/nginx/site-confs/ \;
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
#!/usr/bin/with-contenv bash
|
||||
# shellcheck shell=bash
|
||||
|
||||
if builtin command -v crontab >/dev/null 2>&1 && [[ -n "$(crontab -l -u abc 2>/dev/null || true)" || -n "$(crontab -l -u root 2>/dev/null || true)" ]]; then
|
||||
if builtin command -v crontab >/dev/null 2>&1 && [[ -n "$(crontab -l -u dockerx 2>/dev/null || true)" || -n "$(crontab -l -u root 2>/dev/null || true)" ]]; then
|
||||
if builtin command -v busybox >/dev/null 2>&1 && [[ $(busybox || true) =~ [[:space:]](crond)([,]|$) ]]; then
|
||||
exec busybox crond -f -S -l 5
|
||||
elif [[ -f /usr/bin/apt ]] && [[ -f /usr/sbin/cron ]]; then
|
||||
|
||||
@@ -13,4 +13,4 @@ if pgrep -f "[n]ginx:" >/dev/null; then
|
||||
sleep 1
|
||||
fi
|
||||
|
||||
exec /usr/sbin/nginx
|
||||
# exec /usr/sbin/nginx
|
||||
|
||||
@@ -17,4 +17,4 @@ migrate() {
|
||||
}
|
||||
|
||||
# rename default to default.conf
|
||||
migrate "/config/nginx/site-confs/default" "/config/nginx/site-confs/default.conf"
|
||||
# migrate "/config/nginx/site-confs/default" "/config/nginx/site-confs/default.conf"
|
||||
|
||||
Reference in New Issue
Block a user