Deploy Magallanes

In diesem Kurzen Tutorial zeige ich wie man das Deploy Magallanes für TYPO3 installiert und benutzt.

Hab lange nach einem einfachen und praktischen Deployer System gesucht und fand immer das Deployer System das auf PHP aufbaut aber das gefiel mir von der Handhabung nicht, und dann fand ich Magallanes das per YAML konfiguriert wird "PERFEKT".

Beginnen wir mit mit der Installation, Voraussetzung ist eine composer basierte TYPO3 Installation...

 

ddev composer require andres-montanez/magallanes

 

Damit das Deploy richtig funktioniert ist die eindeutige PHP Version vom Server in der composer.json in "config" einzutragen in meinem Fall ist das die 7.4.16. und das bin Verzeichnis ist mit anzugenben. 

 

"config": {
   "bin-dir": "bin",
   "platform": {
      "php": "7.4.16"
   },
   "allow-plugins": {
       "typo3/class-alias-loader": true,
       "typo3/cms-composer-installers": true
    }
},

 

Unter "scripts" auch noch in der composer.json werden diese Einträge ergenzt:

 

"scripts": {
    "typo3-cms-scripts": [
        "typo3cms install:fixfolderstructure",
        "typo3cms database:updateschema '*.add,*.change'",
        "typo3cms language:update",
        "typo3cms cache:flush"
    ],
    "post-autoload-dump": [
        "@typo3-cms-scripts"
    ],
    "deploy": [
        "@composer global require --ansi -n --no-progress andres-montanez/magallanes",
        "mkdir -p ./.mage/logs",
        "@composer global exec --ansi -n mage deploy stage",
        "@composer install --ansi -n --no-progress"
    ]
}

 

Im Projektordner erstellt man sich jetzt 2 Ordner einen mit .mage und darin einen Ordner mit logs den zweiten Ordner benennt mann .ssh wo die ssh keys liegen wie man solche Keys macht findet man z.b. hier YouTube die braucht man damit man nicht jedes mal das Passwort eingeben muss, noch besser wärw es einen ssh-keygen -t ed25519 anzulegen ist die modernste und sicherste Variante und mit ssh-copy-id ssh deine(at)sshverbindung.at das Ganze auf den Server zu übertragen.
Dazu erstellt man sich ein kleines Script das man deploy benennt und es in .ddev -> commands -> host einfügt mit diesen Zeilen das bewirkt eine kurze Schreibweise für das deployen und die Abfrage des ssh Keys.

 

#!/bin/bash
## Description: Deploy site
## Usage: deploy
## Example: "ddev deploy"
ddev auth ssh --ssh-key-path .ssh
ddev composer deploy

 

Bereiten wir nun den Aufbau am Live Server vor, hier benötigen wir ein paar Ordner wird hier auch gut beschrieben TYPO3:

Am Server in meinem Fall unter "httpdocs" erstellt man einen Ordner in dem alles liegt z.b. "meinProjekt" dort erstellt man einen weiteren Ordner mit dem Namen "releases" danach kann man einfach in der Console folgenden Befehl ausführen so werden alle benötigten Ordner erstellt:

 

mkdir -p shared/var shared/public/fileadmin shared/public/typo3temp

 

Kehren wier wieder in des ddev Projekt zurück und erstellen uns die .mage.yml die fügt man im Projektordner ein wo auch die composer.json oder das var, public usw. liegt das ist der eigentliche Kern vom Deploy.

 

magephp:
  log_dir: ./.mage/logs
  log_limit: 5
  composer:
    path: composer
  exclude:
    - ./.ddev
    - ./.ssh
    - ./.git
    - ./.gitignore
    - ./.mage
    - ./public/fileadmin
    - ./public/typo3temp
    - ./var
    - ./.hosts.yaml
    - ./.mage.yml
    - ./deploy.php
    - ./composer.json
    - ./composer.lock
    - ./LICENSE
    - ./README.md
  environments:
    stage:
      #tar_extract: xzpvf
      tar_extract: xvf
      sudo: false
      user: Hier deinen Serveruser eintragen
      from: ./
      host_path: ~/httpdocs/meinProjekt/
      releases: 2
      hosts:
        - deine-host.at
      pre-deploy:
        - exec: { cmd: "composer install --no-dev --no-progress --optimize-autoloader"}
      on-deploy:
        - fs/link: { from: "../../../shared/public/fileadmin", to: "public/fileadmin" }
        - fs/link: { from: "../../../shared/public/typo3temp", to: "public/typo3temp" }
        - fs/link: { from: "../../shared/var", to: "var" }
      on-release:
      post-release:
        - exec: { cmd: '~/.local/bin/php ./bin/typo3 backend:lock', timeout: 9000  }
        - exec: { cmd: '~/.local/bin/php ./bin/typo3cms install:fixfolderstructure', timeout: 9000  }
        - exec: { cmd: '~/.local/bin/php ./bin/typo3cms database:updateschema *.add,*.change', timeout: 9000  }
        - exec: { cmd: '~/.local/bin/php ./bin/typo3cms cache:flush', timeout: 9000  }
        - exec: { cmd: '~/.local/bin/php ./bin/typo3 upgrade:run', timeout: 9000  }
        - exec: { cmd: '~/.local/bin/php ./bin/typo3 backend:unlock', timeout: 9000  }
      post-deploy:

 

Bitte vergesst nicht ein git Projekt im ddev anzulegen erleichtert die Arbeit und ist aus meinem Workflow nicht mehr wegzudenken, hierzu gibt es unzählige Tutorials Google hilft hier bestimmt.

Das Deploy ist jetzt fertig eingerichtet und kann genutzt werden, die Pfade solltet Ihr noch auf Eure Bedürfnisse anpassen.

Um das Deploy zu starten genügt der Aufruf aus ddev in der Console:

 

ddev deploy

 

Alle Änderungen werden jetzt in ddev durchgeführt die nicht in der DB gespeichert werden wie z.b Templates, css, Extensions Update, TYPO3 Update usw...
Um auf dem aktuellen Stand zu bleiben was die DB betrifft, zieht man sich die DB vom LiveServer von Zeit zu Zeit je nach bedarf in die ddev DB.

Möchte mann sich die releases am Server ansehen gebt Ihr diesen Befehl in Eure Console:

 

ddev exec bin/mage releases:list stage

 

Ist ein rollback nötig weil etwas schief gelaufen ist gebt Ihr den Befehl in die Console die Nr 20170101081530 ist der letzte laufenede release:

 

ddev exec bin/mage releases:rollback production 20170101081530

 

Vergesst nicht den Einstiegspunkt am Server zu definieren, hier verwendet man um einen nahtlosen Übergang der releases zu schaffen den current Ordener:

 

httpdocs/meinProjekt/current/public

 


Viel Spaß mit Magallanes ;-)