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
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/
AWS: создание Elastic Container Registry и деплой из Jenkins

Задача: создать AWS ECR репозиторий для образов проекта, и добавить джобу в Jenkins, которая будет собирать образы, и загружать их в этот репозиторий. AWS ECR Переходим в ECR, жмём Get Started, выбираем имя нового репозитория: Оставляем по умолчанию Mutable, т.е. можно будет залить образ с тем же тегом, если он уже есть в репозитории. Репозиторий…

https://rtfm.co.ua/aws-sozdanie-elastic-container-registry-i-deploj-iz-jenkins/
Opsgenie: интеграция с Uptrends

Uptrends – простая мониторилка-пинговалка, давно использую для RTFM (см. Решил добавить её как последний рубеж для уведомлений о проблемах с рабочими ендпоинтами, а заодно – прикрутить интеграцию с OpsGenie, через который мы получаем уведомления на мобильные, см. Prometheus: OpsGenie и Alertmanager — уведомления в почту/SMS/телефон. Интеграция крайне простая – OpsGenie создаёт почтовый ящик, на который…

https://rtfm.co.ua/opsgenie-integraciya-s-uptrends/
Linux: постоянное хранение логов в systemd-journald

Имеется AWS EC2, который внезапно перезагрузился. Проблема заключается в том, что файл /var/log/messages неполный, последняя запись в нём – о том, что rsyslog был убит. Но вот кем и как – непонятно. Была надежда увидеть логи в journald, но – сюприз: по умолчанию journald хранит только записи о последней загрузке: root@bttrm-stage-console:/home/admin# journalctl --list-boots0 f527010076a141c5917496c6aa03438a Tue 2019-09-24 12:13:02 EEST—Tue 2019-09-24 17:48:44 EEST Собственно, надо включить хранение…

https://rtfm.co.ua/linux-postoyannoe-xranenie-logov-v-systemd-journald/
Jenkins: деплой Docker Compose из Ansible и ECR авторизация

В продолжение поста AWS: создание Elastic Container Registry и деплой из Jenkins, в котором создали джобу для билда Docker-образов и их пуша в AWS ECR – теперь надо создать джобу в Jenkins для деплоя и запуска одного Docker-контейнера. Запускать будем через Docker Compose, в котором Ansible будет задавать требуемую версию из параметров Jenkins-джобы. Для того, что…

https://rtfm.co.ua/jenkins-deploj-docker-compose-iz-ansible-i-ecr-avtorizaciya/