UPD: ну, а вообще, если загружаемый файл изменяется после загрузки, т.е есть `rpmsign` перед `createrepo`, то правильнее загружать файл в отдельную папку… и после подписи складывать в нужное место.
ваш github.com/slytomcat/URLshortener/blob/dev/docker-compose.yml завелся без особых проблем. Ищите проблему у себя в хосте, или компоуз файле. Может быть на хоcте что-то уже висит на 8080, или не хватает `ports: — 8080:8080`. или в ./cnfr.json не 8080 порт))))
У меня мнение совсем не скромное. Мы должны, обязаны, понимать как работают инструменты, которыми пользуемся.
Что такое в пакер билдере amazon-ebssurrogate я знаю.
Понятно, что всякие условия гонки могут возникать… и лучше всего триггер вешать на один файл.
Но это уже можно дать на откуп автоматизации. Если что-то билдит и заливает десятки файлов, то ничего не стоит сделать одно касание файлу-маркеру.
Быстрейшим способом очистить такую директорию является rsync с пустой директорией.
А rm * подвесит вам шелл. Если рсинка под рукой нет я бы попробовал find -delete или даже "rm -r .".
Нет, rsync не является быстрейшим.
unlink perl-a быстре, на выбор:
"проблема" в том, что это хабр, или мне бы хотелось, что бы это оставалось Хабром… хотелось бы верить, что аудитория сама может открыть гитхаб и прочитать configure && make && make install, а в статьях будет что-то новое.
В любом случае, make install — единственный минус.
Спасибо, я обязательно попробую modsecurity )
шел 2019 год… yum install gcc gcc-c++ && make install) сборочный мусор на рабочих серверах)))
почему нельзя просто написать nginx-modsecurity.spec,
отправить его в https://copr.fedorainfracloud.org/,
и через 10 имнут получить свой репозиторий со своим динамическим модулем modsecurity?
Статья короткая получится, точно!!
По теме минимизации размеров, забыли самое главное. Это scratch образы.
И в этом деле лучше всего проявляются особеннности Golang, где размер образа равен размеру бинарника.
FROM golang:alpine as go_builder
COPY app /app
WORKDIR /app
RUN CGO_ENABLED=0 GOOS=linux go build -a -installsuffix cgo -o app .
FROM scratch
COPY --from=go_builder /app .
ENTRYPOINT ["/app"]
Итак, что бы проксировать http(s) в localhost:8080 вы выбрали такой путь:
Nginx, возможно даже из сторонних репозиториев, конфиги, установка sertbot и какие-то там подтверждения соглашений, ручные правки, кроны…
Предлагаю заменить этот паровоз на два элемента systemd+traefik. Без каких-либо ручных правок файлов.
Алгоритм автоматизации:
скопировать юнит-файл
скопировать бинарник traefik
cкопировать конфиг traefik
установка вашего или любого другого сервиса на local host:8080 ( кстати, а почему не на сокете?)
Красиво, понятно? А у вас так же, как в источнике.
Серьезно, дали бы какому-то стажеру запустить ваш неработающий плейбук (роль).
Вместо MD5STAT.exists надо MD5STAT.stat.exists.
Халтура, одним словом.
Какой смысл переходить на декларативный язык описания, и при этом продолжать тянуть за собой вот такие паровозы?
Как такое поддерживать? Вспоминаются однострочники на перле.
И мы идем дальше.
Заметьте, там нет " when: sudochg.changed or MD5STAT.stat.exists == false". Не нужно больше.
Целых два блока, нужены лишь для одного, не допустить ошибку типа grep:: No such file or directory
И они нам теперь тоже не нужны:
Далее, поговорим про MD5, и зачем его пишут файл.
Это делают для простоты проверки контрольных сумм. Скорее всего "некий процесс, который запускается раз в неделю и проверяет контрольную сумму файла " выглядит так:
Очень толсто!
Указанные вами специалисты рекомендуют SELinux в enforced режиме, и это во многом решает подобные проблемы.
[root@test ~]# useradd -u 2147483649 testuser
(Tue Dec 11 15:32:29:453761 2018) [sss_cache] [confdb_get_domains] (0x0010): No domains configured, fatal error!
Could not open available domains
useradd: sss_cache exited with status 2
useradd: Failed to flush the sssd cache.
(Tue Dec 11 15:32:29:468971 2018) [sss_cache] [confdb_get_domains] (0x0010): No domains configured, fatal error!
Could not open available domains
useradd: sss_cache exited with status 2
useradd: Failed to flush the sssd cache.
[root@test ~]# grep testuser /etc/passwd
testuser:x:2147483649:1003::/home/testuser:/bin/bash
[root@test ~]# su - testuser
[testuser@test ~]$ pwd
/home/testuser
[testuser@test ~]$ systemd-run -t /bin/bash
(pkttyagent:9334): GLib-GObject-WARNING **: 15:33:21.538: value "-2147483647" of type 'gint' is invalid or out of range for property 'uid' of type 'gint'
**
ERROR:pkttyagent.c:156:main: assertion failed: (polkit_unix_process_get_uid (POLKIT_UNIX_PROCESS (subject)) >= 0)
Running as unit: run-u23561.service
Press ^] three times within 1s to disconnect TTY.
[testuser@test ~]$ id
uid=2147483649(testuser) gid=1003(testuser) groups=1003(testuser) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[testuser@test ~]$ echo hello > /test.txt
-bash: /test.txt: Permission denied
[testuser@test ~]$ rpm -q polkit
polkit-0.115-2.fc29.x86_64
[testuser@test ~]$ logout
[root@test ~]# ausearch -c '(bash)' --raw
type=AVC msg=audit(1544538801.747:9383): avc: denied { open } for pid=9337 comm="(bash)" path="/dev/pts/11" dev="devpts" ino=14 scontext=system_u:system_r:init_t:s0 tcontext=unconfined_u:object_r:user_devpts_t:s0 tclass=chr_file permissive=0
В DNS есть ограничение, что origin должен быть А-записью, то есть указывать на фиксированный IP-адрес.
Когда ваш сайт становится большим и вы перемещаете его на хостинг или хотите направить его на файрвол или сервис защиты от DDoS, то используете запись CNAME, чтобы направить имя хоста на другое непостоянное имя хоста, которым управляет поставщик в зависимости от вашего трафика и потребностей.
Но если сайт размещён на голом домене (example.com), вы не можете этого сделать.
https://team.vk.company/vacancy/21231/
Возникала ли необходимость инвалидации кеша, отдельных файлов?
я про это и говорил
> и лучше всего триггер вешать на один файл.
>… касание файлу-маркеру.
если развернуть эту мысль (псевдокод, возможны ошибки):
как-то так
UPD: ну, а вообще, если загружаемый файл изменяется после загрузки, т.е есть `rpmsign` перед `createrepo`, то правильнее загружать файл в отдельную папку… и после подписи складывать в нужное место.
Думаете json темплейт для пакера будет короче? Вангую, что будет минимум в 3 раза больше по количеству строк
У меня мнение совсем не скромное. Мы должны, обязаны, понимать как работают инструменты, которыми пользуемся.
Что такое в пакер билдере amazon-ebssurrogate я знаю.
Имхо, как-то все переусложнено у вас, скриптами, бесконечными циклами… пакетами в репозитории.
profit?
Понятно, что всякие условия гонки могут возникать… и лучше всего триггер вешать на один файл.
Но это уже можно дать на откуп автоматизации. Если что-то билдит и заливает десятки файлов, то ничего не стоит сделать одно касание файлу-маркеру.
Нет, rsync не является быстрейшим.
unlink perl-a быстре, на выбор:
истоки
4.х не знаю, а 5.2.17 есть ((((
а еще, можно писать кастомные фильтры, под каждый чих)
Посмотрел, да. Не убедительно.
в EPEL есть libmodsecurity-devel-3.0.2, это ваш раздел номер 3, ничего собирать не надо.
вот официальная вика https://github.com/SpiderLabs/ModSecurity/wiki
в том числе
"Nginx Connector" тоже имеет вику, которая приводит нас сюда https://www.getpagespeed.com/server-setup/nginx/install-modsecurity-nginx-module-on-centos-7 откуда легко получить и spec для сборки своего, или готовые пакеты, двухмесячной давности:
п.с. c openssl-1.1.1 у меня не собралось, придется багрепортить.
"проблема" в том, что это хабр, или мне бы хотелось, что бы это оставалось Хабром… хотелось бы верить, что аудитория сама может открыть гитхаб и прочитать
configure && make && make install
, а в статьях будет что-то новое.В любом случае,
make install
— единственный минус.Спасибо, я обязательно попробую modsecurity )
шел 2019 год… yum install gcc gcc-c++ && make install) сборочный мусор на рабочих серверах)))
почему нельзя просто написать nginx-modsecurity.spec,
отправить его в https://copr.fedorainfracloud.org/,
и через 10 имнут получить свой репозиторий со своим динамическим модулем modsecurity?
Статья короткая получится, точно!!
По теме минимизации размеров, забыли самое главное. Это
scratch
образы.И в этом деле лучше всего проявляются особеннности Golang, где размер образа равен размеру бинарника.
Итак, что бы проксировать http(s) в localhost:8080 вы выбрали такой путь:
Nginx, возможно даже из сторонних репозиториев, конфиги, установка sertbot и какие-то там подтверждения соглашений, ручные правки, кроны…
Предлагаю заменить этот паровоз на два элемента systemd+traefik. Без каких-либо ручных правок файлов.
Алгоритм автоматизации:
Да, этот кусок, тоже, пример плохого тона, и вспоминается вот этот заголовок:
Но, и это можно красиво переписать ансиблом:
Как видите, все читается, и нет ничего сложного.
Если что-то "сложное", то берем в руки питона и делаем filter_plugins.
Ребята, Вам не стыдно такое переводить?)
Структура папок:
Красиво, понятно? А у вас так же, как в источнике.
Серьезно, дали бы какому-то стажеру запустить ваш неработающий плейбук (роль).
Вместо MD5STAT.exists надо MD5STAT.stat.exists.
Халтура, одним словом.
А теперь про культуру.
Какой смысл переходить на декларативный язык описания, и при этом продолжать тянуть за собой вот такие паровозы?
Как такое поддерживать? Вспоминаются однострочники на перле.
Сравните:
и мой вариант:
И мы идем дальше.
Заметьте, там нет " when: sudochg.changed or MD5STAT.stat.exists == false". Не нужно больше.
Целых два блока, нужены лишь для одного, не допустить ошибку типа grep:: No such file or directory
И они нам теперь тоже не нужны:
Далее, поговорим про MD5, и зачем его пишут файл.
Это делают для простоты проверки контрольных сумм. Скорее всего "некий процесс, который запускается раз в неделю и проверяет контрольную сумму файла " выглядит так:
Тогда файл надо генерировать так:
А в плейбуке будет так:
И два блока set_fact: теперь тоже можно удалить.
Очень толсто!
Указанные вами специалисты рекомендуют SELinux в enforced режиме, и это во многом решает подобные проблемы.
Перевод-переводом, но стоит отметить, что уже не актуально, ибо есть ANAME.
Пользуемся более двух лет, все супер!
https://tools.ietf.org/html/draft-ietf-dnsop-aname-02