Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
53 changes: 48 additions & 5 deletions .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,16 +5,59 @@ on:
branches:
- main
paths:
- docs/**
- hexaforge/**
- cloud-pi-native/**
workflow_dispatch:

jobs:
path-filter:
runs-on: ubuntu-latest
outputs:
hexaforge: ${{ steps.filter.outputs.hexaforge }}
cpin: ${{ steps.filter.outputs.cpin }}
steps:
- name: Check updated files paths
uses: dorny/paths-filter@v3
id: filter
with:
filters: |
hexaforge:
- 'hexaforge/**'
cpin:
- 'cloud-pi-native/**'

infos:
name: Get infos
runs-on: ubuntu-latest
needs:
- path-filter
outputs:
matrix: ${{ steps.infos.outputs.MATRIX }}
steps:
- name: Checks-out repository
id: infos
run: |
MATRIX="[]"
HEXAFORGE='[{"name": "hexaforge"}]'
if [ "${{ needs.path-filter.outputs.hexaforge }}" = 'true' ]; then
MATRIX="$( jq -n -c --argjson acc "$MATRIX" '$acc + [{ "name": "hexaforge", "context": ".", "dockerfile": "Dockerfile.hexaforge" }] )"
else if [ "${{ needs.path-filter.outputs.cpin }}" = 'true' ]; then
MATRIX="$( jq -n -c --argjson acc "$MATRIX" '$acc + [{ "name": "cpin", "context": ".", "dockerfile": "Dockerfile.cpin" }] )"
fi
echo "MATRIX=$MATRIX" >> $GITHUB_OUTPUT

build:
name: Build application
runs-on: ubuntu-latest
needs:
- path-filter
- infos
permissions:
contents: read
packages: write
strategy:
matrix:
images: ${{ fromJSON(needs.infos.outputs.matrix) }}
steps:
- name: Checks-out repository
uses: actions/checkout@v4
Expand All @@ -36,9 +79,9 @@ jobs:
- name: Build docker image
uses: docker/build-push-action@v5
with:
context: .
file: Dockerfile
tags: ghcr.io/${{ github.repository }}:latest
context: ${{ matrix.images.context }}
file: ${{ matrix.images.dockerfile }}
tags: ghcr.io/${{ github.repository }}-${{ matrix.images.name }}:latest
target: prod
platforms: linux/amd64,linux/arm64
push: true
Expand All @@ -48,4 +91,4 @@ jobs:
curl -X POST https://gitops.fabrique-numerique.fr/api/v1/applications/cloud-pi-native-docs/sync \
-H "Content-Type: application/json" \
-H "Authorization: Bearer ${{ secrets.ARGOCD_TOKEN }}" \
-d '${{ vars.ARGOCD_SYNC_PAYLOAD }}'
-d '${{ vars.ARGOCD_SYNC_PAYLOAD }}'
25 changes: 25 additions & 0 deletions Dockerfile.cpin
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
# Base stage
FROM docker.io/node:20.14.0-bullseye-slim AS dev

WORKDIR /app
RUN npm install --location=global pnpm
COPY --chown=node:root package.json pnpm-lock.yaml ./
RUN pnpm install
COPY --chown=node:root cloud-pi-native ./cloud-pi-native
ENTRYPOINT [ "pnpm", "run", "dev:cpin" ]


# Build stage
FROM dev AS build

RUN pnpm run build:cpin


# Prod stage
FROM docker.io/bitnami/nginx:1.26.1 AS prod

USER 0
COPY --chown=1001:0 --chmod=770 --from=build /app/cloud-pi-native/.vitepress/dist /opt/bitnami/nginx/html/
COPY --chown=1001:0 --chmod=660 ./nginx.conf /opt/bitnami/nginx/conf/server_blocks/default.conf
USER 1001
EXPOSE 8080
8 changes: 4 additions & 4 deletions Dockerfile → Dockerfile.hexaforge
Original file line number Diff line number Diff line change
Expand Up @@ -5,21 +5,21 @@ WORKDIR /app
RUN npm install --location=global pnpm
COPY --chown=node:root package.json pnpm-lock.yaml ./
RUN pnpm install
COPY --chown=node:root docs ./docs
ENTRYPOINT [ "pnpm", "run", "dev" ]
COPY --chown=node:root hexaforge ./hexaforge
ENTRYPOINT [ "pnpm", "run", "dev:hexaforge" ]


# Build stage
FROM dev AS build

RUN pnpm run build
RUN pnpm run build:hexaforge


# Prod stage
FROM docker.io/bitnami/nginx:1.26.1 AS prod

USER 0
COPY --chown=1001:0 --chmod=770 --from=build /app/docs/.vitepress/dist /opt/bitnami/nginx/html/
COPY --chown=1001:0 --chmod=770 --from=build /app/hexaforge/.vitepress/dist /opt/bitnami/nginx/html/
COPY --chown=1001:0 --chmod=660 ./nginx.conf /opt/bitnami/nginx/conf/server_blocks/default.conf
USER 1001
EXPOSE 8080
184 changes: 40 additions & 144 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,160 +1,56 @@
# Cloud π Native

:warning: __*La plateforme est en cours de construction et des évolutions fréquentes sont à prévoir.*__ :warning:
# Documentation Cloud π Native / Hexaforge

Ce dépôt est construit et déployé à l'adresse : <https://cloud-pi-native.fr>

## L'offre

### Présentation

Avec l’adoption de la doctrine « Cloud au centre », le Gouvernement Français fait du Cloud un prérequis pour tout nouveau projet numérique au sein de l’État ou refonte substantielle de l’architecture applicative existante.

**Objectif** : accélérer la transformation numérique au bénéfice des usagers et dans le strict respect de la cybersécurité et de la protection des données des citoyens et des entreprises.

L'offre interministérielle Cloud π Native, offre les services d'une plateforme DevSecOps complète afin de suivre le cycle de vie complet de son projet.

La philosophie de l'offre est de créer une chaine collaborative étendue entre l'équipe de développement et l'hébergement, qui s'appuient sur :
- un socle d'intégration à la main des développeurs, appellée chaine primaire.
- un service côté infrastructure étatique effectuant la recompilation du code et l'automatisation des déploiement, appellée chaine secondaire.

La chaine secondaire est également en charge de mesurer la qualité du code et la conduite d'audits automatisés à chaque build/déploiement contribuant à l'homologation en continu de l'application.

L'usage de standards industriels largement distribués tel que kubernetes et Gitops et la sécabilité de l'offre, permettent un transfert facilité depuis et vers d'autres solutions d'hébergement kubernetes telles que les Clouds Publics.

Le cadre interministériel d'utilisaton de l'offre est disponible à l'emplacement suivant : <https://github.com/cloud-pi-native/cct-cloud-native>

Lorsque que l'équipe projet est prête avec un première base de code fonctionnelle, il est possible de l'intégrer sur l'offre Cloud π Native.

La séquence d'accès typique est la suivante :

- Effectuer une demande d'accès au service via le formulaire suivant : <https://www.demarches-simplifiees.fr/commencer/cloud-pi-native> par un correspondant étatique ayant la compétence pour accepter les conditions CGU et fournir les données d'imputation budgétaire (UO).
- Après acceptation du dossier, l'enrollement du projet est effectuté dans la console Cloud pi Native, et l'équipe projet est en charge d'instancier les ressources nécessaires (gitlab, vault, registry, etc...) dans la chaine secondaire et de configurer son projet ;
- Recopie des repository de code et de déploiement;
- Mise en place du pipeline "DevSecOps" au sein de la chaine secondaire. L'application reste maître de son pipeline et de sa surveillance;
- Mise en place du/des namespaces dans le cluster cible ainsi des secrets nécessaires au fonctionnement et du provisionning gitops de l'application (argoCD);
- Provisionning des ressources d'infrastructure additionnelles ( certificats, ouverture de fluxs, bucket S3, etc...). Cette étape nécessite l'intervention des équipes d'infrastructure Miom ( ou de l'hébergeur choisis) & du ministère cible. (automatisation progressive en cours)
- Construction des artefacts sur l'offre Cloud π Native;
- Analyse de qualité et de la sécurité;
- Construction des images de conteneurs;
- Provisionning de l'application dans le cluster (l'application est tirée via GitOps).

Enfin, le déploiement s'effectue sur différentes cibles d'hébergement possibles :

- Un socle kubernetes/Openshift jusqu'au niveau DR sur les environnements du ministère;
- Un cluster kubernetes directement gérés par l'équipe client par exemple chez un Cloud Service Provider.

**Vision d'ensemble de l'offre :**

![vision](docs/public/img/global-vision.png)

### Les services proposés

L'offre Cloud π Native, portée par le Ministère de l'Intérieur et des Outre-Mer est une offre PaaS basée sur [Cloud π](https://www.numerique.gouv.fr/services/cloud/cloud-interne/) sur les infrastructures du ministère de l'intérieur offrant des fonctionnalités DevSecOps à savoir :

- [Gestionnaire de sources](docs/services/gitlab.md) applicatives
- Outil de gestion de la [qualité](docs/services/sonarqube.md) statique du code (SAST) et dynamique (DAST)
- Orchestrateur de [construction](docs/services/gitlab.md) d'artefacts (Intégration continue)
- [Entrepot d'artefacts](docs/services/artefacts.md) et d'images Docker
- Gestionnaire de [secrets](docs/services/vault.md) des chaines IC/DC
- Gestion des [secrets applicatifs](docs/guide/secrets-management.md)
- Outil de [déploiement automatisé](docs/services/gitops.md) des images Docker sur les infrastructures du ministère ou à l'extérieur du ministère en suivant les principes GitOps (Déploiement continue)
- Hébergement des [environnements](docs/guide/environments-management.md) applicatifs de l'intégration à la production
- Gestion des [équipes](docs/guide/team.md)
- Mise à disposition d'outil d'[observabilité et exploitabilité](docs/agreement/exploitation.md) des applications déployées sur l'offre : accès aux logs, métriques techniques et applicatives, procédures standard d'exploitation

L'architecture générale de l'offre Cloud π Native est la suivante :

![](docs/public/img/architecture.png)

### SLA associés à l'offre Chaine DevSecOps secondaire

L'offre Cloud π Native s'appuie sur l'hébergement Cloud du ministère. Les grands services ayant des contraintes de SLA différentes :

- Le Cloud pour assurer le fonctionnement et la sécurisation de l'offre DevSecOps secondaire ( et le fonctionnement en production des application )
- Outils de construction applicative (Intégration continue) permettant de construire un package applicatif à partir des sources
- Outils de déploiement (Déploiement continue) permettant de déployer / mettre à jour une application sur les différents environnements de l'offre
- Les applications qui sont déployées sur l'offre. Chacune de ces applications peut également avoir un niveau de criticité différent (par exemple l'environnement de production a un besoin de SLA plus fort que l'environnement de recette)

| Service | DIMA* | PDMA** |
| ------------ | -------- | ------------------------------- |
| Construction | 8 heures | 24h (backup nocturne quotidien) |
| Déploiement | 8 heures | 24h (backup nocturne quotidien) |

*DIMA : Durée d'interruption maximale autorisée (en heures ouvrés)
**PDMA : Perte de données maximale admissible (en heures ouvrés)

Note : le SLA du cloud PI pour le fonctionnement en production des applications est de 99,9%, pour plus de détail, se référer aux CGU de l'offre d'hébergement Cloud PI.

## Accompagnement (WIP)

Un volet [accompagnement](docs/agreement/support.md) intial des projets directement par les équipes de l'offre Cloud π Native permet d'utiliser l'offre dans des conditions optimales. Cet accompagnement fait partie du parcours technique d'embarquement sur l'offre Cloud π Native.

Elle s'articule dans une offre à 3 niveaux :
- Démarche autonome ( kit d'autoformation, tutoriels, etc... )
- Démarche d'accompagnement à l'initialisation ( "Service Team" )
- Formation et certification d'acteurs externes ( offre en cours d'élaboration )

Les ressources d'accompagnement étant limitées, l'embarquement est conditionné à des prérequis techniques et ou organisationnels [prérequis](docs/platform/compatibility.md) pour embarquer sur l'offre Cloud π Native de façon sereine et optimale.
## Contribuer

Typiquement l'équipe doit être dans un parcours de montée en compétence à l'agilité et à la conteneurisation/kubernetes.
L'offre Cloud π Native s'améliore grâce aux retours de nos utilisateurs, n'hésitez pas à contribuer, notamment en nous faisant des retours sur la documentation. Le détail pour contribuer est [ici](CONTRIBUTING.md)

## Embarquement technique
__Pour formater le code, veuillez à lancer la commande `pnpm run format` avant votre commit.__

Un parcours technique d'apprentissage permettant de valider les prérequis et d'intégrer les bonnes pratiques permet à nos clients d'appréhender l'offre Cloud π Native.
### Documentation de l'offre de service Cloud π Native

![parcours_apprentissage](docs/public/img/learning-process.png)
Le dépôt est construit avec [vitepress](https://vitepress.dev) à l'aide de fichiers markdown positionnés dans les dossiers [cloud-pi-native](./cloud-pi-native/), les assets (images, fichiers additionnels, etc...) sont positionnés dans le dossier [public](./cloud-pi-native/public/).

- Etape 1 : [Matrice de compétences](docs/platform/skills-matrix.md) des technologies à connaitre pour utiliser l'offre Cloud π Native
- Etape 2 : Vérification de l'éligibilité de son application avec le modèle Cloud Native Application [prérequis](docs/platform/compatibility.md) technique liés à l'offre. Les équipes Cloud π Native [accompagnent](docs/agreement/support.md) les équipes projets sur cette étape afin d'apporter conseils et qualification des architectures et maturité technique des équipes.
- Etape 3 : Prise de connaissance des [bonnes pratiques](docs/guilde/best-practices.md) et expérimentation avec une série de tutoriels [tutoriels](docs/guide/tutorials.md) afin de faire ses premiers pas avec l'offre
- Etape 4 : [Embarquement](docs/guide/get-started.md) de l'application sur l'offre
- Etape 5 : Félicitation ! Vous êtes maintenant un utilisateur de la plateforme Cloud π Native et votre application peut passer en production via les principes d'[exploitation et observabilité](docs/agreement/exploitation.md) de vos projets.
Structure de la documentation :

A tout moment, vous pouvez consulter la [documentation détaillée](docs/platform/introduction.md) de la plateforme Cloud π Native, son architecture et les services proposés
```sh
./cloud-pi-native
├── acceleration/
├── guide/
├── agreement/
├── best-practices/
├── certification/
├── faq/
├── public
│ ├── examples/
│ ├── img/
│ ├── favicon.ico
│ └── logo-marianne-gouvernement.png
├── contribute.md
└── index.md
```

Enfin notre [FAQ](docs/agreement/faq.md) permet de lister les questions fréquentes de nos clients, et des exemples pour réaliser des bouchons (S3, SMTP, ...)
### Documentation de la plateforme Hexaforge

## Notre roadmap (WIP)
Le dépôt est construit avec [vitepress](https://vitepress.dev) à l'aide de fichiers markdown positionnés dans le dossiers [hexaforge](./hexaforge/), les assets (images, fichiers additionnels, etc...) sont positionnés dans le dossier [public](./hexaforge/public/).

L'offre Cloud π Native est en cours de construction incrémentale. Notre [feuille de route détaillée](docs/platform/roadmap.md) est accessible permettant de donner de la visibilité sur les prochaines fonctionnalités.
Structure de la documentation :

Voici les grandes fonctionnalités prévus dans les prochaines semaines :
- Réduction de la quantité de code / manifest à produire;
- Automatisation des services d'infrastructure;
- et surtout, prise en compte des retours des primo-accédants.
```sh
./hexaforge
├── administration/
├── guide/
├── installation/
├── platform/
├── public
│ ├── examples/
│ └── img/
├── services/
├── contribute.md
└── index.md
```

## Contact

Pour toute information ou demande pour rejoindre la betatest, veuillez nous contacter à l'adresse suivante : <cloudpinative-relations@interieur.gouv.fr>.

Si vous souhaitez devenir primo accédant, beta testeurs ou avez des questions, veuillez nous contacter directement via le serveur Mattermost prévu à cet effet (si vous n'avez pas été ajouté au serveur Mattermost, veuillez contacter l'adresse mail précédente).

## Contribuer

L'offre Cloud π Native s'améliore grâce aux retours de nos utilisateurs, n'hésitez pas à contribuer, notamment en nous faisant des retours sur la documentation. Le détail pour contribuer est [ici](CONTRIBUTING.md)

### Contribuer à la documentation

Le dépôt est construit avec [vitepress](https://vitepress.dev) à l'aide de fichiers markdown positionné dans le dossier [docs](./docs/).
Les assets (images, fichiers additionnels, etc...) sont positionnés dans le dossier [public](./docs/public/).

__Pour formater le code, veuillez à lancer la commande `pnpm run format` avant votre commit.__

Structure du dépôt :

```sh
./docs
├── contribution/
├── guide/
├── installation/
├── platform/
├── public
│ ├── examples/
│ ├── img/
│ ├── favicon.ico
│ └── logo-marianne-gouvernement.png
├── agreement/
├── services/
└── index.md
```
Pour toute information, veuillez nous contacter à l'adresse suivante : <cloudpinative-relations@interieur.gouv.fr>.
40 changes: 40 additions & 0 deletions cloud-pi-native/.vitepress/config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
import { defineConfig } from 'vitepress'
import sidebar from './sidebar.json' assert { type: 'json'}

export default defineConfig({
base: '/',
lang: 'fr-FR',
title: 'Cloud π Native',
description: 'Documentation de la plateforme Cloud Pi Native',
cleanUrls: true,
themeConfig: {
logo: '/logo-marianne-gouvernement.png',
outline: [2, 3],
sidebar,
socialLinks: [
{ icon: 'github', link: 'https://github.com/cloud-pi-native/documentation' }
],
search: {
provider: 'local',
options: {
translations: {
button: {
buttonText: 'Rechercher...',
buttonAriaLabel: 'Rechercher'
},
modal: {
backButtonTitle: 'effacer la recherche',
displayDetails: 'afficher les détails',
noResultsText: 'Aucun résultat pour ',
resetButtonTitle: 'annuler la recherche',
footer: {
selectText: 'aller à ce texte',
navigateText: 'naviguer dans les résultats',
closeText: 'fermer'
}
}
},
}
},
},
})
Loading