Задать вопрос
  • Как автоматически выдавать регион и id?

    @MadridianFox
    Web-программист, многостаночник
    Кубернетис нужен как раз для того чтобы приложения не знали ничего о машинах. Это платформа, которая скрывает детали реализации и даёт вам абстрактные рычаги управления.
    Если вам важно запускать приложение на особенных машинах, то надо пометить машины тэгом и настроить правила выбора машины через affinity/tolerations/nodeSelector.
    Например так можно настроить чтобы приложение запускалось только на машинах с gpu, или только на машинах в конкретном ДЦ.
    Здесь важно что вы не выясняете подходит ли вам текущая машина, а требуете чтобы приложение было запущено на подходящей.

    Есть, однако, и возможность передать в под информацию о нем самом в виде env переменных. Это называется downward api - при объявлении env переменной в манифесте пода можно указать что значением будет характеристика самого пода, например значение указанного лейбла, название неймспейса, или, как вариант, название ноды, на которой запущен под.
    Ответ написан
    Комментировать
  • Почему при старте docker контейнера sh скрипт запускается как node приложение?

    @MadridianFox
    Web-программист, многостаночник
    Скорее всего в базовом образе, который вы используете, настроен ENTRYPOINT, который превращает вашe src/start.sh в node src/start.sh или типа того.

    Посмотрите что именно прописано в ENTRYPOIN и подстройтесь или замените его.
    Ответ написан
  • Kubernetes: не получается добавить custom service-monitor?

    @MadridianFox
    Web-программист, многостаночник
    Prometheus-operator следит за созданием сервисмониторов в определённых неймспейсах, и фильтрует сервисмониторы по лейблам.
    Соответственно, вам необходимо посмотреть в манифесте прометеуса, какие значения там выставлены, и создать свой сервисмонитор с соответсвующем неймспейсе с необходимыми лейблами.
    Ответ написан
    2 комментария
  • Почему не работает внутреняя авторизация на nginx ларавел?

    @MadridianFox
    Web-программист, многостаночник
    Не работает потому что nginx и веб-приложение используют один и тот же http заголовок для передачи данных авторизации. Универсального решения нет.
    Как вариант, если приложение и так закрыто своей авторизацией, то basic можно и не делать. Или можно изменить заголовок авторизации в веб-приложении. Или попытаться разнести бэк и фронт на разные домены, чтобы одно было закрыто бейсиком, а другое собственной авторизацией.
    Ответ написан
  • Как сделать readinessProbe по тексту файла?

    @MadridianFox
    Web-программист, многостаночник
    Как уже написали в соседнем ответе вы можете обойтись одним только grep, однако ваша ошибка в другом.
    Во-первых, вы используете возможности shell, там где его нет. Пайп это специальная команда, которая есть в sh и bash. А хелсчек exec вызывает программы напрямую.
    Во-вторых, command это массив аргументов запуска. Каждая опция, каждый аргумент должен быть отдельным элементом массива, а вы просто дописали всё во второй элемент и оно распознаётся как один большой аргумент cat.

    Делайте греп и помещайте каждую опцию в отдельный элемент списка.
    Ответ написан
    Комментировать
  • Как отдавать docker container с сервера по адресу домена?

    @MadridianFox
    Web-программист, многостаночник
    Домен привязывается не к контейнеру, а к ip адресу.
    Вы не уточнили где именно поднята эта виртуальная машина и с какой целью.

    Если у вас на компьютере для личного использования, то проще всего использовать nip.io или прописать соотвествие домена и ip адреса виртуальной машины в файле hosts.

    Если вы арендовали виртуальную машину у какого-то провайдера и хотите сделать её доступной для всех по домену, то нужно купить домен и в его настройках указать ip адрес виртуальной машины.
    Ну или использовать всё тот же nip.io если это общий сервис для малого круга лиц.

    UPD:

    чтобы по разным доменам открывались разные веб-приложения, вам необходим http прокси, который на основании домена, указанного в http запросе, будет проксировать этот запрос на тот или иной внутренний адрес.
    Обычно для этого устанавливают nginx, который сам слушает 80 и 443 порты.
    Все домены настраивают так, чтобы вели на адрес этого сервера.
    В конфиге nginx описывают какое приложение должно отвечать по определённому домену, примерно вот так:

    server {
        listen 80;
        server_name site-1.domain.com;
        location / {
            proxy_pass http://127.0.0.1:27073;
        }
    }
    server {
        listen 80;
        server_name site-2.domain.com;
        location / {
            proxy_pass http://127.0.0.1:12345;
        }
    }
    Ответ написан
    8 комментариев
  • Не могу разобраться с kubectl --insecure-skip-tls-verify, выдает что No resources found in default namespace?

    @MadridianFox
    Web-программист, многостаночник
    Сообщение "No resources found in default namespace" означает, что вы успешно запросили у кубера список ресурсов, и он ответил, что неймспейсе default никаких ресурсов нет. Это нормальная ситуация.
    Ответ написан
    Комментировать
  • Как правильно составить небольшой bash скрипт по созданию пользователей?

    @MadridianFox
    Web-программист, многостаночник
    Хотелось бы побольше подробностей, потому что не совсем ясно как будет использоваться скрипт и, соответственно, что именно он должен делать.
    Предположу, что при вызове скрипта должен создаваться один новый пользоваетль с шаблонным именем.
    Т.е. нужно как-то из системы получить список таких пользователей, найти последнего, взять из него цифру и увеличить на один.
    Если обязательно нужен именно монотонно возрастающий номер, то примерно вот так:
    lastUserSuffix=$(cat /etc/passwd | awk 'BEGIN {FS=":"}; {print $1}' | grep systemd | sort -n | sed 's/systemd-//' | tail -1)

    Я тут ищу пользователей с именем systemd-***, думаю вам не составит труда изменить пример для своих целей.
    Ответ написан
    1 комментарий
  • Как добавить приватный ключ в SSH Agent навсегда?

    @MadridianFox
    Web-программист, многостаночник
    Пропишите добавление ключа в агент в автозагрузку.
    Ответ написан
    2 комментария
  • Как открыть другой сайт не меняя текущий адрес при проксирование в nginx?

    @MadridianFox
    Web-программист, многостаночник
    Вообще poxy_pass делает ровно то, что вам нужно.
    Посмотрите что именно отвечает сервер, когда вы делаете запрос. Может быть такое, что ваш nginx правильно проксирует, но сервер гугла видит, что запросе что-то не так, и возвращает редирект, конечно же на свой домен, а не на ваш. В таком случае браузер сделает ещё один запрос и поменяет домен в адресной строке.

    Если это так, попробуйе добавить заголовок с хостом гугла при обращении к гуглу:
    proxy_pass https://google.com/;
    proxy_set_header Host google.com;
    Ответ написан
  • Как не завершать сессию командной строки при использовании shell_exec()?

    @MadridianFox
    Web-программист, многостаночник
    Никак.
    Каждый вызов shell_exec порождает новый процесс командного интерпретатора (bash или cmd), который наследует переменные окружения от текущего php процесса.
    Текущая дирректория это состояние командного интерпретатора, которое теряется между вызовами shell_exec.

    В зависимости от решаемой задачи, вам необходимо либо запускать отдельно процесс cmd и передавать в него команды, либо запоминать текущее состояние и добавлять в каждый вызов shell_exec установку этого состояния, наприме банально вставлять перед каждой командой cd вот так:
    $cwd = "/path/to/dir";
    shell_exec("cd {$cwd}; ls");
    shell_exec("cd {$cwd}; chmod +x banana.sh");
    Ответ написан
    1 комментарий
  • Не могу запушить. Выдает ошибку. Как решить эту проблему?

    @MadridianFox
    Web-программист, многостаночник
    Создавая репозиторий в гитхабе вы нажали/оставили галочку "создать readme.md".
    Это привело к тому, что в гитхабе в репозитории повился первый коммит.
    При этом локально вы тоже коммитили.
    Теперь у вас локально и в гитхабе мастер начинается с разных коммитов. Не уверен что простой git pull тут поможет.
    Вам нужно удалить репозиторий в гитхабе и создать его заново, без всяких там файлов. Тогда вы сможете запушить туда локальные коммиты.
    Ответ написан
  • Как выполнить http-запрос между двумя сайтами в laradock?

    @MadridianFox
    Web-программист, многостаночник
    Конкретно про ларадок не скажу, но объясню как оно вообще работает.

    Когда контейнеры запускаются в одной сети, они доступны друг другу по доменам, которые равны названию контейнера. При запуске через docker-compose немного не так. Контейнеры видят друг друга по именам сервисов.
    Т.е. если у вас вот такой docker-compose.yml
    services:
       front:
          image: ....
       back:
           image: ....

    то фронт сможет обратиться к бэку по домену back, примерно вот так:
    file_get_contents("http://back:8080/path/to/file.txt");

    Ещё, если вы хотите чтобы сервисы обращались друг к другу по публичным доменам, а не по внутренним, можете задать в docker-compose.yml у контейнеров hostname.
    но в docker-compose.yml у контейнера можно задать его hostname,
    вот так:
    services:
       front:
          hostname: site1.ru
          image: ....
       back:
           hostname: site2.ru
           image: ....
    Ответ написан
    Комментировать
  • Как решить проблему nginx при сборке docker-compose?

    @MadridianFox
    Web-программист, многостаночник
    Попробуйте использовать директиву upstream. Она более лояльна к отсутствию целевого хоста на момент страта nginx.
    Ответ написан
    Комментировать
  • Как установить pip на bash консоли если отсутствует sudo?

    @MadridianFox
    Web-программист, многостаночник
    В большинстве случаев под словом "хостинг" понимается т.н. shared hosting, когда вы арендуете не машину, а папку в машине, которая настроена на работу определённых веб-приложений.
    При этом возможности пользователя часто ограничиваются, чтобы один пользователь не мешал другим. Хостинг предоставляет минимум прав, который необходим чтобы выгрузить свой код и поправить какие-то настройки.

    Соответственно, у вас может и не быть возможности установить pip вообще.
    Точный перечень возможностей вы можете уточнить у своего хостера.

    Чтобы гарантировано иметь возможность делать на сервере всё что захочется, вам необходимо арендовать не shared hosting, а целую виртуальную машину. Вот там вы можете и любые программы ставить, и настройки sudo править.
    Ответ написан
    1 комментарий
  • Как настроить в phpStorm 2020.3 автозагрузку скомпилированных файлов?

    @MadridianFox
    Web-программист, многостаночник
    Вы наверное имеете в виду автоматическую загрузку файлов на сервер?
    В настройках Deployment есть галочка Skip external changes. Проверьте её состояние, быть может шторм у вас не седит за файлами, которые не были явно изменены в редакторе.
    Ответ написан
    4 комментария
  • Могу ли я читать данные в Nginx?

    @MadridianFox
    Web-программист, многостаночник
    Можно, для этого есть конструкция map
    которая даже умеет подтягивать варианты из отдельного файла

    Однако это довольно статичный вариант, подходящий для случаев, когда вам достаточно один раз настроить и забыть.
    Если нужна интерактивность, то можно попытаться добавить её через модуль njs - он позволяет написать код на js, который устанавливает значение переменной.
    Однако этот довольно нетипичный вариант и с 99% случаев его использование это костыли и велосипеды.

    В случае, когда вам нужно проксирование на ддинамически формируемый список сервисов, посмотрите в сторону разного рода настраиваемых прокси и service discovery, например HAProxy или Consul.
    Ответ написан
    4 комментария
  • Можно ли использовать WebpackDevServer на продакшене?

    @MadridianFox
    Web-программист, многостаночник
    Товарищ, я же вам уже рассказывал про варианты раздачи вашего SPA.
    WDS или serve это вариант только для разработки, если вам лень на локалке настраивать полноценный сервер.

    В продуктивной среде вам нужно будет запустить полноценный web-сервер, такой как Nginx, и настроить кго так, чтобы он раздавал файлы из папки с результатом сборки вашего фронта, а также проксировал запросы на ваш бэк.
    Несмотря на то что express и сам может раздавать файлы из определённой папки, использовать перед ним Nginx это настолько же естественно, насколько естественно есть суп ложкой, а не вилкой.
    Nginx более производителен, позволяет настроить https, сжатие, кэширование и т.д.

    Если вам совсем уже не хочется разбираться с Nginx, настройти express вашего бэка чтобы раздавал файлы из конкретной папки:
    app.use(express.static('path/to/build'));
    Ответ написан
    2 комментария
  • Как я могу связать BackEnd с FrontEnd?

    @MadridianFox
    Web-программист, многостаночник
    Вам необходимо сделать так, чтобы какой-нибудь web-сервер раздавал файлы фронта.
    Это может быть:
    1) отладочный сервер прям во фронте: часто добавляют пакет, который позволяет выполнить команду вроде `yarn serve --port=3000`
    2) express вашего бэка: там можно в пару строчек активировать раздачу статики изх указанной папки
    3) отдельный web-сервер, например nignx: в продуктивной среде скорее всего именно он и будет заниматься раздачей статики

    Кроме того, в зависимости от выбранного способа, вам надо будет понимать куда вы делаете запросы и как они идут до бэк.
    Если вы запускаете отладночный сервер на порту 8080, а бэк на порту 3000, то ajax запросы вам надо делать на localhost:3000
    Если вы используете nginx, то лучше настроить в нём проксирование, так чтобы все запросы на localhost:8080 на самом деле шли на localhost:3000.

    Для локальной разработки рекомендую настроить бэк чтобы он раздавал статику
    https://expressjs.com/ru/starter/static-files.html
    Ответ написан
    9 комментариев
  • Как сделать выбор языка в Laravel?

    @MadridianFox
    Web-программист, многостаночник
    Я бы не пытался поддерживать пути с языком и без.
    Думаю достаточно / редиректитить на /ru, как это делает тот же habr.com например, а все остальные ссылки всегда делать с языком.
    Т.е. /ru/posts/1 это нормально, а /posts/1 это уже ошибка.

    Далее, я бы все, вообще все роуты обернул бы в группу
    Route::prefix('{lang}')->group(function () {
      //...
    });


    После этого я бы написал middleware, который берёт из запроса код языка, и выставляет локаль.

    А ещё, т.к. язык это параметр в path, то для нусущетсвующего языка надо отдавать код 404, а не 400.
    Ответ написан
    Комментировать