Zdalne repozytorium Git w chmurze Amazon

GIT na AWS - title

Je┼╝eli tak jak ja nie potrafisz wyobrazi─ç sobie rozpocz─Öcia nowego projektu bez stworzenia repozytorium Git do ┼Ťledzenia zmian to mo┼╝esz by─ç zainteresowany t─ů instrukcj─ů. Poni┼╝ej opisuj─Ö jak stworzy─ç zdalne repozytorium Git (tzw. remote) na instancji EC2 w prywatnej chmurze Amazon Web Services i doda─ç je do swojego projektu.

Od czasu napisania tego tekstu zmieni┼é si─Ö troch─Ö m├│j workflow. Aktualnie korzystam z instancji Gitea, hostowanej na w┼éasnym sprz─Öcie. Je┼Ťli chcesz dowiedzie─ç si─Ö wi─Öcej, zapraszam do artyku┼éu Czym jest self-hosting?.

self-hosting wprowadzenie

Jak ja wykorzystuj─Ö Gita?

Nad wi─Ökszo┼Ťci─ů swoich projekt├│w pracuj─Ö sam. Je┼Ťli Ty pracujesz w wi─Ökszej grupie to pewnie warto samemu hostowa─ç repozytorium GIT. Moje projekty to zazwyczaj aplikacje, w ostatnich latach najcz─Ö┼Ťciej w Pythonie ale mam sporo projekt├│w w rozmaitych technologiach kt├│re interesowa┼éy mnie po drodze. Git pozwala mi ┼Ťledzi─ç wszystkie zmiany kt├│re wprowadzam w programie, powr├│ci─ç do ostatnich dzia┼éaj─ůcych wersji, pracowa─ç nad bardziej z┼éo┼╝onymi zmianami w osobnych ga┼é─Öziach (branch) czy w┼éa┼Ťnie zarz─ůdza─ç wersjami pomi─Ödzy r├│┼╝nymi urz─ůdzeniami. Za projekt uwa┼╝am te┼╝ zbi├│r danych, informacji czy plik├│w kt├│re nie s─ů aplikacj─ů. Na serwisie GitHub cz─Östo najwy┼╝ej ocenianymi repozytoriami s─ů w┼éa┼Ťnie dokumenty w formacie Markdown zawieraj─ůcy instrukta┼╝e, zbiory odno┼Ťnik├│w, narz─Ödzi, opisy protoko┼é├│w etc.. W tym kontek┼Ťcie Git wraz ze zdalnym repozytorium mo┼╝e pe┼éni─ç rol─Ö dysku lub notatnika w chmurze, konkuruj─ůc z rozwi─ůzaniami takimi jak Google Drive, Dropbox czy Evernote. Oczywi┼Ťcie przy mniejszej ergonomii ale i wi─Ökszej kontroli nad danymi.

Plusy i minusy zdalnego repozytorium

Zdalne repozytorium jest przydatne z kilku powod├│w:

  • Pozwala stworzy─ç kopi─Ö bezpiecze┼ästwa naszych danych na odr─Öbnej maszynie (lub na innym urz─ůdzeniu Ô×í´ŞĆ patrz ko┼äc├│wka tego artyku┼éu)
  • Jest kluczowe dla pracy w zespole i zarz─ůdzania wersjami, wydaniami, branchami, backlogiem, sprintami etc.
  • Osobom pracuj─ůcym w pojedynk─Ö pozwala w prosty spos├│b synchronizowa─ç dane pomi─Ödzy wieloma urz─ůdzeniami czy ┼Ťrodowiskami

Oczywi┼Ťcie s─ů te┼╝ pewne ograniczenia kt├│re nale┼╝y mie─ç na uwadze:

  • Kontrola ponad ergonomi─Ö, a wi─Öc nie b─Ödzie to tak wygodne jak wspomniany Drive czy Evernote. Git ma przede wszystkim s┼éu┼╝y─ç do kontroli wersji w rozproszonych ┼Ťrodowiskach
  • Git ma ograniczenia je┼╝eli chodzi o pliki binarne. Nie jest w stanie ich r├│┼╝nicowa─ç – ka┼╝da zmiana to wgrany od zera plik. To ma oczywi┼Ťcie sens (cho─ç s─ů rozszerzenia pozwalaj─ůce na r├│┼╝nicowanie plik├│w binarnych) ale w rezultacie ka┼╝da wersja Twojego pliku jest przechowywana w repozytorium. A wi─Öc zar├│wno jego rozmiar, jak i transfer (w przypadku klonowania repozytorium) b─Öd─ů wysokie.

