refactor: ready to move server

master
phga 4 years ago
parent 7183a80c86
commit 66d584d72c

14
.gitignore vendored

@ -1,17 +1,7 @@
# ---> Go
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, build with `go test -c` # Test binary, build with `go test -c`
*.test *.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
*.jpg *.jpg
*.png *.png
*.woff *.woff
cmd/phga.de/phga.de

@ -0,0 +1,7 @@
FROM golang:1.16.2
ENV GO111MODULE=off
RUN go get -u -d g.phga.de/phga/phga.de/...
WORKDIR /go/src/g.phga.de/phga/phga.de/cmd/phga.de
RUN go build
CMD ["./phga.de"]

@ -0,0 +1,13 @@
version: '3'
services:
tt:
build:
context: ./app
dockerfile: Dockerfile
restart: always
ports:
- 8099:8080
volumes:
- /srv/phga.de/web/data:/go/src/g.phga.de/phga/phga.de/web/data
- /srv/phga.de/web/static/fonts:/go/src/g.phga.de/phga/phga.de/web/static/fonts

@ -9,11 +9,12 @@ import (
"io/ioutil" "io/ioutil"
"log" "log"
"net/http" "net/http"
"path"
"regexp" "regexp"
) )
// could be enabled after the implementation is complete. // could be enabled after the implementation is complete.
// var t = template.Must(template.ParseFiles("tmpl/layouts/base.html", "tmpl/index.html", "tmpl/blog.html", "tmpl/about.html", "tmpl/contact.html", )) // var t = template.Must(getTemplate("layouts/base.html", "index.html", "blog.html", "about.html", "contact.html", ))
// A regex used to identify valid Img requests // A regex used to identify valid Img requests
var validImg = regexp.MustCompile("^/info/([\\w_\\- ]+)") var validImg = regexp.MustCompile("^/info/([\\w_\\- ]+)")
var exhibit Exhibition var exhibit Exhibition
@ -28,7 +29,7 @@ func main() {
http.HandleFunc("/contact", handleContact) http.HandleFunc("/contact", handleContact)
http.HandleFunc("/info/", handleInfo) http.HandleFunc("/info/", handleInfo)
// provide the inc directory to the useragent // provide the inc directory to the useragent
http.Handle("/inc/", http.StripPrefix("/inc/", http.FileServer(http.Dir("inc")))) http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("../../web/static"))))
// listen on port 8080 (I use nginx to proxy this local server) // listen on port 8080 (I use nginx to proxy this local server)
log.Fatalln(http.ListenAndServe(":8080", nil)) log.Fatalln(http.ListenAndServe(":8080", nil))
} }
@ -51,24 +52,24 @@ type Exhibition struct {
// Funcions follow that handle the requests // Funcions follow that handle the requests
func handleIndex(w http.ResponseWriter, r *http.Request) { func handleIndex(w http.ResponseWriter, r *http.Request) {
// that should also be somewhere else when there is another gallery // that should also be somewhere else when there is another gallery
exhibit.parseExhibitions("./data") exhibit.parseExhibitions("../../web/data")
// Parses all required html files to provide the actual html that is shipped. // Parses all required html files to provide the actual html that is shipped.
t, _ := template.ParseFiles("tmpl/layouts/index.html", "tmpl/gallery.html", "tmpl/header.html") t, _ := getTemplate("layouts/index.html", "gallery.html", "header.html")
t.Execute(w, exhibit) t.Execute(w, exhibit)
} }
func handleBlog(w http.ResponseWriter, r *http.Request) { func handleBlog(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("tmpl/layouts/base.html", "tmpl/soon.html", "tmpl/header.html") t, _ := getTemplate("layouts/base.html", "soon.html", "header.html")
t.Execute(w, nil) t.Execute(w, nil)
} }
func handleAbout(w http.ResponseWriter, r *http.Request) { func handleAbout(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("tmpl/layouts/base.html", "tmpl/about.html", "tmpl/header.html") t, _ := getTemplate("layouts/base.html", "about.html", "header.html")
t.Execute(w, nil) t.Execute(w, nil)
} }
func handleContact(w http.ResponseWriter, r *http.Request) { func handleContact(w http.ResponseWriter, r *http.Request) {
t, _ := template.ParseFiles("tmpl/layouts/base.html", "tmpl/contact.html", "tmpl/header.html") t, _ := getTemplate("layouts/base.html", "contact.html", "header.html")
t.Execute(w, nil) t.Execute(w, nil)
} }
@ -125,3 +126,21 @@ func (ex *Exhibition) parseExhibitions(dir string) {
} }
} }
} }
func getTemplate(files ...string) (*template.Template, error) {
tmplFolder := "../../web/templates/"
for i, f := range files {
files[i] = tmplFolder + f
}
// Name has to be the basename of at least one of the template files
t := template.New(path.Base(files[0]))
// Add custom helper funcs to template
// t.Funcs(template.FuncMap{
// "UnwrapOID": unwrapObjectID,
// "GetSurveys": getSurveys,
// })
t, err := t.ParseFiles(files...)
return t, err
}

