This commit is contained in:
ducoterra
2020-05-12 13:19:10 -04:00
commit 6d79f58388
27 changed files with 305 additions and 0 deletions

39
.gitlab-ci.yml Normal file
View File

@@ -0,0 +1,39 @@
variables:
CI_PROJECT_DIR: "."
CI_REGISTRY_IMAGE: hub.ducoterra.net/ducoterra/homer
stages:
- build
- test
- deploy
build:
only:
variables:
- $CI_COMMIT_TAG
stage: build
image:
name: gcr.io/kaniko-project/executor:debug
entrypoint: [""]
script:
- echo $DEPLOY
- /kaniko/executor --context $CI_PROJECT_DIR --dockerfile $CI_PROJECT_DIR/Dockerfile --destination $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
deploy_to_prod:
variables:
DEPLOY: prod
stage: deploy
only:
variables:
- $CI_COMMIT_TAG
image:
name: debian:10
entrypoint: [""]
script:
- apt -qq update >> /dev/null && apt -qq install -y curl gettext >> /dev/null
- curl -LO https://storage.googleapis.com/kubernetes-release/release/`curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt`/bin/linux/amd64/kubectl
- chmod +x ./kubectl
- mkdir /deploy
- for f in $(find k8s -regex '.*\.ya*ml'); do envsubst < $f > "/deploy/$(basename $f)"; done
- for f in $(find k8s/prod -regex '.*\.ya*ml'); do envsubst < $f > "/deploy/$(basename $f)"; done
- ./kubectl apply -f /deploy

4
Dockerfile Normal file
View File

@@ -0,0 +1,4 @@
FROM b4bz/homer:latest
COPY config.yml /www/config.yml
COPY assets /www/assets

BIN
assets/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

BIN
assets/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 48 KiB

28
assets/tools/Gitlab.svg Normal file
View File

@@ -0,0 +1,28 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="100px" height="92px" viewBox="0 0 100 92" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<!-- Generator: Sketch 52.2 (67145) - http://www.bohemiancoding.com/sketch -->
<title>press-kit-icon</title>
<desc>Created with Sketch.</desc>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g id="press-page-v1" transform="translate(-747.000000, -2860.000000)">
<g id="press-kit-icon" transform="translate(748.000000, 2860.000000)">
<polygon id="Fill-1" fill="#E24329" points="49.0098 90.2299 49.0098 90.2299 67.0558 35.3209 30.9638 35.3209"/>
<polygon id="Fill-2" fill="#FC6D26" points="48.9971 90.2299 30.9511 35.3219 5.6831 35.3219"/>
<g id="Group-27" transform="translate(0.000000, 0.248500)">
<path d="M5.6748,35.0918 L0.1838,51.7748 C-0.3142,53.2888 0.2228,54.9618 1.5358,55.9058 L48.9878,89.9998 L5.6748,35.0918 Z" id="Fill-3" fill="#FCA326"/>
<path d="M5.6807,35.0918 L30.9687,35.0918 L20.0857,2.0208 C19.5287,0.3278 17.1017,0.3278 16.5247,2.0208 L5.6807,35.0918 Z" id="Fill-5" fill="#E24329"/>
<polygon id="Fill-7" fill="#FC6D26" points="49.0098 89.9814 67.0558 35.0734 92.3438 35.0734"/>
<path d="M92.3252,35.0918 L97.8162,51.7748 C98.3142,53.2888 97.7772,54.9618 96.4642,55.9058 L49.0122,89.9808 L92.3252,35.0918 Z" id="Fill-9" fill="#FCA326"/>
<path d="M92.3389,35.0918 L67.0509,35.0918 L77.9139,2.0208 C78.4719,0.3278 80.8989,0.3278 81.4759,2.0208 L92.3389,35.0918 Z" id="Fill-11" fill="#E24329"/>
<polygon id="Stroke-13" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="49.0098 89.9814 49.0098 89.9814 67.0558 35.0724 30.9638 35.0724"/>
<polygon id="Stroke-15" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="48.9971 89.9814 30.9511 35.0734 5.6831 35.0734"/>
<path d="M5.6748,35.0918 L0.1838,51.7748 C-0.3142,53.2888 0.2228,54.9618 1.5358,55.9058 L48.9878,89.9998 L5.6748,35.0918 Z" id="Stroke-17" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M5.6807,35.0918 L30.9687,35.0918 L20.0857,2.0208 C19.5287,0.3278 17.1017,0.3278 16.5247,2.0208 L5.6807,35.0918 Z" id="Stroke-19" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<polygon id="Stroke-21" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" points="49.0098 89.9814 67.0558 35.0734 92.3438 35.0734"/>
<path d="M92.3252,35.0918 L97.8162,51.7748 C98.3142,53.2888 97.7772,54.9618 96.4642,55.9058 L49.0122,89.9808 L92.3252,35.0918 Z" id="Stroke-23" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
<path d="M92.3389,35.0918 L67.0509,35.0918 L77.9139,2.0208 C78.4719,0.3278 80.8989,0.3278 81.4759,2.0208 L92.3389,35.0918 Z" id="Stroke-25" stroke="#333333" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"/>
</g>
</g>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.2 KiB