Gdzie push’owa─ç?

Przez d┼éugi czas my┼Ťla┼éem ┼╝e jedynym rozs─ůdnym sposobem posiadania zdalnego repozytorium by┼éo skorzystanie z serwis├│w takich jak GitHub, GitLab czy BitBucket.

Okazuje si─Ö jednak ┼╝e uruchomienie w┼éasnego, zdalnego repozytorium na wirtualnej maszynie w chmurze (w tym opisie b─Ödzie to Amazon Web Services – AWS) jest prost─ů, tani─ů (lub darmow─ů przez rok, je┼Ťli skorzystamy z AWS Free Tier) i bezpieczn─ů alternatyw─ů.

Prost─ů, poniewa┼╝ nie musisz martwi─ç si─Ö o cenniki i zakresy funkcjonalne r├│┼╝nych serwis├│w, zak┼éada─ç kont czy dostawa─ç newsletter├│w i wa┼╝nych aktualizacji polityki prywatno┼Ťci. Za┼éo┼╝enie zdalnego repozytorium trwa dos┼éownie kilka minut. Na potrzeby zdalnego repozytorium Git wystarcz─ů nawet te najta┼äsze typy instancji – t2.micro. To w┼éa┼Ťnie t2.micro jest dost─Öpne za darmo przez rok w ofercie AWS Free Tier.

Jest to w ko┼äcu bezpieczne, bo masz pe┼én─ů kontrol─Ö nad kodem i tym z kim si─Ö nim dzielisz. Ryzyko ┼╝e Twoje dane zostan─ů ujawnione w niepo┼╝─ůdany spos├│b (np. poprzez b┼é─Ödy w ustawieniach uprawnie┼ä projektu) jest mniejsze. Mo┼╝esz zastosowa─ç dowolny mechanizm autoryzacji, ja natomiast preferuj─Ö ten domy┼Ťlny oferowany przez AWS – prywatne pary kluczy 2048-bit SSH-2 RSA.

Korzystaj─ůc z wbudowanych w AWS mechanizm├│w mo┼╝esz tak┼╝e w prosty spos├│b robi─ç snapshoty swoich maszyn (a dok┼éadnie pami─Öci EBS), kt├│re mog─ů pe┼éni─ç funkcje kopii bezpiecze┼ästwa.

Wymagania

Potrzebujesz konta AWS oraz instancji EC2. O zak┼éadaniu konta i startowaniu EC2 napisa┼éem troch─Ö dwa lata temu tutaj ­čĹë­čĆ╝ Jak postawi─ç darmowy serwer VPN w chmurze Amazon Ôťö´ŞĆ.

Zakładam, że:

  • Posiadasz klucz prywatny .pem pozwalaj─ůcy na po┼é─ůczenie si─Ö z instancj─ů EC2 oraz znasz publiczny adres (DNS lub IP) swojej instancji
  • Posiadasz projekt kt├│rym chcesz w ten spos├│b zarz─ůdza─ç
  • Masz zainstalowanego Git’a
  • Pracujesz na Linuxie/Unixie. Jest to istotne w sekcji o konfiguracji ssh – je┼Ťli jeste┼Ť na Windowsie/Mac OS to b─Ödziesz musia┼é wykaza─ç si─Ö odrobin─ů google-fu

Lokalne repozytorium

Je┼Ťli jeszcze tego nie zrobi┼ée┼Ť – utw├│rz lokalne repozytorium Git w folderze nadrz─Ödnym Twojego projektu i dodaj pierwszy commit:

$ git init
$ git add .
$ git commit -m "zaczynamy initial commit"

Zdalne repozytorium

Zaloguj si─Ö na EC2 korzystaj─ůc z klucza .pem:

$ ssh -i klucz_ec2.pem ubuntu@ec2-104-206-90-115.eu-west-1.compute.amazonaws.com

W ten spos├│b (podaj─ůc namiar na klucz i pe┼ény adres maszyny) logujemy si─Ö po raz ostatni. W kolejnej sekcji skonfigurujemy to po┼é─ůczenie w bardziej przyst─Öpny spos├│b, przynajmniej na Linuksie. Stw├│rz na EC2 folder odpowiadaj─ůcy nazwie Twojego projektu. Na ko┼äcu nazwy folderu dodaj .git zgodnie z przyj─Öt─ů konwencj─ů:

$ mkdir python_project.git 
$ cd python_project.git

