====== Все что должен знать DevOps про HTML, HTTP и REST ======
===== Реклама =====
* Всем привет! Предлагаем Вашему вниманию очередной "воспроизводимый в домашних условиях" вебинар. Давайте посмотрим, какие знания про HTML, HTTP и REST позволят нам решать обычные, стоящие перед DevOps инженером задачи
===== Техническое задание =====
* Структура и полезные мета теги HTML
* Использование заголовков HTTP для предоставления доступа к приложению
* Использование REST интерфейса для управления и тестирования приложения
===== Запись вебинара =====
Тэги: HTML, HTTP, REST, Nginx, Apache, Reverse proxy, Docker, MobaXterm, Wireshark, Postman
===== Шаг 1. HTML =====
Задачи:
- опубликовать информацию на web странице
- сделать редирект с одной web страницы на другую
* Используем [[Сервис SSH#MobaXterm]], логин student
* [[https://habr.com/ru/articles/813799/|DPI из подручных материалов]] (Шаги с 1-го по 3-й, можно без proxy_set_header)
student@debian:~$ sudo -i
debian:~# docker exec -ti http-app bash
root@5da33f8442d4:/usr/local/apache2# cat htdocs/index.html
debian:~# HTTP_APP_ROOT=$(docker inspect http-app -f {{.GraphDriver.Data.MergedDir}})
debian:~# cat ${HTTP_APP_ROOT}/usr/local/apache2/htdocs/index.html
* [[Сервис HTTP#Примеры HTML]]
===== Шаг 2. HTTP =====
* [[Сервис HTTP#Пример HTTP диалога]]
* [[https://en.wikipedia.org/wiki/List_of_HTTP_header_fields]]
Задачи:
- сохранение реального IP адреса клиента
- доступ к приложению через https реверс прокси
==== Анализ заголовков через в сетевом трафике ====
* Реклама [[Сервис SSH#MobaXterm]] для работы с файлами
debian:~# timedatectl set-timezone Europe/Moscow
student@debian:~$ sudo tcpdump -nniany -A host 172.17.0.2 -w dump1.dmp
* [[Утилита Wireshark]]
==== Анализ заголовков с использованием журнала ====
* Возвращаем proxy_set_header ... в nginx
debian:~# docker logs http-app -f
debian:~# cat ${HTTP_APP_ROOT}/usr/local/apache2/conf/httpd.conf
...
LogFormat "%h %l %u %t \"%r\" %>s %b %{X-Forwarded-For}i" common
...
debian:~# ps ax | grep http
debian:~# kill -HUP NNNNN
==== Управление заголовками для доступа к Web приложению ====
* [[Сервис Keycloak]] docker-compose, -user, -volumes, -ports, -ssl, -postgresql
* В паузах можно рассказать о [[https://habr.com/ru/companies/webo/articles/327410/|Распространение стандарта TLS SNI]]
admincmd> notepad C:\Windows\System32\drivers\etc\hosts
192.168.M.N kc.corp.un
...
* https://www.keycloak.org/server/reverseproxy
* https://skycloak.io/blog/how-to-run-keycloak-behind-a-reverse-proxy/
# docker inspect keycloak -f {{.NetworkSettings.Networks.root_default.IPAddress}}
# cp /etc/nginx/sites-available/http-app /etc/nginx/sites-available/kc-app
# cat /etc/nginx/sites-available/kc-app
...
server_name kc.corp.un;
...
location / {
proxy_pass http://172.18.0.2:8080;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
===== Шаг 3. REST =====
Задачи:
- Проверить работоспособность приложения
- Управлять данными в приложении
* [[https://www.strongdm.com/what-is/crud-vs-rest]]
* [[https://ru.wikipedia.org/wiki/REST]]
debian:~# cat /etc/hosts
...
192.168.M.N kc.corp.un
- Выводим список пользователей (GET)
- Добавляем user1 (POST)
- Обновляем информацию (добавляем атрибуты) user1 (PUT)
- Находим информацию по user1 (GET ?)
- Назначаем пароль и проверяем возможность подключиться https://kc.corp.un/realms/master/account/
- Удаляем учетную запись user1 (DELETE)
* Примеры Keycloak [[Сервис Keycloak#REST API]] в Bash
* [[https://www.postman.com/downloads/|Postman HTTP-клиент для тестирования API]]
https://kc.corp.un/realms/master/protocol/openid-connect/token
username:admin
password:strongpassword
grant_type:password
client_id:admin-cli
* [[https://community.postman.com/t/how-to-automatically-set-a-bearer-token-for-your-postman-requests/10126/4|How to automatically set a Bearer Token for your Postman requests?]]
===== Что не вошло в вебинар =====
* [[https://systems.education/soap-integration|Что из себя представляет SOAP
и когда его нужно использовать]]
* [[https://habr.com/ru/articles/565020/|gRPC vs REST, что выбрать для нового сервера?]]
* Язык программирования Python [[Язык программирования Python#CRUD Rest API приложение]]