# Upgrade v10 -> v11

Mise à jour de l'instance typo3 de la 10.4.36 vers la 11.5.29 LTS

Pour cette mise à jour, on reste en PHP 7.4.1

## Analyse

### Mise à niveau des extensions Opentalent

L'analyse des fichiers des extensions signale deux extensions "maison" comme incompatibles : ot_admin et ot_connect.

Au total, ce sont trois méthodes qui sont concernées par les dépréciations.

Un ticket est créé pour la mise à niveau : [V8-4761](https://assistance.opentalent.fr/browse/V8-4761)



### Mise à niveau des extensions tiers

| Extension                       | Version actuelle | Dernière version | Compatibilité Typo3 11 | Compat. PHP |
|---------------------------------|------------------|------------------|------------------------|-------------|
| fluidtypo3/flux                 | 9.7.2            | 9.7.4            | ^11                    | ^7.4.0 - ^8 |
| fluidtypo3/vhs                  | 6.1.2            | 6.1.3            | ^11                    | ^7.4.0 - ^8 |
| georgringer/news                | 9.0              | 11.1.2           | ^11.5.24               | 7.4 -> 8.3  |
| helhum/typo3-console            | 6.6              | 7.1.6            | ^11.5.26               | >=7.4.1     |
| causal/image_autoresize         | 2.1              | 2.2.0            | ^11                    | ^7.4   - ^8 |
| friendsoftypo3/frontend-editing | 2.0              | 3.1.1            | ^11.5                  | ?           |
| sgalinski/lfeditor              | 6.0              | 7.1.11           | ^11.5                  | ?           |
| waldhacker/hcaptcha             | 2.0              | 2.1.1            | ^11.5                  | ^7.2 - ^8   |
| guzzle/guzzle                   | 6.x              | 7.7              |                        | ^7.2 - ^8   |
| nimut/testing-framework         | 5.2              | 6.0.1            | ^11.5.3                | ^7.2 - ^8.0 |

A priori pas de blocage, la mise à jour des extensions sera à faire en même temps que celle de typo3


### Réaliser l'upgrade

1. Faire un snapshot du serveur
2. Maj tous les packages Typo3 de la version ^10.4 à la version ^11.5 dans le composer.json
3. Maj les dépendances à leur dernière version compatible SAUF news, qui reste à la v9 (voir paragraphe précédent)
4. Aller à la page /setup de typo3, et faire passer les différentes opérations de mise à jour
5. Tester


### Notes upgrade en local

* (réglé, voir: https://github.com/FluidTYPO3/vhs/issues/1869) J'ai dû modifier le type du param ... de la classe FluidTYPO3\Vhs\ViewHelpers\Resource\CollectionViewHelper qui 
  générait une erreur (mettre Repository comme type à la place de RecordCollectionRepository débloque la situation...)
* Il a fallu maj le fichier cli, le nouvel emplacement de la console est `/var/www/typo3/vendor/bin/typo3`
* il faut mettre à jour le .htaccess (prendre celui ici: public/typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess )
  et le copier dans public/, puis rajouter les lignes custom en début de fichier)
* j'ai un bug avec `gzuncompress` au chargement du backend, on peut le corriger avec un `sh cli cache:flush`
* comme suggéré dans la doc typo3, j'ai lancé un `sh cli referenceindex:update`

### Notes upgrade sur test

* déploiement sur test5

      cd /var/opentalent/git/ot_typo3
      git fetch origin feature/v8-4762-upgrade_v11
      git checkout feature/v8-4762-upgrade_v11
      
      cd /var/www/typo3

* je copie colle le contenu du composer.json dans celui de test5 

      php7.4 composer.phar update

* je met à jour le fichier `cli` avec le bon chemin d'accès : `/var/www/typo3/vendor/bin/typo3`

      mv public/.htaccess public/.htaccess.old
      cp public/typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess public/.htaccess

* je rajoute les premières lignes custom du .htaccess

      touch public/typo3conf/ENABLE_INSTALL_TOOL

* je me rends à l'adresse `https://sub.test5.opentalent.fr/typo3/install.php`
* je lance la maj de la structure de la DB
* je lance l'upgrade wizard, et j'exécute toutes les tâches
* je reset les préférences du backend user
* je maj les packs de langues
* je flush le cache
* j'ajoute la ligne suivante au fichier `nano /etc/php/7.4/cli/conf.d/20-apcu.ini` : `apc.enable_cli=on`

    sh cli cache:flush
    sh cli referenceindex:update

* je retire le plugin frontend-editing qui ne fonctionne pas : php7.4 composer.phar remove friendsoftypo3/frontend-editing


Up:

Je renomme le fichier composer.json et je créé un symlink vers le nouveau composer.json versionné dans le repo ot_typo3 :

    mv composer.json composer.json.orig
    ln -s /var/opentalent/git/ot_typo3/composer.json ./composer.json
    php7.4 composer.phar install


## Mise en oeuvre

Je me connecte en SSH à prod-front

    ssh exploitation@prod-front



### Mise en maintenance

Je met à jour le message de maintenance :

    cd /var/www/typo3
    nano public/maintenance.html

J'active le mode maintenance :
    
    nano public/.htaccess


Je décommente les lignes :

    #RewriteCond %{REMOTE_ADDR} !^10\.8\.0\.
    #RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
    #RewriteRule .* /maintenance.html [R=302,L]

Je vérifie depuis un appareil hors VPN que la maintenance est bien active.

### Snapshot

Tony réalise un snapshot de prod-front

### Dump de la DB

Je lance un dump de la DB :

    cd ~
    ./dump_typo3.sh

### Upgrade

    cd /var/opentalent/git/ot_typo3
    git fetch origin release/0.7
    git checkout release/0.7

    cd /var/www/typo3


Je renomme le fichier composer.json et je créé un symlink vers le nouveau composer.json versionné dans le repo ot_typo3 :

    mv composer.json composer.json.orig
    ln -s /var/opentalent/git/ot_typo3/composer.json ./composer.json
    rm composer.lock
    rm -r vendor/*
    php7.4 composer.phar install


Je met à jour le fichier `cli` avec le bon chemin d'accès :

     nano cli

On remplace `/var/www/typo3/vendor/bin/typo3cms` par `/var/www/typo3/vendor/bin/typo3`

On va devoir remplacer le fichier .htaccess, sans désactiver le mode maintenance :

    cp public/typo3/sysext/install/Resources/Private/FolderStructureTemplateFiles/root-htaccess public/.htaccess.new
    nano public/.htaccess.new

Ajouter les lignes suivantes :

    # <--- Opentalent rules

    #SetEnvIf Remote_Addr ^10\.8\.0\.[0-255] TYPO3_CONTEXT=Development
    
    # Enable / Disable the opentalent ot_optimizer middlewares
    SetEnv TYPO3_OPTIMIZE 1
    
    RewriteCond %{REMOTE_ADDR} !^10\.8\.0\.
    RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
    RewriteRule .* /maintenance.html [R=302,L]

    # Opentalent rules --->

Puis remplacer le .htaccess existant :

    mv public/.htaccess public/.htaccess.old
    mv public/.htaccess.new public/.htaccess

Vérifier que le mode maintenance est toujours activé à l'extérieur

J'active le mode install de typo3 :

      touch public/typo3conf/ENABLE_INSTALL_TOOL

Je me rends à l'adresse `https://ohcluses.opentalent.fr/typo3/install.php`

Je lance la maj de la structure de la DB

Je lance l'upgrade wizard, et j'exécute toutes les tâches

Je reset les préférences du backend user

Je maj les packs de langues

Je flush le cache


J'ouvre en édition le fichier suivant :

    sudo nano /etc/php/7.4/cli/conf.d/20-apcu.ini

Et j'ajoute la ligne :

    apc.enable_cli=on

Puis je lance les dernières commandes :

    sh cli cache:flush
    sh cli referenceindex:update




Je vérifie l'installation


### Désactivation du mode maintenance 

J'édite le fichier .htaccess

    cd /var/www/typo3
    nano public/.htaccess


Je commente les lignes :

    RewriteCond %{REMOTE_ADDR} !^10\.8\.0\.
    RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
    RewriteRule .* /maintenance.html [R=302,L]

### Nettoyage après upgrade

Si tout fonctionne bien, je retire les fichiers devenus inutiles :

    rm composer.json.orig
    rm public/.htaccess.old


Supprimer les champs et tables en zzz_ depuis le BE typo3


### Release

Finaliser la release dans GitKraken

Switcher sur master sur prod-front :

    cd /var/opentalent/git/ot_typo3
    git checkout master
    git pull

