kube migration
This commit is contained in:
@ -7,8 +7,8 @@ Main purpose of this projects is to have personal extensive API training on mult
|
||||
* Fully tested
|
||||
* High QA by following best practices for linting, formatting, with static analyzers for non strongly typed languages
|
||||
* Community-driven with usage of the most well-known packages
|
||||
* `MySQL` or `PostgreSQL` as main databases
|
||||
* `PostgreSQL` as main databases
|
||||
* Use ORM whenever possible that follows any `DataMapper` or `Active Record` patterns
|
||||
* Proper seeder / faker for quick starting with filled DB
|
||||
* Proper suited QA + production Dockerfile
|
||||
* Complete CI/DC deployment on Docker Swarm with [Drone CI](https://www.drone.io/)
|
||||
* Complete CI/CD deployment on Kubernetes with [Concourse](https://concourse.okami101.io/)
|
||||
|
@ -9,38 +9,49 @@ A 🧔🌍💻 aka senior web developer @Bretagne 🇫🇷
|
||||
|
||||
Hi folks, I'm a web lover actually working [@Cesson-Sévigné](https://fr.wikipedia.org/wiki/Cesson-S%C3%A9vign%C3%A9), mastering :
|
||||
|
||||
* [`ASP.NET Core`](https://docs.microsoft.com/fr-fr/aspnet/core/?view=aspnetcore-6.0) with `C#` and [`Laravel`](https://laravel.com/) as main backend frameworks
|
||||
* [`Vue 3`](https://vuejs.org/) associated with [`Typescript`](https://www.typescriptlang.org/) and [*Composition API*](https://vuejs.org/guide/extras/composition-api-faq.html) on frontend side
|
||||
* *Utility-first CSS frameworks* as [`Tailwind`](https://tailwindcss.com/) / [`Windi CSS`](https://windicss.org/), but also comfortable with [`Sass`](https://sass-lang.com/) with **BEM** implementation
|
||||
* [`ASP.NET Core`](https://docs.microsoft.com/fr-fr/aspnet/core/?view=aspnetcore-6.0) with `C#` and [`Laravel`](https://laravel.com/) as favorite backend frameworks
|
||||
* [`Vue 3`](https://vuejs.org/) by [*Composition API*](https://vuejs.org/guide/extras/composition-api-faq.html) with [`Typescript`](https://www.typescriptlang.org/)
|
||||
* *Utility-first CSS frameworks* as [`Tailwind`](https://tailwindcss.com/) / [`Windi CSS`](https://windicss.org/) / [`UnoCSS`](https://github.com/unocss/unocss), but also comfortable with [`Sass`](https://sass-lang.com/) with **BEM** implementation
|
||||
|
||||
I can develop proper API design following [**DDD / Hexa**](https://en.wikipedia.org/wiki/Domain-driven_design) principles if applicable. In addition to above `.NET` and `PHP` backend stacks, I'm also confident with :
|
||||
|
||||
* [`Nest.js`](https://nestjs.com/) associated to [`MikroORM`](https://mikro-orm.io/) (*Typescript*),
|
||||
* [`FastAPI`](https://fastapi.tiangolo.com/) with [`SQLAlchemy`](https://www.sqlalchemy.org/) (*Python*),
|
||||
* [`Spring Boot`](https://spring.io/projects/spring-boot) with `Hibernate` as main JPA implementation (*Java*).
|
||||
* [`Nest.js`](https://nestjs.com/) associated to [`MikroORM`](https://mikro-orm.io/) (*Typescript*)
|
||||
* [`FastAPI`](https://fastapi.tiangolo.com/) with [`SQLAlchemy`](https://www.sqlalchemy.org/) (*Python*)
|
||||
* [`Spring Boot`](https://spring.io/projects/spring-boot) with `Hibernate` as main JPA implementation (*Java*)
|
||||
|
||||
I encourage `TDD` or at least proper **integration tests** on any backend frameworks, following **AAA** aka *Arrange Act Assert* principle :
|
||||
|
||||
* `PHPUnit` or [`Pest`](https://pestphp.com/) for *PHP*,
|
||||
* [`NUnit.net`](https://nunit.org/) or [`xUnit.net`](https://xunit.net/) with [`Fluent Assertions`](https://github.com/fluentassertions/fluentassertions) for *.NET Core*,
|
||||
* `JUnit` with [`REST Assured`](https://rest-assured.io/) for *Spring Boot*,
|
||||
* `Jest` and `pytest` on respective *NodeJS* end *Python* stacks.
|
||||
* `PHPUnit` or [`Pest`](https://pestphp.com/) for *PHP*
|
||||
* [`NUnit.net`](https://nunit.org/) or [`xUnit.net`](https://xunit.net/) with [`Fluent Assertions`](https://github.com/fluentassertions/fluentassertions) for *.NET Core*
|
||||
* `JUnit` with [`REST Assured`](https://rest-assured.io/) for *Spring Boot*
|
||||
* `Jest` and `pytest` on respective *NodeJS* end *Python* stacks
|
||||
|
||||
Fully embracing app containerization with `Docker`, from local, staging to production, I push to use properly configured **CI/CD** whenever is possible in order to enforce **continuous automatized testing, linting and coding standard** at many languages ([`ESLint`](https://eslint.org/), [`Prettier`](https://prettier.io/), [`PHP CS fixer`](https://cs.symfony.com/), [`PHPStan`](https://github.com/phpstan/phpstan), [`Black`](https://black.readthedocs.io/en/stable/), [`mypy`](http://mypy-lang.org/), [`Google Java Format`](https://github.com/google/google-java-format), [`Spotless`](https://github.com/diffplug/spotless), and so on...).
|
||||
Fully embracing app containerization with `Docker` and `Kubernetes`, from local, staging to production, I push to use properly configured **CI/CD** whenever possible in order to enforce **continuous automatized testing, linting and code styling** at many languages ([`ESLint`](https://eslint.org/), [`Prettier`](https://prettier.io/), [`PHP CS fixer`](https://cs.symfony.com/), [`PHPStan`](https://github.com/phpstan/phpstan), [`Black`](https://black.readthedocs.io/en/stable/), [`mypy`](http://mypy-lang.org/), [`Google Java Format`](https://github.com/google/google-java-format), [`Spotless`](https://github.com/diffplug/spotless), and so on...).
|
||||
|
||||
Mastering installations of properly configured `Docker Swarm` clusters with next containerized tools :
|
||||
Mastering installations and maintenance of `Docker Swarm` or bare metal `Kubernetes` clusters. Here some cloud native tools solutions I generally use :
|
||||
|
||||
* [`Traefik`](https://traefik.io/traefik/) as main cloud proxy with automatic service discovery and SSL configuration
|
||||
* [`Traefik`](https://traefik.io/traefik/) as preferred cloud proxy with automatic service discovery and SSL configuration
|
||||
* [`Portainer`](https://www.portainer.io/) as simple GUI for containers management
|
||||
* [`Loki`](https://grafana.com/oss/loki/), [`Prometheus`](https://prometheus.io) and [`Jaeger`](https://www.jaegertracing.io/) as respective *logging*, *metrics* and *tracing* tools
|
||||
* [`Grafana`](https://grafana.com) as perfect GUI dashboard builder for *Ops*
|
||||
* [`GitLab`](https://about.gitlab.com/) or [`Gitea`](https://gitea.io/) coupled with [`Drone CI`](https://www.drone.io/) as both *self-hosted CI/CD* solutions
|
||||
* [SonarQube](https://www.sonarqube.org/) for automatic quality code scan
|
||||
* [`Grafana`](https://grafana.com) as GUI dashboard builder, designed for *Ops*
|
||||
* [`Gitea`](https://gitea.io/) or [`GitLab`](https://about.gitlab.com/) as self-hosted *VCS*
|
||||
* [`Drone CI`](https://www.drone.io/) or [`Concourse`](https://concourse-ci.org/) as both *CI/CD* solutions
|
||||
* [`SonarQube`](https://www.sonarqube.org/) for automatic quality code scan
|
||||
|
||||
I use managed [`PostgreSQL`](https://www.postgresql.org/), [`MySQL`](https://www.mysql.com/fr/), and `MSSQL` as main **SGBD**, as well as `Redis` for high performance cache/sessions management.
|
||||
I use [`PostgreSQL`](https://www.postgresql.org/), [`MySQL`](https://www.mysql.com/fr/), and `MSSQL` as main *SGBD*, as well as `Redis` for high performance cache/sessions management.
|
||||
|
||||
For *load testing*, I can write scenarios for both [`K6`](https://k6.io/) and [`Locust`](https://locust.io/), coupled with proper time series DB as [`InfluxDB`](https://www.influxdata.com/) and `Grafana` as visualization tool. For advanced application performance analysis, I tend to use [`OpenTelemetry`](https://opentelemetry.io/) as collection tools for proper metrics that can be exposed to `Prometheus`, and tracing, ready to export into `Jaeger`.
|
||||
|
||||
Have some experiences with many mid-range cloud providers as [Digital Ocean](https://www.digitalocean.com/), [Hetzner](https://www.hetzner.com/), [OVH](https://www.ovhcloud.com/), [Scaleway](https://www.scaleway.com/).
|
||||
|
||||
Some notes of this blog :
|
||||
|
||||
* Hosted on Hetzner Cloud
|
||||
* Powered by [`Hugo`](https://gohugo.io/)
|
||||
* Source code on my own [`Gitea`](https://gitea.okami101.io/adr1enbe4udou1n/blog)
|
||||
* Automatically deployed through my own [`Concourse`](https://concourse.okami101.io) instance ([see pipeline](https://concourse.okami101.io/teams/main/pipelines/blog))
|
||||
* Tracked with [`Matomo`](https://matomo.okami101.io/)
|
||||
|
||||
All the above tools are **self-hosted** on custom multi-nodes **bare metal** `Kubernetes` installed with [`k0s`](https://k0sproject.io/).
|
||||
|
||||
See some of [my open sourced works]({{< ref "works" >}} "Okami101 Works").
|
||||
|
@ -7,6 +7,7 @@
|
||||
- name: vue-ts
|
||||
title: Vue 3 TS Realworld
|
||||
repo: adr1enbe4udou1n/vue-ts-realworld-example-app
|
||||
ci: conduit-vue-ts
|
||||
demo: https://vuetsrealworld.okami101.io
|
||||
color: green
|
||||
|
||||
@ -15,35 +16,41 @@
|
||||
- name: aspnet-core
|
||||
title: ASP.NET Core Realworld
|
||||
repo: adr1enbe4udou1n/aspnetcore-realworld-example-app
|
||||
ci: conduit-aspnet-core
|
||||
demo: https://aspnetcorerealworld.okami101.io/api
|
||||
|
||||
- name: spring-boot
|
||||
title: Spring Boot Realworld
|
||||
repo: adr1enbe4udou1n/spring-boot-realworld-example-app
|
||||
ci: conduit-spring-boot
|
||||
demo: https://springbootrealworld.okami101.io/api
|
||||
color: green
|
||||
|
||||
- name: symfony
|
||||
title: Symfony Realworld
|
||||
repo: adr1enbe4udou1n/symfony-realworld-example-app
|
||||
ci: conduit-symfony
|
||||
demo: https://symfonyrealworld.okami101.io/api
|
||||
color: black
|
||||
|
||||
- name: laravel
|
||||
title: Laravel Realworld
|
||||
repo: adr1enbe4udou1n/laravel-realworld-example-app
|
||||
ci: conduit-laravel
|
||||
demo: https://laravelrealworld.okami101.io/api
|
||||
color: orange
|
||||
|
||||
- name: nestjs
|
||||
title: NestJS Realworld
|
||||
repo: adr1enbe4udou1n/nestjs-realworld-example-app
|
||||
ci: conduit-nestjs
|
||||
demo: https://nestjsrealworld.okami101.io/api
|
||||
color: red
|
||||
|
||||
- name: fastapi
|
||||
title: FastAPI Realworld
|
||||
repo: adr1enbe4udou1n/fastapi-realworld-example-app
|
||||
ci: conduit-fastapi
|
||||
demo: https://fastapirealworld.okami101.io/api
|
||||
color: teal
|
||||
|
||||
|
@ -20,6 +20,8 @@
|
||||
{{ end }}
|
||||
<div class="flex justify-between items-center">
|
||||
<div class="flex items-center gap-4">
|
||||
<img src="/kube.png" width="30" height="30" alt="Kubernetes" title="Run on bare metal Kubernetes on Hetzner Cloud" />
|
||||
|
||||
{{/* Copyright */}}
|
||||
<p class="hidden sm:block text-sm text-neutral-500 dark:text-neutral-400">
|
||||
{{- with .Site.Params.copyright }}
|
||||
@ -32,7 +34,7 @@
|
||||
</p>
|
||||
|
||||
<a href="https://yesterweb.org/no-to-web3/">
|
||||
<img src="https://auzziejay.com/images/noweb32.gif" />
|
||||
<img src="https://auzziejay.com/images/noweb32.gif" alt="No to Web3" />
|
||||
</a>
|
||||
</div>
|
||||
{{/* Appearance switch */}}
|
||||
|
@ -31,7 +31,7 @@
|
||||
"red" "border-red-500" "teal" "border-teal-500" "primary" "border-purple-500" }}
|
||||
<div class="flex flex-col gap-4 rounded border-2 p-4 {{ (index $borders (or .color "primary")) }}">
|
||||
<div class="text-center">
|
||||
<a href="https://github.com/{{ .repo }}" target="_blank">
|
||||
<a href="{{ .demo }}" target="_blank">
|
||||
<h4 class="pb-1 font-bold border-b-2 border-purple-500 inline-block">
|
||||
{{ .title }}
|
||||
</h4>
|
||||
@ -48,6 +48,10 @@
|
||||
<div class="flex justify-center gap-4">
|
||||
{{ partial "button.html" (dict "text" (partial "icon.html" "github") "href" (print
|
||||
"https://github.com/" .repo) "color" .color) }}
|
||||
{{ if .ci }}
|
||||
{{ partial "button.html" (dict "text" (partial "icon.html" "bug") "href" (print
|
||||
"https://concourse.okami101.io/teams/main/pipelines/" .ci) "color" .color) }}
|
||||
{{ end }}
|
||||
{{ if .demo }}
|
||||
{{ partial "button.html" (dict "text" "Demo" "href" .demo "color" .color) }}
|
||||
{{ end }}
|
||||
|
BIN
static/kube.png
Normal file
BIN
static/kube.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 15 KiB |
Reference in New Issue
Block a user