Modification du init.db afin qu'il corresponde à la base en l'état actuel en préproduction. Update du docker-compose pour faciliter la gestion du back. Suppression des fichiers yaml liés au Kubernetes, étant outdated et n'étant plus d'aucune utilité.pull/1/head
parent
c70d4c8e94
commit
938d05628a
@ -1,3 +1,172 @@ |
||||
# Collaborateur_Epa_Compose_Doc |
||||
# Application Collaborateur-EPA |
||||
|
||||
Regroupe la documentation ainsi que les fichiers communs du projet collaborateur-EPA, notamment le docker-compose. |
||||
**Ce git contient la documentation de l'application Collaborateur-EPA de l'agence Tours-Orléans-Poitiers d'Apside. Il |
||||
contient également le docker-compose permettant de rapidement build le front et le back, ainsi que le script permettant |
||||
d'initialiser la base de données.** |
||||
|
||||
## Mise en préproduction |
||||
|
||||
Cette documentation contient les informations nécessaires pour déployer le front et le back de l'application |
||||
Collaborateur-EPA. |
||||
|
||||
Assurez-vous d'avoir bien cloné les 3 repositories du Git à la racine d'un dossier commun.Vous devez donc avoir un |
||||
dossier racine contenant ces dossiers : |
||||
|
||||
- Collaborateur_Epa_Compose_Doc |
||||
- Collaborateur-Epa-Back |
||||
- Collaborateur-Epa-Front |
||||
|
||||
:warning: **Il est très important de respecter le nommage ci-dessus, car docker-compose va naviguer entre vos fichiers |
||||
afin de build l'application. Si vos dossiers ne respectent pas ce nommage, docker-compose ne pourra pas build les image |
||||
sans être modifié** :warning: |
||||
|
||||
Avant de commencer le déploiement, nous allons vérifiez que les routes utilisées dans l'application front sont bien |
||||
celles de la préproduction, et que le back utilise bien la base de données de la préproduction. |
||||
|
||||
Ensuite, nous verrons comment accéder à la base données. Enfin, vous verrez la procédure pour build, push et déployer |
||||
votre nouvelle version sur la préproduction d'Apside. |
||||
|
||||
## Vérification des configurations |
||||
|
||||
Il y a plusieurs façons de savoir si le front et bien lié au back de la préproduction : |
||||
|
||||
- si les données que vous récupérez sont identiques à la préproduction, |
||||
- si les routes dans les services de l'application sont bien celles de la préproduction, |
||||
- l'application doit pouvoir démarrer sans avoir un back local en route. |
||||
|
||||
Il est possible de voir si le back est lié à la BDD de préproduction en vérifiant le fichier appsettings.json. Dans ce |
||||
fichier, il y aura 2 lignes "ConnectionString", dont 1 commentée. A la fin de chaque ligne, vous verrez un commentaire |
||||
indiquant à quoi correspond celle-ci. Pour build en préproduction, dé-commentez la ligne de la préproduction et |
||||
commentez celle du déploiement local. |
||||
|
||||
Les images des applications front et back sont maintenant prêtes à être build. |
||||
|
||||
## Changements dans la base de données (optionnel) |
||||
|
||||
Avant de déployer une nouvelle version, il faut effectuer les changements **si nécessaire** dans la base de données de |
||||
la préproduction. L'accès à la base de données se fait sur Rancher, dans le cluster "Collaborateur-EPA", dans le |
||||
conteneur "database" du namespace "dev-collaborateur-epa" à l'aide de l'option "Execute Shell". Ensuite, la connection à |
||||
MySQL se fait avec : |
||||
|
||||
``` |
||||
mysql -uroot -proot collaborateur_epa |
||||
``` |
||||
|
||||
"collaborateur_epa" étant la base de données utilisée, il n'est pas obligatoire de l'ajouter à la commande, vous pouvez |
||||
choisir cette base dans un second temps. |
||||
|
||||
Il ne vous reste plus qu'à faire les modifications souhaitées afin que cette base corresponde à la nouvelle version. |
||||
|
||||
Passons maintenant au build des images front et back |
||||
|
||||
## Build les images |
||||
|
||||
Vous l'avez compris, nous utiliserons docker et surtout docker-compose dans la phase de build. Ceci est très fortement |
||||
recommandé, car divers problèmes auront lieu si vous tentez de build les images sans docker-compose, notamment pour |
||||
l'image du back. |
||||
|
||||
À partir d'un terminal, rendez-vous dans le dossier "Collaborateur_Epa_Compose_Doc". Lancez ensuite la commande : |
||||
|
||||
```docker-compose up --build``` |
||||
|
||||
Les images vont se build et vont se lancer selon la configuration du docker-compose. Vous pouvez bien entendu tester les |
||||
applications lancées individuellement, mais elles sont normalement configurées pour fonctionner avec la préproduction. |
||||
|
||||
Maintenant, couper les conteneurs (ctrl+c dans le terminal), une fois fait, entrez la commande : |
||||
|
||||
```docker-compose down``` |
||||
|
||||
Ceci détruira les conteneurs afin de vous éviter une surconsommation de ressource inutile, puisque nous nous intéressons |
||||
ici aux images, pas aux conteneurs. |
||||
|
||||
Nous allons voir comment push vos images sur le registry d'Apside, Harbor. |
||||
|
||||
## Push les images |
||||
|
||||
### Authentification sur Harbor |
||||
|
||||
:warning: Votre compte devra être autorisé sur le projet "collaborateur-epa" avant de pouvoir vous y connecter. |
||||
Renseignez-vous auprès de la DSI et des responsables du projet pour obtenir les accès.:warning: |
||||
|
||||
Afin de vous authentifier à Harbor, entrez la commande suivante : |
||||
|
||||
``` |
||||
docker login harbor.apsdigit.lan |
||||
``` |
||||
|
||||
Vous devrez ensuite entrer vos identifiants apsdigit (première lettre du prénom suivi du nom de famille en général), |
||||
puis votre mot de passe apsdigit correspondant. Pour rappel, il s'agit généralement du même mot de passe que celui de |
||||
votre poste. |
||||
|
||||
### Publication sur Harbor |
||||
|
||||
[Lien vers Harbor](https://harbor.apsdigit.lan/harbor/projects) |
||||
|
||||
Une fois authentifié, vous pouvez uploadez vos images sur Harbor en entrant la commande suivante : |
||||
|
||||
*Image Front* |
||||
|
||||
``` |
||||
docker push harbor.apsdigit.lan/collaborateur-epa/preprod/front:beta |
||||
``` |
||||
|
||||
*Image Back* |
||||
|
||||
``` |
||||
docker push harbor.apsdigit.lan/collaborateur-epa/preprod/api:beta |
||||
``` |
||||
|
||||
Si vous souhaitez changer le tag des images (ici "beta"), assurez-vous de le faire dans le docker-compose, et de le |
||||
faire également lors du push des images, vous aurez sinon des erreurs. |
||||
|
||||
Si une erreur d'authentification vous est retournée, assurez-vous que vos credentials ne soient pas expirés en |
||||
réeffectuant l'étape d'authentification expliquée plus tôt. |
||||
|
||||
Maintenant que les images sont sur Harbor, nous devons indiquer au namespace Kubernetes d'utiliser cette image. |
||||
|
||||
:warning: Sur Harbor il est possible de vérifier les vulnérabilités de chaque image du repository. Il est fortement |
||||
recommandé de ne déployer sur Kubernetes que des versions dont les vulnérabilités ont été reparées au maximum possible. |
||||
Il s'agit souvent de mises à jour de dépendances des packages utilisés par les applications.:warning: |
||||
|
||||
## Déploiement Kurbernetes sur Rancher |
||||
|
||||
[Lien vers le cluster Kubernetes sur Rancher](https://rancher.apsdigit.lan/p/c-cxs28:p-f7tpc/workloads) |
||||
[Lien vers la préproduction](https://collaborateur-epa.apsdigit.lan/) |
||||
|
||||
Il y a deux cas à différencier sur Kubernetes lorsque l'on veut déployer une nouvelle version de l'application. |
||||
|
||||
Placez-vous dans Rancher dans le cluster Collaborateur-EPA pour suivre la procédure suivante. |
||||
|
||||
### Cas 1 : Tags identiques |
||||
|
||||
Si les tags de vos images sont identiques, alors la manipulation est si simple qu'on a pas besoin d'utiliser notre |
||||
cerveau, la moelle épinière suffit ! |
||||
|
||||
- Cliquez sur les 3 petits points verticaux sur la ligne de l'application que vous voulez mettre à jour, |
||||
- Cliquez sur "Redeploy", |
||||
- C'est terminé, attendez quelques minutes, puis rafraichissez le site dans votre navigateur pour vérifier que tout |
||||
s'est bien passé. |
||||
|
||||
### Cas 2 : Tags différents |
||||
|
||||
Si les tags de vos images sont différents, alors la manipulation est à peine plus complexe : |
||||
|
||||
- Cliquez sur les 3 petits points verticaux sur la ligne de l'application que vous voulez mettre à jour, |
||||
- Cliquez sur "Edit", |
||||
- Dans le champs de texte sous "Docker Image" modifiez le tag pour qu'il corresponde à celui de votre image, |
||||
- En bas de la page cliquez sur le bouton "Save", |
||||
- C'est terminé, attendez quelques minutes, puis rafraichissez le site dans votre navigateur pour vérifier que tout |
||||
s'est bien passé. |
||||
|
||||
Pour rappel, le tag d'une image docker est la partie **après** les ":" . |
||||
Il n'est pas recommandé de modifier le nom complet de l'image, puisque tout est déjà configuré pour fonctionner tel |
||||
quel. Le tag peut être modifié pour indiquer différentes versions, et peut s'avérer utile en cas d'audit ou de |
||||
déploiement versionné. |
||||
|
||||
A l'instant où votre manipulation est terminée, vous devriez voir deux pods sur le conteneur que vous avez mis à jour, |
||||
un en cours de fermeture (removing) et un en déploiement. Kubernetes gère automatiquement les redéploiements afin que le |
||||
service ne soit pas ou peu interrompu. Par exemple, si le front n'arrive pas à compiler sur votre nouvelle version, le |
||||
conteneur gardera l'ancienne version et vous pourrez accéder aux logs du pod n'ayant pas réussi à se lancer afin |
||||
d'identifier le problème. |
||||
|
||||
En cas de problème avec Rancher ou Harbor, vous pouvez contacter la DSI d'Apside afin d'obtenir de l'aide. |
||||
|
@ -1,55 +0,0 @@ |
||||
apiVersion: apps/v1 |
||||
kind: Deployment |
||||
metadata: |
||||
name: api |
||||
spec: |
||||
replicas: 1 |
||||
revisionHistoryLimit: 3 |
||||
selector: |
||||
matchLabels: |
||||
app: api |
||||
template: |
||||
metadata: |
||||
labels: |
||||
app: api |
||||
spec: |
||||
containers: |
||||
- name: api |
||||
image: espacecollabbackendapi |
||||
imagePullPolicy: Always |
||||
tty: true |
||||
resources: |
||||
limits: |
||||
memory: "512Mi" |
||||
cpu: "500m" |
||||
ports: |
||||
- containerPort: 80 |
||||
- containerPort: 443 |
||||
env: |
||||
- name: DATABASE_HOSTNAME |
||||
valueFrom: |
||||
configMapKeyRef: |
||||
name: db-config |
||||
key: hostname |
||||
- name: DATABASE_PORT |
||||
valueFrom: |
||||
configMapKeyRef: |
||||
name: db-config |
||||
key: port |
||||
- name: DATABASE_NAME |
||||
valueFrom: |
||||
configMapKeyRef: |
||||
name: db-config |
||||
key: name |
||||
- name: DATABASE_USERNAME |
||||
valueFrom: |
||||
secretKeyRef: |
||||
name: db-secret |
||||
key: username |
||||
- name: DATABASE_PASSWORD |
||||
valueFrom: |
||||
secretKeyRef: |
||||
name: db-secret |
||||
key: password |
||||
|
||||
|
@ -1,13 +0,0 @@ |
||||
apiVersion: traefik.containo.us/v1alpha1 |
||||
kind: IngressRoute |
||||
metadata: |
||||
name: api-http |
||||
spec: |
||||
entryPoints: |
||||
- web |
||||
routes: |
||||
- match: Host(`localhost`) && PathPrefix(`/api`) |
||||
kind: Rule |
||||
services: |
||||
- name: back |
||||
port: 80 |
@ -1,16 +0,0 @@ |
||||
apiVersion: v1 |
||||
kind: Service |
||||
metadata: |
||||
name: api |
||||
spec: |
||||
ports: |
||||
- name: api1 |
||||
port: 5000 |
||||
targetPort: 80 |
||||
- name: api2 |
||||
port: 5001 |
||||
targetPort: 443 |
||||
selector: |
||||
app: api |
||||
status: |
||||
loadBalancer: {} |
@ -1,8 +0,0 @@ |
||||
apiVersion: v1 |
||||
kind: ConfigMap |
||||
metadata: |
||||
name: database-config |
||||
data: |
||||
hostname: db |
||||
port: "3306" |
||||
name: collaborateur_epa |
@ -1,56 +0,0 @@ |
||||
apiVersion: apps/v1 |
||||
kind: Deployment |
||||
metadata: |
||||
name: db |
||||
spec: |
||||
replicas: 1 |
||||
revisionHistoryLimit: 3 |
||||
selector: |
||||
matchLabels: |
||||
app: db |
||||
template: |
||||
metadata: |
||||
labels: |
||||
app: db |
||||
spec: |
||||
volumes: |
||||
- name: db |
||||
persistentVolumeClaim: |
||||
claimName: mysql-pv-claim |
||||
containers: |
||||
- name: db |
||||
image: mariadb:10.7.1 |
||||
imagePullPolicy: Always |
||||
tty: true |
||||
resources: |
||||
limits: |
||||
memory: "512Mi" |
||||
cpu: "500m" |
||||
ports: |
||||
- name: mariadb |
||||
containerPort: 3306 |
||||
volumeMounts: |
||||
- name: db |
||||
mountPath: /var/lib/mysql |
||||
|
||||
env: |
||||
- name: MYSQL_ROOT_PASSWORD |
||||
valueFrom: |
||||
secretKeyRef: |
||||
name: database-secret |
||||
key: root-password |
||||
- name: MYSQL_DATABASE |
||||
valueFrom: |
||||
configMapKeyRef: |
||||
name: db-config |
||||
key: name |
||||
- name: MYSQL_USER |
||||
valueFrom: |
||||
secretKeyRef: |
||||
name: db-secret |
||||
key: username |
||||
- name: MYSQL_PASSWORD |
||||
valueFrom: |
||||
secretKeyRef: |
||||
name: db-secret |
||||
key: password |
@ -1,9 +0,0 @@ |
||||
apiVersion: v1 |
||||
kind: Secret |
||||
metadata: |
||||
name: database-secret |
||||
type: Opaque |
||||
stringData: |
||||
username: epa-dev |
||||
password: dev-epa |
||||
root-password: root |
@ -1,14 +0,0 @@ |
||||
apiVersion: v1 |
||||
kind: Service |
||||
metadata: |
||||
labels: |
||||
app: db |
||||
name: db |
||||
spec: |
||||
ports: |
||||
- name: mariadb |
||||
port: 3307 |
||||
targetPort: 3306 |
||||
selector: |
||||
app: db |
||||
type: ClusterIP |
@ -1,12 +0,0 @@ |
||||
apiVersion: v1 |
||||
kind: PersistentVolumeClaim |
||||
metadata: |
||||
name: mysql-pv-claim |
||||
labels: |
||||
app: db |
||||
spec: |
||||
accessModes: |
||||
- ReadWriteOnce |
||||
resources: |
||||
requests: |
||||
storage: 1Gi |
@ -1,32 +0,0 @@ |
||||
apiVersion: apps/v1 |
||||
kind: Deployment |
||||
metadata: |
||||
name: front |
||||
spec: |
||||
replicas: 1 |
||||
revisionHistoryLimit: 3 |
||||
selector: |
||||
matchLabels: |
||||
app: front |
||||
template: |
||||
metadata: |
||||
labels: |
||||
app: front |
||||
spec: |
||||
containers: |
||||
- image: collab-front |
||||
name: front |
||||
imagePullPolicy: Always |
||||
tty: true |
||||
resources: |
||||
limits: |
||||
memory: "256Mi" |
||||
cpu: "500m" |
||||
ports: |
||||
- name: web |
||||
containerPort: 80 |
||||
env: |
||||
- name: BASE_URL |
||||
value: http://localhost/api/ |
||||
- name: LOGOUT_URL |
||||
value: http://localhost |
@ -1,13 +0,0 @@ |
||||
apiVersion: traefik.containo.us/v1alpha1 |
||||
kind: IngressRoute |
||||
metadata: |
||||
name: front-http |
||||
spec: |
||||
entryPoints: |
||||
- web |
||||
routes: |
||||
- match: Host(`localhost`) |
||||
kind: Rule |
||||
services: |
||||
- name: front |
||||
port: 80 |
@ -1,12 +0,0 @@ |
||||
apiVersion: v1 |
||||
kind: Service |
||||
metadata: |
||||
name: front |
||||
spec: |
||||
selector: |
||||
app: front |
||||
ports: |
||||
- name: web |
||||
port: 8083 |
||||
targetPort: 80 |
||||
type: ClusterIP |
Loading…
Reference in new issue