initial commit
This commit is contained in:
commit
d68c7ee3b9
31
gitea/docker-compose.yml
Normal file
31
gitea/docker-compose.yml
Normal 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
|
23
interdimensionalcable/docker-compose.yml
Normal file
23
interdimensionalcable/docker-compose.yml
Normal 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
|
13
interdimensionalcable/idc/Dockerfile
Normal file
13
interdimensionalcable/idc/Dockerfile
Normal 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"]
|
99
interdimensionalcable/idc/main.py
Normal file
99
interdimensionalcable/idc/main.py
Normal 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)
|
4
interdimensionalcable/idc/requirements.txt
Normal file
4
interdimensionalcable/idc/requirements.txt
Normal file
@ -0,0 +1,4 @@
|
||||
APScheduler==3.9.1
|
||||
requests==2.26.0
|
||||
Flask==2.0.3
|
||||
Flask-APScheduler==1.12.4
|
BIN
interdimensionalcable/idc/static/favicon.ico
Normal file
BIN
interdimensionalcable/idc/static/favicon.ico
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.5 KiB |
187
interdimensionalcable/idc/templates/index.html
Normal file
187
interdimensionalcable/idc/templates/index.html
Normal 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>
|
33
jackett/docker-compose.yml
Normal file
33
jackett/docker-compose.yml
Normal 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
|
20
minecraft/docker-compose.yml
Normal file
20
minecraft/docker-compose.yml
Normal 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
|
57
nextcloud/docker-compose.yml
Normal file
57
nextcloud/docker-compose.yml
Normal 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
|
28
overseerr/docker-compose.yml
Normal file
28
overseerr/docker-compose.yml
Normal 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
34
plex/docker-compose.yml
Normal 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
|
BIN
radarr/.docker-compose.yml.swo
Normal file
BIN
radarr/.docker-compose.yml.swo
Normal file
Binary file not shown.
29
radarr/docker-compose.yml
Normal file
29
radarr/docker-compose.yml
Normal 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
29
sonarr/docker-compose.yml
Normal 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
2
traefik/traefik.sh
Executable 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
|
38
transmission/docker-compose.yml
Normal file
38
transmission/docker-compose.yml
Normal 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
|
Loading…
Reference in New Issue
Block a user