Compare commits
40 Commits
21bf09d6f0
...
master
Author | SHA1 | Date | |
---|---|---|---|
9d4ff8432c | |||
f5d2a6220b | |||
4af9256041 | |||
225f57c048 | |||
65b1fcdacc | |||
7b5a77db18 | |||
f3cfa01b74 | |||
ff884a60a2 | |||
9ef861d10c | |||
4bd9b23860 | |||
da11f15f78 | |||
feaf8d35a3 | |||
ccb703e160 | |||
3e9b0fad8a | |||
dc52953b40 | |||
08c09a4318 | |||
c743291ad1 | |||
b865b6c44a | |||
6c35b7fb85 | |||
f042d4eaa7 | |||
a1019449eb | |||
e132bad0ea | |||
6826034958 | |||
f10638e86e | |||
2f861a7692 | |||
0dfe8e6b8a | |||
90d4a7438c | |||
61fba6197c | |||
89524b475c | |||
3419d4d3e0 | |||
1c59f1a886 | |||
8c4462efb5 | |||
93056dddeb | |||
8da2445ccb | |||
fa6189d81b | |||
4c56af4e0b | |||
813d870972 | |||
de349769c8 | |||
b90b9372de | |||
beea81af26 |
3
desu.local/build-and-push.sh
Executable file
3
desu.local/build-and-push.sh
Executable file
@@ -0,0 +1,3 @@
|
|||||||
|
#! /bin/sh
|
||||||
|
project="$(basename -- "$PWD")"
|
||||||
|
docker build --no-cache --platform linux/arm,linux/arm64,linux/amd64 . -t "rehashedsalt/$project:latest" -t "rehashedsalt/$project:$(git rev-parse --short=7 HEAD)" --push
|
@@ -1,4 +1,5 @@
|
|||||||
FROM httpd:latest
|
FROM httpd:latest
|
||||||
COPY httpd.conf /usr/local/apache2/conf/httpd.conf
|
COPY httpd.conf /usr/local/apache2/conf/httpd.conf
|
||||||
COPY vhost.conf /usr/local/apache2/conf/vhost.conf
|
COPY vhost.conf /usr/local/apache2/conf/vhost.conf
|
||||||
|
COPY src/ /usr/local/apache2/htdocs
|
||||||
EXPOSE 80
|
EXPOSE 80
|
69
desu.local/frontend/src/index.html
Normal file
69
desu.local/frontend/src/index.html
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||||
|
<link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500" rel="stylesheet">
|
||||||
|
<link href="/styles/styles.css" type="text/css" rel="stylesheet" />
|
||||||
|
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/fork-awesome@1.1.7/css/fork-awesome.min.css" integrity="sha256-gsmEoJAws/Kd3CjuOQzLie5Q3yshhvmo7YNtBG7aaEY=" crossorigin="anonymous">
|
||||||
|
<link href="/favicon.ico" rel="shortcut icon" />
|
||||||
|
<link href="/styles/buttons.css" type="text/css" rel="stylesheet" />
|
||||||
|
<title>local.desu.ltd</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<div class="header">
|
||||||
|
<a href="/" class="logocontainer">
|
||||||
|
<span>
|
||||||
|
<h1>local.desu.ltd</h1>
|
||||||
|
<p class="nomobile">Local services and stuffs</p>
|
||||||
|
</span>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="content">
|
||||||
|
<div class="iconbuttoncontainer">
|
||||||
|
<a href="http://jellyfin.local.desu.ltd" class="iconbutton">
|
||||||
|
<i class="fa fa-film"></i>
|
||||||
|
<h1>Jellyfin</h1>
|
||||||
|
<p>Media server, the thing the Roku uses</p>
|
||||||
|
</a>
|
||||||
|
<a href="http://sonarr.local.desu.ltd" class="iconbutton">
|
||||||
|
<i class="fa fa-feed"></i>
|
||||||
|
<h1>Sonarr</h1>
|
||||||
|
<p>Media library downloader and organizer</p>
|
||||||
|
</a>
|
||||||
|
<a href="http://radarr.local.desu.ltd" class="iconbutton">
|
||||||
|
<i class="fa fa-feed"></i>
|
||||||
|
<h1>Radarr</h1>
|
||||||
|
<p>Similar to Sonarr, but specializing in movies</p>
|
||||||
|
</a>
|
||||||
|
<a href="http://transmission.local.desu.ltd" class="iconbutton">
|
||||||
|
<i class="fa fa-arrow-circle-down"></i>
|
||||||
|
<h1>Transmission</h1>
|
||||||
|
<p>Simple BitTorrent client with few moving parts</p>
|
||||||
|
</a>
|
||||||
|
<a href="http://jackett.local.desu.ltd" class="iconbutton">
|
||||||
|
<i class="fa fa-arrow-circle-o-down"></i>
|
||||||
|
<h1>Jackett</h1>
|
||||||
|
<p>Torrent feed aggregator that Just Werks</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="break"></div>
|
||||||
|
<div class="iconbuttoncontainer">
|
||||||
|
<a href="http://grafana.local.desu.ltd" class="iconbutton">
|
||||||
|
<i class="fa fa-line-chart"></i>
|
||||||
|
<h1>Grafana</h1>
|
||||||
|
<p>Monitoring and graphing solution</p>
|
||||||
|
</a>
|
||||||
|
<a href="http://netbox.local.desu.ltd" class="iconbutton">
|
||||||
|
<i class="fa fa-database"></i>
|
||||||
|
<h1>Netbox</h1>
|
||||||
|
<p>IPAM, secrets, and more</p>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="footer">
|
||||||
|
<p>Copyright © 2019-<?php echo date("Y"); ?> rehashedsalt. Distributed under the terms of the MIT License.</p>
|
||||||
|
<p><a href="https://git.desu.ltd/salt/9iron">source</a> <a href="/">home</a></p>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
37
desu.local/frontend/src/styles/buttons.css
Normal file
37
desu.local/frontend/src/styles/buttons.css
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* buttons.css
|
||||||
|
* Copyright (C) 2020 Vintage Salt
|
||||||
|
*
|
||||||
|
* Distributed under terms of the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* BIG ICON BUTTONS
|
||||||
|
* Used on the index for services */
|
||||||
|
div.iconbuttoncontainer {
|
||||||
|
display: grid;
|
||||||
|
grid-gap: 1em;
|
||||||
|
grid-template-columns: 1fr 1fr 1fr;
|
||||||
|
}
|
||||||
|
a.iconbutton {
|
||||||
|
background: var(--background-bright);
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 5px 5px var(--shadow);
|
||||||
|
display: block;
|
||||||
|
padding: 1em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
a.iconbutton:hover {
|
||||||
|
background: var(--link-hover);
|
||||||
|
color: var(--background);
|
||||||
|
}
|
||||||
|
a.iconbutton i {
|
||||||
|
font-size: 400%
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MOBILE */
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
div.iconbuttoncontainer {
|
||||||
|
grid-template-columns: 1fr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
181
desu.local/frontend/src/styles/styles.css
Normal file
181
desu.local/frontend/src/styles/styles.css
Normal file
@@ -0,0 +1,181 @@
|
|||||||
|
/*
|
||||||
|
* styles.css
|
||||||
|
* Copyright (C) 2020 Vintage Salt
|
||||||
|
*
|
||||||
|
* Distributed under terms of the MIT license.
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* GLOBALS */
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--background-bright: #fdfcfa;
|
||||||
|
--background: #ecebe9;
|
||||||
|
--line: rgba(0,0,0,0.1);
|
||||||
|
--greenlink: #327117;
|
||||||
|
--greenlink-hover: #47b625;
|
||||||
|
--link: #286a9d;
|
||||||
|
--link-hover: #3ea5f3;
|
||||||
|
--shadow: 8px -5px rgba(0,0,0,0.1);
|
||||||
|
--text: #414040;
|
||||||
|
--text-code: #a7674e;
|
||||||
|
}
|
||||||
|
html {
|
||||||
|
overflow-y: scroll;
|
||||||
|
}
|
||||||
|
body {
|
||||||
|
background: var(--background);
|
||||||
|
color: var(--text);
|
||||||
|
font-family: "Roboto", sans-serif;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* TYPES */
|
||||||
|
/* a */
|
||||||
|
a {
|
||||||
|
color: var(--link);
|
||||||
|
text-decoration: none;
|
||||||
|
transition: .04s ease-in;
|
||||||
|
}
|
||||||
|
a:hover {
|
||||||
|
color: var(--link-hover);
|
||||||
|
}
|
||||||
|
code {
|
||||||
|
color: var(--text-code);
|
||||||
|
display: inline-block;
|
||||||
|
font-size: 12pt;
|
||||||
|
padding: 2px 4px;
|
||||||
|
}
|
||||||
|
dl {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
dl dt {
|
||||||
|
font-weight: bold;
|
||||||
|
margin: 1em 0 0 0;
|
||||||
|
}
|
||||||
|
dl dd {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CUSTOM DIVS AND SPANS */
|
||||||
|
a.quickbutton {
|
||||||
|
background: var(--background-bright);
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 5px 5px var(--shadow);
|
||||||
|
display: block;
|
||||||
|
font-size: 150%;
|
||||||
|
margin: 0.5em 0;
|
||||||
|
padding: 1em;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
a.quickbutton:hover {
|
||||||
|
background: var(--link-hover);
|
||||||
|
color: var(--background);
|
||||||
|
}
|
||||||
|
div.break {
|
||||||
|
width: 4em;
|
||||||
|
margin: 2em auto;
|
||||||
|
border-bottom: 3px double var(--line);
|
||||||
|
}
|
||||||
|
div.quote {
|
||||||
|
border-left: 4px solid var(--line);
|
||||||
|
margin: 1em 4em;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
i.badge {
|
||||||
|
font-size: 200%;
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
img.bigimg {
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 5px 5px var(--shadow);
|
||||||
|
display: block;
|
||||||
|
margin: 1em auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* HIERARCHICAL CLASSES */
|
||||||
|
/* HEADER */
|
||||||
|
.header {
|
||||||
|
background: var(--background-bright);
|
||||||
|
box-shadow: 0 5px var(--shadow);
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.logocontainer {
|
||||||
|
align-items: center;
|
||||||
|
display: flex;
|
||||||
|
justify-content: center;
|
||||||
|
padding: 1em 0;
|
||||||
|
}
|
||||||
|
.logo {
|
||||||
|
border-radius: 50%;
|
||||||
|
height: 64px;
|
||||||
|
vertical-align: middle;
|
||||||
|
margin: 0 1em;
|
||||||
|
max-width: 64px;
|
||||||
|
}
|
||||||
|
.header h1 {
|
||||||
|
display: inline;
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.header p {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.header nav ul {
|
||||||
|
list-style-type: none;
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.header nav ul li {
|
||||||
|
display: inline-block;
|
||||||
|
padding: 0.8em;
|
||||||
|
}
|
||||||
|
.header nav ul li:hover {
|
||||||
|
background: var(--link-hover);
|
||||||
|
color: var(--background);
|
||||||
|
transition: .04s ease-in;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* CONTENT */
|
||||||
|
.content {
|
||||||
|
max-width: 48em;
|
||||||
|
margin: 2em auto;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
.subcontainer {
|
||||||
|
background: var(--background-bright);
|
||||||
|
border-radius: 8px;
|
||||||
|
box-shadow: 5px 5px var(--shadow);
|
||||||
|
margin: 1em 0;
|
||||||
|
padding: 1em;
|
||||||
|
}
|
||||||
|
.subcontainer h2 {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
.toc {
|
||||||
|
background: var(--background-bright);
|
||||||
|
border-radius: 4px;
|
||||||
|
box-shadow: 5px 5px var(--shadow);
|
||||||
|
display: inline-block;
|
||||||
|
margin: 0 1em 1em 1em;
|
||||||
|
padding: 0 1em;
|
||||||
|
width: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* FOOTER */
|
||||||
|
.footer {
|
||||||
|
font-size: 11px;
|
||||||
|
line-height: 1.3;
|
||||||
|
margin: 0 0 4em 0;
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
.footer p {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* MOBILE */
|
||||||
|
@media only screen and (max-width: 600px) {
|
||||||
|
.nomobile {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
53
desu.local/frontend/vhost.conf
Normal file
53
desu.local/frontend/vhost.conf
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
# vim:set ft=apache:
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName local.desu.ltd
|
||||||
|
DocumentRoot /usr/local/apache2/htdocs
|
||||||
|
<Directory "/usr/local/apache2/htdocs">
|
||||||
|
AllowOverride All
|
||||||
|
Options -Indexes +FollowSymLinks
|
||||||
|
Require all granted
|
||||||
|
</Directory>
|
||||||
|
</VirtualHost>
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName jellyfin.local.desu.ltd
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyRequests Off
|
||||||
|
ProxyPass /socket http://192.168.102.200:8081/
|
||||||
|
ProxyPass / http://192.168.102.200:8081/
|
||||||
|
</VirtualHost>
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName grafana.local.desu.ltd
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyRequests Off
|
||||||
|
ProxyPass / http://192.168.102.200:8082/
|
||||||
|
</VirtualHost>
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName sonarr.local.desu.ltd
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyRequests Off
|
||||||
|
ProxyPass / http://192.168.102.200:8083/
|
||||||
|
</VirtualHost>
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName transmission.local.desu.ltd
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyRequests Off
|
||||||
|
ProxyPass / http://192.168.102.200:8084/
|
||||||
|
</VirtualHost>
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName jackett.local.desu.ltd
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyRequests Off
|
||||||
|
ProxyPass / http://192.168.102.200:8085/
|
||||||
|
</VirtualHost>
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName radarr.local.desu.ltd
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyRequests Off
|
||||||
|
ProxyPass / http://192.168.102.200:8086/
|
||||||
|
</VirtualHost>
|
||||||
|
<VirtualHost *:80>
|
||||||
|
ServerName netbox.local.desu.ltd
|
||||||
|
ProxyPreserveHost On
|
||||||
|
ProxyRequests Off
|
||||||
|
ProxyPass / http://192.168.102.200:8087/
|
||||||
|
</VirtualHost>
|
3
desu.local/pihole/Dockerfile
Normal file
3
desu.local/pihole/Dockerfile
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
FROM pihole/pihole:latest
|
||||||
|
RUN pihole -w spclient.wg.spotify.com apresolve.spotify.com
|
||||||
|
COPY custom.list /etc/pihole/custom.list
|
4
desu.local/pihole/custom.list
Normal file
4
desu.local/pihole/custom.list
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
192.168.102.1 master1.desu.local
|
||||||
|
192.168.102.10 node1.desu.local jellyfin.desu.local
|
||||||
|
192.168.102.11 node2.desu.local
|
||||||
|
192.168.102.12 node3.desu.local
|
2
desu.local/unbound-desu-local/Dockerfile
Normal file
2
desu.local/unbound-desu-local/Dockerfile
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
FROM klutchell/unbound:latest
|
||||||
|
COPY unbound.conf /opt/unbound/etc/unbound/unbound.conf
|
52
desu.local/unbound-desu-local/unbound.conf
Normal file
52
desu.local/unbound-desu-local/unbound.conf
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
# !vim:set ft=yaml:
|
||||||
|
server:
|
||||||
|
interface: 0.0.0.0@5053
|
||||||
|
do-ip6: no
|
||||||
|
do-daemonize: no
|
||||||
|
access-control: 127.0.0.0/8 allow
|
||||||
|
access-control: 192.168.0.0/16 allow
|
||||||
|
access-control: 172.16.0.0/12 allow
|
||||||
|
access-control: 10.0.0.0/8 allow
|
||||||
|
auto-trust-anchor-file: /var/run/unbound/root.key
|
||||||
|
logfile: ""
|
||||||
|
prefetch: yes
|
||||||
|
verbosity: 1
|
||||||
|
statistics-interval: 600
|
||||||
|
statistics-cumulative: yes
|
||||||
|
|
||||||
|
local-zone: "desu.ltd." typetransparent
|
||||||
|
local-data: "switch-gs308epp-1.desu.ltd. 3600 IN A 192.168.1.2"
|
||||||
|
# IoT shit on .99
|
||||||
|
local-data: "botnet-roku-1.desu.ltd. 3600 IN A 192.168.99.1"
|
||||||
|
# Others workstations on .100
|
||||||
|
local-data: "sad.desu.ltd. 3600 IN A 192.168.100.1"
|
||||||
|
# My workstations and devices on .101
|
||||||
|
local-data: "lap-s76-lemp9-0.desu.ltd. 3600 IN A 192.168.101.1"
|
||||||
|
local-data: "dsk-ryzen-0.desu.ltd. 3600 IN A 192.168.101.2"
|
||||||
|
local-data: "ph-flame-0.desu.ltd. 3600 IN A 192.168.101.100"
|
||||||
|
# k8s on .102
|
||||||
|
local-data: "pi-kub-master-1.desu.ltd. 3600 IN A 192.168.102.1"
|
||||||
|
local-data: "pi-kub-node-1.desu.ltd. 3600 IN A 192.168.102.10"
|
||||||
|
local-data: "pi-kub-node-2.desu.ltd. 3600 IN A 192.168.102.11"
|
||||||
|
local-data: "pi-kub-node-3.desu.ltd. 3600 IN A 192.168.102.12"
|
||||||
|
local-data: "pi-kub-vip-1.desu.ltd. 3600 IN A 192.168.102.200"
|
||||||
|
# General-purpose nodes on .103
|
||||||
|
local-data: "pi-mp-1.desu.ltd. 3600 IN A 192.168.103.100"
|
||||||
|
local-data: "pi-mp-2.desu.ltd. 3600 IN A 192.168.103.101"
|
||||||
|
|
||||||
|
domain-insecure: "desu.local"
|
||||||
|
local-zone: "desu.local." static
|
||||||
|
local-data: "desu.local. 3600 IN A 192.168.102.200"
|
||||||
|
local-data: "www.desu.local. 3600 IN CNAME desu.local."
|
||||||
|
local-data: "grafana.desu.local. 3600 IN CNAME pi-kub-vip-1.desu.ltd."
|
||||||
|
local-data: "jellyfin.desu.local. 3600 IN CNAME pi-kub-vip-1.desu.ltd."
|
||||||
|
local-data: "radarr.desu.local. 3600 IN CNAME pi-kub-vip-1.desu.ltd."
|
||||||
|
local-data: "sonarr.desu.local. 3600 IN CNAME pi-kub-vip-1.desu.ltd."
|
||||||
|
local-data: "transmission.desu.local. 3600 IN CNAME pi-kub-vip-1.desu.ltd."
|
||||||
|
local-data: "jackett.desu.local. 3600 IN CNAME pi-kub-vip-1.desu.ltd."
|
||||||
|
local-data: "netbox.desu.local. 3600 IN CNAME pi-kub-vip-1.desu.ltd."
|
||||||
|
|
||||||
|
stub-zone:
|
||||||
|
name: "desu.local."
|
||||||
|
stub-addr: "192.168.103.100"
|
||||||
|
stub-first: yes
|
@@ -1,7 +0,0 @@
|
|||||||
# vim:set ft=apache:
|
|
||||||
<VirtualHost *:80>
|
|
||||||
ServerName 9iron.pi.local
|
|
||||||
ProxyPreserveHost On
|
|
||||||
ProxyRequests Off
|
|
||||||
ProxyPass / http://192.168.102.10:8081/
|
|
||||||
</VirtualHost>
|
|
Reference in New Issue
Block a user