Updates rtfm.co.ua 🇺🇦 – Telegram
Updates rtfm.co.ua 🇺🇦
726 subscribers
35 photos
457 links
Канал @rtfm - новые посты на https://rtfm.co.ua.
Обсуждения - группа @rtfmco https://t.me./rtfmco
Download Telegram
Jenkins: запуск PHPUnit из Codeception по Pull Reguest в Github и Allure-репорты

Задача – запускать PHPUnit для тестов кода бекенда. Сам PHPUnit будет запускаться из Codeception. Задача в Jenkins должна триггериться из Github, при создании Pull Request – используем Github Pull-Request Builder плагин. Для просмотра отчётов о тестах – используем Allure. Jenkins запущен в Docker-контейнере, и все процессы будет запускать в контейнерах. Проверка тестов Что бы получить…

https://rtfm.co.ua/jenkins-zapusk-phpunit-iz-codeception-po-pull-reguest-v-github-i-allure-reporty/
SonarQube: запуск в Docker и вызов из Jenkins Pipeline

Задача – запустить SonarQube, что бы Jenkins выполнял проверку кода. Jenkins работает в Docker, билды запускаются тоже Docker. Основная проблема, которая возникла во время запуска SonarQube из Docker Compose, это то, что контейнер с SonarQube внутри себя запускает процесс с Elastisearch (тем самым нарушая главный принцип использования конейнеров: 1 сервис на один контейнер). При этом…

https://rtfm.co.ua/sonarqube-zapusk-v-docker-i-vyzov-iz-jenkins-pipeline/
SonarQube: ошибка “SCM provider autodetection failed”

Имеется свежая установка SonarQube, см пост SonarQube: запуск в Docker и вызов из Jenkins Pipeline. Проблема Но в дашборде проекта постоянно висит сообщение вида: SCM provider autodetection failed. Please use “sonar.scm.provider” to define SCM of your project, or disable the SCM Sensor in the project settings. И оно же выводится в логах билда в Jenkins.…

https://rtfm.co.ua/sonarqube-oshibka-scm-provider-autodetection-failed/
NGINX: мульти-бранч деплой приложения с использованием NGINX map и HTTP Headers

Имеется стандартный LEMP – NGINX, PHP-FPM. Приложение – Yii-фреймворк, который деплоится из Jenkins Ansible-ролью с помощью модуля synchronize на хосты в каталог /data/projects/prjectname/frontend/web, который является root в конфиге виртуалхоста NGINX. Задача: создать возможность деплоя из Jenkins приложения из разных бранчей – на хосте одновременно должны быть задеплоены разные версии приложения, доступ к которым будет определяться…

https://rtfm.co.ua/nginx-multi-branch-deploj-prilozheniya-s-ispolzovaniem-nginx-map-i-http-headers/
AWS: настройка S3 Cross-Region Replication и удаление файлов при репликации

В данный момент мы настраиваем CDN для проекта. В роли CDN-провайдера будут CloudFront и CloudFlare, для которых требуется создать две AWS S3 корзины с разными именами (cdn.cfr.example.com => CloudFront и cdn.cfl.example.com => CloudFlare). Что бы не копировать данные в обе корзины дважды – можно настроить репликацию данных между двумя корзинами – это и будет AWS Simple Sorage…

https://rtfm.co.ua/aws-nastrojka-s3-cross-region-replication-i-udalenie-fajlov-pri-replikacii/
Kubernetes: знакомство, часть 1 – архитектура и основные компоненты, обзор

На текущем проекте у нас имеется API-бекенд для мобильных приложений на PHP Yii-фреймворке, который работает на стандартном LEMP – Linux/NGINX/PHP-FPM/MySQL. Пришла пора и нам разбивать этот монолит на микросервисы, для управления которыми будет использоваться Kubernetes (AWS EKS). В этом и последующих постах серии – знакомство с основными компонентами и архитектурой Kubernetes, ручное создание кластера и…

https://rtfm.co.ua/kubernetes-znakomstvo-chast-1-arxitektura-i-osnovnye-komponenty-obzor/
AWS RDS: SQLSTATE[22001] – Data too long for column в MariaDB 10.2

Имеется PHP-приложение с бекендом AWS RDS MariaDB. На версии 10.0 работало нормально, но после миграции на 10.2 – в логах начали появляться ошибки: PDOException: SQLSTATE[22001]: String data, right truncated: 1406 Data too long for column ‘name’ at row 1 in /data/projects/projectname/vendor/yiisoft/yii2/db/Command.php:1290 Вариант первый – это просто сменить тип колонки с VARCHAR на LONGTEXT, например так:…

