Aller au contenu

Corp#

Warning

Page used to store information about the Corp zone, but it is incomplete (Work in progress)

Prerequisites#

Inputs#

Choose your target environment:

export GIT_PATH="${HOME}/git/"
export ZONE_NAME='corp-stg'
export INFRA_ZONE_NAME='infra-stg'
export GIT_PATH="${HOME}/git/"
export ZONE_NAME='corp'
export INFRA_ZONE_NAME='infra-prd'

Warning

During this procedure, several steps require restarts of different components in corp zones. Before each restart:

  • check there is no CAASCHR that is planned on the same component at the same time
  • warn supervsion team on #supervision about the component/zone that is going to be restarted

envs-ng#

Tip

Many steps will consist of running trackbone apply -z "${ZONE_NAME}" -c ...

Reusing the shell setup here is a good idea!

Repository: caascad/terraform/envs-ng

# git clone git@git.corp.caascad.com:caascad/terraform/envs-ng.git "${GIT_PATH}/caascad/terraform/envs-ng"
cd "${GIT_PATH}/caascad/terraform/envs-ng"
git pull
git switch -c "${ZONE_NAME}"
nix-shell

# Go into PF context
cd contexts/pf

Checks#

  • The new zone should be created on a branch which will be merged at the end
  • postgres-operator should be deployed
  • nix-shell must be activated
  • Login to vault.

Choose your target infrastructure:

export VAULT_ADDR=https://vault.infra-stg.caascad.com
vault token lookup || vault login -method oidc
export VAULT_ADDR=https://vault.infra-prd.caascad.com
vault token lookup || vault login -method oidc

Apps#

Deploy HedgeDoc#

Application

trackbone apply -z ${ZONE_NAME} -c hedgedoc

Deploy Rocket.Chat#

Warning

L'option -t bootstrap=true provoque l'écrasement des secrets de Rocket.Chat / MongoDB. Ajoutez-la à la commande ci-dessous lors du premier provisioning uniquement.

Application

# Staging
trackbone plan -z "${ZONE_NAME}"   \
  -t bootstrap=false               \
  -c fe_buckets                    \
  -c keycloak_k8s_openid_clients   \
  -c rocketchat_stg

# Production
trackbone plan -z "${ZONE_NAME}"   \
  -t bootstrap=false               \
  -c fe_buckets                    \
  -c keycloak_k8s_openid_clients   \
  -c rocketchat

Warning

Le post-script de provisioning devrait échouer lors de la première exécution car les APIs de Rocket.Chat ne sont pas encore fonctionnelles à ce moment-là.

Il suffira de redéployer la configuration via Trackbone :

trackbone apply -z ${ZONE_NAME} -c rocketchat_stg
trackbone apply -z ${ZONE_NAME} -c rocketchat

Post-configurations#

Note

Cette post-configuration est manuelle et nécessiterait idéalement d'être automatisée. Elle nécessite d'avoir le rôle Admin ou de se connecter avec le compte Administrateur de Rocket.Chat.

Rôles Admin & Owner#

Warning

Les utilisateurs promus Admin ou Owner de canaux, devront se connecter au préalable à Rocket.chat pour que leur compte soient provisionnés automatiquement.

  1. Ajouter le rôle Admin aux Administrateurs de Roket.Chat
  2. Définir des Owner pour les canaux d'équipe #equipe_xxxx
Stocker les URLs d'appels aux webhooks#

Stocker dans Vault infra-prd / infra-stg toutes les URLs d'appel aux webhooks (Via l'interface d'administration de Rocket.Chat) :

# Authenticating into Vault infra-prd
export VAULT_ADDR='https://vault.infra-prd.caascad.com'
vault token lookup || vault login -method oidc

vault write secret/concourse-infra/global/rocketchat-webhooks \
alerts-astreinte='https://chat.corp.caascad.com/hooks/...' \
alerts-prd='https://chat.corp.caascad.com/hooks/...' \
alerts-stg='https://chat.corp.caascad.com/hooks/...' \
caaschr-review='https://chat.corp.caascad.com/hooks/...' \
caasinc-created='https://chat.corp.caascad.com/hooks/...' \
new-releases-all='https://chat.corp.caascad.com/hooks/...' \
new-releases-apps='https://chat.corp.caascad.com/hooks/...' \
support-cw-supit='https://chat.corp.caascad.com/hooks/...' \
toolbox='https://chat.corp.caascad.com/hooks/...' \
trackbone-all='https://chat.corp.caascad.com/hooks/...' \
trackbone-apps='https://chat.corp.caascad.com/hooks/...' \
trackbone-automation='https://chat.corp.caascad.com/hooks/...' \
trackbone-front='https://chat.corp.caascad.com/hooks/...' \
trackbone-monitoring='https://chat.corp.caascad.com/hooks/...'


