Как отладить PHP скрипт в Windows 10 с помощью PHP Storm и xDebug внутри docker-контейнера находящимся на сервере за NAT?

Вопрос отладки PHP-скриптов будоражит умы многих разработчиков. Так же эта инструкция поможет и тем, кто Docker не использует. На самом деле всё очень просто, достаточно прокинуть порт с удалённого сервера на локальный (так называемый remote port forwarding или ssh tunnel), делается это одной командой, но требует предварительной правки конфигов. Начнём. На удалённом сервере нужно поправить конфиг sshd:

nano /etc/ssh/sshd_config

И добавляем в него строку:

GatewayPorts clientspecified

Читать далее Как отладить PHP скрипт в Windows 10 с помощью PHP Storm и xDebug внутри docker-контейнера находящимся на сервере за NAT?

Как на Windows 10 скомпилировать из исходника на Go Lang бинарник для Linux?

Этой заметкой открываю новую рублику по программированию на Go Lang. Один из первых вопросов, которые пришлось решить — как пользователю Windows 10 скомпилировать исполняемый файл для Linux сервера? Процесс сборки бинарного файла на системе одного типа для системы другого типа называется кросскомпиляцией. Ответ достаточно прост, сначала нужно задать константы:

set GOARCH=amd64
set GOOS=linux

Теперь можно компилировать:

go build turboapp.go

Читать далее Как на Windows 10 скомпилировать из исходника на Go Lang бинарник для Linux?

Как запускать cron jobs для docker-контейнеров?

Следуя хорошим практикам работе с Docker, в каждом контейнере должно быть запущено одно и только одно приложение. Как только приложение завершает работу — контейнер останавливается. Эти ограничения заставляют посмотреть на работу с cron задачами по-другому. Конечно, законами физики не запрещено в каждый контейнер устанавливать более одного приложения и запускать крон прямо изнутри контейнера. Однако, это может привести к сложностям и проблемам, особенно когда ваши приложения разрастутся на более чем один сервер. Читать далее Как запускать cron jobs для docker-контейнеров?

Оптимизация и тюнинг производительности MariaDB MySQL сервера внутри Docker

Пожалуй, это единственное актуальное и максимально полное руководство на русском языке по оптимизации MySQL сервера в docker-контейнерах. По сути большая часть советов отлично подойдёт и тем, кто не работает с Docker. Оптимизацию базы данных можно разделить на 3 слоя:

  1. Оптимизация запросов, таблиц и индексов
  2. Тюнинг параметров сервера баз данных
  3. Оптимальная настройка сервера, операционной и файловой систем

В этой замете рассмотрим второй пункт: тюнинг параметров сервера баз данных. И конечно же первым советом будет не использовать Docker для контейнеризации MySQL и других хранилищ! Я серьёзно, если вы используете базу данных находящуюся в контейнере и беспокоитесь о тюнинге производительности, то первым же делом вынесите его на отдельный полноценный сервер. Однако, есть и преимущество при запуске MySQL в Docker: можно для каждого приложения оптимально сконфигурировать настройки.

Читать далее Оптимизация и тюнинг производительности MariaDB MySQL сервера внутри Docker

Настройка SSH авторизации по ключу без пароля в CentOS 7

Как сгенерировать пару приватного и публичного ключей для ssh соединения? От имени пользователя, для которого нужно создать ключи:

ssh-keygen

Читать далее Настройка SSH авторизации по ключу без пароля в CentOS 7

Как установить библиотеку ncurses для PHP

yum install ncurses-devel
phpize --clean
phpize
./configure
(./configure --with-php-config=/usr/bin/php-config --enable-ncursesw=autodetect --with-ncurses)
make
make install

Читать далее Как установить библиотеку ncurses для PHP

Как в docker-compose перезапустить запущенный контейнер с пересборкой?

После редактирования Dockerfile или docker-compose.yml файла, например, прообрасывания порта или добавления волюма, изменения не вступают автоматически! Даже если сделать restart контейнера то всё-равно ничего не изменится. Чтобы применить изменения к контейнеру его нужно пересобрать (build). Читать далее Как в docker-compose перезапустить запущенный контейнер с пересборкой?

Как в Docker отключить логирование всех контейнеров?

По-умолчанию в Docker для всех контейнеров устанавливается режим логирования json-file, т.е. весь STDOUT каждого контейнера будет писаться в файл. В целях отладки это может быть полезно, однако большой поток логов и их запись на диск может занять больше ресурсов, чем полезная нагрузка. Достаточно спорное решение, особенно для тех, кто имел опыт работы с другими системами контейнеризации, например, с Proxmox. Читать далее Как в Docker отключить логирование всех контейнеров?

Как в CentOS отследить нагрузку на диск?

iostat -xk -t 5

Если же такой команды нет, то нужно установить пакет sysstat:

yum install sysstat

Ещё одна интересная утилита — iotop, своеобразный аналог top или htop, но для дисковой подсистемы.

О том как сделать профилирование нагрузки на файловую систему с помощью iostat и gnuplot можно прочитать в этой статье.

Можно ли использовать Redis внутри Docker в продакшене как основное хранилище данных?

Redis очень неплох. Всё больше разработчиков и компаний выбирают его не только в качестве кэширующего in-memory сервиса или системы очередей, но в и в качестве основного хранилища данных, взамен MySQL или Postgres. Да, именно так. Благодаря поддержке разнообразных структур данных, таких как: строки, списки, множества, упорядоченные множества и хэш-таблицы, на Redis отлично перекладывается большинство типичных данных, которые исторически было принято хранить в реляционных СУБД.

Но и это ещё не всё. Редис умеет и некоторые специфические вещи, например, HyperLogLog. (Здесь нужно дописать о всех современных фичах Редиса). Так стоит ли использовать редис в качестве основного хранилища данных? Так же эту заметку можно рассматривать в контектсте любой другой key-value базы данных с похожим внутренним устройством, например, любимая многими MongoDB. Читать далее Можно ли использовать Redis внутри Docker в продакшене как основное хранилище данных?