Software Challenge : Installation und Inbetriebnahme

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 ueber dockercompose ps angezeigt 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-webapp wechseln
    • Container starten: "docker-compose up"
    • (Beenden mit docker-compose stop)
  • Nun laeuft die Anwendung und ist unter http://localhost:3000 erreichbar, nuetzliche weitere Kommandos:
    • docker-compose logs zeigt die Log-Ausgaben der Anwendung und der Datenbank an
    • docker exec -it <devcontainer-name> /bin/bash oeffnet eine Shell in dem Container, wo man mit rails c z.B. eine Rails Konsole starten kann.
    • Migrationen kann man mit docker-compose run web bundle exec rake db:migrate ausfuehren.

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.yml heisst der Adapter in der alten Anwendung mysql und in der neuen mysql2
  • 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 log bzw. tmp) als root an. Startet man dann die neue Anwendung, kann diese die Dateien nicht oeffnen. Abhilfe schafft z.B. ein chown -R 1000.1000 $PWD im Wurzelverzeichnis der Anwendung.
  • Bei einem Wechsel sollte das .bundle Verzeichnis geloescht werden und die Gems durch einen Aufruf von bundle install im 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 exit beenden, Container durch Eingabe von exit verlassen (Beendet den Container nicht).

Attachments:

init.sh (application/x-sh)
init.sh (application/x-sh)
init.sh (application/x-sh)