Softwareentwicklung – Wenn aus einer Idee etwas Ernstes wird

Vom Alleinkämpfer zum Teammitglied

Wie so oft gilt: Sobald etwas eine bestimmte Größe oder einen gewissen Reifegrad erreicht, wird es komplexer. Wer ein Softwareprojekt allein umsetzt, benötigt – abgesehen von einer Entwicklungsumgebung / IDE – erst einmal nichts weiter.

Sobald ein Projekt im Team umgesetzt wird, sollten Zeit und Gedanken in eine gemeinsame Basis investiert werden. Gerade kleine Teams stehen dabei vor der Frage: Wie organisiert man das Ganze sinnvoll?

Verfügbarkeit vs. Sicherheit

Ein zentraler Punkt dabei ist der Spagat zwischen Verfügbarkeit und Sicherheit. Dienste vollständig über die Cloud also direkt im Internet zu nutzen klingt dabei verlockend. Bedenken muss man dabei auch den Aspekt der Sicherheit. Ein Dienst im Internet ermöglicht eine Vielzahl an Angriffsflächen. Themen wie Datenschutz, Portscans, unzureichend gesicherte Dienste oder fehlende Verschlüsselung sollten nicht unterschätzt werden.

Eine rein interne Infrastruktur mit Zugriff über VPN wirkt in kleinen Teams möglicherweise überdimensioniert, beschränkt jedoch die Angriffsvektoren rapide und senkt dadurch mögliche Risiken.

  • Dienste sind nicht direkt aus dem Internet erreichbar
  • Zugriff kann gezielt eingeschränkt werden
  • Sensible Daten bleiben im eigenen Netzwerk

Gerade für kleine Teams kann das ein pragmatischer und sicherer Einstieg sein.

DIY Infrastruktur für kleine Teams

Für den Start muss es nicht sofort eine komplexe Serverlandschaft sein. Oft reicht einfache und kostengünstige Hardware. Sei es ein alter Server, der nicht mehr genutzt wird oder wie wir später zeigen ein Einplatinencomputer wie ein Raspberry Pi oder andere PI Varianten (Banana Pi, Rock Pi, …). Sie bieten genügend Leistung für typische Aufgaben im Bereich der Softwareentwicklung für Teams und vieles Weitere.

Wichtiger als die Hardware ist dabei ein durchdachtes Setup:

  • Regelmäßige Updates
  • Absicherung von Zugängen (SSH-Keys statt Passwörter)
  • Firewall-Regeln
  • Backups

Unverzichtbare Werkzeuge

Versionsverwaltung

Ein Versionsverwaltungssystem ist der erste und wichtigste Baustein. Waren früher Tools wie CVS und SVN beliebt wird heute häufig Gitlab eingesetzt. Neben der eigentlichen Versionsverwaltung bietet es zusätzliche Funktionen, z. B.:

  • Benutzer- und Rechteverwaltung
  • Issue-Tracking
  • CI/CD-Pipelines

Gerade die Rechteverwaltung ist ein wichtiger Sicherheitsaspekt, um den Zugriff auf Code gezielt zu steuern.

Build- und Automatisierungsprozesse

Für automatisierte Builds und Deployments kann neben integrierten Lösungen (wie o. g. Gitlab) auch ein separates Tool wie Jenkins genutzt werden. Vorteile sind u. a.:

  • ein schneller Einstieg
  • flexible Erweiterbarkeit
  • gute Dokumentation

Wichtig ist hierbei, auch die Build-Infrastruktur abzusichern, da sie häufig Zugriff auf sensible Daten (z. B. Zugangsdaten oder Schlüssel) hat.

Artefaktverwaltung

Ein oft unterschätzter aber auch relevanter Faktor ist ein Artefakt-Repository wie Sonatype Nexus Repository.

Hier können:

  • erzeugte Artefakte zentral bereitgestellt werden
  • externe Abhängigkeiten kontrolliert verwaltet werden
  • Versionen nachvollziehbar archiviert werden

Gerade aus Sicherheitssicht ist es sinnvoll, Abhängigkeiten nicht direkt aus dem Internet zu beziehen, sondern zentral geprüft bereitzustellen. Die Quellen lassen sich zudem gezielt beschränken.

Security First

Die Sicherheit muss von Anfang an mitgedacht werden. Auch wenn es zunächst wie überflüssiger Aufwand wirkt – Security First sollte von vorne bedacht werden. Nachträgliche Anpassungen sind meist deutlich aufwendiger und schwerer zu implementieren.

Einige grundlegende Maßnahmen:

  • Dienste nicht unnötig öffentlich erreichbar machen
  • Zugriff über VPN oder eingeschränkte Netzwerke ermöglichen
  • Regelmäßige Updates und Patches einspielen
  • Backups automatisieren und regelmäßig testen
  • Zugriffe und Änderungen protokollieren

Praxisbeispiel

Anhand unseres kleinen Teams beschreiben wir eine kompakte Infrastruktur im 10-Zoll-Netzwerkschrank*. Ein solcher Netzwerkschrank benötigt wenig Platz, sorgt für Ordnung, schützt die Hardware und ist in Verbindung mit den beschriebenen Raspberry Pi völlig ausreichend.

  • Drei Raspberry Pi übernehmen unterschiedliche Aufgaben als zentrale Server
  • Ein NAS* wird für Backups verwendet
  • Ein Switch* und Patchpanel* sorgt für die interne Vernetzung

Optional kann das Setup um eine USV* erweitert werden (um z. B. Stromausfälle zu überbrücken).

Die beschriebenen Infrasturktur-Services könnte man z. B. wie folgt aufteilen:

  • Raspberry Pi 1: Versionsverwaltung (Gitlab)
  • Raspberry Pi 2: CI und Build-Prozesse (Jenkins) + Artefakt Repository (Nexus)
  • Raspberry Pi 3: Zusatzdienste wie Monitoring und VPN

Ein solcher Aufbau ist vergleichsweise kostengünstig, überschaubar in der Wartung und gleichzeitig flexibel genug für stetig wachsende Herausforderungen.

Im Bild dargestellt ist unser – noch nicht ganz aufgeräumtes – Beispiel-Setup. Da die Infrastruktur kontinuierlich weiterentwickelt wird, erfolgt aktuell beispielsweise die Umstellung des Raspberry Pi für die Versionsverwaltung auf eine SSD, um neue Szenarien zu ermöglichen und für zukünftige Anforderungen besser gerüstet zu sein (fehlt daher im Bild).

* Affiliante Link: Als Amazon-Partner verdienen wir an qualifizierten Verkäufen. Weitere Infos unter partnernet.amazon.de

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert