feat: go backend
All checks were successful
/ deploy (push) Successful in 46s

This commit is contained in:
ange 2024-09-28 23:00:18 +07:00
parent e87932e375
commit 9c1c9ada90
Signed by: ange
GPG Key ID: 9E0C4157BB7BEB1D
10 changed files with 103 additions and 32 deletions

27
.gitignore vendored Normal file
View File

@ -0,0 +1,27 @@
# Created by https://www.toptal.com/developers/gitignore/api/go
# Edit at https://www.toptal.com/developers/gitignore?templates=go
### Go ###
# If you prefer the allow list template instead of the deny list, see community template:
# https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
#
# Binaries for programs and plugins
*.exe
*.exe~
*.dll
*.so
*.dylib
# Test binary, built with `go test -c`
*.test
# Output of the go coverage tool, specifically when used with LiteIDE
*.out
# Dependency directories (remove the comment below to include it)
# vendor/
# Go workspace file
go.work
# End of https://www.toptal.com/developers/gitignore/api/go

View File

@ -1,4 +1,10 @@
FROM docker.io/nginx:latest
COPY nginx.conf /etc/nginx/conf.d/default.conf
COPY html/ /usr/share/nginx/html/
COPY static/ /usr/share/nginx/static/
FROM docker.io/golang:1.23 as app
COPY src/ .
RUN printf 'module yw5n\ngo 1.23' > go.mod && CGO_ENABLED=0 go build -o /app
FROM scratch
COPY --from=app /app /app
COPY static/ /static/
COPY html/ /html/
EXPOSE 3000
CMD ["/app"]

View File

@ -3,4 +3,4 @@ services:
app:
build: .
ports:
- "8000:80"
- "3000:3000"

View File

@ -9,14 +9,14 @@
<div id="header">
<a id="headerLink" href="/">Ange DUHAYON</a>
<span id="headerSubtitle">Engineer DevOps</span>
<span class="right" style="font-size: .4em;">Website heavily inspired from <a href="https://suckless.org" target="_blank" rel="noreferrer noopener">suckless.org</a></span>
<span class="right" style="font-size: .4em;">Website heavily inspired from <a href="https://suckless.org/" target="_blank" rel="noreferrer noopener">suckless.org</a></span>
</div>
<div id="menu">
<a href="/">contact</a>
<a href="/resume.html">resume</a>
<a href="/about.html"><b>about me</b></a>
<a href="/resume">resume</a>
<a href="/about"><b>about me</b></a>
<span class="right">
<a href="//git.gmoker.com/yw5n/">source</a>
<a href="https://git.gmoker.com/yw5n/" target="_blank" rel="noreferrer noopener">source</a>
</span>
</div>
<div id="content">

View File

@ -9,16 +9,16 @@
<div id="header">
<a id="headerLink" href="/">Ange DUHAYON</a>
<span id="headerSubtitle">Engineer DevOps</span>
<span class="right" style="font-size: .4em;">Website heavily inspired from <a href="https://suckless.org" target="_blank" rel="noreferrer noopener">suckless.org</a></span>
<span class="right" style="font-size: .4em;">Website heavily inspired from <a href="https://suckless.org/" target="_blank" rel="noreferrer noopener">suckless.org</a></span>
</div>
<div id="menu">
<a href="/"><b>contact</b></a>
<a href="/resume.html">resume</a>
<a href="/resume">resume</a>
<!--
<a href="/about.html">about me</a>
<a href="/about">about me</a>
-->
<span class="right">
<a href="//git.gmoker.com/yw5n/">source</a>
<a href="https://git.gmoker.com/yw5n/" target="_blank" rel="noreferrer noopener">source</a>
</span>
</div>
<div id="content">

View File

@ -9,16 +9,16 @@
<div id="header">
<a id="headerLink" href="/">Ange DUHAYON</a>
<span id="headerSubtitle">Engineer DevOps</span>
<span class="right" style="font-size: .4em;">Website heavily inspired from <a href="https://suckless.org" target="_blank" rel="noreferrer noopener">suckless.org</a></span>
<span class="right" style="font-size: .4em;">Website heavily inspired from <a href="https://suckless.org/" target="_blank" rel="noreferrer noopener">suckless.org</a></span>
</div>
<div id="menu">
<a href="/">contact</a>
<a href="/resume.html"><b>resume</b></a>
<a href="/resume"><b>resume</b></a>
<!--
<a href="/about.html">about me</a>
<a href="/about">about me</a>
-->
<span class="right">
<a href="//git.gmoker.com/yw5n/">source</a>
<a href="https://git.gmoker.com/yw5n/" target="_blank" rel="noreferrer noopener">source</a>
</span>
</div>
<hr class="hidden"/>

View File

@ -61,4 +61,4 @@ spec:
imagePullPolicy: Always
ports:
- name: http
containerPort: 80
containerPort: 3000

View File

@ -1,14 +0,0 @@
server {
listen 80;
listen [::]:80;
server_name localhost;
location / {
root /usr/share/nginx/html;
index index.html;
}
location /static/ {
root /usr/share/nginx/;
}
}

33
src/main.go Normal file
View File

@ -0,0 +1,33 @@
package main
import (
"log"
"net/http"
"path/filepath"
"strings"
)
func html(w http.ResponseWriter, r *http.Request) {
if r.URL.Path == "/style.css" {
http.ServeFile(w, r, "/html/style.css")
return
}
if strings.HasPrefix(r.URL.Path, "/static/") {
http.ServeFile(w, r, r.URL.Path)
return
}
if r.URL.Path == "/" {
http.ServeFile(w, r, "/html/index.html")
return
}
http.ServeFile(w, r, filepath.Join("/html", r.URL.Path + ".html"))
}
func main() {
http.HandleFunc("/", html)
err := http.ListenAndServe(":3000", nil)
if err != nil {
log.Fatal(err)
}
}

19
src/vars/vars.go Normal file
View File

@ -0,0 +1,19 @@
package vars
import (
"path/filepath"
)
var (
templates string
static string
html string
css string
)
func init() {
templates = "templates"
static = "static"
html = filepath.Join(static, "html")
css = filepath.Join(static, "css")
}