- Allgemeines Arbeiten
- Bekannte Probleme
- Vorbereitung für ein bestehendes Projekt
- 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
-
hosts
Datei öffnen und ergänzen127.0.0.1 project.localhost 127.0.0.1 www.project.localhost
-
httpd-vhosts.conf
öffnen und ergänzen (USERDIR
und ggf.localhost.project
anpassen)<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>
-
Apache neu starten
-
Terminal öffnen
Ausführen
$ cd ~/Sites/localhost.project
ggf. unzip installieren
$ sudo apt-get install zip unzip
https://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/presetup
entsprechend auskommentieren.Ausführen
$ setup/presetup
Nach 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/redaxo
starten
- developer AddOn installieren, falls nicht über das Setup bereits getan
- ydeploy AddOn installieren, falls nicht über das Setup bereits getan
alle Befehle gehen direkt vom Projektordner aus. ~/Sites/localhost.project
- Datenbankdump der lokalen Instanz erstellen und auf Live via Adminer oder Datenbanktool einspielen
deploy.php
in 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.yml
nach/shared/var/data/core/config.yml
kopieren -
data/core/config.yml
öffnen undsetup
auffalse
- 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/public
zeigen lassen (Der Pfad muss zumeist per Hand notiert werden, da es ein Symlink ist)
Lokal
- Templates synchronisieren
- Module synchronisieren
- 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
Live
- Templates synchronisieren
- Module synchronisieren
- 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
Ü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.
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.php
des 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.
-
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.yml
eintragen -
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
-
hosts
Datei öffnen und ergänzen127.0.0.1 project.localhost 127.0.0.1 www.project.localhost
-
httpd-vhosts.conf
öffnen und ergänzen (USERDIR
und ggf.localhost.project
anpassen)<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.local
Datei öffnen und anpassenAPP_HOST=project.localhost
-
Vor dem deployen, zuvor
$ bin/console ydeploy:diff
aufrufen, 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 deploy
ausführen
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
-
.bashrc
in/~
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')
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')
// ...
;
-
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