yak
yak copied to clipboard
Yak - REDAXO mit YDeploy, Developer, Gulp, Browserify, PostCSS und Yimmelyam
Yak
- Allgemeines Arbeiten
- Bekannte Probleme
- Deployen in einen DomainFactory Account/Plesk Account
- Deployen bei All-Inkl
- Import von sql-Dump mit date (0000-00-00) und datetime (0000-00-00 00:00:00) Werten
- Vorbereitung für ein bestehendes Projekt
- Vorbereitung für ein neues Projekt
Vorraussetzungen
- eine
bashwird vorrausgesetzt yarnmuss installiert sein
Vorbereitung für ein neues Projekt
-
Ordner für das Projekt lokal anlegen (Bsp.
~/Sites/localhost.project) -
Wenn nicht bereits geschehen, ein privates Github Repo erstellen (Readme mit anlegen lassen) via Git Client in Projektordner klonen
-
Yak herunterladen und in Projektordner legen
-
hostsDatei öffnen und ergänzen127.0.0.1 project.localhost 127.0.0.1 www.project.localhost -
httpd-vhosts.conföffnen und ergänzen (USERDIRund ggf.localhost.projectanpassen)<VirtualHost *:80> ServerName project.localhost ServerAlias www. project.localhost DocumentRoot "/Users/USERDIR/Sites/localhost.project/public" ErrorLog "/Users/USERDIR/Sites/Logs/localhost.project-error_log" CustomLog "/Users/USERDIR/Sites/Logs/localhost.project-access_log" common <Directory "/Users/USERDIR/Sites/localhost.project/public"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all # Nur bei Apache 2.4 # Require all granted </Directory> </VirtualHost>
Konsole
-
Apache neu starten
-
Terminal öffnen
Ausführen
$ cd ~/Sites/localhost.projectggf. unzip installieren
$ sudo apt-get install zip unziphttps://simplernerd.com/wsl2-zip-unzip-files/ -
REDAXO wird mit Ausführung des nächsten Befehles automatisch installiert und eine vorhandene Instanz wird überschrieben. Wenn das nicht gewünscht ist, die Zeilen im
setup/presetupentsprechend auskommentieren.Ausführen
$ setup/presetupNach dem presetup sollte die neue REDAXO Struktur wie folgt aussehen
- /assets/ - fonts/ - images/ - scripts/ - styles/ - svgs/ - /bin/ - /gulpfile.js/ - assets/ - tasks/ - /public/ - assets/ - addons/ - core/ - fonts/ - images/ - scripts/ - styles/ - svgs/ - media/ - redaxo/ - /src/ - addons/ - core/ - module/ - templates/ - /var/ - cache/ - data/ -
REDAXO Setup via Browser und Url
http://project.localhost/redaxostarten
weitere Einstellungen und Vorraussetzungen
- developer AddOn installieren, falls nicht über das Setup bereits getan
- ydeploy AddOn installieren, falls nicht über das Setup bereits getan
Deployment
alle Befehle gehen direkt vom Projektordner aus. ~/Sites/localhost.project
- Datenbankdump der lokalen Instanz erstellen und auf Live via Adminer oder Datenbanktool einspielen
deploy.phpin der lokalen Instanz für Server anpassen- Ausführen
$ bin/console ydeploy:diff - lokalen Stand auf Github pushen
- Ausführen
$ dep deploy(hier kommt es absichtlich noch zu einem Fehler, aber die Grundstruktur ist schon mal auf dem Server)
auf dem Live Server via FTP Client
-
/releases/1/src/core/default.config.ymlnach/shared/var/data/core/config.ymlkopieren -
data/core/config.ymlöffnen undsetupauffalse- Datenbankverbindung der Live-Instanz eingetragen
-
Ausführen
$ dep deploy:unlock -
Ausführen
$ dep deploy(diesmal sollte kein Fehler mehr kommen) -
Domain der Live-Instanz auf
current/publiczeigen lassen (Der Pfad muss zumeist per Hand notiert werden, da es ein Symlink ist)
Einstellungen Developer
Lokal
- [x] Templates synchronisieren
- [x] Module synchronisieren
- [x] Actions synchronisieren
- [x] Im Frontend synchronsieren (nur wenn als Admin in Backend eingeloggt)
- [x] Im Backend synchronsieren (nur wenn als Admin eingeloggt)
- [x] Datei- und Ordnernamen aktuell halten
- [ ] Ordnernamen mit ID als Suffix
- [ ] Präfix für Dateinamen (enthält ID und Name)
- [ ] Umlaute in Namen beibehalten (Deprecated; die Option wird in der nächsten Major-Version wegfallen und somit immer deaktiviert sein)
- [x] Item-Ordner löschen nach dem Löschen eines Items über das Backend
Live
- [x] Templates synchronisieren
- [x] Module synchronisieren
- [x] Actions synchronisieren
- [ ] Im Frontend synchronsieren (nur wenn als Admin in Backend eingeloggt)
- [ ] Im Backend synchronsieren (nur wenn als Admin eingeloggt)
- [ ] Datei- und Ordnernamen aktuell halten
- [ ] Ordnernamen mit ID als Suffix
- [ ] Präfix für Dateinamen (enthält ID und Name)
- [ ] Umlaute in Namen beibehalten (Deprecated; die Option wird in der nächsten Major-Version wegfallen und somit immer deaktiviert sein)
- [ ] Item-Ordner löschen nach dem Löschen eines Items über das Backend
Instanzen farblich kenntlich machen
Über folgende Einträge und Skripte kann man eine Kennung eintragen in welcher Umgebung man sich befindet
Über Adminer oder Datenbanktool in die rex_config Tabelle der Live Instanz folgenden Eintrag:
| Spalte | Wert |
|---|---|
| namespace | project |
| key | env |
| value | production |
Hat man das Yakme AddOn installiert, kann nachfolgender Part ignoriert werden.
Folgenden Code in die boot.php vom project AddOn der lokalen Instanz und die CSS Dateien entsprechend im project assets Ordner ergänzen:
css/ydeploy-development.css
css/ydeploy-production.css
css/ydeploy.css
// YDeploy
// - - - - - - - - - - - - - - - - - - - - - - - - - -
if (\rex::isBackend() && \rex_addon::get('ydeploy')->isAvailable()) {
\rex_view::addCssFile($this->getAssetsUrl('css/ydeploy.css'));
if (\rex_addon::get('project')->getConfig('env') == 'production') {
\rex_view::addCssFile($this->getAssetsUrl('css/ydeploy-production.css'));
} else {
\rex_view::addCssFile($this->getAssetsUrl('css/ydeploy-development.css'));
}
rex_extension::register('OUTPUT_FILTER', function(rex_extension_point $ep) {
$project = \rex_addon::get('project');
$env = $project->getConfig('env') == 'production' ? 'Production' : 'Development';
$version = isset($project->getProperty('app')['version']) ? ' - <small>Version ' . $project->getProperty('app')['version'] : '';
$ep->setSubject(
str_replace(
'</body>',
'<div class="ydeploy-badge">' . $env . $version . '</small></div></body>',
$ep->getSubject()
)
);
});
}
In der package.yml des project AddOns ergänzen
app:
version: '1.0.0-dev1'
Durch das nächste Deployen, wird dann auch die Live Instanz farblich kenntlich gemacht und die Version angezeigt.
zusätzliche Tabellen synchronisieren lassen
Da man lokal am Anfang zumeist die Struktur wie vom Kunden gewünscht aufsetzt und ggf. auch die ersten Slices als Beispiele in der Live-Instanz bereitstellen möchte, kann man mit folgendem Skript diese Tabellen synchronisieren.
! Sobald jedoch an der Live-Instanz redaktionell gearbeitet wird, sollte das Skript wieder entfernt werden. Ansonsten gehen die Daten der Live-Instanz verloren.
Das Skript in die boot.phpdes project AddOns der lokalen Instanz einfügen
// YDeploy
// - - - - - - - - - - - - - - - - - - - - - - - - - -
if (\rex::isBackend() && \rex_addon::get('ydeploy')->isAvailable()) {
rex_extension::register('PACKAGES_INCLUDED', function () {
$config = \rex_addon::get('ydeploy')->getProperty('config');
// zusätzliche Tabellen synchronisieren
// nie action, module, module_action, template definieren
// werden über developer AddOn synchronisiert
$config['fixtures']['tables'] = array_merge(
[
'article' => null,
'article_slice' => null,
'clang' => null,
'media' => null,
'media_category' => null,
'sprog_wildcard' => null,
],
$config['fixtures']['tables']
);
\rex_addon::get('ydeploy')->setProperty('config', $config);
});
}
Beim Befehl $ bin/console ydeploy:diff werden jetzt die obigen Tabellen mit berücksichtigt.
Vorbereitung für ein bestehendes Projekt
-
Via E-Mail wurde eine Einladung von Github für das Repo versendet. Dort den Link anklicken und man ist für das Repo freigeschalten.
-
Ordner für das Projekt lokal anlegen (Bsp.
~/Sites/localhost.project) -
Github Repo via Git Client in Projektordner klonen
-
Datenbank lokal anlegen und die Datenbankverbindung in
/var/data/core/config.ymleintragen -
Datenbankdump von der Production/Stage/Live Umgebung holen und lokal einspielen
Falls der Dump via Backup-AddOn geholt wird, dann die rex_user Tabelle nicht vergessen
-
hostsDatei öffnen und ergänzen127.0.0.1 project.localhost 127.0.0.1 www.project.localhost -
httpd-vhosts.conföffnen und ergänzen (USERDIRund ggf.localhost.projectanpassen)<VirtualHost *:80> ServerName project.localhost ServerAlias www. project.localhost DocumentRoot "/Users/USERDIR/Sites/localhost.project/public" ErrorLog "/Users/USERDIR/Sites/Logs/localhost.project-error_log" CustomLog "/Users/USERDIR/Sites/Logs/localhost.project-access_log" common <Directory "/Users/USERDIR/Sites/localhost.project/public"> Options Indexes FollowSymLinks AllowOverride All Order allow,deny Allow from all # Nur bei Apache 2.4 # Require all granted </Directory> </VirtualHost> -
/.env.localDatei öffnen und anpassenAPP_HOST=project.localhost
Allgemeines Arbeiten
-
Vor dem deployen, zuvor
$ bin/console ydeploy:diffaufrufen, und die geänderten bzw. neu angelegte Dateien (fixtures, migration, schema) committen. -
/src/addons/project/package.ymlöffnen und die Version anpassen (Diese Änderung sollte immer der letzte und ein separater Commit vor dem deployen sein)app: version: '1.0.0-dev1'In der Entwicklung wird dabei nur die letzte Zahl hochgesetzt
-
In der Konsole
$ dep deployausführen
Bekannte Probleme
Deployen in einen DomainFactory Account
Fehlermeldung in der Konsole
[Deployer\Exception\RuntimeException]
The command "export APP_ENV='prod'; cd /kunden/pfad/zum/ordner/releases/1 && (command -v 'php')" failed.
Exit Code: 1 (General error)
Host name: prod
================
Ursache
Bei DomainFactory wird in der Konsole default PHP 4 genutzt
Lösung
Symlink auf PHP 71 setzen
Anleitung
-
auf Server via SSH einloggen
-
in das Userverzeichnis
/~wechseln -
mkdir -p bin -
ln -s /usr/local/bin/php7-71LATEST-CLI bin/php -
.bashrcin/~anlegen/editieren, und dort die PATH-Variable setzen:export PATH=~/bin:$PATH -
per SSH neu einloggen, sonst greift es nicht.
-
prüfen mit:
php -v
Es kann vorkommen, dass die .bashrc nicht beim login aufgerufen wird. Bei Plesk kann man es z.B. lösen, indem man eine ~/.profile ergänzt und dort die .bashrc aufruft. Wenn die .profile bereits existiert, den folgenden Aufruf am Ende ergänzen source ~/.bashrc
oder im Deployer den bin/php Pfad direkt setzen ->set('bin/php', '/opt/plesk/php/7.3/bin/php')
Deployen bei All-Inkl
PHP-CLI und writeable_mode müssen in der deploy.php gesetzt werden:
host(NAME)
->set('writable_mode', 'chmod')
->set('bin/php', '/usr/bin/php74')
// ...
;
Import von sql-Dump mit date (0000-00-00) und datetime (0000-00-00 00:00:00) Werten
-
SHOW variables LIKE 'sql_mode';Angezeigten Wert speichern BeispielONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
-
SET sql_mode = ''; -
Dump importieren
-
SET sql_mode = 'VALUE';VALUE = zuvor gespeicherter Wert