# Authenticating into Vault infra-stg
export VAULT_ADDR='https://vault.infra-stg.caascad.com'
vault token lookup || vault login -method oidc

vault write secret/concourse-infra/global/rocketchat-webhooks \
alerts-astreinte='https://chat.corp.caascad.com/hooks/...' \
alerts-prd='https://chat.corp.caascad.com/hooks/...' \
alerts-stg='https://chat.corp.caascad.com/hooks/...' \
caaschr-review='https://chat.corp.caascad.com/hooks/...' \
caasinc-created='https://chat.corp.caascad.com/hooks/...' \
new-releases-all='https://chat.corp.caascad.com/hooks/...' \
new-releases-apps='https://chat.corp.caascad.com/hooks/...' \
support-cw-supit='https://chat.corp.caascad.com/hooks/...' \
toolbox='https://chat.corp.caascad.com/hooks/...' \
trackbone-all='https://chat.corp.caascad.com/hooks/...' \
trackbone-apps='https://chat.corp.caascad.com/hooks/...' \
trackbone-automation='https://chat.corp.caascad.com/hooks/...' \
trackbone-front='https://chat.corp.caascad.com/hooks/...' \
trackbone-monitoring='https://chat.corp.caascad.com/hooks/...'

Configurer les webhooks#

Il faut aussi déclarer ou mettre à jour les appels aux webhooks dans les outils interne ou externe :

Récupérer les URLs d'appels aux webhooks via Vault (On a besoin de ces URLs pour configurer ces différents outils) :

# Authenticating into Vault infra-prd
export VAULT_ADDR='https://vault.infra-prd.caascad.com'
vault token lookup || vault login -method oidc

# Get Webhooks URLs
cat << EOF
URL Alert Manager Astreinte       : $(vault kv get -field=alerts-astreinte secret/concourse-infra/global/rocketchat-webhooks)
URL Alert Manager PRD             : $(vault kv get -field=alerts-prd secret/concourse-infra/global/rocketchat-webhooks)
URL Alert Manager STG             : $(vault kv get -field=alerts-stg secret/concourse-infra/global/rocketchat-webhooks)
URL Jira Caaschr Review           : $(vault kv get -field=caaschr-review secret/concourse-infra/global/rocketchat-webhooks)
URL Jira Caaschr Created PF       : $(vault kv get -field=caasinc-created secret/concourse-infra/global/rocketchat-webhooks)
URL NewReleases.io ALL            : $(vault kv get -field=new-releases-all secret/concourse-infra/global/rocketchat-webhooks)
URL NewReleases.io APPS           : $(vault kv get -field=new-releases-apps secret/concourse-infra/global/rocketchat-webhooks)
URL Jira Support SUPIT            : $(vault kv get -field=support-cw-supit secret/concourse-infra/global/rocketchat-webhooks)
URL GitHub Toolbox                : $(vault kv get -field=toolbox secret/concourse-infra/global/rocketchat-webhooks)
URL Pipeline Concourse ALL        : $(vault kv get -field=trackbone-all secret/concourse-infra/global/rocketchat-webhooks)
URL Pipeline Concourse APPS       : $(vault kv get -field=trackbone-apps secret/concourse-infra/global/rocketchat-webhooks)
URL Pipeline Concourse AUTOMATION : $(vault kv get -field=trackbone-automation secret/concourse-infra/global/rocketchat-webhooks)
URL Pipeline Concourse FRONT      : $(vault kv get -field=trackbone-front secret/concourse-infra/global/rocketchat-webhooks)
URL Pipeline Concourse MONITORING : $(vault kv get -field=trackbone-monitoring secret/concourse-infra/global/rocketchat-webhooks)
EOF

Deploy Nextcloud#

Initialisation de Nextcloud#

Le déploiement comporte 2 modes :

  1. Bootstrap : Permet d'initialiser Nextcloud sans les applications / utilisateurs / configurations.
  2. Sans bootstrap : Permet de finaliser l'installation en préconfigurant l'outil.

Compte admin#

