• Как сделать deploy без простоя?

    @Akela_wolf
    Extreme Programmer
    Принцип следующий:
    1. Делаете контейнер с фронтом-балансировщиком (nginx или что-то подобное).
    2. Запускаете второй контейнер с бэком, содержащий новую версию.
    3. Новый контейнер подключается к балансировщику. Тут дальше возможны варианты - балансировщик автоматически начинает переводить траффик на новую версию. Или в каком-то соотношении. Или только тестовый трафик. Или переключаете балансировщик на новый контейнер вручную. Или... (в общем вариантов тут много). Идея в том, чтобы перейти в целевое состояние - запросы обрабатывает новый бэкэнд. На этом этапе старая и новая версия бэкэнда должны уметь работать параллельно, то есть часть запросов может обрабатываться старой версией, часть новой, что налагает на новую версию требование сохранения обратной совместимости со старой версией (в частности это ограничивает возможные изменения структуры БД). В любой момент, если новая версия заработала как-то не так, можно "вертать всё взад", то есть опустить контейнер с новой версией и вернуть весь трафик на старую.
    4. Убедившись что новая версия работает стабильно, переводите с балансировщика весь трафик на новую и опускаете контейнер со старой версией, оставляя контейнер с новой единственным.

    Не очень понимаю что вы подразумеваете под контейнером с фронтендом, если это просто веб-сервер, который раздает SPA-приложение (HTML/CSS/JS), то в принципе аналогично.

    Схема такого апгрейда не слишком проста в реализации, поэтому такой апгрейд (zero-downtime upgrade) применяется в энтерпрайзе, в котором никак нельзя допустить простоя в обслуживании. Поэтому смотрите сами - насколько те несколько секунд (максимум минут) простоя за которые запускается новый контейнер стоят этой возни. Если такой апгрейд действительно нужен, то советую вместо docker compose посмотреть в сторону kubernetes.
    Ответ написан
    2 комментария
  • Как сделать deploy без простоя?

    @vitaly_il1
    DevOps Consulting
    Чтобы не изобретать велосипеда самому (с loadbalancer и т.п.) нужен какой-нибудь оркестратор. Их них Кубернетес самый популярный, кроме него есть Docker Swarm, Nomad, Openshift.
    Ответ написан
    Комментировать
  • Как импортировать в Битрикс24 пользователей и структуру из 1С?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Да, в Битрикс24 есть возможность импорта орг.структуры и пользователей из 1С, есть даже связывание этих пользователей по логину с конкретным заведенным доменом, однако на практике штатные инструменты для группы компаний не подходят. Подобные работы выполняются под ключ для каждой компании партнерами-интеграторами.
    От себя могу добавить следующее:
    1. Если хотите чтобы проблем не было, то поставщиком пользователей (профилей) и орг.структуры должна являться 1С. И это должна быть именно одна система, потому как несколько подобных систем-источников вызывают коллапс в Б24.
    2. Если хотите использовать несколько доменов AD, то оставьте только минимальный набор полей - флаг активности, логин. AD должен выступать исключительно в роли авторизационного сервера, поэтому никакого обмена с периодичностью, построения орг.структуры и создания пользователей на портале. Только активность и привязка к группам.
    3. Для привязки заранее создайте как минимум 3 группы в каждом AD: "bitrix users", куда включите всех пользователей которые должны маппится в группу сотрудников, "bitrix admins" это те пользователи из числа "bitrix users", кто должны стать админами на портале и "bitrix ignored" (учетки которые будут игнорироваться).
    - Если пользователь должен стать админом - в группы "bitrix users" и "bitrix admins" его.
    - Если учетку не нужно затягивать в Б24 то прописываем в "bitrix ignored" и соответственно ее в исключения. Помните если пользователь будет одновременно в группе ignored и users, то на портал он не попадет.

    По-поводу SSO на мультидоменные структуры (именно чтобы открыть портал и сразу авторизован) это не просто.
    Либо нужно сломать BitrixVM подключив Kerberos, либо нужно пилить свой модуль для какого-нибудь KeyCloak/ADFS или другого поставщика авторизации. Штатный NTLMv2 работает только с одним доменом (тем в который введен сервер).
    Ответ написан
    Комментировать
  • Как использовать Nginx X-Accel-Redirect для проксирования удаленных файлов в Ruby on Rails приложение?

    ivankomolin
    @ivankomolin
    Рассмотрим на примере, без привязки к языку программирования:
    Есть урл https://res.cloudinary.com/demo/video/upload/dog.mp4
    Есть файл /var/www/files/dog.mp4
    Есть nginx который обрабатывает запросы клиента
    Есть некий бэкенд код

    В nginx
    1. Создать internal location в nginx, например:
    location /video/ {
      internal;
      root   /var/www/files/;
    }

    Инструкция internal говорит о том, что этот локейшн будет обрабатывать только запросы с бэкенда.

    В коде
    1. Роутером отлавливаете запрос на урл https://res.cloudinary.com/demo/video/upload/dog.mp4
    2. Обрабатываете(в вашем случае сохраняете статистику, решаете отдавать контент пользователю или нет)
    3. Если файл нужно отдать, добавляете в заголовок
    X-Accel-Redirect https://res.cloudinary.com/video/dog.mp4


    После этого nginx отдает клиенту файл /var/www/files/dog.mp4
    А если обратиться напрямую к урл вида https://res.cloudinary.com/video/dog.mp4, получим 403 ошибку.
    Ответ написан
    Комментировать
  • Как отказаться от телеметрии в .NET?

    @MaxKozlov Куратор тега PowerShell
    DOTNET_CLI_TELEMETRY_OPTOUT environment variable

    печатать обычно принято на печатном станке, но возможны варианты.
    можно, в Powershell, в частности, выполнить команду
    [System.Environment]::SetEnvironmentVariable('DOTNET_CLI_TELEMETRY_OPTOUT', 1, 'Machine')
    Ответ написан
    Комментировать
  • Как решить проблему с ошибкой "ERR_EMPTY_RESPONSE, которая предположительно возникает из-за open_file_cache?

    Tolly
    @Tolly Автор вопроса
    Решил углубится в тему, вот результаты:

    Директива open_file_cache применяется для кеширования информации о статических файлах: js, css, jpeg, html,..
    Если файл не существует, или не прав на чтение, то эта информация также может хранится в кеше.
    По умолчанию: open_file_cache off;

    Пример с описанием:
    # Информация о 1000 файлов, может хранится в кеше. Если не было активности к файлу в течение 5 мин, то информация о нем удаляется из кеша
    open_file_cache max=1000 inactive=5m;  
    
    # Активностью считается обращение к файлу хотя бы 2 раза. В кеш они также попадают, если было хотя бы 2 обращения к файлу
    open_file_cache_min_uses 2;             
    
    # Вся информация о файлах в кеше обновляться раз в 1 минуту
    open_file_cache_valid 1m;               
    
    # Сохранять ли информацию об ошибках, например, если файла, к которому вы обратились - нет, то это будет тоже в кеше, информация тоже обновится через 1 мин
    open_file_cache_errors on;


    При работе со статическими файлами, когда они изменяются, например верстке.
    На время работ желательно отключать open_file_cache, либо параметр open_file_cache_min_uses делать достаточно большим, чтобы файл не попадал в кеш, но это фактически тоже самое что и отключить open_file_cache.

    Если файл находится в кеше, при этом происходит изменение файла, то сервер выдаст ошибку ERR_EMPTY_RESPONSE, что значит, что сервер отказал в доступе и не отдал контент.
    При этом сам сервер работает нормально и если обратится к другим файлам, то они легко загружаются.
    Примечателен факт, что если восстановить измененный файл, то сервер его начинает отдавать до проверки open_file_cache_valid. Видимо проверяется контрольная сумма файла, так как дата изменения файла меняется.

    При работе с файловой системой NFS, рекомендуется не включать open_file_cache, так как информация о файлах может не обновляться даже после open_file_cache_valid.

    Написал, а то может кому интересно будет или я забуду :)
    Ответ написан
    Комментировать
  • Редирект в Nginx любых запросов и ссылок на сайт на главную страницу?

    @DnDwarf Автор вопроса
    location = / {
    proxy_pass http://127.0.0.1:8080;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_connect_timeout 120;
    proxy_send_timeout 120;
    proxy_read_timeout 180;
    }

    location / {
    rewrite ^ / permanent;
    }

    Вот так все заработало, спасибо! )
    Ответ написан
    Комментировать
  • Перенос Zabbix 3.2 на другой сервер - как сделать?

    @MechanID
    Админ хостинг провайдера
    План переезда по личному опыту - я возил 3 раза большие базы zabbix в mysql от 300гб и больше.
    1 Устанавливаете zabbix и mysql идентичных версий на новом сервере
    2 останавливаете zabbix на новом сервере
    3 при помощи percona-toolsделаете бекап базы и везете его на новый сервер
    4 поднимаете mysql репликацию с старого на новый
    5 добавляете хостнейм/ип нового сервера в конфиги всех агентов
    6 стопаете myql и заббикс на старом
    7 убираете репликацию на новом
    8 запускаете заббикс на новом
    9 убираете ип старого на всех агентах
    Итого даунтайм не больше 5 минут.
    Ответ написан
    3 комментария
  • Начало пути в Linux администрирование?

    @Dobryak88
    Системный администратор
    Я бы предложил сразу практику:
    Поставить гипервизор, развернуть и настроить виртуальные Linux-машины с классическими корпоративными сервисами: почта, АТС, мессенеджер, веб-сервер, файловое хранилище с авторизацией.
    Настроить везде бэкапы, самописными скриптами выгружать дампы БД, делать архивы конфигураций и контента.
    После нормального конфигурирования остаётся траблшутинг, но он возможен только при какой-то пользовательской нагрузке.
    А прохождение теоретического курса можно отложить или идти параллельно.
    Ответ написан
    2 комментария
  • Ставите ли вы апдейты, если этого не просят ради поддержания актуальности, закрытия CVE и etc?

    @ProFfeSsoRr
    Сис.админ по Linux
    А просто так "обновления ради обновлений" ставить тоже не хочется.

    И правильно, просто так - опасно. У меня налажен процесс как жить на rolling release в проде, и когда процесс налажен - можно обновляться каждый день, а "просто так" - опасно.
    Но тут есть момент в том, что речь о RHEL, они ж не обновляют кардинально в рамках одной версии дистрибутива, а сами все тестируют на совместимость. И если выпускают апдейт - видимо оно надо.
    Ответ написан
    Комментировать
  • Ставите ли вы апдейты, если этого не просят ради поддержания актуальности, закрытия CVE и etc?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Для EL6 выходят собственные обновления - до сих пор. Да, там основная пакетая база древняя, как гумно мамонта, но обновления на ведро и основные пакеты выходят и при желании можно туда вкорячить что-то более-менее свежее.
    Если не обновляться, то однажды можно попасть в ситуацию, когда начальство рвчет и мечет, требуя поставить софт Х, для установки кторого нужен софт Y, который не ставится потому что библиотека Z версии ниже чем надо, а для ее обновления нужно перелопатить полсистемы....
    Рональд Макдональд дал хороший совет - снимите образ, попробуйте загнать в виртуалку и обновить и посмотреть, какие косяки выплывут. Начинайте с наименее нагруженной тачки.
    Ответ написан
    Комментировать
  • Ставите ли вы апдейты, если этого не просят ради поддержания актуальности, закрытия CVE и etc?

    @EraserKhv
    Системный администратор
    Обновления безопасности обязательно, особенно на системах которые смотрят в интернет.

    Обновления функционала, вот тут лучше "работает - не трогай" :) Примеры. 1. Есть в аэропорту рентген-сканер багажа, управляется компьютером с предустановленной ОС Windows NT, попытка обновить - это возможность получить очень дорогой в оживлении кирпич. 2. Стоит в одной организации, в далеком-далеком филиале файловый сервер на ОС Windows 2003 R2, поставить более свежую ОС не позволяет отсутствие новых драйверов, поменять железо не позволяет финансовая обстановка. Тем не менее аптайм у него 2 года и ни одного разрыва. Работает ?) Не трогай :)

    Все зависит от ситуации.
    Ответ написан
    1 комментарий
  • Ставите ли вы апдейты, если этого не просят ради поддержания актуальности, закрытия CVE и etc?

    Zoominger
    @Zoominger
    System Integrator
    внутренний перфекционизм за то, чтобы обновить всё по возможности

    Правильно.

    классический принцип "работает - не трогай"

    Это очень плохой принцип, которым никогда не следует пользоваться.

    спустя 100500 версий просто так без бубна не обновишь

    Так и есть. С мажорной на мажорную, чаще всего, просто так не обновиться.

    ставите ли вы апдейты, если этого не просят ради поддержания актуальности, закрытия CVE и etc?

    Да, безусловно. Обновления (сами обновления, патчи) никто не делает просто так, от нечего делать, это всегда багфиксы, закрытия дыр, новые функции.
    Не каждый день, но раз в 2-4 недели точно.
    Вам же советую снять образ какого-нибудь сервера через dd и подрубить его к той же VirtualBox и, для начала, обновить там. Если всё хорошо - обновлять боевые.
    Ответ написан
    Комментировать
  • Предложите обоснование необходимости внедрения и сопровождения Linux-дистрибутивов (Alt, Mint, etc) в предприятиях малого предпринимательства?

    @beerchaser
    Проще доказать обратное. Стоимость лицензии Windows pro ~ 14000, homе~10000. Если брать с железом (оем) будет процентов на тридцать дешевле. Линукс - вроде 4000. В цене win стоимость техсопровожения на жизненный цикл (вроде 7 лет).
    А дальше ТСО. Как уже упоминалось выше, ОС нужна не сама по себе, а для обеспечения работы программ, которые в свою очередь обеспечивают бизнес, т.е. упрощают процесс зарабатывания денег. На практике настроил и забыл не бывает - меняются требования к ПО и бизнес процессы. Специалист с линь в среднем стоит дороже специалиста с вин. Если учесть что количество вопросов по эксплуатации ПО на линь будет выше, а часть вопросов принципиально не может быть решена на сегодня, то с высокой степенью вероятности на выходе получиться гетерогенная система, управление которой доставит и потребует для управления/настройки/эксплуатации уже двух специалистов.
    Далее встаёт вопрос документированности технических решений. Маленькие системы развиваются по принципу жизненной необходимости, т.е. как выросло. И если у микрософт есть буки с картинками, как надо правильно надо делать и в среднем народ делает системы по этим учебникам, то решения на линь в связи с его большей гибкостью бывают весьма экстравагантны. Это к тому, что при внедрении/выборе технической политики/оборудования/вендора надо учитывать риск потери сопровождающего специалиста и понимать в каждый момент времени, кем его можно будет заменить.
    Поэтому надо считать не стоимость приобретения, а стоимость владения(ТСО).
    Ответ написан
    2 комментария
  • (Errcode: 2) Почему не запускается mysql автоматически после перезагрузки сервера?

    @vlarkanov
    Вангую, что /var/run монитируется в /tmp. Это так?

    Если да, то логично, что директория /var/run/mysqld пропадает после перезагрузки (/tmp ведь очищается каждый раз).

    Тогда есть два пути:
    1) Не монтировать /var/run в /tmp (не факт что ничего не сломается, если так по умолчанию настроен дистр);
    2) В конфиге mysql поменять пути в переменной socket и pid-file:
    socket=/var/lib/mysql/run/mysqld.sock
    pid-file=/var/lib/mysql/run/mysqld.pid


    Не забудьте создать директорию /var/lib/mysql/run/ и дать ей нужные права.
    Ответ написан
    Комментировать
  • Как настроить nginx reverse proxy для работы с nginx Битрикс с ssl на letsencrypt?

    monaxide
    @monaxide Автор вопроса
    DevOps
    Для тех, кто столкнется с такой же проблемой:
    server {
    listen 80;
    return 301 https://$host$request_uri;
    }

    server {

    listen 443;
    server_name домен;

    ssl_certificate /etc/nginx/{fullchain.pem};
    ssl_certificate_key /etc/nginx/{privkey.pem};

    ssl on;
    ssl_session_cache builtin:1000 shared:SSL:10m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers HIGH:!aNULL:!eNULL:!EXPORT:!CAMELLIA:!DES:!MD5:!PSK:!RC4;
    ssl_prefer_server_ciphers on;

    access_log /var/log/nginx/access.log;

    location / {

    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://внутренний_ip:port;
    proxy_read_timeout 90;

    proxy_redirect http://внутренний_ip:port https://домен;
    }
    }
    Если используется связка с let's encrypt - то придется вручную копировать сертификаты на nginx reverse proxy
    Ответ написан
    3 комментария
  • На что ругается nginx?

    dvershinin
    @dvershinin
    High performance web server engineer
    nginx ругается на && потому что логическое and и or не поддерживаются в директиве if.

    Это как раз одна из многих причин, почему map просто придётся использовать :)
    Ответ написан
    Комментировать
  • На что ругается nginx?

    @Xilian
    Программист 1С, сетевые технологии, SQL
    На глаз if ($http_referer != "demo.company.ru" && $remote_addr != 192.168.88.0/24) должен быть в блоке server, а не location.
    Ответ написан
    1 комментарий
  • Nginx redirect from http to https?

    @ilnarb
    а если так?
    server {
      listen *:80;
      server_name example.com;
      proxy_set_header Host example.com;
      location / {
        rewrite ^(.*)$ https://example.com$1 permanent;
      }
    }
    server {
      listen *:443 ssl;
      server_name example.com;
      proxy_set_header Host example.com;
      location / {
        proxy_pass http://127.0.0.1:8080;
      }
    }
    Ответ написан
    Комментировать
  • Как закрыть доступ по IP в NGINX + PHP-Fpm?

    tonymadbrain
    @tonymadbrain
    doam.ru
    Правильно вот так:
    satisfy any;
    allow 127.0.0.1; #здесь вместо 127.0.0.1 ваш IP адрес или подсеть
    deny all;


    И не в локейшене а выше, на уровне с root там и server_name.
    Ответ написан
    1 комментарий