Skip to content

Instantly share code, notes, and snippets.

@wojciechpuchta
Last active April 5, 2021 09:50
Show Gist options
  • Save wojciechpuchta/8fda8d448967f811b5cfa2653ac6c093 to your computer and use it in GitHub Desktop.
Save wojciechpuchta/8fda8d448967f811b5cfa2653ac6c093 to your computer and use it in GitHub Desktop.
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

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}"

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?

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.

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.

@aragorn001
Copy link

aragorn001 commented Dec 14, 2020

Diagram - Adam Brzyski

AWS-architecture-design1

@aragorn001
Copy link

aragorn001 commented Dec 14, 2020

4. CI/CD - Adam Brzyski

Tutaj mam pewnego rodzaju problem, nie mam środowiska do przetestowania takiej konfiguracji i bazuje to tylko na teoretycznym skonfigurowaniu/rozważaniu.

Zakładamy, że potrzeba skonfigurować .m2/settings.xml dla Artifactory, skonfigurować też variables w gitlab: MAVEN_CLI_OPTS, MAVEN_OPTS, MAVEN_REPO_URL, MAVEN_REPO_USER, MAVEN_REPO_PASS, paczka war jest przeznaczona na apache/tomcat serwer i użytkownik jest skonfigurowany do restartowania tomcat'a

.gitlab-ci.yml

image: maven:latest
 
variables:
  MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
  MAVEN_OPTS: "-Dmaven.repo.local=.m2/repository"
 
buildAndTest:
    script:
      - mvn verify
    artifacts:
      paths:
        - target/*
      expire_in: 10min
 
autoDeploy:
  stage: deploy
  script:
    - mvn package
    - mv target/*.war file.war
    - ssh user@server 'sudo service tomcat stop'
    - scp file.war user@server:/opt/<path>
    - ssh user@server 'sudo service tomcat start'
  artifacts:
    paths:
      - *.war
    expire_in: 14d
  only:
    - tags

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