• Автоматизация развертки настроенной Linux на машины?

    @vitaly_il1
    DevOps Consulting
    Мой ответ - зависит от того что вам нужно - ставить один редкоменяющийся image на сотню компьютеров каждый день или для каждой из сотни инсталляций нужно кастомизировать систему.
    В первом случае - можно сделать image и просто ставить его через PXE, во втором - трудно обойтись без Ansible/Chef/Puppet.
    Дополнительно - Vagrant, Foreman.
    Ответ написан
  • Docker - как запустить Apache от имени пользователя?

    @metajiji
    Вот если совсем в лоб, то:
    docker run --help
    docker run --user XXX


    В принципе вы это сделали в Dockerfile, но подумайте головой... Вы взяли образ httpd, внутри огромный debian https://github.com/docker-library/httpd/blob/75e85...
    Лучше для такой задачи взять alpine FROM httpd:alpine-2.4
    Дальше httpd скорее всего запускается от рута, причем не просто так! Ему просто необходимо это сделать, потому, что существует такая вещь как не привилегированные порты https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D...

    У вас 100500% в конфиге httpd указан порт 80, что меньше 1024, следовательно httpd не в силах запуститься!
    httpd запускается от рута, биндится на 80/443 порт, после чего делает suid на uid/gid, указанного в кофниге https://httpd.apache.org/docs/2.4/mod/mod_unixd.ht...

    Теперь зная это, становится понятно, почему в docker logs (имя_контейнера) мы видим ошибки.

    Что делать? Ну например запускать апач от пользователя www-data, как и собирались, но на портах выше, чем 1024, а если хочется, чтобы он отвечал на 80 порту на хосте, то не вопрос, порт-маппинг сделает для вас это, потому, что на хосте dockerd запустит docker-proxy процесс, который будет работать от рута и будет слушать 80 порт, проксируя траффик в контейнер на указанный вами порт, например 8080.
    Получаем, что внутри контейнера апач живет на 8080, снаружи на 80.

    version: '3.7'
    
    services:
    
      db:
        image: mariadb
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: example
    
      adminer:
        image: adminer
        restart: always
        ports:
          - 8080:8080
    
      web:
        image: httpd:alpine-2.4  # поверьте, вам не нужен nano внутри контейнера! просто подключите все необходимые конфиги с хоста как volume, это правда удобно.
        depends_on:
          - db
        restart: always
        ports:
          - 80:8080  #HOST:CONTAINER
        volumes:
          - //c/Docker/sf4/project:/usr/local/apache2/htdocs
    #      - скопируйте необходимые конфиги себе примерно так: "docker cp /etc/httpd/httpd.conf ." и подключите как volume
          - "./httpd/httpd.conf:/etc/httpd/httpd.conf"  # пример подключения конфига, где ./httpd/httpd.conf файл рядом с вашим docker-compose.yml
    Ответ написан
  • Iptables + Openvpn. Как запретить route через VPN для клиента чтобы только у него работало через провайдера?

    @zohan1993
    devops
    1. В конфиг OVPN сервера добавляем:
    -------------------------------------------------
    client-config-dir /etc/openvpn/ccd
    -------------------------------------------------

    2. Для нужного клиента добавляем параметры:
    /etc/openvpn/ccd/client1
    -------------------------------------------------
    # push-reset, запрещает отдавать этому клиенту общие параметры назначаемые командой push в конфигурационном файле сервера
    push-reset
    # Маршрут который хотим отдавать данному клиенту
    push route 192.168.100.0 255.255.255.0
    -------------------------------------------------
    Ответ написан
  • Статистика (логирование) посещаемых сайтов пользователями, как сделать?

    CityCat4
    @CityCat4
    Если я чешу в затылке - не беда!
    Божечки, этот вопрос постепенно так в лидеры выбивается - мы ж таки ж товарища Ына недавно встречали недаром...

    Для логирования доступа используется прокси. Для раскрытия https используется squid c бампингом (и статистикой). Чтобы работал бампинг нужно иметь свой СA (в винде серверной есть), распространенный на все компьютеры сети в качестве доверенных. Другого способа врезаться в https - нет (и этот-то не везде работает).
    Ответ написан
  • Музыка это "горячие" или "холодные" файлы?

    OrlovEvgeny
    @OrlovEvgeny
    golang developer / DevOps
    Hot data - файлы которые опрашиваются с частыми интервалами и из множества источников одновременно, например все cdn сервисы являются доставщиками горячих данных.
    Cold data - используется как постоянное хранилище для данных, некий общий большой storage. Отдает файлы реже и только 1-2 раза и в большинстве систем отдает их проксируя через hot data. Cold data чаще имеет ширину канала много ниже чем у hot data.

    В чем соль.
    Вы можете взять большой storage cold data, но с маленьким каналом 100мб/с (например), минимальным объемом озу и легким cpu..но с объемными hdd дисками, на который вы зальете все свои файлы и будите использовать как постоянное хранилище которое не может быть доступно для внешней сети.
    Далее берете hot data сервер, у которого из коробки идет скорее всего 1гб/с, более производительное железо и ssd диски с небольшим объемом, скажем ~512гб. Этот сервер уже будет смотреть в глобальную сеть.
    Пользователь обращается к горячему серверу за файлом скажем по имени hot-storage.com/music/korn.mp3. Если такого файла нет на горячем сервере, то сервер делает proxy_pass до холодного стораджа и кладет этот файл себе в кэш, при следующем обращении к этому же файлу он отдастся напрямую из кэша горячего сервера по каналу 1гб/с не затрагивая сервер с холодными данными.
    Ответ написан
  • Стоит ли включать barrier=0,commit=60,noatime,data=writeback,journal_async_commit в /etc/fstab?

    @putvr
    Для софтового рейда data=writeback лучше не делать.
    Можно сделать без риска для данных noatime, nodiratime, noacl, а с остальным можно играться когда рейд хардварный и с BBU.
    Ответ написан
  • Стоит ли включать barrier=0,commit=60,noatime,data=writeback,journal_async_commit в /etc/fstab?

    Zoominger
    @Zoominger Куратор тега Linux
    System Engineer
    Лучше не надо, скорость и так будет нормальная.
    А эти школотвики просто вредные советы.
    Ответ написан
  • Как разобраться с терминалом linux? Что детально делает эта команда?

    sudo apt-add-repository -y ppa:brightbox/ruby-ng
    В debian-подобных дистрибутивах есть возможность создавать и подключать нестандартные репозитории с пакетами, они называются PPA. Команда apt-add-repository добавляет в систему репозиторий brightbox/ruby-ng. Ключ -y означает автоматически отвечать Да на все вопросы команды.

    Однако я не знаю, зачем это нужно, ведь дальше ruby мы нигде не устанавливаем и не используем.

    sudo apt-get update
    Эта команда обновляет информацию обо всех пакетах из всех репозиториев. То есть подтянет версии для пакетов из репозитория brightbox/ruby-ng. Обратите внимание, что это только загрузка сведений о пакетах и их версиях, а реальное обновление может быть только после apt-get upgrade или apt-get install.

    sudo apt-get -y install curl
    Устанавливаем программу curl. Скорее всего она будет установлена из репозитория ubuntu. Ключ -y также означает «Установить без всяких вопросов и предупреждений».

    curl -sL https://deb.nodesource.com/setup_10.x | sudo -E bash -
    Здесь curl загружает установочный скрипт для node 10 и передаёт его интерпретатору bash для выполнения. Ключ -s означает, что curl не должен выводить никаких своих сообщений (иначе bash попытается их выполнить), ключ -L означает разрешить обработку HTTP-редиректов при загрузке скрипта. Весь текст скрипта передаётся оператором «|», который называется «пайп».

    В установочном скрипте есть команды для подключения ppa-репозитория для Node 10 для конкретно вашего дистрибутива.

    Вообще это не очень безопасный способ, ведь здесь выполняется скрипт из интернета с правами администратора.

    sudo apt-get -y install nodejs
    Устанавливаем Node и NPM из нового репозитория.

    sudo npm i -g gulp rimraf npm-check-updates bower
    С помощью установленного NPM глобально устанавливаем пакеты gulp, rimraf, npm-check-updates и bower.

    Не знаю, зачем в 2019 году может понадобиться bower, но ладно. gulp и rimraf я бы тоже ставил локально в проект, но если их много, то глобальная установка сэкономит место на диске. Также крайне не рекомендую при работе с npm и node использовать sudo. Если возникает проблема с правами при глобальной установке пакетов, то лучше заранее правильно настроить систему.

    sudo chown -R $USER:$(id -gn $USER) /home/$USER/.config
    Эта команда восстанавливает владельца на директорию .config и лежащие в ней файлы и поддиректории. Затрудняюсь сказать, зачем это нужно. Возможно права повреждаются предыдущей командой sudo npm.

    И вообще прав ли я, когда говорю репозиторий ubuntu где лежат все репозитории? Как его посмотреть?

    При установке пакеты ищутся во всех установленных репозиториях. Из того, где версия новее, они и скачиваются. Поэтому репозиторий для node 10 замещает версию node из родного репозитория ubuntu.

    Подробнее о репозиториях и как посмотреть, какие из установлены, можно здесь.

    Посмотреть, какие пакеты входят в репозитории ubuntu, можно здесь.

    Также в репозитории есть программа synaptic, где вы можете посмотреть и установить или удалить доступные в вашей системе пакеты.
    Ответ написан
  • Как организовалась балансировку нагрузки?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    настоящая балансировка куда сложнее. NGINX это просто инструмент для распределения трафика между несколькими серверами. На самом деле система должна (в идеале) состоять из DNS сервера, который общается с Service Discovery ( например Consul), в котором регистрируются и сервера приложений и серверА балансировщиков. Внимание - балансировщиков должно быть несколько и все это должно быть завязано на DNS чтобы не встрять из-за фиксированных IP. На один и тот же сервер приложения должен приходиться трафик не менее двух балансировщиков
    Ответ написан
  • Как извлечь подстроку из строки при помощи grep?

    echo '"{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}"' | cut -d\" -f11
    :

    Громоздко?

    А лучше так:
    echo '{"jsonrpc":"2.0","result":[{"groupid":"63","name":"1voda","internal":"0","flags":"0"}],"id":1}' | jq -r '.result[0].groupid'
    :


    P.S. вообще, с jrpc сервером проще работать jrpc клиентом, из того же питона. Да даже если и не использовать реализацию jrpc клиента. У вас же тут может вернуться массив результатов.
    Ответ написан
  • Можно ли виртуалитзировать 2 сервера в одной машине?

    martin74ua
    @martin74ua Куратор тега Системное администрирование
    Linux administrator
    наймите админа
    Ответ написан
  • Автоматическое копирование вольюмов Docker?

    Tyranron
    @Tyranron
    Нужно разделять stateless-сервисы и stateful-сервисы. Первые Вы можете раскладывать по нескольким хостам и не париться, а вот другие надо думать как именно их масштабировать, и какие гарантии нужны. По хорошему, само Ваше приложение должно быть stateless, и не монтировать никаких директорий, куда бы складывало файлы на длительное хранение, а заливало бы эти файлы для длительного хранения на другой специальный файловый сервер хоть по S3 bucket интерфейсу, хоть по, прости господи, FTP.

    Ещё здесь Важен вопрос каковы Вам нужны гарантии в данной ситуации. Если у Вас файлов мало, то можно тупо копировать файл на каждый из хостов (постоянной фоновой синхронизацией). Если файлов очень-очень много, то на один хост они никогда не влезут и нужно делать размазывание файлов по нескольким хостам с определенным уровнем избыточности (мы ведь не хотим потерять файлы навсегда, когда на одном из хостов полетит диск).

    Каковы есть/приходят на ум варианты:
    1. Поднять на всех хостах распределенную файловую систему (CephFS, GlusterFS, и т.п.). Монтируем в контейнер приложения volume под этой системой и тупо пишем туда файлы как обычно. Распределенная ФС самостоятельно размажет файлы по хостам в зависимости от желаемых настроек. Читаем файлы из той же директории.
      Плюсы: не нужно менять код приложения, легко использовать, простая концепция в понимании.
      Минусы: при интенсивной работе с файлами может не хватать производительности (подобные ФС считаются медленными), при отвале части хостов может не работать запись (так как требуется кворум n/2 + 1), эксплуатация/поддержка подобных систем может быть не самой тривиальной задачей (веселой починки сломавшегося Ceph-кластера).
    2. Поднять на всех хостах Minio (свой poor man's S3 bucket), либо другой свой отдельный файловый сервер. Работает в двух режимах: single (одна нода работает только со своими файлами, запись в несколько надо надо делать на стороне приложения, и фоновую синхронизацию тоже самостоятельно) и distributed (ноды обьединены в кворумный кластер с размазыванием файлов).
      Плюсы: S3 bucket интерфейс, легкая эксплуатация, можно монтировать как ФС.
      Минусы: возможно нужно менять код приложения (чтобы уметь работать с S3), производительность на чтение в distributed режиме медленная (сравнима с распределенными ФС из пункта 1).
    3. Просто монтировать на каждом хосте локальную директорию, для которой настроить постоянную фоновую синхронизацию через BitTorrent Sync какой-то (а может даже просто rsync).
      Плюсы: производительность обычной ФС, никаких кворумов (а значит блокировок на запись), легко использовать (монтируешь и вперёд).
      Минусы: файлы доступны на других хостах только через какое-то время, а значит приложение должно уметь это учитывать, возможна потеря данных (нода приняла файлы и сгорела не успев их отсинхронизировать на другие), если файлы не влезают на один хост - то вариант не подходит, либо шардить (размазывать) придётся руками самостоятельно в приложении.
    4. Использовать готовое отказоустойчивое облако: AWS Bucket, DigitalOcean Space и т.п.
    Ответ написан
  • Как реализовать удаленный сбор информации о компьютере?

    @anykey_ua
    Есть клиент серверные решения для автоматизации инвентаризации, это как выше писали 10-strike и т.д. Мне понравилось GLPI очень подробно собирает информацию и есть варианты для установки клиента GPO
    Ответ написан
  • Как поднять несколько сайтов на одном сервере?

    DevMan
    @DevMan Куратор тега Веб-разработка
    Несколько сайтов на одном IP, которые резолвятся по serverName - это нормальный подход?
    a как по вашему работают шаред–хостинги, у которых на одном ипе несколько сотен доменов/сайтов?

    докер нужен там, где он нужен и когда он нужен. а не словили хайп, снесло кукушку, тулим его на каждый чих–пых.

    по вашему описанию, вам даже впс не нужен – достаточно просто перенеси все сайты на один акаунт у одного хостера.
    а для потренироваться отлично подходит локалхост или персональный впс.
    Ответ написан
  • Почему я не могу подключится к бд в docker?

    tommy-vercetti
    @tommy-vercetti
    Symfony/Golang
    У меня такой конфиг был:

    version: '3.5'
    
    services:
        db:
            container_name: my_project_laravel_db
            image: mysql:5.7
            volumes:
                - data:/var/lib/mysql
                - ${PWD-.}/docker/mysql:/docker-entrypoint-initdb.d
            environment:
                MYSQL_ROOT_PASSWORD: root
            ports:
                - '8044:3306'
            networks:
                - app
    
    
    networks:
        app:
            name: my_project_laravel_app
            driver: 'bridge'
    
    volumes:
        data:
            name: my_project_laravel_data
            driver: 'local'


    В папке ./docker/mysql лежит файл init.sql
    DROP USER IF EXISTS 'homestead';
    CREATE USER 'homestead'@'%' IDENTIFIED BY 'secret';
    
    CREATE DATABASE IF NOT EXISTS my_project_cloud;
    GRANT ALL ON my_project_cloud.* TO 'homestead'@'%' IDENTIFIED BY 'secret';
    
    CREATE DATABASE IF NOT EXISTS my_project_cloud_test;
    GRANT ALL ON my_project_cloud_test.* TO 'homestead'@'%' IDENTIFIED BY 'secret';


    .env
    DB_CONNECTION=mysql
    DB_HOST=db
    DB_PORT=3306
    DB_DATABASE=my_project_cloud
    DB_USERNAME=homestead
    DB_PASSWORD=secret
    Ответ написан
  • Как выдать права к magento 2?

    orlov0562
    @orlov0562
    I'm cool!
    Я тебя сейчас напугаю, но права 0777 нельзя устанавливать, никогда, хаха.

    Тебе надо узнать от какого пользователя у тебя работает веб-сервер, и назначить его владельцем папки.

    Права для папок должны быть 0755, а для файлов 0644. А лучше, 0750 и 0640.
    Ответ написан
  • Возможно ли организовать сетевую синхронизацию времени между сегментами сети связанными через однонаправленный шлюз?

    jamakasi666
    @jamakasi666 Куратор тега Linux
    Просто IT'шник.
    В закрытом сегменте сети поднимаете ntp сервер, покупаете GPS антенну и берете время с нее. У меня на работе везде такая схема, gps антенны все на rs232, ntpd только подшаманить и все. Везде это порядка 40 объектов, точность времени нужна по специфичности работы софта(телеметрия железа и датчиков).
    Ответ написан
  • Могу ли я купить ip адрес и подключить этот ip к своей vds?

    Для этого необходимо, чтобы кем-то вам была выделена сеть и произведена процедура регистрации этой сети на вас в регистраторе. Для Европы, включая Россию, регистратором является RIPE (ripe.net).
    Для IPv6 адресов вы можете запросить собственную сеть у RIPE и зарегистрировать ее как независящую от провайдера (PROVIDER INDIPENDENT или PI).
    Для IPv4 такой возможности не осталось, т.к. пространство адресов у RIPE закончилось. Вы можете либо запросить подсеть у своего хостинг провайдера, такая сеть будет частью его сети (PROVIDER AGGREGATABLE или PA) и вы не сможете с ней уйти к другому провайдеру, или можно перекупить кусок PI сети у кого-то. После этого необходимо, чтобы администратор сети оформил процедуру назначения (ASSIGNMENT) этой сети в RIPE вам.

    В любом случае, если ваша сеть не являются частью сети провайдера, необходимо предварительно договариваться с провайдером о возможности BGP-анонса вашей сети и стоимости такой услуги.

    P.S. кроме случая когда вы получается полную PI сеть (напрямую от регистратора или вам полностью ее передают), все равно будет видно, что ваша сеть является частью сети принадлежащей кому-то другому.
    Вы можете сами зарегистрироваться как провайдер (LIR), но это потребует существенных ежегодных взносов.
    Ответ написан