initial commit

This commit is contained in:
Tanishq Dubey 2022-07-31 18:18:40 +00:00
commit d68c7ee3b9
17 changed files with 627 additions and 0 deletions

31
gitea/docker-compose.yml Normal file
View File

@ -0,0 +1,31 @@
version: "3"
networks:
web:
external: true
gitea:
external: false
services:
server:
image: gitea/gitea:1.16.9
container_name: gitea
environment:
- USER_UID=1000
- USER_GID=1000
- PROTOCOL=http
- DOMAIN=git.dws.rip
restart: always
labels:
- traefik.http.routers.gitea.rule=Host(`git.dws.rip`)
- traefik.http.routers.gitea.tls=true
- traefik.http.routers.gitea.tls.certresolver=lets-encrypt
- traefik.http.services.gitea.loadbalancer.server.port=3000
- traefik.port=3000
networks:
- gitea
- web
volumes:
- /dws/otherdata/gitea:/data
- /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro

View File

@ -0,0 +1,23 @@
---
version: '3.3'
networks:
web:
external: true
internal:
external: false
services:
idc:
image: dws/idc
build: ./idc
networks:
- internal
- web
labels:
- traefik.http.routers.idc.rule=Host(`idc.dws.rip`)
- traefik.http.routers.idc.tls=true
- traefik.http.routers.idc.tls.certresolver=lets-encrypt
- traefik.port=4269
container_name: idc
restart: always

View File

@ -0,0 +1,13 @@
FROM python:buster
WORKDIR /usr/src/app
COPY requirements.txt ./
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 4269
CMD ["python", "./main.py"]

View File

@ -0,0 +1,99 @@
import json
import os.path
import random
import time
import requests
from flask import Flask, render_template
from flask_apscheduler import APScheduler
URL = "https://www.reddit.com/r/InterdimensionalCable/top.json?limit=100&t=week"
scheduler = APScheduler()
v = []
def getRedditData(url):
resp = requests.get(url)
text = resp.text
code = resp.status_code
while code == 429:
print("waiting for timeout to end ...")
time.sleep(2)
resp = requests.get(url)
text = resp.text
code = resp.status_code
data = json.loads(text)
token = data["data"]["after"]
ret = []
for post in data["data"]["children"]:
turl = post["data"]["url_overridden_by_dest"]
if "youtu.be" in turl:
turl = turl.replace("https://youtu.be/", "https://www.youtube.com/watch?v=")
if "m.youtube.com" in turl:
turl = turl.replace(
"https://m.youtube.com/embed", "https://www.youtube.com/watch?v="
)
turl = turl.replace("watch?v=", "embed/")
turl = turl + "?autoplay=1&enablejsapi=1"
ret.append(turl)
return ret, token
def doPages(numPages):
token = ""
vids = []
for i in range(numPages):
if i == 0:
v, t = getRedditData(URL)
vids = vids + v
token = t
time.sleep(2)
v, t = getRedditData(URL + f"&after={token}")
vids = vids + v
print(f"got page {i}...")
return vids
@scheduler.task("interval", id="do_job_1", minutes=60, misfire_grace_time=900)
def job1():
global v
doFetch = False
pexist = os.path.exists("temp.json")
if pexist:
print("temp.json exists")
sec = os.path.getmtime("temp.json")
now = time.time()
if now - sec > 600:
doFetch = True
else:
doFetch = True
if doFetch:
print("stale or no file, fetching...")
v = doPages(2)
with open("temp.json", "w") as f:
json.dump(v, f)
else:
print("fresh file, not fetching...")
with open("temp.json", "r") as f:
v = json.load(f)
app = Flask(__name__)
scheduler.init_app(app)
scheduler.start()
job1()
@app.route("/")
def hello_world():
global v
random.shuffle(v)
return render_template("index.html", vids=json.dumps(v))
if __name__ == "__main__":
app.run(host="0.0.0.0", port=4269)

View File