https://rtfm.co.ua/__trashed-10/
NGINX: limit_req – ограничение количества запросов

Задача – установить лимит количества запросов с одного IP: добавить rate limiter на URI /user/oauth/refresh_token число запросов – 5 в минуту с одного IP если запросов больше – возвращаем 429 Too Many Requests Используем NGINX и его модуль ngx_http_limit_req_module. limit_req_zone Для работы “лимитера” – следует создать зону, в которой будут хранится данные (а именно –…

https://rtfm.co.ua/nginx-limit_req-ogranichenie-kolichestva-zaprosov/
Kubernetes: знакомство, часть 2 – создание кластера с AWS cloud-provider и AWS LoadBalancer

В первом посте – Kubernetes: знакомство, часть 1 — архитектура и основные компоненты, обзор – были рассмотрены основные компонены, теперь время применить их на практике. Следующим, что очень хотелось потрогать – это интеграция Kubernetes с AWS и работа с сетью: создать веб-сервис, и получить к нему доступ через AWS Load Balancer. Главная проблема, с которой столкнулся…

https://rtfm.co.ua/kubernetes-znakomstvo-chast-2-sozdanie-klastera-s-aws-cloud-provider-i-aws-loadbalancer/
RTFM: День Рождения – 8 годиков и 3 миллиона посетителей. Обзор обновлений.

Как-то вдруг наступил уже и Август. Традицонно – 14-е Августа у RTFM что-то вроде Дня рождения: Ну и традиционно – кратенько пройдусь по основным событиям за прошедший год (хотя семилетие не записал, ну да ладно). Блог по-прежнему работает на WordPress, хостится на Debian + NGINX + PHP-FPM + MariaDB – стандартный LEMP. Предыдущие посты: rtfm.co.ua

https://rtfm.co.ua/rtfm-den-rozhdeniya-8-godikov-i-3-milliona-posetitelej-obzor-obnovlenij/
Kubernetes: знакомство, часть 3 – обзор AWS EKS и ручное создание кластера

Продолжаем знакомство с Kubernetes. Предыдущие части: Kubernetes: знакомство, часть 1 — архитектура и основные компоненты, обзор Kubernetes: знакомство, часть 2 — создание кластера с AWS cloud-provider и AWS LoadBalancer В этой части перейдём уже непосредственно к EKS – кратко его рассмотрим, потом создадим Kubernetes Control Plane, CloudFormation стек с Worker Nodes, запустим веб-сервис в новом…

https://rtfm.co.ua/kubernetes-znakomstvo-chast-3-obzor-aws-eks-i-ruchnoe-sozdanie-klastera/
Docker: Compose и общие сети

Имеется Docker Compose стек с Jenkins, SonarQube и PostgresSQL, см. пост SonarQube: запуск в Docker и вызов из Jenkins Pipeline. Проблема в том, что они описаны в одном Compose-файле, и весь стек перезапускается единым systemd-файлом (см. Linux: systemd сервис для Docker Compose). Соответственно, если надо перезапустить SonarQube – то придётся перезапускать и Jenkins, на котором…

https://rtfm.co.ua/docker-compose-i-obshhie-seti/
AWS: CloudCraft – генерация карты существующей инфрастуктуры

Самим сервисом CloudCraft пользуюсь достаточно давно – удобен. На днях получил доступ к его платным возможностям (кстати – 2 недели платной Trial подписки бесплатны), среди которых особенно давно хотелось попробовать возможность генерации карты существующей инфраструктуры. Стоимость подписки – $49/месяц. Пример того, что умеет CloudCraft вообще – есть, например, в посте AWS: миграция RTFM 2.3 —…

https://rtfm.co.ua/aws-cloudcraft-generaciya-karty-sushhestvuyushhej-infrastuktury/
Redis: Linux и vm.overcommit_memory

Я сейчас настраиваю Redis как кеширующий сервис приложения, и среди прочего встал вопрос – надо ли включать vm.overcommit_memory в 1, или нет? Документация и практически все гайды/HowTo-шки Redis достаточно легкомысленно предлагают “волшебную пилюлю” в виде безусловного разрешения overcommit_memory. Попробуем разобраться – что overcommit_memory даёт, когда она используется, и нужна ли она в нашем случае. Почему…

https://rtfm.co.ua/redis-linux-i-vm-overcommit_memory/
SonarQube: Unrecoverable indexation failures и Elasticsearch “Disk watermark exceeded”

Есть SonarQube, запускается из Jenkins-джоб. См. SonarQube: запуск в Docker и вызов из Jenkins Pipeline. SonarQube из Jenkins запускается, задачи проходят, но в самом SonarQube возникает ошибка: java.lang.IllegalStateException: Unrecoverable indexation failures: 1 errors among 1 requests at org.sonar.server.es.IndexingListener$1.onFinish(IndexingListener.java:39) at org.sonar.server.es.BulkIndexer.stop(BulkIndexer.java:122) … Логи SonarQube: Aug 29 12:30:26 jenkins-production docker-compose[12591]: sonarqube_1  | 2019.08.29 09:30:26 ERROR web[][o.s.s.es.BulkIndexer] index…

https://rtfm.co.ua/sonarqube-unrecoverable-indexation-failures-i-elasticsearch-disk-watermark-exceeded/
Kubernetes: знакомство, часть 4 – аутентификация в AWS EKS, aws-iam-authenticator и AWS IAM

Продолжаем погружение в AWS EKS. В предыдущем посте серии – Kubernetes: знакомство, часть 3 — обзор AWS EKS и ручное создание кластера – мы запустили свой EKS кластер – всё отлично. kubectl работает, ресурсы создаются. Но когда тем же способом попытался подключиться бекенд-девелопер под своей учёткой AWS – “Что-то пошло не так“: root@ip-10-0-42-255:~# kubectl get nodeserror: You must be logged in to the server (Unauthorized) Кто же…

https://rtfm.co.ua/kubernetes-znakomstvo-chast-4-autentifikaciya-v-aws-eks-aws-iam-authenticator-i-aws-iam/
Redis: основные параметры конфигурации и тюнинг производительности

В процессе настройки Redis  в роли кеширующего сервиса для приложения – набросался такой вот пост. Рассмотрим основные параметры конфигурации Redis, их значения, как они и на что они влияют, и на какие из них стоит обратить внимание. Начать, пожалуй, стоит с утилиты redis-benchmark. Устанавливается вместе с сами Redis, можно сразу использовать: root@bttrm-dev-app-1:/home/admin# redis-benchmark -p 6389 -n 1000 -c 10 -k 1====== 1 ======1000 requests completed in 0.03 seconds10 parallel clients3 bytes payloadkeep alive: 198.30% 
Prometheus: получить общее количество процессов на сервере и process-exporter

Начали у нас на бекенде размножаться процессы. Прочина сейчас не важна, интересно другое: захотелось собирать метрики по общему количеству процессов на хостах, но, внезапно – node-exporter такого не умеет: у него есть только метрики node_procs_running и node_procs_blocked, а хочется видеть количество процессов и в Sleep, и в Zombie. Используем вместо него process-exporter. Запускаем для проверки…

https://rtfm.co.ua/prometheus-poluchit-obshhee-kolichestvo-processov-na-servere-i-process-exporter/
PostgreSQL: FATAL: Peer authentication failed for user “name”

Небольшая заметка “для себя” по настройке удалённого доступа и дампам в PostgreSQL. Переехал к нам ЕС2 с другого аккаунта с одним из сайтов. При попытке подключиться к PostgreSQL, который работает на этой машинке – получаем ошибку “FATAL: Peer authentication failed for user “name”“. Причём и при подключении локально – и удалённо. PostgreSQL remote login enable…

https://rtfm.co.ua/postgresql-fatal-peer-authentication-failed-for-user-name/
Поездка на Bali, Indonesia – фото

18-го сентября вернулся с поездки на Бали, Индонезия. Так получилось, что это во-первых была моя первая поездка за границу, во-вторых – первый полёт самолётом. Бали очень понравился. Религиозность там везде: в каждом доме есть мини-храм для подношений богам, у каждого клана свои храмы, побольше. Ну и целые храмовые комплексы. Интересное дорожное движение: правила там вроде…

https://rtfm.co.ua/poezdka-na-bali-indonesia-foto/
CloudFlare: настройка CDN для AWS S3

Требуется создать хостинг статического сайта, используя AWS S3 и подключить к нему CloudFlare CDN. Создание AWS S3 корзины Создаём корзину с тем же именем, что и домен, в нашем случае это cdn.example.com: В Properties включаем хостинг сайта: Переходим в Permissions, в Bucket Policy включаем полный доступ к корзине: { "Version": "2012-10-17", "Id": "MyPolicy", "Statement": […

https://rtfm.co.ua/cloudflare-nastrojka-cdn-dlya-aws-s3/