~ / blog

Блог

Пишу о том, что делаю каждый день: скорость сайтов, кэш, обмен с 1С, серверы и WordPress без лишнего.

#Серверы 4 мин

Подрядчик ушёл: ключи, учётки и образы, на которых стоит весь сервер

Ключ бывшего подрядчика нашёлся в чужом authorized_keys, его учётку лучше заблокировать, чем удалить, а группа docker — это тот же root. И самое неочевидное: образы всех сайтов скачивались из его личного реестра — удалит или перезальёт, и последствия будут у вас.

· · ·
#Вёрстка и фронтенд 3 мин

769 слоёв композитинга: почему Safari падает, когда открываешь меню

Swiper в Safari сам делает слоем каждый слайд, translate3d для центрирования, clip-path на каждом слайде, выезд меню через right — и полноэкранное размытие над всем этим. Как посчитать слои и как ужать их с 769 до 22.

· · ·
#Серверы 4 мин

Раннер CI под root: кто правит .gitlab-ci.yml, тот владеет сервером

Внешний верстальщик должен выкладывать вёрстку на тестовый поддомен. Отдельный проектный раннер без root и с одной папкой, CI-файл из чужого репозитория, путь литералом, сборка на другом сервере — и почему add_header в location снимает noindex.

· · ·
#Вёрстка и фронтенд 3 мин

Safari падает на iPhone: слайдер с fade грузит обложки всех слайдов

В режиме fade swiper кладёт все слайды стопкой в видимую область, и loading=lazy грузит обложки всех товаров: 63,7 МБ, из них 46 — невидимые. Адреса только активному и соседям, дальним — visibility: hidden: 36,4 МБ без пустых слайдов.

· · ·
#Серверы 4 мин

«Базе нужна открытая сеть»: как дать доступ, ничего не открывая

ports в compose — это вход из интернета, а не связь контейнеров. SSH-туннель вместо открытого PostgreSQL, почему пароль не заменяет закрытый порт и почему «в базе нет ничего важного» — довод не о том.

· · ·
#Вёрстка и фронтенд 2 мин

aspect-ratio и округление ширины слайда: 0,14 пикселя превращаются в 2

Высота картинки считалась от ширины через aspect-ratio, а swiper округляет ширину слайда: 341,25 → 341 px. Это 0,14 px по высоте и 2 px на айфоне — на каждой из двадцати строк. Лечение — высота напрямую в vw.

· · ·
#Серверы 4 мин

Аудит портов: опубликованный порт Docker обходит firewall

Из сорока контейнеров порты наружу публиковали шесть, а нужен был один прокси. Векторная база без ключа, PostgreSQL с доступом отовсюду, приложения мимо прокси — и почему ufw не закрыл бы ни одного из этих портов.

· · ·
#Вёрстка и фронтенд 3 мин

Страница ползёт вниз на айфоне, а CLS в Chrome — ноль

Chrome гасит сдвиги выше экрана привязкой прокрутки и не пишет их в CLS, у Safari привязки нет. Мерить высоту документа и позицию элемента в дробных пикселях. Три причины: шрифт 142 px, заглушки блоков 272 px и округление слайдера.

· · ·
#Разработка 5 мин

Проверка, которая не идёт путём пользователя

Пустой лог без числа запросов, трафик повторов вместо работающего канала, маленький запрос через сломанный путь, детектор с порогом мимо аварии, пробник из другой сети, верхняя граница вместо факта и проверка одной ветки из четырёх.

· · ·

$ tail -f /blog

Не пропустите новые статьи

Пишу разборы по скорости сайтов, кэшу и разработке — на живых проектах и с цифрами. Подпишитесь, и ссылка на новую статью придёт сразу после выхода. Без рекламы и спама, отписаться — в один клик.

В Telegramодна кнопка «Старт» в боте

или на почту

связаться

Расскажите о задаче