@ -0,0 +1,3 @@
module g.phga.de/phga/phga.de
go 1.16

@ -1,5 +1,5 @@
@font-face { @font-face {
src: url("/inc/fonts/HKGrotesk-Regular.woff"); src: url("/static/fonts/HKGrotesk-Regular.woff");
font-family: hkg; font-family: hkg;
} }

@ -101,7 +101,7 @@ function showOverlay(overlay, imgName) {
window.addEventListener("resize", resize); window.addEventListener("resize", resize);
img.addEventListener("load", () => {zoom(0.4, imgName)}); img.addEventListener("load", () => {zoom(0.4, imgName)});
img.src = `/inc/images/${imgName}.jpg`; img.src = `/static/images/${imgName}.jpg`;
img.id = imgName; img.id = imgName;
img.alt = imgName; img.alt = imgName;

Before

Width:  |  Height:  |  Size: 131 KiB

After

Width:  |  Height:  |  Size: 131 KiB

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

@ -22,7 +22,7 @@
Adresse Adresse
</div> </div>
<div class="cv-column cv-content"> <div class="cv-column cv-content">
Lebzeltergasse 3, 85049 Ingolstadt Johannesstr. 7, 85049 Ingolstadt
</div> </div>
</div> </div>
<div class="cv-row"> <div class="cv-row">
@ -87,7 +87,42 @@
Zeitspanne Zeitspanne
</div> </div>
<div class="cv-column cv-content"> <div class="cv-column cv-content">
01.03.2020 &ndash; heute 01.12.2020 &ndash; heute
</div>
</div>
<div class="cv-row">
<div class="cv-column cv-label">
Tätigkeit
</div>
<div class="cv-column cv-content">
Unterstützende Lehrkraft an der Staatlichen Berufsschule 1 Ingolstadt.
Hauptsächlich mache ich dort Prüfungsvorbereitung für alle
Abschlussklassen in den IT Fachrichtungen (FI-AE / FI-SI).
</div>
</div>
<div class="cv-row">
<div class="cv-column cv-label">
Unternehmen
</div>
<div class="cv-column cv-content">
BS1IN
</div>
</div>
<div class="cv-row">
<div class="cv-column cv-label">
Branche
</div>
<div class="cv-column cv-content">
Bildung / Duale Ausbildung
</div>
</div>
<h1 class="cv-sub-heading">Nebentätigkeiten</h1>
<div class="cv-row">
<div class="cv-column cv-label">
Zeitspanne
</div>
<div class="cv-column cv-content">
01.03.2020 &ndash; 30.06.2020
</div> </div>
</div> </div>
<div class="cv-row"> <div class="cv-row">
@ -97,7 +132,7 @@
<div class="cv-column cv-content"> <div class="cv-column cv-content">
Geringfügige Beschäftigung (450 € Basis) Geringfügige Beschäftigung (450 € Basis)
Bearbeitung von Projekten im Bereich Server (Microsoft und GNU/Linux) Bearbeitung von Projekten im Bereich Server (Microsoft und GNU/Linux)
und Netzwerk (Diverse Technologien). Betreuung von Bestandskund*innen und Netzwerk (Diverse Technologien). Betreuung von Bestandskund:innen
und deren IT-Umgebungen. Dokumentationserstellung. und deren IT-Umgebungen. Dokumentationserstellung.
</div> </div>
</div> </div>
@ -179,7 +214,7 @@
<div class="cv-column cv-content"> <div class="cv-column cv-content">
Weiterentwicklung und Instandhaltung der Weiterentwicklung und Instandhaltung der
bestehenden Netzwerkumgebung mit ca. 3000 bestehenden Netzwerkumgebung mit ca. 3000
Netzteilnehmer*innen und 150+ Netzwerkkomponenten Netzteilnehmer:innen und 150+ Netzwerkkomponenten
Ausbildung der Azubis in der Abteilung Systemtechnik. Ausbildung der Azubis in der Abteilung Systemtechnik.
Projektplanung und Durchführung in diversen Projektplanung und Durchführung in diversen
Themengebieten. Themengebieten.
@ -228,7 +263,7 @@
</div> </div>
<div class="cv-column cv-content"> <div class="cv-column cv-content">
Schwerpunk während der Ausbildung war der Bereich Schwerpunk während der Ausbildung war der Bereich
Netzwerk und die Unterstützung von Benutzer*innen vor Ort. Netzwerk und die Unterstützung von Benutzer:innen vor Ort.
</div> </div>
</div> </div>
<div class="cv-row"> <div class="cv-row">
@ -284,7 +319,7 @@
<div class="cv-column cv-content"> <div class="cv-column cv-content">
Programmier und Technikkurse für Kinder an der Technischen Hochschule Programmier und Technikkurse für Kinder an der Technischen Hochschule
Ingolstadt. Hier entwickle und betreue ich, zusammen mit anderen Ingolstadt. Hier entwickle und betreue ich, zusammen mit anderen
Student*innen und den Mitarbeiter*innen aus dem Büro der Frauenbeauftragten, Student:innen und den Mitarbeiter:innen aus dem Büro der Frauenbeauftragten,
Workshops rund um das Programmieren von Lego Robotern oder wie man einfache Workshops rund um das Programmieren von Lego Robotern oder wie man einfache
Spiele in der Programmiersprache Scratch entwickelt. Die Workshops werden dann Spiele in der Programmiersprache Scratch entwickelt. Die Workshops werden dann
an verschiedenen Tagen wie z.B. dem Girls/Boys Day durchgeführt. an verschiedenen Tagen wie z.B. dem Girls/Boys Day durchgeführt.
@ -305,7 +340,7 @@
<div class="cv-column cv-content"> <div class="cv-column cv-content">
Seit Beginn meines Studiums an der THI bin ich Mitglied bei unserem Verein Seit Beginn meines Studiums an der THI bin ich Mitglied bei unserem Verein
N.I.C.E (Network International Culture Exchange). Hier steht der Austausch N.I.C.E (Network International Culture Exchange). Hier steht der Austausch
zwischen Ausländischen Student*innen und Lokals bei verschiedenen Events im zwischen Ausländischen Student:innen und Lokals bei verschiedenen Events im
Vordergrund. Ich hatte außerdem schon die Möglichkeit ein Buddy für eine Vordergrund. Ich hatte außerdem schon die Möglichkeit ein Buddy für eine
chinesische Austauschstudentin und einen brasilianischen Austauschstudenten zu sein chinesische Austauschstudentin und einen brasilianischen Austauschstudenten zu sein
und konnte Ihnen über die ersten Bürokratischen Hürden in Deutschland hinweg helfen. und konnte Ihnen über die ersten Bürokratischen Hürden in Deutschland hinweg helfen.
@ -346,7 +381,7 @@
Abschluss Abschluss
</div> </div>
<div class="cv-column cv-content"> <div class="cv-column cv-content">
Ausbilder*innen-Eignungsverordnung Ausbilder:innen-Eignungsverordnung
</div> </div>
</div> </div>
<div class="cv-row"> <div class="cv-row">
@ -414,7 +449,7 @@
Zertifikate und Kurse Zertifikate und Kurse
</div> </div>
<div class="cv-column cv-content"> <div class="cv-column cv-content">
Seminarleiter*innen Workshop (FES), CCNA, ADA, Risikomanagement Seminarleiter:innen Workshop (FES), CCNA, ADA, Risikomanagement
(Medizin / DIN 80001, Kurs), IINS (Kurs), CCNA Exploration, (Medizin / DIN 80001, Kurs), IINS (Kurs), CCNA Exploration,
MS Project 2013, Knigge MS Project 2013, Knigge
</div> </div>
@ -428,7 +463,7 @@
</div> </div>
<div class="cv-column cv-content"> <div class="cv-column cv-content">
Skateboard, Schwimmen, Ausgiebige Spaziergänge, Kompetitive Online Spiele, Skateboard, Schwimmen, Ausgiebige Spaziergänge, Kompetitive Online Spiele,
Definitiv zu viel an Linux und Emacs Konfigurationen herum-optimieren, Definitiv zu viel an Linux und Emacs Konfigurationen herum-optimieren, Tastaturen,
hier und da kleinere Elektrotechik Projekte realisieren, 3D-Design (Blender), hier und da kleinere Elektrotechik Projekte realisieren, 3D-Design (Blender),
2D Design (Inkscape), FOSS 2D Design (Inkscape), FOSS
</div> </div>

@ -7,16 +7,16 @@
<b>Haftungsausschluss</b> <b>Haftungsausschluss</b>
Angaben gemäß § 5 TMG: Angaben gemäß § 5 TMG:
Philip Gaber Philip Gaber
Lebzeltergasse 3 Johannesstr. 9
85049 Ingolstadt 85049 Ingolstadt
<b>Kontakt:</b> <b>Kontakt:</b>
E-Mail: phga@posteo.de E-Mail: phga@posteo.de
Telefon: +49 841 22064128 Telefon: +49 841 12818826
<b>Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV:</b> <b>Verantwortlich für den Inhalt nach § 55 Abs. 2 RStV:</b>
Philip Gaber Philip Gaber
Lebzeltergasse 3 Johannesstr. 9
85049 Ingolstadt 85049 Ingolstadt
<b>Streitschlichtung</b> <b>Streitschlichtung</b>

@ -7,12 +7,12 @@
</div> </div>
</section> </section>
<section id="welcome"> <section id="welcome">
<img id="avatar" alt="" src="/inc/logo/avatar.svg"/> <img id="avatar" alt="" src="/static/logo/avatar.svg"/>
</section> </section>
<section id="exhibition"> <section id="exhibition">
{{range $key, $val := .Pics}} {{range $key, $val := .Pics}}
<div class="thumb-box"> <div class="thumb-box">
<img alt="{{$val.Name}}" src="/inc/thumbs/t_{{$val.Name}}.jpg" data-img="{{$val.Name}}" class="thumb" /> <img alt="{{$val.Name}}" src="/static/thumbs/t_{{$val.Name}}.jpg" data-img="{{$val.Name}}" class="thumb" />
</div> </div>
{{end}} {{end}}
</section> </section>

@ -5,7 +5,7 @@
<a href="/blog">BLOG</a> <a href="/blog">BLOG</a>
<!-- <a class="nav-center"></a> --> <!-- <a class="nav-center"></a> -->
<a id="logo" href="/"><img src="/inc/logo/logo.svg" alt="" /></a> <a id="logo" href="/"><img src="/static/logo/logo.svg" alt="" /></a>
<!-- <a id="logo" href=""></a> --> <!-- <a id="logo" href=""></a> -->
<!-- <a class="nav-center"></a> --> <!-- <a class="nav-center"></a> -->

@ -9,7 +9,7 @@
<meta name="author" content="Philip Gaber" /> <meta name="author" content="Philip Gaber" />
<meta name="copyright" content="Philip Gaber" /> <meta name="copyright" content="Philip Gaber" />
<title>PHGA</title> <title>PHGA</title>
<link href="/inc/css/main.css" rel="stylesheet"/> <link href="/static/css/main.css" rel="stylesheet"/>
</head> </head>
<body> <body>
{{block "header" .}}NO HEADER DEFINED{{end}} {{block "header" .}}NO HEADER DEFINED{{end}}

@ -9,10 +9,10 @@
<meta name="author" content="Philip Gaber" /> <meta name="author" content="Philip Gaber" />
<meta name="copyright" content="Philip Gaber" /> <meta name="copyright" content="Philip Gaber" />
<title>PHGA 🤓 teord</title> <title>PHGA 🤓 teord</title>
<link href="/inc/css/main.css" rel="stylesheet"/> <link href="/static/css/main.css" rel="stylesheet"/>
<script src="/inc/js/main.js"></script> <script src="/static/js/main.js"></script>
<script src="/inc/js/zoom.js"></script> <script src="/static/js/zoom.js"></script>
<script src="/inc/js/text.js"></script> <script src="/static/js/text.js"></script>
</head> </head>
<body> <body>
<section id="gallery-wrapper"> <section id="gallery-wrapper">
Loading…
Cancel
Save