Skip to content

Instantly share code, notes, and snippets.

@electropolis
Forked from wojciechpuchta/devops.md
Last active Nov 27, 2020
Embed
What would you like to do?
DevOps / SRE Regular

1. Ansible

Popraw wszystkie błędy w pliku date-flag-playbook.yml (poniżej). Jak uruchomić ten plik? (napisz komendę w bash):

---
- host: localhost
  task:
    - name: create date_flagg file
      lineifile:
         creates: yes
       lines: "{{ ansible_date_time.date }}"
dests: /tmp/date_flag

Rozwiązanie

---
- hosts: localhost
  tasks:
    - name: create date_flagg file
      lineinfile:
      	path: /tmp/date_flagg
      	creates: yes
       	line: "{{ ansible_date_time.date }}"

2. bash

  • a) przeiteruj przez linie w pliku ./ttt i wykonaj na każdej z nich polecenie echo
  • b) ustaw limit otwartych plików na 1024 w obecnej sesji logowania
  • c) Popraw wszystkie błędy w poniższym wywołaniu:
DOCKER_FLAGS="-ti ubuntu:latest cat /etc/resolf.conv"
docker runn "${DOCKER_FLAGS}"

Rozwiązanie

a) cat ttt | while read line; do echo $line; done
b) ulimit -S -n <liczba>  (jednak nie wieksza niż HARD -> ulimit -n -H) / Chodź domyślnie SOFT wynosi 1024
DOCKER_FLAGS="-it ubuntu:latest cat /etc/resolv.conf"
docker run ${DOCKER_FLAGS}

3. networking

Rozważ architekturę, w której na serwerze app01.local uruchomiony jest Apache Tomcat, który na porcie 8080 wystawia aplikację webową "X". Maszyna app01.local nie ma dostępu do Internetu, ale posiada serwer ssh (port 2222). Firewall blokuje wszystkie połączenia przychodzące do app01.local oprócz połączeń z serwera jump.local skierowanych na port 2222. W jaki sposób otworzysz aplikację "X" w przeglądarce na swoim laptopie biorąc pod uwagę fakt, że możesz połączyć się do root@jump.local za pomocą ssh, a użytkownik root z jump.local ma dodany klucz ssh na app01.local?

Rozwiązanie

app01 [Apache 8080 & SSH 2222] jump [ SSH 22 & Whitelisted on app01 => SSH(2222)]

Naprojściej jest dodać klucz do ssh-agent'a eval "$(ssh-agent -s)" a następnie dodać klucze do ssh-agenta ssh-add ~/.ssh/id_rsa Następnie SSH tunneling z parametrami -f -N

ssh -N -f -o "ProxyJump root@jump.local" -p 2222 root@app01.local -L 127.0.0.1:8080:0.0.0.0:8080

po -L zastosowano 127.0.0.1 dodatkowo aby udostępnić stronę jedynie na naszym localhoscie Proxy jump można podać z -o "ProxyJump lub -J bez options czyli -o. Używam dłuższej nazwy by było bardziej czytelne.

4. CI/CD

Napisz plik .gitlab-ci.yml lub bitbucket-pipelines.yml, który wykorzystywałby Mavena do zbudowania kodu i wysłania paczki war do Artifactory, zakładając, że pom.xml jest odpowiednio skonfigurowany. Opcjonalnie, jeśli nie jesteś zaznajomiony z Mavenem może to być Gradle i Artifactory, albo nawet Python i PyPi lub Composer i Satis.

Rozwiązanie

image: maven:latest

variables:
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"

cache:
  paths:
    - .m2/repository/
    - target/

build:
  stage: build
  script:
    - mvn $MAVEN_CLI_OPTS compile

test:
  stage: test
  script:
    - mvn $MAVEN_CLI_OPTS test

deploy:
  stage: deploy
  script:
    - mvn $MAVEN_CLI_OPTS deploy
  only:
    - master

5. Architektura

Zaprojektuj infrastrukturę dla aplikacji webowej na AWS lub Azure, biorąc pod uwagę następujące warunki:

  • frontend to aplikacja SPA w Angular
  • bakcend to REST API w Python uruchomione na dockerze
  • backend musi być samo-skalowalny, zależnie od liczby odwiedzających
  • aplikacja korzysta z bazy danych Mysql
  • aplikacja korzysta z Redis do zarządzania sesją
  • aplikacja posiada funkcjonalność uploadowania plików przez użytkowników. Pliki te muszą być następnie dostępne dla serwerów backendowych

Forma odpowiedzi dowolna.

Rozwiązanie

Diagram infrastruktury

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment