====== Все что должен знать 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 приложение]]