Juste après l'avoir installé en mode boostrap, il faut se connecter sur Nextcloud via le compte nextcloud créé par la chart. Puis se rendre dans les Paramètres > Utilisateurs et créer le compte admin qui sera par la suite utilisé pour administrer l'outil.

Puis supprimez le compte nextcloud.

L'outil a constamment besoin d'un compte admin inexistant lors de l'installation/initialisation de celui-ci. Et pour cela on utilise le compte Nextcloud qui, sans le mode bootstrap, sera supprimé automatiquement avec un PostStartCommand.

Warning

Assurez-vous d'utiliser le mot de passe du compte admin (nextcloud & admin) stocké dans vault corp sur le chemin : secret/applications/nextcloud/admin-password.

Redémarrer l'application#

Maintenant que Nextcloud est installé, il faut le désinstaller & réinstaller (via Trackbone sans le mode bootstrap) pour que les applications de celui-ci s'installent automatiquement.

Configurer le SSO#

Se rendre sur Nextcloud via l'URL (exemple : https://cal.corp.caascad.com), se connecter via le compte admin, et configurez le sociallogin qui se situe dans Paramètres > Applications > Administration > Sociallogin.

  • Sélectionnez "Update user profile every login"
    • Save
  • Créez l'OpenID Connect
    • Internal name: Keycloak
    • Title: Keycloak
    • Authorize url: https://keycloak.corp.caascad.com/realms/corp/protocol/openid-connect/auth
    • Token url: https://keycloak.corp.caascad.com/realms/corp/protocol/openid-connect/token
    • Client_Id: nextcloud
    • Client Secret: (Cf. Keycloak)
    • Scope: openid
    • Groups claim (optional): nextcloud_roles
    • Button style: Keycloak
    • Default group: caascad
    • Add group mapping: [admin | admin]

Groupes#

Le groupe admin Nextcloud sera mappé au rôle Nextcloud_admin préalablement créé sur Keycloak. Puis nous devons créer le groupe caascad pour tous les autres utilisateurs Caascad.

Calendriers#

Nous devons créer l'ensemble des calendriers sur Nextcloud avec l'utilisateur Admin. Vous pouvez préremplir certain agenda via le script calendar disponible ici.

Cronjob#

Note

PF-1175 : Pour des questions de performances, il pourrait être intéréssant d'utiliser WebCron comme gestionnaire de tâches de "fond" à la place d'une cron en Ajax.

Se positionner dans l'interface Paramètres > Administration > Paramètre de base > Tâche de fond et sélectionner l'option AJAX.

Deploy Nexus#

Apply Nexus#

trackbone apply -z ${ZONE_NAME} -c nexus

Setup Nexus#

Tout d'abord, récupérer le mot de passe qui sera utilisé pour la création du compte admin et modifié le. Vous pouvez le récupérer depuis les values de la chart nexus DEFAULT_ADMIN_PASSWORD

export VAULT_ADDR=https://vault.corp.caascad.com
vault login -method oidc
export NEXUS_ADMIN_PASSWORD=$(vault kv get -field=password secret/concourse-infra/cicd/nexus-admin)

## Create developer user
export NEXUS_DEVELOPER_PASSWORD=$(pwgen -y 18 1)
vault kv put secret/concourse-infra/cicd/nexus-developer username="developer" password="$NEXUS_DEVELOPER_PASSWORD"
curl -u admin:$NEXUS_ADMIN_PASSWORD-X POST "https://nexus.corp.caascad.com/service/rest/v1/security/users" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"userId\": \"developer\",  \"firstName\": \"developer\",  \"lastName\": \"developer\",  \"emailAddress\": \"developer@email.com\",  \"password\": \"$NEXUS_DEVELOPER_PASSWORD\",  \"status\": \"active\",  \"roles\": [    \"string\"  ]}"


## Create monitoring user
export NEXUS_MONITORING_PASSWORD=$(pwgen -y 18 1)
vault kv put secret/concourse-infra/cicd/nexus-monitoring username="monitoring" password="$NEXUS_MONITORING_PASSWORD"
curl -u admin:$NEXUS_ADMIN_PASSWORD-X POST "https://nexus.corp.caascad.com/service/rest/v1/security/users" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"userId\": \"monitoring\",  \"firstName\": \"monitoring\",  \"lastName\": \"monitoring\",  \"emailAddress\": \"monitoring@email.com\",  \"password\": \"$NEXUS_MONITORING_PASSWORD\",  \"status\": \"active\",  \"roles\": [    \"string\"  ]}"

