Installation:
- In den Zielordner für die Anwendungen wechseln (evtl. einen dafür Erstellen)
- Ordner für Datenbank erstellen: "mkdir db"
- Projekt Downloaden: "git clone git@github.com:CAU-Kiel-Tech-Inf/socha-webapp.git"
- In Projektordner Wechseln: "cd socha-webapp"
- Auf Merge Branch wechseln: "git checkout master-2-0"
- Datenbank Einstellungen für neue Anwendung kopieren: "cp config/database.yml.example config/database.yml"
- Gems für die neue Anwendung Installieren und Datenbank initialisieren
- Container der Anwendung starten: "docker-compose up -d dev"
- Mit dem Container verbinden: "docker attach sochawebapp_dev_1"
- Gems installieren: bundle install
- Einen Datenbank-Dump einspielen, siehe unten (Datenbank initialisieren:
bundle exec rake db:schema:load, aber das reicht derzeit nicht) - Verbindung zum Container beenden: "exit"
Datenbank Dump einlesen:
Die Datenbank muss nur einmal initialisiert werden. Die Daten bleiben auch ueber Neustarts des Containers erhalten (auch wenn sich das Container-Image aendert), da sie in einem Volume liegen (Name des Volumes ist `<dir>_db_data`, wobei <dir> der Name des Projektverzeichnisses ist, man kann alle Volumes mit docker volume ls anzeigen).
- In den Ordner der Webapp wechseln: "cd socha-webapp"
- Den mysql Container starten: "docker-compose up -d mysql"
- Dump in den container kopieren:
docker cp <file> <name des mysql containers>:/dump.sql, der Name des mysql containers kann ueberdockercompose psangezeigt werden (variiert je nach Verzeichnisstruktur auf dem Rechner) - Shell im Conatiner oeffnen:
docker exec -it <name des mysql containers> /bin/bash - Im Container den Dump einlesen:
mysql -u $MYSQL_USER --password=$MYSQL_PASSWORD -h localhost $MYSQL_DATABASE < /dump.sql - und beenden: "docker-compose stop"
Neue und Alte Version Parallel:
Achtung: Dieser Teil ist eventuell leicht veraltet.
- In den Projektordner wechseln (den mit den Ordnern "db" und "socha-webapp")
- Script für parallele Arbeitsverzeichnisse suchen: "find / -name git-new-workdir 2> /dev/null"
(es sollte in einem Ordner "contrib/workdir/" sein)
Im folgenden wird "/usr/share/doc/git/contrib/workdir/git-new-workdir" als Pfad verwendet. - Script ausführbar machen: "sudo chmod +x /usr/share/doc/git/contrib/workdir/git-new-workdir"
- Neues Arbeitsverzeichnis erstellen: "/usr/share/doc/git/contrib/workdir/git-new-workdir socha-webapp socha-old-webapp"
- In neues Arbeitsverzeichniss wechseln: "cd socha-old-webapp"
Nun befindet sich in diesem Ordner ein neue Arbeitskopie, welche auf das selbe Repository wie "socha-webapp" zugreift.
In diesem ordner kann nun unabhänig der branch gewechselt und bearbeitet werden. - Installation wie für die Neue Anwendung:
- Gewünschten Zweig auschecken
- Und mit der Anleitung von oben ab Datenbank Konfiguration Kopieren fortsetzen
Achtung: Der Ordner heißt nun "socha-old-webapp" und der Container "sochaoldwebapp_dev_1"
Inbetriebnahme:
Achtung: da beide Apps (also die alte und die neue Version der Anwendung) auf Port 3000 gelegt werden kann nur einer von beiden zurzeit laufen.
- Container starten (alte und neue Anwendung):
- in den Ordner
socha-webappwechseln - Container starten: "
docker-compose up" - (Beenden mit
docker-compose stop)
- in den Ordner
- Nun laeuft die Anwendung und ist unter http://localhost:3000 erreichbar, nuetzliche weitere Kommandos:
docker-compose logszeigt die Log-Ausgaben der Anwendung und der Datenbank andocker exec -it <devcontainer-name> /bin/bashoeffnet eine Shell in dem Container, wo man mitrails cz.B. eine Rails Konsole starten kann.- Migrationen kann man mit
docker-compose run web bundle exec rake db:migrateausfuehren.
Als Admin kann man sich mit der E-Mail "root@example.com" und dem Passwort "swordfish" anmelden.
Wechseln zwischen neuer und alter Anwenung
Wenn man beide Anwendungen im gleichen Arbeitsverzeichnis betreiben will (also nur immer zwischen den Branches wechselt), sollte folgendes beachtet werden:
- In
config/database.ymlheisst der Adapter in der alten Anwendungmysqlund in der neuenmysql2 - Die alte Anwendung laeuft im Container als User root, die neue als User mit ID 1000. Hat man also erst die alte Anwendung gestartet, legt diese Log-Files und PIDs (im Verzeichnis
logbzw.tmp) als root an. Startet man dann die neue Anwendung, kann diese die Dateien nicht oeffnen. Abhilfe schafft z.B. einchown -R 1000.1000 $PWDim Wurzelverzeichnis der Anwendung. - Bei einem Wechsel sollte das
.bundleVerzeichnis geloescht werden und die Gems durch einen Aufruf vonbundle installim Container neu installiert werden. Sonst sind Gems fuer die falsche Ruby-Version installiert und man bekommt Fehlermeldungen wie "Ruby 1.8 not found" bzw. "Ruby 2.2 not found".
Direkt auf die Datenbank zugreifen
- Mit dem MySQL-Container verbinden:
docker exec -it sochawebapp_mysql_1 /bin/bash - Im Container mit Datenbank verbinden (Befehl genau wie er hier steht eingeben, die Daten sind in den Umgebungsvariablen im Container vorhanden, anzeigen mit
env):mysql -u $MYSQL_USER --password=$MYSQL_PASSWORD $MYSQL_DATABASE - Beliebige SQL-Abfragen machen, z.B.
SELECT * FROM people LIMIT 10; - MySQL Client durch Eingabe von
exitbeenden, Container durch Eingabe vonexitverlassen (Beendet den Container nicht).