mk321
mk321
2
#java #spring #programowanie #git

Jak radzicie sobie z konfiguracją w Spring Boot?

Mam aplikację i w nim application.properties, przykładowo 23 parametry:
- 20 parametrów, to konfiguracja domyślna (zawsze taka sama, czy to developersko czy produkcyjnie, ale jest w pliku, żeby w razie czego dało się to szybko zmienić), ma to być zapisane w repozytorum,
- 3 parametry, które nie mogą być domyślne (np. klucz API, ścieżka do folderu do zapisu plików itd), wartości nie mogą być zapisane w repozytorium (ze względów bezpieczeństwa jak np. API key lub nie są znane jak np. ścieżka), czyli ich wartości w repozytorm są puste, ale przed uruchomieniem aplikacji należy je uzupełnić.

I teraz zwykła praca z takim projektem wygląda tak:
- ściągasz projekt,
- ręcznie uzupełniasz 3 parametry,
- robisz zmiany w kodzie (i często w konfiguracji domyślniej, w którymś z tych 20 parametrów),
- chcesz zrobić commita ze zmianami,
- ale musisz pamiętać, żeby przed zrobieniem commita usunąć wartości tych 3 parametrów, które nie są domyślne,
- potem znowu musisz uzupełnić te 3 parametry, żeby móc kontynuować pracę.

Jest to bardzo podatne na błędy (raz zapomnisz i na repozytorium leci tajny klucz).
Jest to bardzo uciążliwe, bo co chwila trzeba uzupełniać i usuwać.

Nie możesz dodać pliku application.properties do .gitignore, bo pozostałe zmiany w tym pliku chcesz zacommitować.

Jak sobie z tym radzicie?


  • Najlepsze
  • Wszystkie komentarze
globalbus
globalbus
@mk321:
- hasła i klucze API można zaszyfrować Jasyptem i trzymać w repo.
- parametry można przekazywać w zmiennych środowiskowych i system properties podczas uruchamiania. To możesz dopisać do parametrów bootRuna czy innego czegoś, czym lokalnie odpalasz projekt (dockera, docker-compose'a czy innego dziada)
Masuq0
Masuq0
  • adult
2
Treść przeznaczona dla osób powyżej 18 roku życia...
draxgar
@mk321: klucze które są wrażliwe, możesz mieć, ale jako zmienne środowiskowe. Zamiast wpisywać wartość hasła dla admina, możesz użyć zmiennej środowiskowej ${ADMIN_PASSWORD}. Taki klucz możesz spokojnie zacommitować, a na środowisku lokalnym dodać sobie do IDE takie zmienne lub w zmiennych systemowych.
j.....r
j.....r
@mk321: Tak długo jak nie zmieniasz tego pliku to możesz użyć git update-index --assume-unchanged
Jeśli oczywiśćie korzystasz z GITa
k.....g
@mk321: robisz sobie drugi plik a propertiesami no. appliaction-private.yml, dodajesz go do ignora. W głównym application.properties te klucze zostawiasz puste i dodajesz koniecznie nowy profil o nazwie private. Konfigurujesz sobie w application-private.yml co trzeba(klucze, loggery itd) i już :) Nigdy klucze nie polecą do repo a przy okazji będziesz miał fajny pliczek żeby lokalne ustawienia mieć tylko dla siebie
kickli
@mk321: możesz utworzyć kilka configów i odpalać z apke z flagą
Kresse
@mk321: Zrób sobie własny profil application-mk231.properties w którym ustawiasz lokalnie potrzebne zmienne.
jesionka
jesionka
@mk321: powtórzę za @globalbus, moim zdaniem szyfrowanie wszelakich kluczy, haseł w propertiesach springowych, to po prostu dobra praktyka. Nawet jak stworzysz osobny plik pod specjalny profil, to będziesz musiał pamiętać, aby go przypadkiem nie dodać do commit'a lub trzymać go gdzieś z boku, co jest słabe. A jak nie Ty, to ktoś inny to w końcu wrzuci do repo (jeśli pracujesz w zespole). Nie znam architektury Twojej aplikacji,
mk321
mk321 Autor
  • adult
0
Treść przeznaczona dla osób powyżej 18 roku życia...
globalbus
globalbus
@mk321: jakoś nie łapię problemu. W pracy środowisk mam nastukane wiele, a że robię w integracji systemów, to endpointów i haseł w każdym jest pełna kombinacja (tego są setki kluczy w yamlach i propertiesach). Jakoś plik/zestaw plików per środowisko to nie jest coś, czego nie można ogarnąć. Wrzuca się to do gita i tam wersjonuje. Narzędzia CI sobie to wdrażają wedle potrzeby. Dla developerów jest oddzielny zestaw konfiguracyjny, który kopiuje
mk321
mk321 Autor
0
@globalbus: wrzucasz zaszyfrowane hasła na publiczne repozytoria? Daj link do GitHuba :D

W zamkniętych repozytoriach (nie koniecznie firmowych, bo może być firmowe, ale dostęp mogą mieć niepowołane osoby) może to się sprawdza. Wiem, że admini mają np. repozytoria z samymi hasłami. Ale nie jest to trzymane razem kodem, żeby każdy praktykant mógł to sobie oglądać.
globalbus
globalbus
globalbus
  • adult
0
Treść przeznaczona dla osób powyżej 18 roku życia...