Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
f8609b30e9 |
@@ -0,0 +1,15 @@
|
|||||||
|
# Migration
|
||||||
|
|
||||||
|
Cette archive est une refonte du contenu et du rendu Hugo.
|
||||||
|
|
||||||
|
À conserver depuis le dépôt existant avant remplacement :
|
||||||
|
- `.drone.yml`
|
||||||
|
- `Dockerfile`
|
||||||
|
- `docker-compose.yml`
|
||||||
|
- `nginx-proxy/`
|
||||||
|
- les secrets CI/CD (ne jamais les mettre dans Git)
|
||||||
|
- les assets/images utiles dans `static/images/`
|
||||||
|
|
||||||
|
Le nouveau `config.toml`, `content/`, `layouts/` et `assets/` sont prêts à remplacer les équivalents existants.
|
||||||
|
|
||||||
|
Les anciens projets VR/jeu vidéo peuvent être conservés dans une branche ou déplacés vers une section d'archive si tu souhaites garder l'historique.
|
||||||
@@ -1,223 +1,61 @@
|
|||||||
# 
|
# gregandev.fr — Portfolio DevOps / SRE
|
||||||
|
|
||||||
[](https://drone.gregandev.fr/gregandev/hugo-site)
|
Portfolio professionnel de Grégory Lebreton, construit avec Hugo.
|
||||||
|
|
||||||
## INSTALLATION :hammer:
|
## Positionnement
|
||||||
|
|
||||||
- Via APT:
|
Le site est volontairement orienté :
|
||||||
```bash
|
|
||||||
sudo apt install hugo
|
- Infrastructure Linux
|
||||||
|
- Automation / Infrastructure as Code
|
||||||
|
- CI/CD
|
||||||
|
- Docker / Kubernetes
|
||||||
|
- Observability
|
||||||
|
- Reliability / backup / PRA
|
||||||
|
- Documentation et transmission
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
Le thème Silhouette a été remplacé par des layouts Hugo locaux afin de maîtriser complètement le rendu et d'éviter qu'un thème générique de portfolio ne domine le positionnement technique.
|
||||||
|
|
||||||
|
```text
|
||||||
|
content/
|
||||||
|
├── experience/
|
||||||
|
├── projects/
|
||||||
|
├── lab/
|
||||||
|
├── stack/
|
||||||
|
├── notes/
|
||||||
|
└── about/
|
||||||
|
|
||||||
|
layouts/
|
||||||
|
├── _default/
|
||||||
|
├── partials/
|
||||||
|
├── projects/
|
||||||
|
├── experience/
|
||||||
|
├── lab/
|
||||||
|
└── notes/
|
||||||
|
|
||||||
|
assets/
|
||||||
|
├── css/
|
||||||
|
└── js/
|
||||||
```
|
```
|
||||||
|
|
||||||
- Via la ligne de commande:
|
## Développement local
|
||||||
```bash
|
|
||||||
cd /tmp
|
|
||||||
curl -s https://api.github.com/repos/gohugoio/hugo/releases/latest \
|
|
||||||
| grep browser_download_url \
|
|
||||||
| grep linux-amd64.deb \
|
|
||||||
| grep extended \
|
|
||||||
| cut -d '"' -f 4 \
|
|
||||||
| wget -i -
|
|
||||||
|
|
||||||
sudo dpkg -i hugo*_linux-amd64.deb
|
|
||||||
rm -rf hugo*_linux-amd64.deb
|
|
||||||
```
|
|
||||||
|
|
||||||
## UTILISATION
|
|
||||||
|
|
||||||
### CREATION DU SITE :page_with_curl:
|
|
||||||
|
|
||||||
- Vérifier l'installation:
|
|
||||||
```bash
|
|
||||||
hugo version
|
|
||||||
```
|
|
||||||
|
|
||||||
- Créer la structure du site:
|
|
||||||
```bash
|
|
||||||
hugo new site mon-site
|
|
||||||
```
|
|
||||||
|
|
||||||
- Créer du contenu:
|
|
||||||
```bash
|
|
||||||
cd mon-site
|
|
||||||
hugo new posts/mon-post.md
|
|
||||||
nano posts/mon-post.md
|
|
||||||
```
|
|
||||||
|
|
||||||
Ajouter des medias:
|
|
||||||
- images:
|
|
||||||
```bash
|
|
||||||
## Image via link:
|
|
||||||

|
|
||||||
|
|
||||||
------
|
|
||||||
|
|
||||||
## Image via url locale (/static):
|
|
||||||

|
|
||||||
```
|
|
||||||
- videos:
|
|
||||||
```bash
|
|
||||||
## Vidéo Youtube:
|
|
||||||
{{< youtube ZSWzPI4BqvA >}}
|
|
||||||
```
|
|
||||||
|
|
||||||
### AJOUT D'UN THEME :art:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git init
|
|
||||||
git submodule add https://github.com/theNewDynamic/gohugo-theme-ananke.git themes/ananke
|
|
||||||
echo theme = \"ananke\" >> config.toml
|
|
||||||
```
|
|
||||||
|
|
||||||
Les thèmes HUGO:
|
|
||||||
- https://jamstackthemes.dev/ssg/hugo/
|
|
||||||
- https://hugothemesfree.com/
|
|
||||||
- https://master--hugothemes.netlify.app/
|
|
||||||
|
|
||||||
### CONFIGURATION DU CONFIG.TOML :wrench:
|
|
||||||
|
|
||||||
- Configuration de base
|
|
||||||
```bash
|
|
||||||
# Configuration de l'adresse, titre (onglet) et des chemins vers les contenus
|
|
||||||
baseurl = "/"
|
|
||||||
contentdir = "content"
|
|
||||||
layoutdir = "layouts"
|
|
||||||
publishdir = "public"
|
|
||||||
title = "Mon super site!!!"
|
|
||||||
canonifyurls = true
|
|
||||||
|
|
||||||
# ACCUEIL
|
|
||||||
[Params]
|
|
||||||
subtitle = "Portfolio made in HUGO !"
|
|
||||||
logo = "img/logo2.png"
|
|
||||||
favicon = "img/favicon.ico"
|
|
||||||
dateFormat = "January 2, 2006"
|
|
||||||
commit = false
|
|
||||||
rss = false
|
|
||||||
comments = true
|
|
||||||
```
|
|
||||||
|
|
||||||
- Création d'un menu
|
|
||||||
```bash
|
|
||||||
[[menu.main]]
|
|
||||||
name = "Post 1"
|
|
||||||
url = "/post/post1"
|
|
||||||
weight = 1
|
|
||||||
|
|
||||||
[[menu.main]]
|
|
||||||
name = "A propos"
|
|
||||||
url = "/page/about"
|
|
||||||
weight = 2
|
|
||||||
|
|
||||||
[[menu.main]]
|
|
||||||
name = "Projets"
|
|
||||||
url = "/page/about"
|
|
||||||
weight = 3
|
|
||||||
```
|
|
||||||
|
|
||||||
- Création d'un sous menu
|
|
||||||
```bash
|
|
||||||
[[menu.main]]
|
|
||||||
parent = "Projets"
|
|
||||||
name = "Projet 1"
|
|
||||||
url = "/projets/projet1"
|
|
||||||
weight = 1
|
|
||||||
|
|
||||||
[[menu.main]]
|
|
||||||
parent = "Projets"
|
|
||||||
name = "Projet 2"
|
|
||||||
url = "/projets/projet2"
|
|
||||||
weight = 2
|
|
||||||
```
|
|
||||||
|
|
||||||
:warning: Créer les dossiers et les fichiers correspondant. Les urls ne prennent pas l'extension .md du fichier
|
|
||||||
|
|
||||||
- Création des icônes reseaux sociaux
|
|
||||||
```bash
|
|
||||||
[Author]
|
|
||||||
name = ""
|
|
||||||
email = ""
|
|
||||||
gitlab = ""
|
|
||||||
github = ""
|
|
||||||
twitter = ""
|
|
||||||
reddit = ""
|
|
||||||
linkedin = ""
|
|
||||||
```
|
|
||||||
|
|
||||||
### LANCER LE SERVEUR :rocket:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# L'option -D est pour servir les fichiers en Draft = true (non publiés)
|
|
||||||
hugo server -D
|
hugo server -D
|
||||||
```
|
```
|
||||||
|
|
||||||
> Visiter http://localhost:1313
|
Build de production :
|
||||||
|
|
||||||
|
|
||||||
### BUILDER LE SITE :construction:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
hugo
|
hugo --minify
|
||||||
```
|
```
|
||||||
|
|
||||||
> Les fichiers générés sont dans le dossier public
|
## CI/CD
|
||||||
|
|
||||||
## DEPLOIEMENT :checkered_flag:
|
Le dépôt historique utilise Drone CI pour construire et déployer le site. Cette refonte conserve volontairement cette approche : le portfolio peut ainsi démontrer une chaîne Git → CI → build Hugo → déploiement.
|
||||||
|
|
||||||
### VIA GITLAB AUTO DEVOPS
|
## Important
|
||||||
|
|
||||||
Compléter le config.toml comme ceci:
|
Les projets et expériences sont à compléter avec les réalisations réelles, métriques et liens disponibles. Les sections de lab servent à distinguer les expérimentations personnelles des expériences professionnelles.
|
||||||
```bash
|
|
||||||
baseURL = "https://gitlab_user.gitlab.io/"
|
|
||||||
```
|
|
||||||
|
|
||||||
Compléter le fichier .gitlab-ci.yml comme ceci:
|
|
||||||
```bash
|
|
||||||
image: registry.gitlab.com/pages/hugo/hugo_extended:latest
|
|
||||||
|
|
||||||
variables:
|
|
||||||
GIT_SUBMODULE_STRATEGY: recursive
|
|
||||||
|
|
||||||
pages:
|
|
||||||
script:
|
|
||||||
- hugo
|
|
||||||
artifacts:
|
|
||||||
paths:
|
|
||||||
- public
|
|
||||||
only:
|
|
||||||
- main
|
|
||||||
```
|
|
||||||
|
|
||||||
### VIA DOCKER :whale:
|
|
||||||
|
|
||||||
- Créer une Dockerfile contenant:
|
|
||||||
|
|
||||||
```Dockerfile
|
|
||||||
FROM nginx:alpine
|
|
||||||
|
|
||||||
COPY ./public/* /usr/share/nginx/html
|
|
||||||
COPY ./docs/nginx-exemple.conf /etc/nginx/conf.d/default.conf
|
|
||||||
|
|
||||||
EXPOSE 80
|
|
||||||
CMD ["nginx", "-g", "daemon off;"]
|
|
||||||
```
|
|
||||||
|
|
||||||
```bash
|
|
||||||
docker build -t hugo-site:1.0 .
|
|
||||||
docker run -d -p 8989:80 hugo-site:1.0
|
|
||||||
```
|
|
||||||
|
|
||||||
## DOCUMENTATION :books:
|
|
||||||
|
|
||||||
[DOC DU GARAGE](https://docs.legaragenumerique.xyz/divers/devops/hugo/)
|
|
||||||
[DOC OFFICIELLE](https://gohugo.io/documentation/)
|
|
||||||
[DOC MARKDOWN](https://www.markdownguide.org/basic-syntax/)
|
|
||||||
|
|
||||||
## CI/CD :repeat:
|
|
||||||
|
|
||||||
- WEB2PDF.py
|
|
||||||
- .drone.yml
|
|
||||||
|
|
||||||
## TO DO :bookmark_tabs:
|
|
||||||
|
|
||||||
- [ ] CI/CD schema
|
|
||||||
|
|||||||
@@ -0,0 +1,87 @@
|
|||||||
|
@import url('https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;500;600&family=Inter:wght@400;500;600;700&display=swap');
|
||||||
|
|
||||||
|
:root {
|
||||||
|
--bg: #0b0d0f;
|
||||||
|
--surface: #111417;
|
||||||
|
--surface-2: #171b1f;
|
||||||
|
--text: #e7ebe8;
|
||||||
|
--muted: #99a39e;
|
||||||
|
--line: #29302e;
|
||||||
|
--accent: #8fe388;
|
||||||
|
--accent-dark: #162319;
|
||||||
|
--max: 1120px;
|
||||||
|
}
|
||||||
|
* { box-sizing: border-box; }
|
||||||
|
html { scroll-behavior: smooth; }
|
||||||
|
body { margin:0; background:var(--bg); color:var(--text); font-family:Inter,system-ui,sans-serif; line-height:1.7; }
|
||||||
|
a { color:var(--text); text-decoration:none; }
|
||||||
|
a:hover { color:var(--accent); }
|
||||||
|
.container { width:min(calc(100% - 40px), var(--max)); margin:auto; }
|
||||||
|
.site-header { border-bottom:1px solid var(--line); position:sticky; top:0; background:rgba(11,13,15,.94); backdrop-filter:blur(12px); z-index:10; }
|
||||||
|
.nav { min-height:70px; display:flex; align-items:center; gap:28px; }
|
||||||
|
.brand { font:500 15px "IBM Plex Mono",monospace; white-space:nowrap; }
|
||||||
|
.brand strong, .brand span { color:var(--accent); }
|
||||||
|
.nav nav { display:flex; gap:20px; margin-left:auto; }
|
||||||
|
.nav nav a, .nav-links a { font:400 12px "IBM Plex Mono",monospace; color:var(--muted); text-transform:uppercase; letter-spacing:.04em; }
|
||||||
|
.nav-links { display:flex; gap:12px; padding-left:12px; border-left:1px solid var(--line); }
|
||||||
|
.hero { padding:110px 0 80px; max-width:900px; }
|
||||||
|
.eyebrow, .status, .project-index { font:500 11px "IBM Plex Mono",monospace; color:var(--accent); text-transform:uppercase; letter-spacing:.12em; }
|
||||||
|
.hero h1 { font-size:clamp(42px,8vw,82px); line-height:1; margin:12px 0; letter-spacing:-.055em; }
|
||||||
|
.hero-role { font-size:clamp(25px,4vw,42px); margin:0; font-weight:600; }
|
||||||
|
.hero-subtitle { font:500 14px "IBM Plex Mono",monospace; color:var(--accent); margin:12px 0 25px; }
|
||||||
|
.hero-copy { max-width:760px; color:var(--muted); font-size:18px; }
|
||||||
|
.hero-actions { display:flex; flex-wrap:wrap; gap:10px; margin-top:28px; }
|
||||||
|
.button { display:inline-block; border:1px solid var(--line); padding:10px 15px; font:500 12px "IBM Plex Mono",monospace; text-transform:uppercase; }
|
||||||
|
.button:hover { border-color:var(--accent); }
|
||||||
|
.button-primary { background:var(--accent); color:#0b0d0f; border-color:var(--accent); }
|
||||||
|
.button-primary:hover { color:#0b0d0f; }
|
||||||
|
.prose { color:#c9cfcb; max-width:800px; }
|
||||||
|
.prose h2 { margin-top:48px; color:var(--text); }
|
||||||
|
.prose h3 { color:var(--text); margin-top:30px; }
|
||||||
|
.prose code, pre { font-family:"IBM Plex Mono",monospace; }
|
||||||
|
.prose code { background:var(--surface-2); padding:2px 5px; }
|
||||||
|
.prose pre { background:#070809; border:1px solid var(--line); padding:20px; overflow:auto; }
|
||||||
|
.prose blockquote { margin:30px 0; padding:15px 20px; border-left:2px solid var(--accent); color:var(--muted); background:var(--surface); }
|
||||||
|
.page-header { padding:75px 0 45px; border-bottom:1px solid var(--line); margin-bottom:45px; }
|
||||||
|
.page-header h1 { font-size:clamp(40px,6vw,64px); line-height:1.05; margin:8px 0; letter-spacing:-.04em; }
|
||||||
|
.lead { color:var(--muted); font-size:18px; max-width:760px; }
|
||||||
|
.engineering-grid, .project-grid { display:grid; grid-template-columns:repeat(3,1fr); gap:14px; margin:25px 0 65px; }
|
||||||
|
.engineering-grid article, .project-card, .lab-card { border:1px solid var(--line); background:var(--surface); padding:22px; }
|
||||||
|
.engineering-grid span { font:12px "IBM Plex Mono",monospace; color:var(--accent); }
|
||||||
|
.engineering-grid h3 { margin:10px 0 4px; }
|
||||||
|
.engineering-grid p, .project-card p, .lab-card p { color:var(--muted); margin:0; }
|
||||||
|
.project-card { min-height:230px; display:flex; flex-direction:column; }
|
||||||
|
.project-top { display:flex; justify-content:space-between; margin-bottom:25px; }
|
||||||
|
.project-index { color:#59635e; }
|
||||||
|
.project-card h2 { font-size:22px; margin:0 0 8px; }
|
||||||
|
.project-card p { margin-bottom:18px; }
|
||||||
|
.tags { display:flex; flex-wrap:wrap; gap:6px; margin-top:auto; }
|
||||||
|
.tags span { font:11px "IBM Plex Mono",monospace; color:#aab3ae; border:1px solid var(--line); padding:3px 7px; }
|
||||||
|
.tags-large { margin:20px 0; }
|
||||||
|
.project-link { font:12px "IBM Plex Mono",monospace; color:var(--accent); margin-top:16px; }
|
||||||
|
.timeline { border-left:1px solid var(--line); }
|
||||||
|
.timeline-item { display:grid; grid-template-columns:230px 1fr; gap:35px; padding:30px 0 30px 28px; position:relative; }
|
||||||
|
.timeline-item:before { content:""; width:7px; height:7px; background:var(--accent); position:absolute; left:-4px; top:39px; }
|
||||||
|
.timeline-item h2 { margin:0 0 3px; }
|
||||||
|
.muted { color:var(--muted); }
|
||||||
|
.notes-list { display:grid; gap:0; }
|
||||||
|
.notes-list article { display:grid; grid-template-columns:140px 1fr; gap:20px; padding:22px 0; border-bottom:1px solid var(--line); }
|
||||||
|
.notes-list span { font:11px "IBM Plex Mono",monospace; color:var(--muted); }
|
||||||
|
.notes-list h2 { margin:0; font-size:20px; }
|
||||||
|
.notes-list p { grid-column:2; margin:0; color:var(--muted); }
|
||||||
|
.site-footer { margin-top:100px; border-top:1px solid var(--line); }
|
||||||
|
.footer-inner { min-height:80px; display:flex; justify-content:space-between; align-items:center; color:var(--muted); font:11px "IBM Plex Mono",monospace; }
|
||||||
|
@media(max-width:850px) {
|
||||||
|
.nav nav { display:none; }
|
||||||
|
.nav-links { margin-left:auto; }
|
||||||
|
.engineering-grid, .project-grid { grid-template-columns:1fr 1fr; }
|
||||||
|
.timeline-item { grid-template-columns:1fr; gap:5px; }
|
||||||
|
.notes-list article { grid-template-columns:1fr; }
|
||||||
|
.notes-list p { grid-column:auto; }
|
||||||
|
}
|
||||||
|
@media(max-width:560px) {
|
||||||
|
.container { width:min(calc(100% - 28px), var(--max)); }
|
||||||
|
.hero { padding:75px 0 55px; }
|
||||||
|
.engineering-grid, .project-grid { grid-template-columns:1fr; }
|
||||||
|
.footer-inner { flex-direction:column; align-items:flex-start; justify-content:center; gap:5px; }
|
||||||
|
}
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
document.documentElement.classList.add("js");
|
||||||
+19
-48
@@ -1,52 +1,23 @@
|
|||||||
# Configuration de l'adresse, titre (onglet) et des chemins vers les contenus
|
baseURL = "https://gregandev.fr/"
|
||||||
baseurl = "https://gregandev.fr"
|
languageCode = "fr-fr"
|
||||||
contentdir = "content"
|
defaultContentLanguage = "fr"
|
||||||
layoutdir = "layouts"
|
title = "Grégory Lebreton — Ingénieur DevOps / SRE"
|
||||||
publishdir = "public"
|
enableRobotsTXT = true
|
||||||
title = "Gregandev"
|
enableGitInfo = true
|
||||||
logo = "images/logos/logo.png"
|
|
||||||
favicon = "images/logos/favicon.png"
|
|
||||||
theme = "silhouette-hugo"
|
|
||||||
|
|
||||||
author = "Grégory Lebreton"
|
|
||||||
|
|
||||||
[pagination]
|
|
||||||
pagerSize = 10
|
|
||||||
|
|
||||||
relativeURLs = false
|
|
||||||
canonifyURLs = true
|
|
||||||
|
|
||||||
#disqusShortname = ""
|
|
||||||
#googleAnalytics = ""
|
|
||||||
|
|
||||||
[params]
|
[params]
|
||||||
author = "Grégory Lebreton"
|
description = "Portfolio de Grégory Lebreton, ingénieur DevOps / SRE orienté infrastructure, automatisation, CI/CD, conteneurs et observabilité."
|
||||||
introDescription = "Ingénieur Devops"
|
author = "Grégory Lebreton"
|
||||||
enableRobotsTXT = true
|
github = "https://github.com/greglebreton"
|
||||||
contentSharing = ""
|
gitlab = "https://gitlab.com/greglebreton"
|
||||||
|
linkedin = "https://www.linkedin.com/in/grégory-lebreton-996b261bb/"
|
||||||
|
email = "greg"
|
||||||
|
|
||||||
[Params.social]
|
[taxonomies]
|
||||||
github = "greglebreton"
|
category = "categories"
|
||||||
linkedin = "grégory-lebreton-996b261bb"
|
tag = "tags"
|
||||||
gitlab = "greglebreton"
|
|
||||||
email = "greg"
|
|
||||||
|
|
||||||
[Params.social.share]
|
[markup]
|
||||||
linkedin = true
|
[markup.goldmark]
|
||||||
email = true
|
[markup.goldmark.renderer]
|
||||||
|
unsafe = true
|
||||||
# CONFIG LANGAGE
|
|
||||||
DefaultContentLanguage = "fr"
|
|
||||||
# theme = ["osm", "beautifulhugo"]
|
|
||||||
metaDataFormat = "yaml"
|
|
||||||
pygmentsUseClasses = true
|
|
||||||
pygmentCodeFences = true
|
|
||||||
|
|
||||||
# ICONES RESEAUX SOCIAUX
|
|
||||||
[Author]
|
|
||||||
name = "Greg Lebreton"
|
|
||||||
email = "contact@gregandev.fr"
|
|
||||||
# gitlab = "GregLebreton"
|
|
||||||
github = "GregLebreton"
|
|
||||||
linkedin = "grégory-lebreton-996b261bb"
|
|
||||||
itchio = "gregan"
|
|
||||||
|
|||||||
+42
-25
@@ -1,33 +1,50 @@
|
|||||||
---
|
---
|
||||||
title: Accueil
|
title: "Grégory Lebreton"
|
||||||
description: "Portfolio pour GreganDev"
|
description: "Ingénieur DevOps / SRE — Infrastructure, automatisation, CI/CD, conteneurs et observabilité."
|
||||||
date: 2025-06-26
|
|
||||||
draft: false
|
|
||||||
---
|
---
|
||||||
|
|
||||||
<div class="contenu">
|
## Ingénieur DevOps / SRE
|
||||||
|
|
||||||
### 
|
**Infrastructure · Automation · CI/CD · Containers · Observability**
|
||||||
|
|
||||||
|
Je conçois, automatise et exploite des infrastructures Linux et des plateformes de déploiement.
|
||||||
|
|
||||||
Développeur passionné par les technologies de l'information et de communication, autodidacte de formation, j'aime le partage de connaissances par l'intermédiaire de tout vecteur possible dont l'open source !
|
Mon travail se situe à l'intersection de l'administration système, du développement et de l'industrialisation : Infrastructure as Code, configuration management, conteneurisation, CI/CD, monitoring, sauvegarde et documentation.
|
||||||
|
|
||||||
### LES PROJETS
|
|
||||||
|
|
||||||
Voici les projets sur lesquels je travaille actuellement :
|
|
||||||
|
|
||||||
[]({{< relref "projets/la-2029.md" >}})
|
|
||||||
|
|
||||||
[]({{< relref "projets/goldeneyevr.md" >}})
|
|
||||||
|
|
||||||
[]({{< relref "projets/akiravr.md" >}})
|
|
||||||
|
|
||||||
[]({{< relref "projets/retroarcade.md" >}})
|
|
||||||
|
|
||||||
[]({{< relref "page/garagenum.md" >}})
|
|
||||||
|
|
||||||
[]({{< relref "page/cnam.md" >}})
|
|
||||||
|
|
||||||
[](https://git.gregandev.fr/explore/repos)
|
|
||||||
|
|
||||||
|
<div class="hero-actions">
|
||||||
|
<a class="button button-primary" href="/projects/">Voir les projets</a>
|
||||||
|
<a class="button" href="/experience/">Parcours professionnel</a>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
|
## Engineering
|
||||||
|
|
||||||
|
<div class="engineering-grid">
|
||||||
|
<article><span>01</span><h3>Systems</h3><p>Linux · Debian · VPS · On-premise · Réseau</p></article>
|
||||||
|
<article><span>02</span><h3>Automation</h3><p>Ansible · Terraform · Python · Bash</p></article>
|
||||||
|
<article><span>03</span><h3>Delivery</h3><p>Git · CI/CD · Jenkins · Drone CI</p></article>
|
||||||
|
<article><span>04</span><h3>Platform</h3><p>Docker · Docker Compose · Kubernetes</p></article>
|
||||||
|
<article><span>05</span><h3>Observability</h3><p>Prometheus · Grafana · supervision</p></article>
|
||||||
|
<article><span>06</span><h3>Reliability</h3><p>Backup · restauration · PRA · documentation</p></article>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## Projets mis en avant
|
||||||
|
|
||||||
|
<div class="project-grid">
|
||||||
|
{{ range where (where .Site.RegularPages "Params.featured" true) "Section" "projects" }}
|
||||||
|
{{ partial "project-card.html" . }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## Actuellement
|
||||||
|
|
||||||
|
**Le Garage Numérique — Paris**
|
||||||
|
|
||||||
|
Formateur DevOps / Administrateur Systèmes.
|
||||||
|
|
||||||
|
Infrastructure · Automation · Platform · Observability
|
||||||
|
|
||||||
|
## Approche
|
||||||
|
|
||||||
|
> Je construis → j'automatise → je déploie → je supervise → je documente.
|
||||||
|
|
||||||
|
Je privilégie les environnements reproductibles, les processus simples à exploiter et les solutions dont le fonctionnement peut être compris, testé et maintenu.
|
||||||
|
|||||||
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
title: "À propos"
|
||||||
|
description: "Profil de Grégory Lebreton."
|
||||||
|
---
|
||||||
|
|
||||||
|
# À propos
|
||||||
|
|
||||||
|
Ingénieur DevOps / SRE et administrateur systèmes, également formateur technique.
|
||||||
|
|
||||||
|
Je m'intéresse particulièrement à l'automatisation, à la reproductibilité des environnements, à la fiabilité des déploiements et à la conception de plateformes simples à exploiter et maintenir.
|
||||||
|
|
||||||
|
## Formation
|
||||||
|
|
||||||
|
- Ingénieur DevOps — GT'm Ingénierie
|
||||||
|
- Concepteur Développeur Informatique — AFPA Paris XII
|
||||||
|
- Bac ES
|
||||||
|
|
||||||
|
## Langues
|
||||||
|
|
||||||
|
- Français — natif
|
||||||
|
- Anglais — C2
|
||||||
|
- Espagnol — B1
|
||||||
|
- Allemand — B1
|
||||||
@@ -0,0 +1,20 @@
|
|||||||
|
---
|
||||||
|
title: "Expérience"
|
||||||
|
description: "Expérience professionnelle en administration systèmes, DevOps, développement et formation technique."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Expérience
|
||||||
|
|
||||||
|
Un parcours à l'interface entre développement logiciel, administration systèmes, infrastructure et transmission des compétences.
|
||||||
|
|
||||||
|
{{ range .Pages.ByDate.Reverse }}
|
||||||
|
<article class="timeline-item">
|
||||||
|
<div class="timeline-date">{{ .Params.period }}</div>
|
||||||
|
<div>
|
||||||
|
<h2>{{ .Title }}</h2>
|
||||||
|
<p class="muted">{{ .Params.company }} · {{ .Params.location }}</p>
|
||||||
|
{{ .Content }}
|
||||||
|
{{ with .Params.technologies }}<div class="tags">{{ range . }}<span>{{ . }}</span>{{ end }}</div>{{ end }}
|
||||||
|
</div>
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
---
|
||||||
|
title: "Ingénieur / Développeur freelance"
|
||||||
|
company: "Freelance"
|
||||||
|
location: "France"
|
||||||
|
period: "Janvier 2020 — Février 2021"
|
||||||
|
date: 2020-01-01
|
||||||
|
technologies: ["Python", "PHP", "SQL", "Linux", "Docker", "Git"]
|
||||||
|
---
|
||||||
|
|
||||||
|
Interventions sur des projets logiciels et infrastructure, avec une attention portée à l'automatisation, au déploiement et à la maintenabilité.
|
||||||
|
|
||||||
|
- Développement d'outils et d'applications.
|
||||||
|
- Administration d'environnements Linux.
|
||||||
|
- Automatisation et scripting.
|
||||||
|
- Intégration et déploiement d'applications.
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
title: "Formateur DevOps / Administrateur Systèmes"
|
||||||
|
company: "Le Garage Numérique"
|
||||||
|
location: "Paris"
|
||||||
|
period: "Mars 2021 — aujourd'hui"
|
||||||
|
date: 2021-03-01
|
||||||
|
technologies: ["Linux", "Ansible", "Docker", "CI/CD", "Monitoring", "Git"]
|
||||||
|
---
|
||||||
|
|
||||||
|
Accompagnement technique et transmission autour de l'administration systèmes, du DevOps et des pratiques d'industrialisation.
|
||||||
|
|
||||||
|
- Administration et maintenance d'environnements Linux.
|
||||||
|
- Automatisation des opérations récurrentes.
|
||||||
|
- Accompagnement sur Git, conteneurs et chaînes de déploiement.
|
||||||
|
- Mise en place et documentation de pratiques reproductibles.
|
||||||
|
- Formation et accompagnement de publics techniques.
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
title: "Développeur"
|
||||||
|
company: "Leading Frog"
|
||||||
|
location: "France"
|
||||||
|
period: "Octobre 2017 — Décembre 2018"
|
||||||
|
date: 2017-10-01
|
||||||
|
technologies: ["PHP", "JavaScript", "SQL", "Git"]
|
||||||
|
---
|
||||||
|
|
||||||
|
Développement d'applications web et participation aux différentes étapes du cycle de vie logiciel.
|
||||||
|
|
||||||
|
- Développement et maintenance.
|
||||||
|
- Intégration de fonctionnalités.
|
||||||
|
- Correction et évolution d'applications existantes.
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
title: "Ingénieur développement"
|
||||||
|
company: "Safran Aircraft Engines"
|
||||||
|
location: "France"
|
||||||
|
period: "Juin 2019 — Décembre 2019"
|
||||||
|
date: 2019-06-01
|
||||||
|
technologies: ["C#", "SQL", "Git", "Industrialisation"]
|
||||||
|
---
|
||||||
|
|
||||||
|
Participation au développement et à l'industrialisation de solutions logicielles dans un contexte industriel.
|
||||||
|
|
||||||
|
- Développement et maintenance d'applications.
|
||||||
|
- Travail avec des environnements techniques contraints.
|
||||||
|
- Collaboration avec les équipes projet et documentation des solutions.
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
title: "Lab"
|
||||||
|
description: "Laboratoire personnel : infrastructure, automatisation, Kubernetes et observabilité."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Lab
|
||||||
|
|
||||||
|
Le lab sert à tester des architectures et des outils avant de les documenter ou de les réutiliser.
|
||||||
|
|
||||||
|
{{ range .Pages.ByDate.Reverse }}
|
||||||
|
<article class="lab-card">
|
||||||
|
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||||
|
<p>{{ .Description }}</p>
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
|
||||||
|
## Axes
|
||||||
|
|
||||||
|
- Linux & administration systèmes
|
||||||
|
- Infrastructure as Code
|
||||||
|
- Ansible & automatisation
|
||||||
|
- Docker & Kubernetes
|
||||||
|
- Prometheus & Grafana
|
||||||
|
- CI/CD
|
||||||
|
- Backup, restauration et PRA
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: "Automation Lab"
|
||||||
|
description: "Expérimentations autour de l'automatisation système et de l'idempotence."
|
||||||
|
date: 2026-09-01
|
||||||
|
---
|
||||||
|
|
||||||
|
Tests de rôles Ansible, scripts Bash/Python et procédures de provisioning reproductibles.
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
title: "Observability Lab"
|
||||||
|
description: "Expérimentations autour des métriques, dashboards et alertes."
|
||||||
|
date: 2026-09-01
|
||||||
|
---
|
||||||
|
|
||||||
|
Expérimentations Prometheus/Grafana : collecte de métriques, dashboards et supervision de services.
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
---
|
||||||
|
title: "Notes"
|
||||||
|
description: "Notes techniques et retours d'expérimentation."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Notes techniques
|
||||||
|
|
||||||
|
Cette section accueillera progressivement des articles courts et reproductibles : procédures, retours de lab, automatisation et troubleshooting.
|
||||||
@@ -0,0 +1,18 @@
|
|||||||
|
---
|
||||||
|
title: "Projets"
|
||||||
|
description: "Projets techniques autour de l'infrastructure, de l'automatisation, du CI/CD et de l'observabilité."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Projets
|
||||||
|
|
||||||
|
Une sélection de travaux techniques et d'expérimentations orientés infrastructure et platform engineering.
|
||||||
|
|
||||||
|
<div class="project-grid">
|
||||||
|
{{ range .Pages.ByDate.Reverse }}
|
||||||
|
{{ partial "project-card.html" . }}
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
## Archive
|
||||||
|
|
||||||
|
Les anciens projets personnels orientés VR / jeu vidéo restent disponibles comme archive technique, mais ne constituent plus le cœur du portfolio professionnel.
|
||||||
@@ -0,0 +1,16 @@
|
|||||||
|
---
|
||||||
|
title: "Ansible Role — Certbot"
|
||||||
|
description: "Rôle Ansible pour automatiser l'installation et la configuration de Certbot / Let's Encrypt."
|
||||||
|
date: 2026-07-29
|
||||||
|
featured: true
|
||||||
|
technologies: ["Ansible", "Linux", "Let's Encrypt", "Idempotence"]
|
||||||
|
categories: ["automation", "infrastructure"]
|
||||||
|
tags: ["ansible", "certbot", "tls", "linux"]
|
||||||
|
status: "active"
|
||||||
|
links:
|
||||||
|
repository: "https://git.gregandev.fr/gregandev/ansible-role-certbot"
|
||||||
|
---
|
||||||
|
|
||||||
|
Un rôle Ansible dédié à l'automatisation de la gestion de Certbot et des certificats TLS.
|
||||||
|
|
||||||
|
Ce type d'automatisation illustre une approche infrastructure-as-code : installation reproductible, configuration déclarative et réduction des opérations manuelles.
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
---
|
||||||
|
title: "Portfolio Hugo & CI/CD"
|
||||||
|
description: "Site statique Hugo construit, validé et déployé automatiquement par CI/CD."
|
||||||
|
date: 2026-09-01
|
||||||
|
featured: true
|
||||||
|
technologies: ["Hugo", "Drone CI", "Docker", "Git", "Linux"]
|
||||||
|
categories: ["cicd", "platform"]
|
||||||
|
tags: ["hugo", "drone", "docker", "deployment"]
|
||||||
|
status: "active"
|
||||||
|
links:
|
||||||
|
repository: "https://git.gregandev.fr/gregandev/hugo-site"
|
||||||
|
---
|
||||||
|
|
||||||
|
Le portfolio lui-même sert de démonstrateur d'industrialisation.
|
||||||
|
|
||||||
|
### Chaîne
|
||||||
|
|
||||||
|
```text
|
||||||
|
Git push
|
||||||
|
↓
|
||||||
|
Drone CI
|
||||||
|
↓
|
||||||
|
Hugo build
|
||||||
|
↓
|
||||||
|
Validation
|
||||||
|
↓
|
||||||
|
Déploiement
|
||||||
|
↓
|
||||||
|
gregandev.fr
|
||||||
|
```
|
||||||
|
|
||||||
|
Objectifs : rendre le build reproductible, limiter les régressions et garder une chaîne de livraison lisible.
|
||||||
@@ -0,0 +1,19 @@
|
|||||||
|
---
|
||||||
|
title: "Infrastructure as Code"
|
||||||
|
description: "Provisionnement et configuration automatisés d'infrastructures Linux."
|
||||||
|
date: 2026-08-15
|
||||||
|
featured: true
|
||||||
|
technologies: ["Terraform", "Ansible", "Linux", "Git"]
|
||||||
|
categories: ["infrastructure", "automation"]
|
||||||
|
tags: ["terraform", "ansible", "iac", "linux"]
|
||||||
|
status: "lab"
|
||||||
|
---
|
||||||
|
|
||||||
|
Expérimentations autour du provisionnement et de la configuration reproductible d'environnements Linux.
|
||||||
|
|
||||||
|
### Principes
|
||||||
|
|
||||||
|
- Déclarer l'infrastructure plutôt que la configurer manuellement.
|
||||||
|
- Séparer provisioning et configuration.
|
||||||
|
- Rendre les changements reproductibles et auditables.
|
||||||
|
- Documenter les opérations de maintenance et de restauration.
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
---
|
||||||
|
title: "Kubernetes Lab"
|
||||||
|
description: "Laboratoire de conteneurisation et d'orchestration pour expérimenter les pratiques Platform Engineering."
|
||||||
|
date: 2026-08-01
|
||||||
|
featured: true
|
||||||
|
technologies: ["Kubernetes", "Docker", "Linux", "Prometheus", "Grafana"]
|
||||||
|
categories: ["platform", "observability"]
|
||||||
|
tags: ["kubernetes", "docker", "monitoring", "lab"]
|
||||||
|
status: "lab"
|
||||||
|
---
|
||||||
|
|
||||||
|
Laboratoire destiné à expérimenter le déploiement d'applications conteneurisées, la configuration des workloads et leur supervision.
|
||||||
|
|
||||||
|
Les expérimentations sont documentées séparément afin de distinguer clairement les travaux de laboratoire des environnements de production.
|
||||||
@@ -0,0 +1,27 @@
|
|||||||
|
---
|
||||||
|
title: "Stack"
|
||||||
|
description: "Technologies et outils utilisés dans mon environnement technique."
|
||||||
|
---
|
||||||
|
|
||||||
|
# Stack
|
||||||
|
|
||||||
|
## Systems
|
||||||
|
Linux · Debian · SSH · Nginx · systemd
|
||||||
|
|
||||||
|
## Infrastructure
|
||||||
|
Terraform · Ansible · VPS · On-premise
|
||||||
|
|
||||||
|
## Containers
|
||||||
|
Docker · Docker Compose · Kubernetes
|
||||||
|
|
||||||
|
## Delivery
|
||||||
|
Git · Drone CI · Jenkins · CI/CD
|
||||||
|
|
||||||
|
## Observability
|
||||||
|
Prometheus · Grafana · logs · monitoring
|
||||||
|
|
||||||
|
## Programming
|
||||||
|
Python · Bash · Go · PHP · C# · Java · SQL · JavaScript
|
||||||
|
|
||||||
|
## Practices
|
||||||
|
Infrastructure as Code · automatisation · documentation · backup/restore · PRA
|
||||||
@@ -1,67 +1,15 @@
|
|||||||
<!doctype html>
|
<!doctype html>
|
||||||
<html lang="en">
|
<html lang="{{ .Site.Language.Lang }}">
|
||||||
<head>
|
<head>
|
||||||
<meta charset="utf-8">
|
{{ partial "head.html" . }}
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
</head>
|
||||||
|
<body>
|
||||||
<!-- {{ template "_internal/opengraph.html" . }}
|
{{ partial "header.html" . }}
|
||||||
{{ template "_internal/twitter_cards.html" . }} -->
|
<main class="container">
|
||||||
|
|
||||||
<title>{{ block "title" . }}{{ with .Params.Title }}{{ . }} | {{ end }}{{ .Site.Title }}{{ end }}</title>
|
|
||||||
|
|
||||||
<link rel="icon" type="image/png" href='{{ "images/logos/favicon.png" | absURL }}' sizes="16x16">
|
|
||||||
<link rel="icon" type="image/png" href='{{ "images/logos/favicon.png" | absURL }}' sizes="32x32">
|
|
||||||
|
|
||||||
<link href="https://fonts.googleapis.com/css?family=Oswald:400" rel="stylesheet">
|
|
||||||
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
|
|
||||||
<link rel="stylesheet" href="https://use.fontawesome.com/releases/v5.5.0/css/all.css" integrity="sha384-B4dIYHKNBt8Bc12p+WXckhzcICo0wtJAoU8YZTY5qE0Id1GSseTk6S+L3BlXeVIU" crossorigin="anonymous">
|
|
||||||
|
|
||||||
{{ $css := resources.Match "css/*.css" }}
|
|
||||||
|
|
||||||
{{ with $css }}
|
|
||||||
{{ $bundle := . | resources.Concat "css/bundle.min.css" | minify | fingerprint }}
|
|
||||||
<link rel="stylesheet"
|
|
||||||
href="{{ $bundle.Permalink }}"
|
|
||||||
integrity="{{ $bundle.Data.Integrity }}">
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
{{ block "head" . }}{{ end }}
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<nav class="navbar fixed-top navbar-expand-md navbar-dark bg-dark py-1 top-nav">
|
|
||||||
<div class="container">
|
|
||||||
{{ partial "navbar-brand" . }}
|
|
||||||
<button class="navbar-toggler collapsed" type="button" data-toggle="collapse" data-target="#navbarCollapse" aria-controls="navbarCollapse" aria-expanded="false" aria-label="Toggle navigation">
|
|
||||||
<i class="fas fa-bars"></i>
|
|
||||||
</button>
|
|
||||||
<div class="navbar-collapse collapse" id="navbarCollapse">
|
|
||||||
<ul class="navbar-nav mr-auto">
|
|
||||||
{{ partial "top-nav-text-links" . }}
|
|
||||||
</ul>
|
|
||||||
<div class="social-icons d-none d-lg-block">
|
|
||||||
{{ partial "social-icons" . }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</nav>
|
|
||||||
|
|
||||||
{{ block "header" .}}{{ end }}
|
|
||||||
|
|
||||||
<div class="main">
|
|
||||||
{{ block "main" . }}{{ end }}
|
{{ block "main" . }}{{ end }}
|
||||||
</div>
|
</main>
|
||||||
|
{{ partial "footer.html" . }}
|
||||||
<footer class="mt-auto footer d-print-none">
|
{{ $js := resources.Get "js/main.js" | minify | fingerprint }}
|
||||||
<div class="container-fluid">
|
<script src="{{ $js.RelPermalink }}" defer></script>
|
||||||
<div class="d-flex justify-content-center icons">
|
</body>
|
||||||
{{ partial "social-icons" . }}
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</footer>
|
|
||||||
|
|
||||||
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
|
|
||||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49" crossorigin="anonymous"></script>
|
|
||||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
|
|
||||||
|
|
||||||
</body>
|
|
||||||
</html>
|
</html>
|
||||||
|
|||||||
@@ -1,68 +1,8 @@
|
|||||||
{{ define "head" }}
|
|
||||||
|
|
||||||
<style type="text/css">
|
|
||||||
.feature-image {
|
|
||||||
background-image: linear-gradient(
|
|
||||||
rgba(0, 0, 0, 0.15),
|
|
||||||
rgba(0, 0, 0, 0.15)
|
|
||||||
), url('{{ "images/unix.jpg" | absURL }}');
|
|
||||||
height: 500px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.feature-image-text {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (min-width: 1200px) {
|
|
||||||
.feature-image {
|
|
||||||
background-position: 0% 30%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@media (max-width: 768px) {
|
|
||||||
.feature-image {
|
|
||||||
height: 250px;
|
|
||||||
background-position: 0% 0%;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
{{ end }}
|
|
||||||
{{ define "header" }}
|
|
||||||
{{ if .IsHome }}
|
|
||||||
<header class="feature-image">
|
|
||||||
<div class="feature-image-text white-shadow-text">
|
|
||||||
{{ partial "header-about-me" . }}
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
{{ end }}
|
|
||||||
{{ if not .IsHome }}
|
|
||||||
|
|
||||||
<header class="feature-image">
|
|
||||||
<div class="feature-image-text">
|
|
||||||
<h1 class="text-center">{{ .Title }}</h1>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
{{ end }}
|
|
||||||
{{ end }}
|
|
||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
<div class="container mt-4 mb-4 recent-posts" style="text-align: center;">
|
<header class="page-header">
|
||||||
{{ $pages := .Pages }}
|
<p class="eyebrow">{{ .Section }}</p>
|
||||||
{{ if .IsHome }}
|
<h1>{{ .Title }}</h1>
|
||||||
{{ $pages := where .Site.RegularPages "Section" "page" }}
|
{{ with .Description }}<p class="lead">{{ . }}</p>{{ end }}
|
||||||
|
</header>
|
||||||
{{ range $pages }}
|
<div class="prose">{{ .Content }}</div>
|
||||||
<div><a class="title" id="front-title" href="{{ .Permalink }}"><h2>{{ .Title }}</h2></a></div>
|
|
||||||
<div><p id="front-title">{{ .Description }}</p></div>
|
|
||||||
{{ end }}
|
|
||||||
<!-- {{ $pages := where .Site.RegularPages "Section" "projets" }}
|
|
||||||
|
|
||||||
{{ range $pages }}
|
|
||||||
<div><a href="{{ .Permalink }}"><h5>{{ .Title }}</h5></a></div>
|
|
||||||
{{ end }} -->
|
|
||||||
{{ end }}
|
|
||||||
</div>
|
|
||||||
{{ end }}
|
{{ end }}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,27 +1,10 @@
|
|||||||
{{ define "head" }}
|
|
||||||
|
|
||||||
<style type="text/css">
|
|
||||||
p {
|
|
||||||
text-align: center;
|
|
||||||
|
|
||||||
}
|
|
||||||
img {
|
|
||||||
max-width: 95%
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
|
|
||||||
{{ end }}
|
|
||||||
{{ define "title" }}
|
|
||||||
{{ .Title }} | {{ .Site.Title }}
|
|
||||||
{{ end }}
|
|
||||||
|
|
||||||
{{ define "main" }}
|
{{ define "main" }}
|
||||||
<div class="container mt-4 post">
|
<article class="article">
|
||||||
<!-- <h1>{{ .Title }}</h1> -->
|
<header class="page-header">
|
||||||
{{ partial "post-meta" . }}
|
<p class="eyebrow">{{ .Section }}</p>
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
<div class="mt-4 mb-4 main-content">
|
{{ with .Description }}<p class="lead">{{ . }}</p>{{ end }}
|
||||||
{{ .Content }}
|
</header>
|
||||||
</div>
|
<div class="prose">{{ .Content }}</div>
|
||||||
</div>
|
</article>
|
||||||
{{ end }}
|
{{ end }}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
<header class="page-header">
|
||||||
|
<p class="eyebrow">CAREER</p>
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
<p class="lead">{{ .Description }}</p>
|
||||||
|
</header>
|
||||||
|
<div class="timeline">
|
||||||
|
{{ range .Pages.ByDate.Reverse }}
|
||||||
|
<article class="timeline-item">
|
||||||
|
<div class="timeline-date">{{ .Params.period }}</div>
|
||||||
|
<div><h2>{{ .Title }}</h2><p class="muted">{{ .Params.company }} · {{ .Params.location }}</p><div class="prose">{{ .Content }}</div>{{ with .Params.technologies }}<div class="tags">{{ range . }}<span>{{ . }}</span>{{ end }}</div>{{ end }}</div>
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
<section class="hero">
|
||||||
|
<p class="eyebrow">OPEN TO ENGINEERING</p>
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
<p class="hero-role">Ingénieur DevOps / SRE</p>
|
||||||
|
<p class="hero-subtitle">Infrastructure · Automation · CI/CD · Containers · Observability</p>
|
||||||
|
<p class="hero-copy">{{ .Description }}</p>
|
||||||
|
<div class="hero-actions">
|
||||||
|
<a class="button button-primary" href="/projects/">Projets</a>
|
||||||
|
<a class="button" href="/experience/">Expérience</a>
|
||||||
|
<a class="button" href="/stack/">Stack</a>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
<div class="prose">{{ .Content }}</div>
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
<header class="page-header"><p class="eyebrow">LAB</p><h1>{{ .Title }}</h1><p class="lead">{{ .Description }}</p></header>
|
||||||
|
<div class="project-grid">
|
||||||
|
{{ range .Pages.ByDate.Reverse }}<article class="project-card"><span class="status">LAB</span><h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2><p>{{ .Description }}</p></article>{{ end }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
<header class="page-header"><p class="eyebrow">NOTES</p><h1>{{ .Title }}</h1><p class="lead">{{ .Description }}</p></header>
|
||||||
|
<div class="notes-list">
|
||||||
|
{{ range .Pages.ByDate.Reverse }}<article><span>{{ .Date.Format "2006-01-02" }}</span><h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2><p>{{ .Description }}</p></article>{{ end }}
|
||||||
|
</div>
|
||||||
|
{{ end }}
|
||||||
@@ -0,0 +1,6 @@
|
|||||||
|
<footer class="site-footer">
|
||||||
|
<div class="container footer-inner">
|
||||||
|
<span>© {{ now.Year }} Grégory Lebreton</span>
|
||||||
|
<span>Built with Hugo · deployed with CI/CD</span>
|
||||||
|
</div>
|
||||||
|
</footer>
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
|
<title>{{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} — {{ .Site.Title }}{{ end }}</title>
|
||||||
|
<meta name="description" content="{{ with .Description }}{{ . }}{{ else }}{{ .Site.Params.description }}{{ end }}">
|
||||||
|
<link rel="canonical" href="{{ .Permalink }}">
|
||||||
|
{{ $css := resources.Get "css/main.css" | minify | fingerprint }}
|
||||||
|
<link rel="stylesheet" href="{{ $css.RelPermalink }}">
|
||||||
|
{{ with .OutputFormats.Get "RSS" }}<link rel="alternate" type="application/rss+xml" href="{{ .RelPermalink }}">{{ end }}
|
||||||
@@ -0,0 +1,17 @@
|
|||||||
|
<header class="site-header">
|
||||||
|
<div class="container nav">
|
||||||
|
<a class="brand" href="/"><span>greg</span>@<strong>dev</strong></a>
|
||||||
|
<nav aria-label="Navigation principale">
|
||||||
|
<a href="/experience/">Experience</a>
|
||||||
|
<a href="/projects/">Projects</a>
|
||||||
|
<a href="/lab/">Lab</a>
|
||||||
|
<a href="/stack/">Stack</a>
|
||||||
|
<a href="/notes/">Notes</a>
|
||||||
|
<a href="/about/">About</a>
|
||||||
|
</nav>
|
||||||
|
<div class="nav-links">
|
||||||
|
<a href="{{ .Site.Params.github }}" target="_blank" rel="noopener">GitHub</a>
|
||||||
|
<a href="{{ .Site.Params.linkedin }}" target="_blank" rel="noopener">LinkedIn</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
@@ -0,0 +1,14 @@
|
|||||||
|
<article class="project-card">
|
||||||
|
<div class="project-top">
|
||||||
|
<span class="status">{{ .Params.status | default "active" }}</span>
|
||||||
|
<span class="project-index">PROJECT</span>
|
||||||
|
</div>
|
||||||
|
<h2><a href="{{ .RelPermalink }}">{{ .Title }}</a></h2>
|
||||||
|
<p>{{ .Description }}</p>
|
||||||
|
{{ with .Params.technologies }}
|
||||||
|
<div class="tags">{{ range . }}<span>{{ . }}</span>{{ end }}</div>
|
||||||
|
{{ end }}
|
||||||
|
{{ with .Params.links.repository }}
|
||||||
|
<a class="project-link" href="{{ . }}" target="_blank" rel="noopener">Repository ↗</a>
|
||||||
|
{{ end }}
|
||||||
|
</article>
|
||||||
@@ -0,0 +1,12 @@
|
|||||||
|
{{ define "main" }}
|
||||||
|
<article class="article">
|
||||||
|
<header class="page-header">
|
||||||
|
<p class="eyebrow">PROJECT / {{ .Params.status | default "active" }}</p>
|
||||||
|
<h1>{{ .Title }}</h1>
|
||||||
|
<p class="lead">{{ .Description }}</p>
|
||||||
|
{{ with .Params.technologies }}<div class="tags tags-large">{{ range . }}<span>{{ . }}</span>{{ end }}</div>{{ end }}
|
||||||
|
</header>
|
||||||
|
<div class="prose">{{ .Content }}</div>
|
||||||
|
{{ with .Params.links.repository }}<p><a class="button button-primary" href="{{ . }}" target="_blank" rel="noopener">Voir le repository ↗</a></p>{{ end }}
|
||||||
|
</article>
|
||||||
|
{{ end }}
|
||||||
Reference in New Issue
Block a user