## Create blob store S3
export NEXUS_ACCESS_KEY=$(vault kv get -field=access_key secret/show/bucket/nexus)
export NEXUS_SECRET_KEY=$(vault kv get -field=secret_key secret/show/bucket/nexus)
curl -u admin:$NEXUS_ADMIN_PASSWORD -X POST "https://nexus.corp.caascad.com/service/rest/v1/blobstores/s3" -H  "accept: application/json" -H  "Content-Type: application/json" -d "{  \"name\": \"nexus-blobstore\",  \"softQuota\": {    \"type\": \"string\",    \"limit\": 0  },  \"bucketConfiguration\": {    \"bucket\": {      \"region\": \"eu-west-0\",      \"name\": \"nexus-corp\",      \"prefix\": \"string\",      \"expiration\": 0    },    \"encryption\": {      \"encryptionType\": \"s3ManagedEncryption\",      \"encryptionKey\": \"string\"    },    \"bucketSecurity\": {      \"accessKeyId\": \"string\",      \"secretAccessKey\": \"string\",      \"role\": \"string\",      \"sessionToken\": \"string\"    },    \"advancedBucketConnection\": {      \"endpoint\": \"https://oss.eu-west-0.prod-cloud-ocb.orange-business.com\",      \"signerType\": \"string\",      \"forcePathStyle\": true    }  }}"

Deploy Jira#

Warning

Jira Staging est déployé sur la zone corp.

Application

trackbone apply -z ${ZONE_NAME} -c fe_buckets
trackbone apply -z ${ZONE_NAME} -c fe_jira_stg
trackbone apply -z ${ZONE_NAME} -c fe_buckets
trackbone apply -z ${ZONE_NAME} -c fe_jira

Warning

Le déploiement de la configuration fe_jira devrait échouer lors de la première exécution car les volumes attachements ne sont pas encore disponibles dans les outputs de Terraform.

Il suffira donc de réappliquer la configuration fe_jira_stg / fe_jira

trackbone apply -z ${ZONE_NAME} -c fe_jira

Provisioning

Warning

L'option -t bootstrap=true provoque l'écrasement des secrets Jira. Ajoutez-la à la commande ci-dessous lors du premier provisioning uniquement.

trackbone apply -z ${ZONE_NAME} -c fe_jira_provisioning_stg \
  -t bootstrap=false                                        \
  -t force_enable
trackbone apply -z ${ZONE_NAME} -c fe_jira_provisioning \
  -t bootstrap=false                                    \
  -t force_enable

Enfin, redémarrer le serveur pour valider l'installation et utiliser le dernier kernel mis à jour.

Post-configurations#

Note

Cette post-configuration est manuelle et nécessiterait idéalement d'être automatisée. Elle nécessite d'avoir le rôle Admin ou de se connecter avec le compte local d'administration.

Note

Cette section est à rédiger (PF-1852).

Deploy Confluence#

Warning

Confluence Staging est déployé sur la zone corp.

Application

trackbone apply -z ${ZONE_NAME} -c fe_buckets
trackbone apply -z ${ZONE_NAME} -c fe_confluence_stg
trackbone apply -z ${ZONE_NAME} -c fe_buckets
trackbone apply -z ${ZONE_NAME} -c fe_confluence

Warning

Le déploiement de la configuration fe_confluence devrait échouer lors de la première exécution car les volumes attachements ne sont pas encore disponible dans les outputs de Terraform.

Il suffira donc de réappliquer la configuration fe_confluence_stg / fe_confluence

trackbone apply -z ${ZONE_NAME} -c fe_confluence_stg

Provisioning

Warning

L'option -t bootstrap=true provoque l'écrasement des secrets Confluence. Ajoutez-la à la commande ci-dessous lors du premier provisioning uniquement.

trackbone apply -z ${ZONE_NAME} -c fe_confluence_provisioning_stg \
  -t bootstrap=false                                              \
  -t force_enable
trackbone apply -z ${ZONE_NAME} -c fe_confluence_provisioning \
  -t bootstrap=false                                          \
  -t force_enable

Enfin, redémarrer le serveur pour valider l'installation et utiliser le dernier kernel mis à jour.

Post-configurations#

Note

Cette post-configuration est manuelle et nécessiterait idéalement d'être automatisée. Elle nécessite d'avoir le rôle Admin ou de se connecter avec le compte local d'administration.

Note

Cette section est à rédiger (PF-1852).


  1. Nécessite les droits Owner sur l'organisation Caascad