Compare commits
13 Commits
ea5de0a2c4
...
9c1c9ada90
Author | SHA1 | Date | |
---|---|---|---|
9c1c9ada90 | |||
e87932e375 | |||
2109e8028c | |||
40f1efa994 | |||
50c8cb051d | |||
f222496429 | |||
8c573db292 | |||
f9b3bee6b4 | |||
5e83b82477 | |||
3510e392e9 | |||
0fd2afe587 | |||
fab157419d | |||
16c6f27a93 |
27
.gitignore
vendored
Normal file
27
.gitignore
vendored
Normal 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
|
12
Dockerfile
12
Dockerfile
@ -1,2 +1,10 @@
|
|||||||
FROM docker.io/nginx:latest
|
FROM docker.io/golang:1.23 as app
|
||||||
COPY static/ /usr/share/nginx/html/
|
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"]
|
||||||
|
@ -3,4 +3,4 @@ services:
|
|||||||
app:
|
app:
|
||||||
build: .
|
build: .
|
||||||
ports:
|
ports:
|
||||||
- "8000:80"
|
- "3000:3000"
|
||||||
|
33
html/about.html
Normal file
33
html/about.html
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Ange DUHAYON</title>
|
||||||
|
<link rel="stylesheet" href="style.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
<div id="menu">
|
||||||
|
<a href="/">contact</a>
|
||||||
|
<a href="/resume">resume</a>
|
||||||
|
<a href="/about"><b>about me</b></a>
|
||||||
|
<span class="right">
|
||||||
|
<a href="https://git.gmoker.com/yw5n/" target="_blank" rel="noreferrer noopener">source</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div id="content">
|
||||||
|
<!--
|
||||||
|
<div id="nav">
|
||||||
|
<ul>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
<div id="main">
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -8,18 +8,21 @@
|
|||||||
<body>
|
<body>
|
||||||
<div id="header">
|
<div id="header">
|
||||||
<a id="headerLink" href="/">Ange DUHAYON</a>
|
<a id="headerLink" href="/">Ange DUHAYON</a>
|
||||||
<span id="headerSubtitle">DevOps</span>
|
<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>
|
||||||
</div>
|
</div>
|
||||||
<div id="menu">
|
<div id="menu">
|
||||||
<a href="/"><b>contact</b></a>
|
<a href="/"><b>contact</b></a>
|
||||||
<a href="/resume/">resume</a>
|
<a href="/resume">resume</a>
|
||||||
<a href="/about/">about me</a>
|
<!--
|
||||||
|
<a href="/about">about me</a>
|
||||||
|
-->
|
||||||
<span class="right">
|
<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>
|
</span>
|
||||||
</div>
|
</div>
|
||||||
<hr class="hidden"/>
|
|
||||||
<div id="content">
|
<div id="content">
|
||||||
|
<!--
|
||||||
<div id="nav">
|
<div id="nav">
|
||||||
<ul>
|
<ul>
|
||||||
<li><a href="#matrix">Matrix</a></li>
|
<li><a href="#matrix">Matrix</a></li>
|
||||||
@ -29,7 +32,9 @@
|
|||||||
<li><a href="#wa">WhatsApp</a></li>
|
<li><a href="#wa">WhatsApp</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
|
-->
|
||||||
<div id="main">
|
<div id="main">
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr id="matrix"><td>Matrix (Element)</td><td><a href="https://app.element.io/#/user/@ange:gmoker.com">@ange:gmoker.com</a></td></tr>
|
<tr id="matrix"><td>Matrix (Element)</td><td><a href="https://app.element.io/#/user/@ange:gmoker.com">@ange:gmoker.com</a></td></tr>
|
||||||
<tr id="discord"><td>Discord</td><td>@elrilio</td></tr>
|
<tr id="discord"><td>Discord</td><td>@elrilio</td></tr>
|
||||||
@ -38,5 +43,7 @@
|
|||||||
<tr id="wa"><td>WhatsApp</td><td><a href="https://wa.me/6285333559453">+62 853-3355-9453</a></td></tr>
|
<tr id="wa"><td>WhatsApp</td><td><a href="https://wa.me/6285333559453">+62 853-3355-9453</a></td></tr>
|
||||||
</table>
|
</table>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
82
html/resume.html
Normal file
82
html/resume.html
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Ange DUHAYON</title>
|
||||||
|
<link rel="stylesheet" href="style.css"/>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<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>
|
||||||
|
</div>
|
||||||
|
<div id="menu">
|
||||||
|
<a href="/">contact</a>
|
||||||
|
<a href="/resume"><b>resume</b></a>
|
||||||
|
<!--
|
||||||
|
<a href="/about">about me</a>
|
||||||
|
-->
|
||||||
|
<span class="right">
|
||||||
|
<a href="https://git.gmoker.com/yw5n/" target="_blank" rel="noreferrer noopener">source</a>
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<hr class="hidden"/>
|
||||||
|
<div id="content">
|
||||||
|
<!--
|
||||||
|
<div id="nav">
|
||||||
|
<ul>
|
||||||
|
<li><a href="#formation">Formation</a></li>
|
||||||
|
<li><a href="#experience">Experience</a></li>
|
||||||
|
<li><a href="#competences">Competences</a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
-->
|
||||||
|
<div id="main">
|
||||||
|
|
||||||
|
<h1>4th year EPITECH student</h1>
|
||||||
|
<img src="static/2404.webp" alt="Ange DUHAYON" width="128">
|
||||||
|
<h2 id="formation">FORMATION</h2>
|
||||||
|
<h3><b>EPITECH Toulouse</b> - Promo 2026</h3>
|
||||||
|
<ul>
|
||||||
|
<li>C/C++ (system programming, AI, ciphering, games)</li>
|
||||||
|
<li>Free languages (maths, functional programming)</li>
|
||||||
|
<li>DevOps (GitHub Actions, Docker, Ansible, Kubernetes)</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 id="experience">EXPERIENCE</h2>
|
||||||
|
<h3><b>Freelance</b> - DevOps</h3>
|
||||||
|
SEPTEMBER 2023 - Today
|
||||||
|
<ul>
|
||||||
|
<li>Server setup (Debian, Docker/K8s, web server, customer application)</li>
|
||||||
|
<li>CI/CD, real-time monitoring</li>
|
||||||
|
</ul>
|
||||||
|
<h3><b>EPITECH CodingClub association, Toulouse</b> - Cobra</h3>
|
||||||
|
JANUARY 2021 - TODAY
|
||||||
|
<ul>
|
||||||
|
<li>Coding workshops for high school students</li>
|
||||||
|
</ul>
|
||||||
|
<h3><b>Predicloud, Toulouse</b> - DevOps / Site Reliability Manager</h3>
|
||||||
|
JUNE 2022 - JULY 2023
|
||||||
|
<ul>
|
||||||
|
<li>CI/CD, K8S monitoring</li>
|
||||||
|
<li>Authentication solution (LDAP, SSO, Webhook)</li>
|
||||||
|
<li>Mail server (Postfix, Dovecot)</li>
|
||||||
|
<li>Python backend</li>
|
||||||
|
<li>Customer communication and troubleshooting</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<h2 id="competences">COMPETENCES</h2>
|
||||||
|
<table>
|
||||||
|
<tr><th>LANGUAGES</th> <th>SOFTWARE</th></tr>
|
||||||
|
<tr><td>C/C++</td> <td>*nix</td></tr>
|
||||||
|
<tr><td>Python</td> <td>Git</td></tr>
|
||||||
|
<tr><td>Bash</td> <td>Vim</td></tr>
|
||||||
|
<tr><td>Go</td> <td>Docker</td></tr>
|
||||||
|
<tr><td>JavaScript</td><td>Kubernetes</td></tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -84,6 +84,7 @@ h4 {
|
|||||||
font-size: 0.75em;
|
font-size: 0.75em;
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
|
color: #fff;
|
||||||
}
|
}
|
||||||
|
|
||||||
#content {
|
#content {
|
||||||
@ -168,3 +169,8 @@ h4 {
|
|||||||
filter: invert(1);
|
filter: invert(1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
}
|
@ -61,4 +61,4 @@ spec:
|
|||||||
imagePullPolicy: Always
|
imagePullPolicy: Always
|
||||||
ports:
|
ports:
|
||||||
- name: http
|
- name: http
|
||||||
containerPort: 80
|
containerPort: 3000
|
||||||
|
33
src/main.go
Normal file
33
src/main.go
Normal 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
19
src/vars/vars.go
Normal 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")
|
||||||
|
}
|
BIN
static/2404.webp
Normal file
BIN
static/2404.webp
Normal file
Binary file not shown.
After Width: | Height: | Size: 14 KiB |
Loading…
Reference in New Issue
Block a user