Czego potrzebujesz na start?
Przed rozpoczęciem konfiguracji upewnij się, że posiadasz:
- Konto AWS z dostępem do zarządzania bucketami S3
- Utworzony bucket S3, który będzie celem synchronizacji
- Klucze dostępowe AWS (AWS_ACCESS_KEY_ID i AWS_SECRET_ACCESS_KEY)
- Repozytorium GitHub z włączoną funkcją GitHub Actions
Krok 1: Przygotowanie bucketa S3
Najpierw musisz utworzyć i odpowiednio skonfigurować bucket S3:
- Zaloguj się do Konsoli AWS
- Przejdź do usługi S3 i utwórz nowy bucket (np. „moja-strona”)
- Skonfiguruj ustawienia bucketa:
- Jeśli publikujesz statyczną stronę, pamiętaj o włączeniu publicznego dostępu
- Sprawdź, czy ustawienia bucketa nie blokują publicznego odczytu, jeśli jest to wymagane
Krok 2: Konfiguracja poświadczeń AWS
Aby GitHub Actions mogło komunikować się z AWS, potrzebujesz odpowiednich poświadczeń:
- W konsoli AWS przejdź do IAM (Identity and Access Management)
- Utwórz nowego użytkownika lub wykorzystaj istniejącego z odpowiednimi uprawnieniami do S3
- Wygeneruj klucze dostępu (AWS_ACCESS_KEY_ID i AWS_SECRET_ACCESS_KEY)
- W swoim repozytorium GitHub przejdź do Settings > Secrets and variables > Actions
- Dodaj następujące sekrety:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_S3_BUCKET (nazwa Twojego bucketa)
- Opcjonalnie: AWS_REGION (np. us-east-1)
Uwaga: Zawsze przechowuj poświadczenia jako zaszyfrowane sekrety, nigdy nie umieszczaj ich bezpośrednio w kodzie!
Krok 3: Utworzenie workflow GitHub Actions
Teraz musimy stworzyć plik konfiguracyjny workflow:
- W repozytorium utwórz katalog
.github/workflows
(jeśli jeszcze nie istnieje) - Utwórz w nim plik
s3-sync.yml
Krok 4: Konfiguracja workflow
Poniżej znajduje się przykładowy plik konfiguracyjny, który synchronizuje zawartość katalogu public
z bucketem S3:
name: Upload Website
# Workflow uruchamiany przy pushu do brancha master
on:
push:
branches:
- master
jobs:
deploy:
runs-on: ubuntu-latest
steps:
# Krok 1: Pobranie repozytorium
- name: Checkout repozytorium
uses: actions/checkout@v3
# Krok 2: Synchronizacja z S3
- name: Sync to S3
uses: jakejarvis/s3-sync-action@v0.5.1
with:
# Dodatkowe flagi dla polecenia aws s3 sync
args: --acl public-read --follow-symlinks --delete --exclude '.git/*'
env:
AWS_S3_BUCKET: ${{ secrets.AWS_S3_BUCKET }}
AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
AWS_REGION: 'eu-west-1'# Opcjonalnie; domyślnie "us-east-1"
SOURCE_DIR: 'public'# Opcjonalnie; domyślnie synchronizowane jest całe repo
Warto wyjaśnić użyte flagi:
-acl public-read
– ustawia publiczny dostęp do przesyłanych plików-follow-symlinks
– zapewnia poprawne przetwarzanie dowiązań symbolicznych-delete
– usuwa z bucketa pliki, które nie istnieją już w repozytorium-exclude '.git/*'
– wyklucza katalog .git z synchronizacji
Krok 5: Testowanie workflow
Po skonfigurowaniu:
- Zatwierdź plik
s3-sync.yml
w repozytorium (commit & push) - Po wypchnięciu zmian do brancha master, workflow uruchomi się automatycznie
- Sprawdź wynik działania w zakładce Actions swojego repozytorium
Wskazówki i dodatkowe opcje
- Dostosowywanie synchronizacji: Możesz przekazać dowolne flagi obsługiwane przez
aws s3 sync
poprzez parametrargs
- Różne środowiska: Skonfiguruj osobne workflow dla różnych gałęzi (np. development, staging, produkcja)
- Rozwiązywanie problemów: W przypadku błędów, analizuj logi w zakładce Actions
Podsumowanie
Dzięki GitHub Actions możesz w prosty sposób zautomatyzować wdrażanie zawartości repozytorium do AWS S3. Po poprawnej konfiguracji, każda zmiana wypchana do wskazanego brancha spowoduje automatyczne zaktualizowanie zawartości bucketa S3.
Wykorzystana akcja pochodzi z GitHub Marketplace: S3 Sync Action.