BIN
assets/tools/elastic.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 KiB

BIN
assets/tools/freenas.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.6 KiB

BIN
assets/tools/grafana.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

BIN
assets/tools/graphite.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.6 KiB

BIN
assets/tools/jellyfin.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.8 KiB

45
assets/tools/jellyfin.svg Normal file
View File

@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- ***** BEGIN LICENSE BLOCK *****
- Part of the Jellyfin project (https://jellyfin.media)
-
- All copyright belongs to the Jellyfin contributors; a full list can
- be found in the file CONTRIBUTORS.md
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- ***** END LICENSE BLOCK ***** -->
<svg id="banner-dark" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 1536 512">
<defs>
<linearGradient id="linear-gradient" x1="110.25" y1="213.3" x2="496.14" y2="436.09" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#aa5cc3"/>
<stop offset="1" stop-color="#00a4dc"/>
</linearGradient>
</defs>
<title>banner-dark</title>
<g id="banner-dark">
<g id="banner-dark-icon">
<path id="inner-shape" d="M261.42,201.62c-20.44,0-86.24,119.29-76.2,139.43s142.48,19.92,152.4,0S281.86,201.63,261.42,201.62Z" fill="url(#linear-gradient)"/>
<path id="outer-shape" d="M261.42,23.3C199.83,23.3,1.57,382.73,31.8,443.43s429.34,60,459.24,0S323,23.3,261.42,23.3ZM411.9,390.76c-19.59,39.33-281.08,39.77-300.9,0S221.1,115.48,261.45,115.48,431.49,351.42,411.9,390.76Z" fill="url(#linear-gradient)"/>
</g>
<g id="jellyfin-light-outlines" style="isolation:isolate" transform="translate(43.8)">
<path d="M556.64,350.75a67,67,0,0,1-22.87-27.47,8.91,8.91,0,0,1-1.49-4.75,7.42,7.42,0,0,1,2.83-5.94,9.25,9.25,0,0,1,6.09-2.38c3.16,0,5.94,1.69,8.31,5.05a48.09,48.09,0,0,0,16.34,20.34,40.59,40.59,0,0,0,24,7.58q20.51,0,33.27-12.62t12.77-33.12V159a8.44,8.44,0,0,1,2.67-6.39,9.56,9.56,0,0,1,6.83-2.52,9,9,0,0,1,6.68,2.52,8.7,8.7,0,0,1,2.53,6.39v138.4a64.7,64.7,0,0,1-8.32,32.67,59,59,0,0,1-23,22.72Q608.62,361,589.9,361A57.21,57.21,0,0,1,556.64,350.75Z" fill="#fff"/>
<path d="M831.66,279.47a8.77,8.77,0,0,1-6.24,2.53H713.16q0,17.82,7.27,31.92a54.91,54.91,0,0,0,20.79,22.28q13.51,8.18,31.93,8.17a54,54,0,0,0,25.54-5.94,52.7,52.7,0,0,0,18.12-15.15,10,10,0,0,1,6.24-2.67,8.14,8.14,0,0,1,7.72,7.72,8.81,8.81,0,0,1-3,6.24,74.7,74.7,0,0,1-23.91,19A65.56,65.56,0,0,1,773.45,361q-22.87,0-40.4-9.8a69.51,69.51,0,0,1-27.32-27.48q-9.79-17.66-9.8-40.83,0-24.36,9.65-42.62t25.69-27.92a65.2,65.2,0,0,1,34.16-9.65A70,70,0,0,1,798.84,211a65.78,65.78,0,0,1,25.39,24.36q9.81,16,10.1,38A8.07,8.07,0,0,1,831.66,279.47ZM733.5,231.8Q718.8,243.68,714.64,266H815.92v-2.38A46.91,46.91,0,0,0,807,240.27a48.47,48.47,0,0,0-18.56-15.15,54,54,0,0,0-23-5.2Q748.2,219.92,733.5,231.8Z" fill="#fff"/>
<path d="M888.24,355.5a8.92,8.92,0,0,1-15.3-6.38v-202a8.91,8.91,0,1,1,17.82,0v202A8.65,8.65,0,0,1,888.24,355.5Z" fill="#fff"/>
<path d="M956.55,355.5a8.92,8.92,0,0,1-15.3-6.38v-202a8.91,8.91,0,1,1,17.82,0v202A8.65,8.65,0,0,1,956.55,355.5Z" fill="#fff"/>
<path d="M1122.86,206.11a8.7,8.7,0,0,1,2.53,6.39v131q0,23.44-9.21,40.09a61.58,61.58,0,0,1-25.54,25.25q-16.34,8.61-36.83,8.61a96.73,96.73,0,0,1-23.31-2.68,61.72,61.72,0,0,1-18-7.12q-6.24-3.87-6.24-8.62a17.94,17.94,0,0,1,.6-3,8.06,8.06,0,0,1,3-4.45,7.49,7.49,0,0,1,4.45-1.49,7.91,7.91,0,0,1,3.56.89q19,10.39,36.24,10.4,24.65,0,39.06-15.44t14.4-42.18V333.38a54.37,54.37,0,0,1-21.38,20,62.55,62.55,0,0,1-30.3,7.58q-25.83,0-39.2-15.45t-13.37-41.87V212.5a8.91,8.91,0,1,1,17.82,0V301q0,21.39,9.36,32.38t29.25,11a48,48,0,0,0,23.32-6.09,49.88,49.88,0,0,0,17.82-16,37.44,37.44,0,0,0,6.68-21.24V212.5a9,9,0,0,1,15.29-6.39Z" fill="#fff"/>
<path d="M1210.18,161.41q-5.21,6.24-5.2,17.23v30.59h33.27a8.19,8.19,0,0,1,5.79,2.38,8.26,8.26,0,0,1,0,11.88,8.22,8.22,0,0,1-5.79,2.37H1205V349.12a8.91,8.91,0,1,1-17.82,0V225.86h-21.68a7.83,7.83,0,0,1-5.94-2.52,8.21,8.21,0,0,1-2.37-5.79,8,8,0,0,1,2.37-6.09,8.33,8.33,0,0,1,5.94-2.23h21.68V178.64q0-18.7,10.84-29t29-10.24a46.1,46.1,0,0,1,15.45,2.52q7.13,2.53,7.12,8.17a8.07,8.07,0,0,1-2.37,5.94,7.37,7.37,0,0,1-5.35,2.37,18.81,18.81,0,0,1-6.53-1.48,42,42,0,0,0-10.4-1.78Q1215.37,155.18,1210.18,161.41ZM1276,180.87c-2.19-1.88-3.27-4.61-3.27-8.17v-3q0-5.34,3.41-8.17t9.36-2.82q11.88,0,11.88,11v3c0,3.56-1,6.29-3.12,8.17s-5.1,2.82-9.06,2.82S1278.14,182.75,1276,180.87Zm15.59,174.63a8.92,8.92,0,0,1-15.3-6.38V212.5a8.91,8.91,0,1,1,17.82,0V349.12A8.65,8.65,0,0,1,1291.56,355.5Z" fill="#fff"/>
<path d="M1452.53,218.88q12.92,16.2,12.92,42.92v87.32a8.4,8.4,0,0,1-2.67,6.38,8.8,8.8,0,0,1-6.24,2.53,8.64,8.64,0,0,1-8.91-8.91V262.69q0-19.31-9.65-31.33t-29.85-12a53.28,53.28,0,0,0-42.77,21.83,36.24,36.24,0,0,0-7.13,21.53v86.43a8.91,8.91,0,1,1-17.82,0V216.06a8.91,8.91,0,1,1,17.82,0V232.4q8-12.77,23-21.24A61.84,61.84,0,0,1,1412,202.7Q1439.61,202.7,1452.53,218.88Z" fill="#fff"/>
</g>
</g>
</svg>

BIN
assets/tools/jenkins.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.3 KiB

BIN
assets/tools/kibana.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

BIN
assets/tools/monit.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

BIN
assets/tools/nextcloud.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.7 KiB

BIN
assets/tools/pihole.jpeg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 152 KiB

BIN
assets/tools/pihole.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 79 KiB

BIN
assets/tools/pingdom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

BIN
assets/tools/protect.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.7 KiB

BIN
assets/tools/rabbitmq.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 30 KiB

BIN
assets/tools/traefik.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

BIN
assets/tools/unifi.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

104
config.yml Normal file
View File

@@ -0,0 +1,104 @@
---
# Homepage configuration
# See https://fontawesome.com/icons for icons options
title: "Reese's Homelab"
subtitle: "Duconet"
# logo: "assets/logo.png"
icon: "fas fa-database" # Optional icon
footer: false
# Optional message
# message:
# url: https://....
# style: "is-dark" # See https://bulma.io/documentation/components/message/#colors for styling options.
# title: "Demo !"
# content: "This is a dummy homepage demo. Find more information on github.com/bastienwirtz/homer"
# Optional navbar
# links: [] # Allows for navbar (dark mode, layout, and search) without any links
# links:
# - name: "ansible"
# icon: "fab fa-github"
# url: "https://github.com/bastienwirtz/homer"
# target: '_blank' # optionnal html a tag target attribute
# - name: "Wiki"
# icon: "fas fa-book"
# url: "https://www.wikipedia.org/"
# Services
# First level array represent a group.
# Leave only a "items" key if not using group (group name, icon & tagstyle are optional, section separation will not be displayed).
services:
- name: "DevOps"
icon: "fas fa-code-branch"
items:
- name: "Gitlab"
logo: "assets/tools/gitlab.svg"
tag: "CI"
url: "https://gitlab.ducoterra.net/"
target: '_blank'
- name: "Storage"
icon: "fas fa-save"
items:
- name: "Nextcloud"
logo: "assets/tools/nextcloud.png"
tag: "Storage"
url: "https://nextcloud.ducoterra.net/"
target: '_blank'
- name: "Freenas"
logo: "assets/tools/freenas.jpeg"
tag: "Storage"
url: "https://freenas.ducoterra.net/"
target: '_blank'
- name: "Entertainment"
icon: "fas fa-photo-video"
items:
- name: "Jellyfin"
logo: "assets/tools/jellyfin.png"
url: "https://jellyfin.ducoterra.net"
tag: "Entertainment"
- name: "Monitoring"
icon: "fas fa-heartbeat"
items:
- name: "Grafana"
logo: "assets/tools/grafana.png"
url: "https://grafana.ducoterra.net/"
tag: "Monitoring"
- name: "Graphite"
logo: "assets/tools/graphite.png"
url: "https://graphite.ducoterra.net/"
tag: "Monitoring"
- name: "Network"
icon: "fas fa-server"
items:
- name: "Unifi"
logo: assets/tools/unifi.png
tag: "Network"
url: "https://unifi.ui.com"
target: '_blank'
- name: "Protect"
logo: assets/tools/protect.png
tag: "Network"
url: "https://protect.ui.com/"
target: '_blank'
- name: "Traefik Internal"
logo: assets/tools/traefik.png
tag: "Network"
url: "https://traefik-internal.ducoterra.net/"
target: '_blank'
- name: "Traefik External"
logo: assets/tools/traefik.png
tag: "Network"
url: "https://traefik-external.ducoterra.net/"
target: '_blank'
- name: "Pihole1"
logo: assets/tools/pihole.jpeg
tag: "Network"
url: "https://pihole1.ducoterra.net/"
target: '_blank'
- name: "Pihole2"
logo: assets/tools/pihole.jpeg
tag: "Network"
url: "https://pihole2.ducoterra.net/"
target: '_blank'

11
docker-compose.yaml Normal file
View File

@@ -0,0 +1,11 @@
version: '3'
services:
homer:
build: .
image: hub.ducoterra.net/ducoterra/homer:1.0.0
ports:
- 8080:8080
volumes:
- ./config.yml:/www/config.yml
- ./assets:/www/assets

25
k8s/deploy.yaml Normal file
View File

@@ -0,0 +1,25 @@
apiVersion: apps/v1
kind: Deployment
metadata:
name: dashboard
spec:
selector:
matchLabels:
app: dashboard
template:
metadata:
labels:
app: dashboard
spec:
containers:
- name: dashboard
image: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
resources:
limits:
memory: "128Mi"
cpu: "250m"
requests:
memory: "64Mi"
cpu: "1m"
ports:
- containerPort: 8080

39
k8s/ingress.yaml Normal file
View File

@@ -0,0 +1,39 @@
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: dashboard-internal-tls
annotations:
kubernetes.io/ingress.class: traefik-internal
spec:
entryPoints:
- websecure
tls:
certResolver: myresolver
domains:
- main: "*.ducoterra.net"
routes:
- match: Host(`dashboard.ducoterra.net`)
kind: Rule
services:
- name: dashboard
port: 8080
---
apiVersion: traefik.containo.us/v1alpha1
kind: IngressRoute
metadata:
name: dashboard-internal-web
annotations:
kubernetes.io/ingress.class: traefik-internal
spec:
entryPoints:
- web
routes:
- match: Host(`dashboard.ducoterra.net`)
kind: Rule
services:
- name: dashboard
port: 8080
middlewares:
- name: httpsredirect

10
k8s/service.yaml Normal file
View File

@@ -0,0 +1,10 @@
apiVersion: v1
kind: Service
metadata:
name: dashboard
spec:
selector:
app: dashboard
ports:
- port: 8080
targetPort: 8080