anpassen von git ignore
This commit is contained in:
103
README.md
103
README.md
@@ -7,9 +7,9 @@ Die Konfiguration wurde optimiert, um portabel und einfach auf neuen Servern aus
|
||||
## Inhaltsverzeichnis
|
||||
|
||||
- [Verzeichnisstruktur](#verzeichnisstruktur)
|
||||
- [Lokale Inbetriebnahme](#lokale-inbetriebnahme)
|
||||
- [Manuelle Inbetriebnahme](#manuelle-inbetriebnahme)
|
||||
- [Automatisierte Inbetriebnahme mit Ansible](#automatisierte-inbetriebnahme-mit-ansible)
|
||||
- [Neuen Puppet-Agenten verbinden](#neuen-puppet-agenten-verbinden)
|
||||
- [Deployment mit Ansible](#deployment-mit-ansible)
|
||||
- [Backup & Portabilität](#backup--portabilität)
|
||||
|
||||
---
|
||||
@@ -24,13 +24,13 @@ Die Konfiguration wurde optimiert, um portabel und einfach auf neuen Servern aus
|
||||
- `ca_data/`: **Wichtiges Verzeichnis.** Dies ist ein persistenter Speicher für die Certificate Authority (CA) des Puppet Masters. Es enthält alle signierten Zertifikate und wird per "bind mount" eingebunden.
|
||||
- `hiera_config.md`: Erklärt die Konfiguration von Hiera, dem Key-Value-Lookup-System von Puppet, das hier zur Klassenzuweisung verwendet wird.
|
||||
- `openvox_bugs.md`: Dokumentiert häufige SSL-Fehler und deren Lösungen.
|
||||
- `deploy_openvox.yml`: Ein Ansible-Playbook, um das gesamte Setup automatisiert auf einem neuen Server zu deployen.
|
||||
- `deploy_openvox.yml`: Ein Ansible-Playbook, um das lokale Setup zu automatisieren.
|
||||
|
||||
---
|
||||
|
||||
## Lokale Inbetriebnahme
|
||||
## Manuelle Inbetriebnahme
|
||||
|
||||
Um das Projekt auf einem neuen Rechner (mit installiertem Docker und Docker Compose) zum ersten Mal zu starten:
|
||||
Um das Projekt auf einem neuen Rechner (mit installiertem Docker und Docker Compose) zum ersten Mal manuell zu starten:
|
||||
|
||||
1. **Projektverzeichnis klonen/kopieren:**
|
||||
Stellen Sie sicher, dass Sie das gesamte Projektverzeichnis auf dem neuen Host haben.
|
||||
@@ -43,21 +43,16 @@ Um das Projekt auf einem neuen Rechner (mit installiertem Docker und Docker Comp
|
||||
```
|
||||
|
||||
3. **CA-Verzeichnis erstellen und Berechtigungen setzen (Der "CA-Fehler")**
|
||||
Der Puppet-Server im Container läuft aus Sicherheitsgründen nicht als `root`, sondern als Benutzer `puppet` mit der User-ID (UID) `999`. Wenn Docker ein Verzeichnis für einen "bind mount" verwendet, gehört dieses standardmäßig `root`. Dies führt zu einem "Permission denied"-Fehler, da der `puppet`-Benutzer nicht in das `root`-eigene Verzeichnis schreiben kann.
|
||||
Der Puppet-Server im Container läuft aus Sicherheitsgründen nicht als `root`, sondern als Benutzer `puppet` mit der User-ID (UID) `999`. Wenn Docker ein Verzeichnis für einen "bind mount" verwendet, gehört dieses standardmäßig `root`. Dies führt zu einem "Permission denied"-Fehler.
|
||||
|
||||
Um dies zu beheben, müssen wir das `ca_data`-Verzeichnis manuell erstellen und ihm die korrekten Berechtigungen geben, *bevor* der Container gestartet wird.
|
||||
|
||||
Führen Sie diese Befehle im Hauptverzeichnis des Projekts aus:
|
||||
```bash
|
||||
# Verzeichnis für die CA-Daten erstellen
|
||||
# Im Hauptverzeichnis des Projekts ausführen:
|
||||
sudo mkdir -p ./ca_data
|
||||
|
||||
# Korrekte Berechtigungen für den 'puppet'-Benutzer (UID 999) setzen
|
||||
sudo chown -R 999:999 ./ca_data
|
||||
```
|
||||
|
||||
4. **Services starten:**
|
||||
Starten Sie alle Dienste mit Docker Compose. Die `.env`-Datei wird automatisch gelesen.
|
||||
```bash
|
||||
docker compose up -d
|
||||
```
|
||||
@@ -70,42 +65,15 @@ Um das Projekt auf einem neuen Rechner (mit installiertem Docker und Docker Comp
|
||||
|
||||
---
|
||||
|
||||
## Neuen Puppet-Agenten verbinden
|
||||
## Automatisierte Inbetriebnahme mit Ansible
|
||||
|
||||
Wenn ein neuer Puppet-Agent mit dem Master verbunden werden soll, muss sein Zertifikat signiert werden:
|
||||
Das beiliegende Ansible-Playbook `deploy_openvox.yml` automatisiert die Schritte der manuellen Inbetriebnahme auf Ihrem lokalen Rechner.
|
||||
|
||||
1. **Auf dem neuen Agenten:**
|
||||
Führen Sie den Agenten einmal aus. Er wird eine Zertifikatsanfrage (CSR) an den Master senden und mit einem Fehler abbrechen.
|
||||
```bash
|
||||
sudo puppet agent -t
|
||||
```
|
||||
|
||||
2. **Auf dem Docker-Host (Master):**
|
||||
Listen Sie die ausstehenden Anfragen auf und signieren Sie die des neuen Agenten.
|
||||
```bash
|
||||
# Anfragen auflisten
|
||||
docker exec -it openvox puppetserver ca list
|
||||
|
||||
# Anfrage signieren (ersetzen Sie <agent_hostname>)
|
||||
docker exec -it openvox puppetserver ca sign --certname <agent_hostname>
|
||||
```
|
||||
|
||||
3. **Erneut auf dem Agenten:**
|
||||
Führen Sie den Agenten erneut aus. Er sollte nun das signierte Zertifikat erhalten und seine Konfiguration anwenden.
|
||||
```bash
|
||||
sudo puppet agent -t
|
||||
```
|
||||
*Bei SSL-Problemen siehe `openvox_bugs.md`.*
|
||||
|
||||
---
|
||||
|
||||
## Deployment mit Ansible
|
||||
|
||||
Das beiliegende Ansible-Playbook `deploy_openvox.yml` automatisiert die Inbetriebnahme auf einem neuen Server.
|
||||
### Lokale Ausführung (Standard)
|
||||
|
||||
**Voraussetzungen:**
|
||||
- Auf dem **Steuer-Rechner**: Ansible und die `community.docker`-Collection.
|
||||
- Auf dem **Ziel-Server**: Docker und Docker Compose müssen bereits installiert sein. Passwortloser SSH-Zugang vom Steuer-Rechner zum Ziel-Server (z.B. via SSH-Key).
|
||||
- Ansible und die `community.docker`-Collection (`ansible-galaxy collection install community.docker`) müssen auf Ihrem lokalen Rechner installiert sein.
|
||||
- Docker und Docker Compose müssen installiert sein.
|
||||
|
||||
**Ausführung:**
|
||||
|
||||
@@ -116,24 +84,43 @@ Das beiliegende Ansible-Playbook `deploy_openvox.yml` automatisiert die Inbetrie
|
||||
mv deploy_openvox.yml ../
|
||||
```
|
||||
|
||||
2. **Voraussetzungen installieren (Steuer-Rechner):**
|
||||
2. **`.env`-Datei erstellen:**
|
||||
Stellen Sie sicher, dass die `.env`-Datei mit dem Passwort existiert, wie im manuellen Setup beschrieben.
|
||||
|
||||
3. **Playbook starten:**
|
||||
Führen Sie das Playbook vom übergeordneten Verzeichnis aus (`/home/jonnybravo/.docker/`). Es führt die `mkdir`-, `chown`- und `docker compose up`-Schritte für Sie aus.
|
||||
```bash
|
||||
ansible-galaxy collection install community.docker
|
||||
ansible-playbook deploy_openvox.yml
|
||||
```
|
||||
|
||||
3. **Inventory erstellen (Steuer-Rechner):**
|
||||
Erstellen Sie eine Datei `inventory.ini` im selben Verzeichnis wie das Playbook (`/home/jonnybravo/.docker/`). Passen Sie IP und Benutzer an.
|
||||
*Beispiel `inventory.ini`:*
|
||||
```ini
|
||||
[puppet_masters]
|
||||
server1 ansible_host=192.168.1.100 ansible_user=jonnybravo
|
||||
```
|
||||
### Option: Remote-Deployment
|
||||
|
||||
Obwohl das Playbook für den lokalen Gebrauch optimiert ist, kann es als Vorlage für ein Remote-Deployment dienen. Dazu müssten Sie es anpassen, um:
|
||||
1. Eine `hosts`-Variable anstelle von `localhost` zu verwenden.
|
||||
2. Einen `copy`-Task hinzuzufügen, der das Projektverzeichnis auf den Zielserver kopiert.
|
||||
3. Sicherzustellen, dass die Pfadvariablen (`project_path`) für den Remote-Kontext korrekt sind.
|
||||
|
||||
---
|
||||
|
||||
## Neuen Puppet-Agenten verbinden
|
||||
|
||||
Unabhängig von der Installationsmethode ist der Prozess zum Verbinden eines neuen Agenten immer gleich:
|
||||
|
||||
1. **Auf dem neuen Agenten:** `sudo puppet agent -t` (wird fehlschlagen)
|
||||
2. **Auf dem Docker-Host (Master):** `docker exec -it openvox puppetserver ca sign --certname <agent_hostname>`
|
||||
3. **Erneut auf dem Agenten:** `sudo puppet agent -t` (sollte erfolgreich sein)
|
||||
|
||||
*Bei SSL-Problemen siehe `openvox_bugs.md`.*
|
||||
|
||||
---
|
||||
|
||||
## Backup & Portabilität
|
||||
|
||||
Durch die Verwendung eines "bind mounts" für das `ca_data`-Verzeichnis ist das Projekt hochgradig portabel und einfach zu sichern.
|
||||
|
||||
- **Backup:** Sichern Sie einfach den gesamten `openvox`-Projektordner. Alle wichtigen Daten (Puppet-Code, CA-Zertifikate, `.env`-Datei) sind darin enthalten.
|
||||
- **Wiederherstellung/Umzug:** Kopieren Sie den Ordner auf einen neuen Server, führen Sie die Schritte unter [Manuelle Inbetriebnahme](#manuelle-inbetriebnahme) oder [Automatisierte Inbetriebnahme mit Ansible](#automatisierte-inbetriebnahme-mit-ansible) aus, und Ihr Puppet-Master ist mit allen signierten Zertifikaten wieder online.
|
||||
|
||||
4. **Playbook starten (Steuer-Rechner):**
|
||||
Führen Sie das Playbook vom Verzeichnis `/home/jonnybravo/.docker/` aus. Übergeben Sie den Namen der Ziel-Gruppe (`puppet_masters`) an die Variable `target_host`.
|
||||
```bash
|
||||
ansible-playbook -i inventory.ini deploy_openvox.yml -e "target_host=puppet_masters"
|
||||
```
|
||||
Das Playbook kopiert den `openvox`-Ordner nach `/opt/openvox` auf dem Zielserver, setzt die Berechtigungen und startet die Container.
|
||||
|
||||
---
|
||||
|
||||
@@ -1,42 +1,30 @@
|
||||
---
|
||||
- name: Deploy OpenVox Docker Compose Project
|
||||
hosts: "{{ target_host | default('localhost') }}"
|
||||
- name: Setup OpenVox Docker Project on Localhost
|
||||
hosts: localhost
|
||||
connection: local
|
||||
become: true
|
||||
vars:
|
||||
project_dir_name: "openvox"
|
||||
# ANNAHME: Das Playbook wird aus dem übergeordneten Verzeichnis von 'openvox' ausgeführt.
|
||||
# Passen Sie ggf. den Pfad an.
|
||||
project_local_path: "{{ playbook_dir }}/{{ project_dir_name }}"
|
||||
project_remote_path: "/opt/{{ project_dir_name }}"
|
||||
# Annahme: Das Playbook wird aus dem übergeordneten Verzeichnis von 'openvox' ausgeführt.
|
||||
project_path: "{{ playbook_dir }}/openvox"
|
||||
|
||||
tasks:
|
||||
- name: "Stellt sicher, dass das Projektverzeichnis auf dem Zielhost existiert"
|
||||
ansible.builtin.file:
|
||||
path: "{{ project_remote_path }}"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: "Kopiert die Projektdateien auf den Zielhost"
|
||||
ansible.builtin.copy:
|
||||
src: "{{ project_local_path }}/"
|
||||
dest: "{{ project_remote_path }}/"
|
||||
|
||||
- name: "Stellt sicher, dass das ca_data Verzeichnis existiert"
|
||||
ansible.builtin.file:
|
||||
path: "{{ project_remote_path }}/ca_data"
|
||||
path: "{{ project_path }}/ca_data"
|
||||
state: directory
|
||||
mode: '0755'
|
||||
|
||||
- name: "Setzt die Berechtigungen für das ca_data Verzeichnis"
|
||||
ansible.builtin.file:
|
||||
path: "{{ project_remote_path }}/ca_data"
|
||||
path: "{{ project_path }}/ca_data"
|
||||
owner: '999'
|
||||
group: '999'
|
||||
recurse: true
|
||||
notify: Restart docker compose
|
||||
|
||||
- name: "Startet die Docker Compose Services"
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ project_remote_path }}"
|
||||
project_src: "{{ project_path }}"
|
||||
state: present # 'present' entspricht 'up -d'
|
||||
register: compose_output
|
||||
|
||||
@@ -44,4 +32,11 @@
|
||||
ansible.builtin.debug:
|
||||
var: compose_output
|
||||
|
||||
handlers:
|
||||
- name: Restart docker compose
|
||||
community.docker.docker_compose_v2:
|
||||
project_src: "{{ project_path }}"
|
||||
state: present
|
||||
restarted: true
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user