@ -0,0 +1,4 @@
APScheduler==3.9.1
requests==2.26.0
Flask==2.0.3
Flask-APScheduler==1.12.4

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

@ -0,0 +1,187 @@
<!DOCTYPE html>
<html>
<head>
<title>InterdimensionalCable</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css">
<script
src="https://code.jquery.com/jquery-2.2.4.min.js"
integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
crossorigin="anonymous"></script>
<link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}">
<style type="text/css">
body, html
{
margin: 0; padding: 0; height: 100%; overflow: hidden;
}
#content
{
position:absolute; left: 0; right: 0; bottom: 0; top: 0px;
}
#player
{
width: 100%;
height: 100%;
}
.hidden {
display: none;
}
.btn{
border-radius: 10px;
margin:1em;
padding:1em 2em;
transition:all 125ms ease;
text-transform:uppercase;
color:#fff;
font-weight:500;
border:1px solid #d1d1d1
}
.btn:active{ transform:scale(.9) }
.btn:focus{ outline:none }
.btn:active,
.btn:hover,
.btn:focus{ color:#fff }
.btn:active:focus,
.btn:active:hover{ outline:none }
.btn:active,
.btn:active:hover,
.btn:active:focus{ transform:scale(.9) }
.btn:focus{ transform:scale(1) }
.btn-danger {
background-color:#FF0000;
border:1px solid #FF0000;
box-shadow:0 2px 20px rgba(246,77,76,0.57)
}
.btn-danger:active{
box-shadow:0 2px 20px rgba(246,77,76,0.57)
}
.btn-danger:hover{
background-color:#ff2e2e;
border:1px solid #ff2e2e;
box-shadow:0 2px 20px rgba(246,77,76,0.67)
}
.btn-danger:active,
.btn-danger:focus,
.btn-danger:active:hover,
.btn-danger:active:focus{
border:1px solid #ff2e2e;
background-color:#ff2e2e
}
#buttonl {
z-index: 101;
position: absolute;
width: 50px;
height: 50px;
left: 3%;
top: 50%;
}
#buttonr {
z-index: 101;
position: absolute;
width: 50px;
height: 50px;
right: 3%;
top: 50%;
}
</style>
</head>
<body>
<script type="text/javascript">
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
var idx=0;
var justHidden = false;
var videos = {{vids|safe}};
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
events: {
'onReady': function(){},
'onStateChange': onPlayerStateChange
}
});
}
function onPlayerStateChange(event) {
if (event.data == YT.PlayerState.ENDED) {
idx = idx + 1;
if (idx == videos.length) {
idx = 0;
}
$('#player').attr('src', videos[idx]);
player = new YT.Player('player', {
events: {
'onReady': function(){},
'onStateChange': onPlayerStateChange
}
});
}
}
$(document).ready(function() {
var j;
$('#player').attr('src', videos[idx]);
$(document).mousemove(function() {
if (!justHidden) {
justHidden = false;
clearTimeout(j);
$('.btn').removeClass('hidden');
j = setTimeout('hide();', 1000);
}
});
$('#buttonl').click(function(){
idx = idx - 1;
if (idx < 0) {
idx = videos.length - 1;
}
$('#player').attr('src', videos[idx]);
player = new YT.Player('player', {
events: {
'onReady': function(){},
'onStateChange': onPlayerStateChange
}
});
});
$('#buttonr').click(function(){
idx = idx + 1;
if (idx == videos.length) {
idx = 0;
}
$('#player').attr('src', videos[idx]);
player = new YT.Player('player', {
events: {
'onReady': function(){},
'onStateChange': onPlayerStateChange
}
});
});
});
function hide() {
$('.btn').addClass('hidden');
}
</script>
<div id="content">
<iframe
id="player"
src="https://www.youtube.com/embed/tgbNymZ7vqY?autoplay=1" frameborder="0" allow="autoplay">
</iframe>
<button id="buttonl" class="btn btn-danger hidden"><i class="fa fa-angle-left"></i></button>
<button id="buttonr" class="btn btn-danger hidden"><i class="fa fa-angle-right"></i></button>
</div>
</body>
</html>

View File

@ -0,0 +1,33 @@
---
version: "3"
networks:
web:
external: true
internal:
external: false
services:
jackett:
networks:
- internal
- web
labels:
- traefik.http.routers.jackett.rule=Host(`jackett.dws.rip`)
- traefik.http.routers.jackett.tls=true
- traefik.http.routers.jackett.tls.certresolver=lets-encrypt
- traefik.port=9117
image: lscr.io/linuxserver/jackett
container_name: jackett
networks:
- internal
- web
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
- AUTO_UPDATE=true #optional
volumes:
- /dws/config/jackett:/config
- /dws/otherdata/jackett:/downloads
restart: unless-stopped

View File

@ -0,0 +1,20 @@
version: "3"
services:
mc:
image: itzg/minecraft-server
container_name: paper
environment:
EULA: "true"
TYPE: PAPER
VIEW_DISTANCE: 30
MEMORY: 3G
CONSOLE: "false"
MOTD: "§8D§cW§8S§a§oEMS§r - dws.rip"
SEED: "mmmm....minecraft_makes_me_hungry"
VERSION: 1.19
OPS: dubmiester,RicecakeSMS,pZ_aeriaL
ports:
- 25565:25565
volumes:
- /dws/otherdata/minecraft:/data
restart: always

View File

@ -0,0 +1,57 @@
version: '3'
networks:
web:
external: true
internal:
external: false
services:
db:
image: mariadb
networks:
- internal
labels:
- traefik.enable=false
restart: always
command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
volumes:
- /dws/systemdata/nextclouddb:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=${MSQLROOTPASS}
- MYSQL_PASSWORD=${MSQLPASS}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
app:
image: nextcloud
restart: always
labels:
- traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud_redirect
- traefik.http.routers.nextcloud.tls=true
- traefik.http.routers.nextcloud.tls.certresolver=lets-encrypt
- traefik.http.routers.nextcloud.rule=Host(`cloud.dws.rip`)
- traefik.http.middlewares.nextcloud.headers.customFrameOptionsValue=ALLOW-FROM https://dws.rip
- traefik.http.middlewares.nextcloud.headers.contentSecurityPolicy=frame-ancestors 'self' dws.rip *.dws.rip
- traefik.http.middlewares.nextcloud.headers.stsSeconds=155520011
- traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.nextcloud.headers.stsPreload=true
- traefik.http.middlewares.nextcloud.headers.customresponseheaders.X-Frame-Options=SAMEORIGIN
- traefik.http.middlewares.nextcloud_redirect.redirectregex.permanent=true
- traefik.http.middlewares.nextcloud_redirect.redirectregex.regex=https://(.*)/.well-known/(card|cal)dav
- traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement=https://$${1}/remote.php/dav/
- traefik.port=8080
networks:
- internal
- web
links:
- db
volumes:
- /dws/data/:/var/www/html
- /dws/otherdata/:/otherdata
environment:
- MYSQL_PASSWORD=${MSQLPASS}
- MYSQL_DATABASE=nextcloud
- MYSQL_USER=nextcloud
- MYSQL_HOST=db
- TRUSTED_PROXIES=172.22.0.4

View File

@ -0,0 +1,28 @@
---
version: "3"
networks:
web:
external: true
internal:
external: false
services:
overseerr:
image: lscr.io/linuxserver/overseerr
container_name: overseerr
networks:
- internal
- web
labels:
- traefik.http.routers.overseerr.rule=Host(`requests.dws.rip`)
- traefik.http.routers.overseerr.tls=true
- traefik.http.routers.overseerr.tls.certresolver=lets-encrypt
- traefik.port=5055
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /dws/config/overseerr:/config
restart: unless-stopped

34
plex/docker-compose.yml Normal file
View File

