Задать вопрос
  • Имеет ли смысл переход на kubernetis для обычных проектов веб-студии?

    @Stqs
    senior software developer
    Иван Николаевич,

    я бы попробовал
    делать там особо много не нужно
    зато точно все энвайроменты будут унифицированы
    сисдамин будет спать спокойно - автоскейлинг настроит и все
    девопс будет спать спокойно - создаст неймспейсы и ансибл плейбук накидает и все
    девелоперы будут спать спокойно - будут уверены что все на сервере ранается так же как на локалхосте дома

    потом когда начнете скейлится - порадуетесь
    когда внезапно в 2 утра посыпится нода - порадуетесь
    когда захотите использовать другого клауд-провайдера - порадуетесь
    когда начнет расти сложность - возьмете helm в руки и порадуетесь
    когда захотите как-то логи собрать унифицированно - порадуетесь
    когда захотите метрики собирать унифицированно - порадуетесь
    когда захотите иметь динамические энвайрменты - порадуетесь
    Ответ написан
    Комментировать
  • Как решить проблему при подключении к бд Connection refused?

    @Stqs
    senior software developer
    maks78945,

    собственно, решается так же как и все остальные проблемы в мире которые заключаются в "connection refused".
    чем докажете что ваше приложение(mysql в данном случае) действительно
    1) запущено
    2) прицеплено к нужному порту
    3) это порт доступен снаружи вашего сервера
    Ответ написан
    Комментировать
  • Почему не могу создать информационную базу?

    @Stqs
    senior software developer
    Adel Khalitov,

    Все порты открыты, фаерволов нет.

    чем докажете?

    если снаружи сервера делать nmap порта то что получаете?
    Ответ написан
  • Как настроить контейнеры nginx и php в кубернетесе?

    @Stqs
    senior software developer
    letema,

    у меня пару вопросов
    1) почему секция
    location ~ \.php$
    так выглядит? пхпшное прилоежние ведь в другом контейнере
    там должно быть чото типа
    proxy_pass app:9000
    и все
    2) если приконектится к поду nginx и сделать ls -lah /var/www/web то все ли содержимое там на месте? папка существует?
    Ответ написан
    Комментировать
  • Почему докер-контейнер не отображает страничку?

    @Stqs
    senior software developer
    zlodiak,
    без обид но ваши действия напоминают судорожные бессистемные попытки подобрать пароль к какому-то замку
    почему вы вначале пробуете порт -p 80:80 и потом пробуете -p 8000:8000? где логика? вы пытаетесь подобрать порт случайным образом? разве вы не знаете/понимаете какой именно порт вам нужен?
    то же самое дальше

    $ curl docker
    curl: (6) Could not resolve host: docker
    $ curl localhost:8000
    curl: (56) Recv failure: Соединение разорвано другой стороной

    вы пытаетесь случайным образом угадать что именно можно дать в качестве аргумента для curl что б получить ответ?

    давайте по порядку
    имедж вы собрали
    далее вы пытаетесь запустить контейнер
    $ docker run -d -p 80:80 webserver-image:v1
    a672d7837f64a95d41815fc8ab931870fc2545d6118987bb173c798e049e2ea7
    docker: Error response from daemon: driver failed programming external connectivity on endpoint wizardly_hermann (aa134f246786be398ba332286db88d73f04f5d1047996420eddb5c91282f8ce5): Error starting userland proxy: listen tcp 0.0.0.0:80: listen: address already in use.

    что именно тут непонятно? есть же google translate в конце концов
    пока мы не поймем что именно вам тут непонятно - дальше двигаться смысла нет
    Ответ написан
    2 комментария
  • Как завернуть приложение в pod K8s?

    @Stqs
    senior software developer
    я бы сказал так что постановка вопроса не очень верна
    поды никто руками не создает, это идет в разрез с философией кубернетса
    поды есть сущности эфемерные и смертные, и по хорошему не вам решать когда их стартовать и когда убивать
    для этого как раз и существует кубернетс

    ваша же задача состоит в том что б описать Deployment (который является перманентным декларативным указанием кубернетсу что именно от него требуется).
    Deployment в свою очередь создаст ReplicaSet, который в свою очередь будет вершить судьбы Pod'ов
    ну вот как-то так в двух словах
    но на лицо тот факт что документацию вы либо не читали либо не осилили поэтому начинать нужно с других вопросов
    Ответ написан
    Комментировать
  • Как в один pod добавить 2 контейнера?

    @Stqs
    senior software developer
    Комментировать
  • Как парсить сайт на python?

    @Stqs
    senior software developer
    Ответ написан
    Комментировать
  • Почему создается строка в круглых скобках?

    @Stqs
    senior software developer
    проще наверное от обратного тут
    s = 1 + 2
    s = (1 + 2)
    s = (
       1 + 2
    )
    s = (
       1
       +
       2
    )

    все эти операции по сути одно и тоже
    скобки часто объюзят как в последнем примере потому что так удобно записывать операции растянутые на несколько строк

    то есть применительно конкретно к вашему вопросу мы имеем все тоже самое но в обратную сторону
    s = (
        "Привет"
        "Мир"
    ) 
    s = ("Привет" "Мир")
    s = "Привет" "Мир" // что есть обычной конкатенацией в питоне


    если непонятно почему опускаются скобки - то это просто потому что они ничего по сути не группируют
    в моем примере будет
    s = (1 + 2)
    s = (3)  // какой смыл тут от скобок?

    в вашем примере тоже самое
    вначале произойдет конкатенация и скобки примененные к одному операнду как бы опустятся за неимением большого в этом смысла
    Ответ написан
    2 комментария
  • Можно ли через node_exporter отправлять данные на указанный prometheus server?

    @Stqs
    senior software developer
    gremlintv2,

    вообще чисто идеологически prometheus работает через pull данных
    но, бывает так что сущности которые мы собираемся мониторить:
    1) являются эфемерными, то есть, являются смертными сущностями, которые могут восстать позже, в другом месте и с другим адресом например
    2) могут быть просто job'ами которые естественно живут какой-то определенный промежуток времени
    3) просто не доступны для prometheus сервера

    Хороших вариантов на самом деле 2 как по мне
    1) если промитеус сидит внутри того же кластера - то мы просто добавляем в конфиг секцию типа такой
    job_name: ${appName}
    kubernetes_sd_configs:
    - role: pod
    relabel_configs:
    - action: keep
      regex: ${appName}
      source_labels:
      - __meta_kubernetes_pod_container_name
    metrics_path: ${path}
    scrape_interval: ${interval}s

    тогда промитеус через нативный кубернет DNS сможет получить информацию о подах, отфильтрует по __meta_kubernetes_pod_container_name все нужные и все будет заебись

    2) этот вариант подойдет для обоих вариантов когда промитеус сидит внутри или снаружи кластера
    https://github.com/prometheus/pushgateway
    если вкратце то 1) вы создаете пушгейтвей эндпоинт для вашего сервиса, 2) туда по хттп пушите свои метрики 3) в конфиге промитеус-сервер вы добавляете `scrape_configs` секцию как обычно, которая пулит данные с пушгейтвей эндпоинта

    PS
    node_exporter в этом случае не особо помогает потому что по сути создает эндпоинт который должен мониторить промитеус, если само приложение не доступон для промитеуса то и node_exporter тоже не будет доступен что очевидно
    Ответ написан
    Комментировать
  • Почему неверно выполняется задание cron?

    @Stqs
    senior software developer
    vlarkanov,

    по-моему этот вопрос уже задавали когда-то
    суть в том что когда вы выполняете команду "в консоли" вы по факту используете bash скорее всего или его производные
    cron же в свою очередь использует sh, а не bash
    а там есть небольшие нюансы в написании команд
    Ответ написан
    2 комментария
  • Какой самый лёгкий дистрибутив Linux для сервера VPN выбрать?

    @Stqs
    senior software developer
    https://en.wikipedia.org/wiki/Alpine_Linux

    The base system in Alpine Linux is designed to be only 4–5 MB in size (excluding the kernel).[citation needed] This allows very small Linux containers, around 8 MB in size, while a minimal installation to disk might be around 130 MB.
    Ответ написан
    Комментировать
  • Как данные из формы передать в другие функции-обработчики в Bottle?

    @Stqs
    senior software developer
    Dmitry Vatlin,

    Разве не нужно делать redirect(‘/?date=‘ + birthday)
    Иначе откуда date возьмется в index? Его ж туда никто не передает.
    Ответ написан
  • Как деплоить небольшие проекты?

    @Stqs
    senior software developer
    вопросы у вас философские, на каждый можно отвести часы обсуждения
    Полноценный CI/CD поднимать не вижу смысла ввиду размеров

    вы ж все равно собираетесь какие-то скрипты мутить и чото выдумывать,
    какая разница это будут крон скрипты на сервере или джоба в дженкинсе? по-скорости написания - одно и тоже будет. так что по-моему размер тут не имеет значение
    единственное что имеет значение - насколько явно у вас описан процесс(алгоритм) билда/разворачивания приложений
    с этой точки зрения мое видение примерно такое:

    1) git не есть инструмент для развертывания по, git лишь для версионирования кода
    и по-идее результатом вашей работы должен быть не код в гитхабе, а какой-то вменяемый артефакт, готовый к деплою (docker-image, pip пакет, npm пакет, deb пакет, jar, war, zip в крайнем случае, и тд и тп). Если производить артефакты то вопрос с тегами отпадет сам собой - у вас будет артефакт какой-то версии и все
    сервер не должен знать ни про какие гиты и ни про какие-то теги в нем
    Здесь я бы рекомендовал паковать все в докер-имеджи хотя бы только потому, что сервер в итоге не будет знать ничего о зависимостях приложения, нужных библиотеках, ниочем вообще, вам нужно установить только докер
    Огромное преимущество использование докера - в Dockerfile вы вынуждены волей/неволей описать точно и явно все шаги требуемые для установки приложения. И что самое замечательное - это все будет храниться в том же репозитории, под контролем гит - шикарно.
    Артефакты желательно хранить в каком-то артефактории,
    но если реально все просто - то можно хранить несколько последних версий прямо на сервере в какой-нибудь папочке

    2) как только вы получили артефакт - его можно деплоить
    неплохо было б знать особенности вашего проекта, но грубо говоря допустим что достаточно его зааплоадить на сервер, положить в нужное место
    опять же с этим дженкинс справится на ура и займет у вас это все дело 10 минут . Если вы опишете логику в Jenkinsfile вы выиграете еще раз потому что процесс развертывания(алгоритм) будет описан опять же ЯВНО. И будет тоже под контролем гита. (Jenkins должен знать только в каком репозитарии и в каком месте ему искать Jenkinsfile)
    Если же вы будете крутить какой-то спрятанный cron скрипт на сервере - о нем никому ничего не будет известно. Поверьте уже через короткое время все это дело начнет усложнятся, что-то забудется, что-то измениться и это все вместе больно ударит вас по яйцам.

    В чем еще преимущество такого подхода: если вам нужно сделать roll-back на предыдущую версию вам не нужно собирать проект заново выкачивая все с гита, ведь у вас есть предыдущие артефакты, ролбек в таком случае вообще не проблема - просто указываем предыдущую версию артефакта и деплоим еще раз и все

    3) Env Variables
    когда приложение стартует - считывает все что ему нужно из переменных окружения
    деплой джоба может каждый раз эти переменные устанавливать перед тем как деплоить - это было бы тоже круто потому что вы сделали бы это знание так же явным

    Итого имеем
    - логика сборки проекта описана в Dockerfile и находится под гитом
    - логика деплоя находится в Jenkinsfile и находится под гитом, и что самое главное является кодом (Jenkinsfile пишем на груви, для простых вещей вам понадобиться 30 минут изучения и все)
    - на сервере мы ничего не устанавливали совершенно кроме самого докера
    - мы храним несколько версий нашего приложения на всякий случай и можем быстро откатиться не прибегая к гиту вообще
    - сервер не знает ничего о гитах
    - на сервере нет НИКАКОЙ дополнительной логики по разворачиванию вашего приложения
    - имея все это очень легко добавлять другие сервера для деплоя - что нам нужно - грубо говоря указать другой айпи и набор env variables к нему ( если они конечно отличаются)
    giphy.gif
    Ответ написан
    5 комментариев