• Home
  • /
  • AWS
  • /
  • S1E4 Instalacja obrazu Jenkinsa w doker na serwerze AWS

S1E4 Instalacja obrazu Jenkinsa w doker na serwerze AWS

Dzięki konteneryzacji developerzy mogą w łatwy i bardziej efektywny sposób tworzyć aplikacje. Moim zdaniem, docker bardzo ułatwia i przyspiesza proces wytwarzania oprogramowania, dlatego znajomość dockera jest pozycją obowiązkową w portfolio każdego developera, który chce efektywnie tworzyć aplikacje.

Ten artykuł zawiera informacje o:

* Poprawnej instalacji docker na serwerze z systemem Debian 10,
* Instalacji Jenkinsa jako docker image oraz jego konfiguracja,
* Konfiguracji nginx pod zainstalowanego Jenkinsa

Przed przystąpieniem do instalacji powinieneś wykonać kroki z mojego poradnika lub posiadać serwer z zainstalowanym nginx:

S1E3: instalacja nginx na serwerze aws t1.micro 

1.Instalacja Dockera na systemie Debian 10 w Amazon Web Services

Pierwszym krokiem jaki wykonasz będzie uaktualnienie pakietów komendą:

sudo apt update

Jeżeli posiadasz stare wersje dockera i chcesz się ich pozbyć, przed wykonaniem instalacji usuń starocie:

sudo apt-get remove docker docker-engine docker.io containerd runc

Teraz zainstaluj pakiety które są wymagane przez apt do intalacji przez protokół HTTPS

sudo apt-get install \
    ca-certificates \
    curl \
    gnupg \
    lsb-release

U mnie w systemie były już wszystkie zainstalowane.

Teraz dodaj klucz GPG dockera, klucz ten pozwala na bezpieczne przekazywanie informacji pomiędzy Twoim serwerem a dockerem. Komunikacja przy użyciu GPG polega na asymetrycznym szyfrowaniu przy użyciu pary kluczy (prywatnego i publicznego), które są generowane dla użytkowników w tym wypadku dla Twojego serwera. Dzięki kluczowi publicznemu twoje dane są szyfrowane, a klucz prywatny pozwala na ich deszyfrowanie.

Wykonaj komendę dodającą klucz GPG repozytorium Dockera:

curl -fsSL https://download.docker.com/linux/debian/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg

Kiedy wszystko przebiegło pomyślnie, dodaj repozytorium Dockera do apt:

echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/debian \
  $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

Ok, powinieneś na tym etapie posiadać dodane repozytorium Dockera do swojego serwera, teraz zaktualizuj pakiety:

sudo apt update

Teraz wykonasz operację, dzięki której upewnisz się, że pobierasz i instalujesz dockera z oficjalnego repozytorium dockera zamiast debianowego repozytorium:

apt-cache policy docker-ce

Jeśli widzisz że pobiera z docker.com jest ok, możemy przejść do instalacji dokera

Widok poprawnie ustawionego repozytorium pobierania dockera

Wykonaj komendę instalującą dockera na debianie:

sudo apt install docker-ce

Właśnie zainstalowałeś dockera który uruchamia się przy starcie systemu, możesz zobaczyć czy wszystko jest w porządku komendą:

sudo systemctl status docker

Powinieneś w konsoli zobaczyć:

Widok poprawnej instalacji dockera w konsoli

Możesz także sprawdzić poprawność działania dokcera komendą:

sudo docker run hello-world

Powyższa komenda pobiera testowy obraz dokera i uruchamia kontener który ma za zadanie wyświetlenie tekstu Hello from docker! I dalszych linii informujących co właśnie się wydarzyło.

2. Instalacja kontenera Jenkinsa na serwerze aws

Pierwszym krokiem będzie wejście do repozytorium dockera https://hub.docker.com/  i odszukanie wersji Jenkinsa która Tobie odpowiada, w tym miejscu uwaga na wersję już nie wspieraną, pierwszą w wynikach wyszukiwania, należy jej nie używać:

Ja będę w tym poradniku korzystał z wersji jenkins/Jenkins, pobierz obraz komendą:
docker pull jenkins/jenkins