@ -0,0 +1,34 @@
---
version: "3"
networks:
web:
external: true
internal:
external: false
services:
plex:
image: lscr.io/linuxserver/plex:version-1.24.5.5173-8dcc73a59
container_name: plex
labels:
- traefik.http.routers.plex.rule=Host(`media.dws.rip`)
- traefik.http.routers.plex.tls=true
- traefik.http.routers.plex.tls.certresolver=lets-encrypt
- traefik.http.services.plex.loadbalancer.server.port=32400
- traefik.port=32400
- traefik.protocol=https
networks:
- internal
- web
environment:
- PUID=1000
- PGID=1000
- VERSION=docker
- PLEX_CLAIM=claim-gdJqTrZn-t7MFun-dNE6
- DOMAINNAME=media.dws.rip
- ADVERTISE_IP=https://media.dws.rip:443
volumes:
- /dws/config/plex:/config
- /dws/otherdata/:/data
restart: unless-stopped

Binary file not shown.

29
radarr/docker-compose.yml Normal file
View File

@ -0,0 +1,29 @@
---
version: "3"
networks:
web:
external: true
internal:
external: false
services:
radarr:
image: lscr.io/linuxserver/radarr
networks:
- internal
- web
labels:
- traefik.http.routers.radarr.rule=Host(`radarr.dws.rip`)
- traefik.http.routers.radarr.tls=true
- traefik.http.routers.radarr.tls.certresolver=lets-encrypt
- traefik.port=7878
container_name: radarr
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /dws/config/radarr:/config
- /dws/otherdata:/data
restart: unless-stopped

29
sonarr/docker-compose.yml Normal file
View File

@ -0,0 +1,29 @@
---
version: "3"
networks:
web:
external: true
internal:
external: false
services:
sonarr:
image: lscr.io/linuxserver/sonarr
container_name: sonarr
networks:
- internal
- web
labels:
- traefik.http.routers.sonarr.rule=Host(`sonarr.dws.rip`)
- traefik.http.routers.sonarr.tls=true
- traefik.http.routers.sonarr.tls.certresolver=lets-encrypt
- traefik.port=8989
environment:
- PUID=1000
- PGID=1000
- TZ=America/New_York
volumes:
- /dws/config/sonarr:/config
- /dws/otherdata:/data
restart: unless-stopped

2
traefik/traefik.sh Executable file
View File

@ -0,0 +1,2 @@
#!/bin/bash
docker run -d -v /var/run/docker.sock:/var/run/docker.sock -v $PWD/traefik.toml:/traefik.toml -v $PWD/traefik_dynamic.toml:/traefik_dynamic.toml -v $PWD/acme.json:/acme.json -p 80:80 -p 443:443 --network web --name traefik --restart always traefik:v2.2

View File

@ -0,0 +1,38 @@
---
version: '3.3'
networks:
web:
external: true
internal:
external: false
services:
alpine-qbittorrent-openvpn:
restart: always
networks:
- internal
- web
labels:
- traefik.http.routers.transmission.rule=Host(`downloads.dws.rip`)
- traefik.http.routers.transmission.tls=true
- traefik.http.routers.transmission.tls.certresolver=lets-encrypt
- traefik.port=8080
volumes:
- '/dws/otherdata:/data'
- "/dws/config/torrent:/config"
- "/etc/localtime:/etc/localtime:ro"
environment:
- PUID=1000
- PGID=1000
- LAN=192.168.0.0/16
- OPENVPN_PROVIDER=NORDVPN
- NORDVPN_CATEGORY=legacy_p2p
- NORDVPN_COUNTRY=US
- NORDVPN_PROTOCOL=tcp
- OPENVPN_USERNAME=tanishq.dubey@gmail.com
- OPENVPN_PASSWORD=${OPENVPNPASS}
- OPENVPN_OPTS=--inactive 3600 --ping 10 --ping-exit 60 --dhcp-option DNS 8.8.8.8
cap_add:
- NET_ADMIN
image: guillaumedsde/alpine-qbittorrent-openvpn:latest