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ść:
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/systemscripts/– 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:
# 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_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:
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/