Po pobraniu obrazu uruchomisz pierwszy raz kontener z obrazu jenkins/jenkins, będziesz musiał go następująco skonfigurować, dodając do komendy docker run:

-d <= włączenie kontenera w detached mode czyli kontener będzie działał w tle
- p 8080:8080 <= mapowanie portu 8080 z obrazu dockera na port 8080 dostępny poza obrazem
--restart always <= ustawia automatyczne uruchomienie kontenera jeśli został zatrzymany nie przez użytkownika. Można go zatrzymać manualnie
-v jenkins_home:/var/jenkins_home <= nadanie nazwy jenkins_home  dla dockerowego volume, volume jest to nic innego jak miejsce poza kontenerem, czyli na Twoim serwerze, które będzie przechowywać dane, które po restarcie / usunięciu kontenera zostaną stracone np. użytkownicy, info o buildach i pluginach. Obrazy dockera są immutable dlatego jeśli chcesz zachować dane musisz dodać volume
Twój volume Jenkins_home mapujesz na katalog wewnątrz kontenera / var/jenkins_home

Teraz wykonaj komendę uruchamiającą Jenkinsa:

docker run --name jenkins -d -p 8080:8080 --restart always -v jenkins_home:/var/jenkins_home --env JAVA_OPTS=-Dhudson.footerURL=https://jenkins.com.pl jenkins/jenkins:lts-jdk11

Pierwsze uruchomienie Jenkinsa jest już dostępne na porcie 8080 który zabklokowałeś przez aws, teraz musisz skonfigurować nginx jako reverse proxy

3. Konfiguracja reverse proxy nginx pod jenkinsa

Edytuj plik konfiguracyjny nginx komendą:

sudo vim /etc/nginx/sites-available/default

w sekcji serwer dla konfiguracji SSL w pierwszej kolejności wykomentuj:

try files $uri  $uri/=404;

Zapobiegnie to przekierowaniu na stronę 404, następnie dodaj do pliku:

      proxy_set_header        Host $host;
      proxy_set_header        X-Real-IP $remote_addr;
      proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header        X-Forwarded-Proto $scheme;

      # Fix the "It appears that your reverse proxy set up is broken" error.
      proxy_pass          http://localhost:8080;
      proxy_read_timeout  90;

      proxy_redirect      http://localhost:8080 https://jenkins.com.pl;

Powyższa konfiguracja pozwoli na przekazywanie nagłówków, ponieważ dla ustawień defaultowych nginx nie przekazuje nagłówków. Podmień moją nazwę domeny Jenkins.com.pl na swoją

Poprawna konfiguracja reverse proxy nginx dla jenkinsa

Teraz przetestuj konfigurację, czy jest poprana komendą:

sudo service nginx configtest

Robimy tylko zmiany w konfiguracji, dlatego zamiast restartu wykonaj komendę:

sudo systemctl reload nginx

4. Instalacja i konfiguracja jenkinsa

Jeśli wszystko przebiegło zgodnie z planem, po wejściu na swoją domenę powinieneś zobaczyć ekran odblokowujący jenkinsa:

Widok ekranu startowego świeżo instalowanego jenkinsa

Hasło administratorskie znajduje się w logach Jenkinsa, aby je zobaczyć wykonaj komendę:

sudo docker ps

Teraz skopiuj container id i wykonaj komendę:

sudo docker logs {tu wstaw id kontenera}

Przewiń logi do miejsca w którym jest hasło do odblokowania Jenkinsa:

Zrzut z logów w którym jest inicjalne hasło jenkinsa

Po wpisaniu hasła będą pojawiać się okna w których konfigurujemy instalację Jenkinsa:

W pierwszym wybieramy Zainstaluj sugerowane wtyczki

Pierwszy ekran konfiguracji instalacji jenkisa: wybór pluginów
Widok instalacji jenkinsa

Jeżeli wszystko przebiegło pomyślnie powinieneś móc się zalogować do jenkinsa podanymi wcześniej danymi

Gotowe, posiadasz już zabezpieczonego, produkcyjnego Jenkinsa! W następnym poradniku zajmiesz się konfiguracją budowania aplikacji!

One Comment

Dodaj komentarz