diff --git a/content/_data/works/realworld.md b/content/_data/works/realworld.md index f4f7e75..2ef4863 100644 --- a/content/_data/works/realworld.md +++ b/content/_data/works/realworld.md @@ -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/) diff --git a/content/_index.md b/content/_index.md index 1fd434c..7945470 100644 --- a/content/_index.md +++ b/content/_index.md @@ -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"). diff --git a/data/works.yaml b/data/works.yaml index 5d12b8d..720953c 100644 --- a/data/works.yaml +++ b/data/works.yaml @@ -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 diff --git a/layouts/partials/footer.html b/layouts/partials/footer.html index f4f3b18..ee2d706 100644 --- a/layouts/partials/footer.html +++ b/layouts/partials/footer.html @@ -20,6 +20,8 @@ {{ end }}
+ Kubernetes + {{/* Copyright */}} - + No to Web3
{{/* Appearance switch */}} diff --git a/layouts/works/single.html b/layouts/works/single.html index f2b20d8..049bba9 100644 --- a/layouts/works/single.html +++ b/layouts/works/single.html @@ -31,7 +31,7 @@ "red" "border-red-500" "teal" "border-teal-500" "primary" "border-purple-500" }}