Skip to main content

Bazy danych

kkrolikowskiAbout 1 minGuidedocker

Bazy danych zostały uruchomione jako kontenery dockera na vm-ce srv-db3. Korzystają z nich różne aplikacje uruchomione w klastrze kubernetes. Wszystkie bazy danych przechowują dane w katalogu: /home/cloud-user/containers.

CPURAMDiskOS
48GB50GBubuntu Ubuntu

Lista aplikacji

TODO: Mongodb

Typ BazyKontenerPortAplikacje
redis6379immich-microservices
immich-ml
immich-server
pgvecto5433immich-microservices
immich-ml
immich-server
postgres5432mattermost
mysql3306gitea
passbolt
semaphore
wikijs

Konfiguracja

Do uruchamiania baz danych służy repozytorium: homelab-services. Definicja kontenerów baz danych znajduje się w pliku: group_vars/group_database. Plik zorganizowany jest w taki sposób, aby umożliwić ansiblowi iterację po wszystkich zdefiniowanych w pliku kontenerach.

containers:
  pgvecto:
    image: tensorchord/pgvecto-rs:pg14-v0.2.0
    volumes:
      - "/home/{{ ansible_user }}/containers/pgvecto:/var/lib/postgresql/data"
    owner: "999"
    group: "100"
    ports:
      - "5433:5432/tcp"
    env:
      PGDATA: "/var/lib/postgresql/data"
      POSTGRES_PASSWORD: "{{ lookup('ansible.builtin.env', 'POSTGRES_PASSWORD') }}"

Opcje kontenerów

Playbook iteruje po elementach containers. Wsystkie potrzebne kontenery dopisujemy do tego obiektu. Obsługiwane na ten moment parametry kontenerów:

  • image: identyfikator kontenera wraz z jego wersją
  • volumes: lista mapowań katalogów vm-ki do kontenera. Używamy tej opcji do permanentnego przechowywania danych
  • owner / group: identyfikator uzytkownika i grupy, która w kontenerze ma mieć uprawnienia do zapisywania danych na dysku
  • ports: lista mapowań portów vm-ki na port w kontenerze
  • env: lista zmiennych środowiskowych wymaganych przez kontener

Mapowanie

Mapowanie volumes oraz ports zawsze odbywa się w ten sposób, że po lewej stronie dwukropka mamy katalog i port vm-ki a po prawej stronie katalog i port w kontenerze dockera.

Nowe opcje kontenerów

Jeśli obecny zestaw opcji nie będzie wystarczający aby uruchomić kontener, istnieje możliwość dodania ich w konfiguracji. W tym celu należy zdefiniować nowy kontener z dodatkowymi opcjami w pliku. group_vars/group_database i wprowadzić nowe opcje do pliku roles/database/tasks/containers.yaml.

group_database
containers:
  example:
    image: example/example:latest
    ....
    foo: bar

Wdrażanie konfiguracji

Wdrażanie odbywa się poprzez złożenie pull requesta. Po pozytywnym przejściu przez code review, mergu do main oraz otagowaniu wersji odbywa się wdrożenie usługi na maszynie wirtualnej.

Kontenery

Bazy danych są usługami w których do tej pory nie miam potrzeby ingerować w ich wewnętrzne ustawienia. Wdrożone kontenery mają ustawiony w playbooku state: started. Oznacza to, że podczas kolejnych iteracji związanych z wdrażaniem nowych usług, działające kontenery nie będą restartowane.