Skip to content

Instalacja

Instalacja

Repozytorium Git służy do przechowywania kopii konfiguracji serwera oraz definicji Dockera. Repozytorium nie zawiera danych runtime ani sekretów.

Źródłem prawdy dla Dockera pozostają katalogi:

  • /srv/docker/compose/
  • /srv/docker/projects/

Założenia konfiguracyjne:

  • Repozytorium lokalne znajduje się w /srv/config/
  • Skrypty znajdują się w /srv/config/scripts/
  • Pliki konfiguracyjne synchronizacji znajdują się w /srv/backups/repo/
  • Repozytorium zdalne znajduje się w GitLab

Instalacja Git

Instalujemy Git na hoście:

sudo apt update
sudo apt install -y git
git --version

Konfiguracja

Tworzenie katalogów

Tworzymy katalogi robocze:

sudo mkdir -p /srv/config/scripts
sudo mkdir -p /srv/backups/repo

Ustawiamy właściciela repozytorium roboczego:

sudo chown -R "$USER:$USER" /srv/config

Zabezpieczamy katalog z konfiguracją skryptów:

sudo chown -R root:root /srv/backups/repo
sudo chmod 0750 /srv/backups/repo

Konfiguracja Git

Konfigurujemy tożsamość Git:

git config --global user.name "fulcro"
git config --global user.email "fulcro@fulcro.pl"
git config --global init.defaultBranch main
git config --global --list

Tworzenie klucza SSH do GitLab

Tworzymy dedykowany klucz SSH:

ssh-keygen -t ed25519 -C "fulcro@apps-server" -f ~/.ssh/id_ed25519_gitlab -N ""

Konfigurujemy klienta SSH:

mkdir -p ~/.ssh
chmod 700 ~/.ssh
micro ~/.ssh/config

Wklejamy treść:

.ssh/config
Host gitlab.com
  User git
  IdentityFile ~/.ssh/id_ed25519_gitlab
  IdentitiesOnly yes

Zabezpieczamy plik:

chmod 600 ~/.ssh/config

Wyświetlamy klucz publiczny i dodajemy go w GitLab (Preferences → SSH Keys):

cat ~/.ssh/id_ed25519_gitlab.pub

Testujemy połączenie:

ssh -T git@gitlab.com

Utworzenie repozytorium w GitLab

Tworzymy nowe repozytorium w GitLab bez inicjalizacji (bez README).

  • nazwa: apps-server
  • adres: https://gitlab.com/fulcroagency/apps-server
  • opcja „Initialize repository with a README” pozostaje odznaczona

Inicjalizacja repozytorium lokalnego

Inicjujemy repozytorium w /srv/config/:

cd /srv/config
git init
git branch -M main

Struktura repozytorium

Repozytorium zawiera wyłącznie kopie konfiguracji:

  • docker/compose/ – kopia definicji z /srv/docker/compose/
  • docker/projects/ – kopia definicji z /srv/docker/projects/
  • host/ – kopia wybranych plików z /etc, /etc/systemd, /etc/systemd/system
  • scripts/ – kopia skryptów

Konfiguracja .gitignore

Plik .gitignore blokuje sekrety oraz dane runtime przed wysłaniem do GitLab.

Tworzymy plik:

micro /srv/config/.gitignore

W pliku umieszczamy:

.gitignore
# OS junk
.DS_Store
Thumbs.db

# Editor leftovers
*.swp
*.swo
*.tmp
*.bak
*~

# Environment files
.env
.env.*
**/.env
**/.env.*

# direnv
.envrc
**/.envrc

# Allowed templates
!**/.env.example
!**/.envrc.example

# Private keys and certs
*.key
*.pem
*.crt
*.csr
*.p12

# Docker runtime data
**/data/
**/volumes/
**/logs/
**/backups/
**/secrets/

# Local compose overrides
docker-compose.override.y*ml
compose.override.y*ml
**/docker-compose.override.y*ml
**/compose.override.y*ml

# Databases
*.db
*.sqlite
*.sqlite3

# Node / Vite
**/node_modules/
**/.vite/
**/.cache/

# Frontend build output
**/dist/
**/dist-*/

# Archives and logs
*.tar
*.tar.gz
*.zip
*.7z
*.rar
*.log

Tworzenie pliku repo.env

Plik repo.env przechowuje konfigurację używaną przez skrypty synchronizacji oraz odtwarzania.

Tworzymy plik:

sudo micro /srv/backups/repo/repo.env

W pliku umieszczamy:

repo.env
REPO_ROOT="/srv/config"
REPO_USER="fulcro"
REPO_GROUP="fulcro"

SOURCE_COMPOSE="/srv/docker/compose"
SOURCE_PROJECTS="/srv/docker/projects"

# RUN_RETENTION_DAYS="30"

Zabezpieczamy plik.

Uprawnienia 0600 oraz właściciel root:root są wymagane przez skrypty ze względów bezpieczeństwa — bez tego skrypty przerwą działanie.

sudo chown root:root /srv/backups/repo/repo.env
sudo chmod 0600 /srv/backups/repo/repo.env

Skrypty synchronizacji i odtwarzania

Skrypty odpowiadają za synchronizację konfiguracji do repozytorium oraz odtworzenie konfiguracji z repozytorium na host.

Lokalizacja skryptów

Skrypty znajdują się w katalogu:

  • /srv/config/scripts/repo-sync.sh
  • /srv/config/scripts/repo-restore.sh
  • /srv/config/scripts/repo-common.sh

Skrypty repo-sync.sh oraz repo-restore.sh korzystają z repo-common.sh i oczekują, że:

  • skrypt wspólny znajduje się w tym samym katalogu
  • tworzony jest katalog uruchomienia w /srv/backups/repo/runs/20YYYYMMDD_HHMM/
  • po poprawnym wykonaniu tworzony jest marker .SUCCESS
  • emitowana jest zmienna FINAL_OUT_DIR=...

Treści skryptów

Treści skryptów

Treści skryptów opisane są w osobnych dokumentach:

repo-sync repo-restore repo-common


Uruchomienie

Initial commit i wysłanie do GitLab

Wykonujemy synchronizację repozytorium na hoście:

cd /srv/config/scripts
sudo ./repo-sync.sh all

Zapisujemy stan repozytorium:

cd /srv/config
git add -A
git commit -m "Initial snapshot: host + docker + scripts"

Dodajemy zdalne repozytorium i wysyłamy dane:

git remote add origin git@gitlab.com:fulcroagency/apps-server.git
git push -u origin main

Utrzymanie

Zmiany wprowadzamy w:

  • /etc
  • /srv/docker/compose/
  • /srv/docker/projects/
  • /srv/config/scripts/