Teraz utworzymy repozytorium bare – a wi─Öc takiego, w kt├│rym nie potrzebujesz bezpo┼Ťrednio pracowa─ç na roboczej wersji plik├│w. S┼éu┼╝y ono wy┼é─ůcznie do przyjmowania zmian, zarz─ůdzania wersjami i udost─Öpniania kodu innym maszynom/u┼╝ytkownikom:

$ git init . --bare

Gotowe. Sprawd┼║ czy u Ciebie wygl─ůda to podobnie. W folderze znajdziesz teraz struktur─Ö zbli┼╝on─ů do zawarto┼Ťci katalogu .git w zwyk┼éym, roboczym repozytorium:

Opcjonalnie: skonfiguruj po┼é─ůczenie ssh

Jeżeli ta sekcja jest dla Ciebie niejasna polecam ten artykuł: How to SSH to AWS servers using an SSH config file?.

Zanim dodamy zdalne repozytorium (remote) do naszego projektu, warto skonfigurowa─ç po┼é─ůczenie SSH tak, aby domy┼Ťlnie korzysta┼éo z pliku z kluczem prywatnym .pem. Dzi─Öki temu ┼é─ůczenie si─Ö z instancj─ů oraz dodawanie i zarz─ůdzanie remote b─Ödzie prostsze.

Tutaj opisuj─Ö jak zrobi─ç to w Linuksie, je┼Ťli korzystasz z innej platformy musisz u┼╝y─ç google-fu w kolejnych sekcjach instrukcji. Sk┼éadnia polece┼ä odnosz─ůca si─Ö do adresu zdalnej instancji mo┼╝e by─ç inna – musisz wskaza─ç namiary na klucz .pem.

Przenie┼Ť plik .pem do folderu ~/.ssh/ oraz stw├│rz (je┼Ťli jeszcze nie istnieje) plik ~/.ssh/config:

$ cp klucz_ec2.pem ~/.ssh/ 
$ nano ~/.ssh/config

W pliku config mo┼╝esz zdefiniowa─ç po┼é─ůczenie SSH (kt├│re b─Ödzie wykorzystane r├│wnie┼╝ przez komendy git). Tak wygl─ůda m├│j plik config:

Host ec2-remote 
  Hostname ec2-104-206-90-115.eu-west-1.compute.amazonaws.com 
  User ubuntu 
  IdentityFile /home/lokalny-user/.ssh/klucz_ec2.pem

W polu Host wpisz dowoln─ů nazw─Ö pod kt├│r─ů chcesz zdefiniowa─ç swoje po┼é─ůczenie. Ja wybra┼éem ec2-remote. Warto┼Ť─ç Hostname wskazuje na publiczny adres DNS (mo┼╝e to by─ç tak┼╝e publiczne IP) instancji EC2. User to domy┼Ťlna nazwa u┼╝ytkownika kt├│ry zale┼╝y od wybranego obrazu instancji (AMI). Lista dla najpopularniejszych obraz├│w jest w dokumentacji Amazon Web Services: Get information about your instance . W polu IdentityFile zwr├│─ç uwag─Ö na nazw─Ö lokalnego u┼╝ytkownika oraz dok┼éadn─ů (pe┼én─ů) ┼Ťcie┼╝k─Ö do pliku z kluczem .pem.

Je┼╝eli wszystko si─Ö powiedzie – komenda $ ssh ec2-remote powinna zalogowa─ç Ci─Ö na maszynie EC2. Jest jednak szansa ┼╝e otrzymasz komunikat podobny do tego:

kuba@local:~/.ssh$ ssh ec2-remote
The authenticity of host 'ec2-104-206-90-115.eu-west-1.compute.amazonaws.com (104.206.90.115)' can't be established.
ECDSA key fingerprint is SHA256:UUqpym0NE8RJAKIESSMIESZNEZNACZKITUTAJ42342wU.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'ec2-104-206-90-115.eu-west-1.compute.amazonaws.com,104.206.90.115' (ECDSA) to the list of known hosts.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions 0644 for '/home/kuba/.ssh/klucz_ec2.pem' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "/home/kuba/.ssh/klucz_ec2.pem": bad permissions
ubuntu@ec2-104-206-90-115.eu-west-1.compute.amazonaws.com: Permission denied (publickey).

Klucz to Permissions 0644 for (...) are too open. To oznacza ┼╝e potrzebujesz bardziej restrykcyjnych uprawnie┼ä dost─Öpu do pliku .pem. Skorzystaj z chmod – tryb 400 sprawi ┼╝e plik b─Ödzie dost─Öpny tylko dla bie┼╝─ůcego u┼╝ytkownika i tylko do odczytu. Po zmianie uprawnie┼ä u mnie wygl─ůda to tak:

kuba@local:~/.ssh$ chmod 400 klucz_ec2.pem
kuba@local:~/.ssh$ ssh ec2-remote
Welcome to Ubuntu 18.04.5 LTS (GNU/Linux 5.3.0-1034-aws x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Sun Sep 13 (...)

Dodaj zdalne repozytorium do projektu

Korzystaj─ůc ze skonfigurowanego po┼é─ůczenia SSH dodaj teraz nowy remote do swojego projektu Git. Upewnij si─Ö ┼╝e jeste┼Ť we w┼éa┼Ťciwym folderze i skorzystaj z komendy git remote add:

$ pwd 
/home/kuba/python_project 
$ git remote add origin ubuntu@ec2-remote:python_project.git

Pami─Ötaj o ko┼äc├│wce .git na zdalnym repozytorium, o nazwie u┼╝ytkownika i zdefiniowanym hoscie. W kwestii nazewnictwa – remote z kt├│rego klonujemy pierwotny projekt (o tym dzisiaj nie pisa┼éem) lub kt├│re jest podstawowym zdalnym repozytorium (o tym by┼éo), zgodnie z konwencj─ů nazywa si─Ö origin, ale mo┼╝esz to zmieni─ç. A teraz moment prawdy – pushnijmy zmiany na EC2:

$ git push -u origin master

Je┼╝eli wszystko si─Ö powiod┼éo powiniene┼Ť zobaczy─ç podobny komunikat:

kuba@local:~/python_project$ git push -u origin master
Counting objects: 85, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (76/76), done.
Writing objects: 100% (85/85), 126.50 KiB | 4.12 MiB/s, done.
Total 85 (delta 55), reused 0 (delta 0)
To ec2-remote:python_project.git
   e321cbf..c93cb41  master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
Jak sprawdzi─ç list─Ö zdalnych repozytori├│w w projekcie?

Skorzystaj z polecenia git remote -v, dzi─Öki niemu zobaczysz wszystkie zdalne repozytoria. Je┼╝eli nie korzystasz ju┼╝ z kt├│rego┼Ť z nich mo┼╝esz je usun─ů─ç poleceniem git remote remove origin – oczywi┼Ťcie zmie┼ä origin na w┼éa┼Ťciw─ů nazw─Ö remote’a.

Jako zdalne repozytorium mo┼╝esz doda─ç tak┼╝e pami─Ö─ç USB, na przyk┼éad pendrive lub dysk zewn─Ötrzny. Jest to dobra alternatywa do repozytorium na AWS oraz jako dodatkowy backup. Wystarczy ┼╝e na dysku USB utworzysz repozytorium bare. Dodaj─ůc remote do swojego projektu u┼╝yj pe┼énej ┼Ťcie┼╝ki repozytorium z USB.

Qingdao, Chengyang, 2015

Podsumowanie

  1. Dodaj zdalne repozytorium na wszystkich urz─ůdzeniach kt├│re powinny mie─ç dost─Öp do projektu
  2. Korzystaj z git push i git pull podczas pracy z kodem. Wykorzystaj ga┼é─Özie oraz tagi aby sprawniej zarz─ůdza─ç zmianami
  3. ….
  4. Profit

Je┼╝eli masz ju┼╝ maszyn─Ö EC2 z dzia┼éaj─ůcym po┼é─ůczeniem SSH mo┼╝esz wykorzysta─ç j─ů, w bardzo prosty spos├│b, do stworzenia prywatnego, darmonowego serwera VPN.

P.S.

Zdj─Öcie tytu┼éowe (na g├│rze) zrobi┼éem w Korei Po┼éudniowej w 2014 roku. Przedstawia widok z dachu hotelu w Seulu ÔŁĄ´ŞĆ, gdzie┼Ť w dzielnicy Myeongdong. To drugie (w podsumowaniu) zrobi┼éem w Qingdao w 2015 roku. Oba aparatem Fujifilm X100s.

Autor: kuba

Pracuj─Ö w IT, sprzedaj─ůc oprogramowanie klasy APS/MES firmom produkcyjnym. Nie jestem software developerem ale odk─ůd zacz─ů┼éem w Turbo Pascalu zawsze co┼Ť pisz─Ö - ostatnio w Pythonie. Lubi─Ö technologie, mocn─ů kaw─Ö i dobre zdj─Öcia ­čĄÖ

Dodaj komentarz

Tw├│j adres e-mail nie zostanie opublikowany.