• Можно ли смотреть в IP камеры без проброса портов за NAT?

    @metajiji
    Newbie2, каким образом запись в dns где-то в интернете поможет прокинуть порт наружу на nat провайдера? Расскажите подробнее о такой технологии.
  • Можно ли смотреть в IP камеры без проброса портов за NAT?

    @metajiji
    Ddns не решает проблему доступности извне. Он решает проблему статичности адреса. Такое бывает у провайдеров, что клиенту выдаётся белый ip, но случайным образом.

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

    @metajiji
    Hemul GM, винда будет пытаться сохранить файлы, а они окажутся на другом диске, в итоге на ссд не попадут, что в итоге позволит выиграть место, собственно часть работы уже проделана с другими папками, я предложил лишь 2 вариант. кстати есть и 3 вариант для любителей "поинтересней" - Raid0 :) но имхо проще купить ССД диск на терабайт или пол-терабайта они же теперь доступные!

    Кстати вспомнил как делается монтирование: mountvol
  • Как искусственно увеличить размер диска?

    @metajiji
    Hemul GM, нет, не симлинки, а именно примонтировать другой диск в папку. Я так дома Games примонтировал с hdd, а винь на ссд живет
  • Как на прошивке Mikrotik 6.42 раставлять теги для Vlan?

    @metajiji
    Если есть switch-chip, то делайте через него. Bridge крайне софтоаая и медленная штука, там даже fast forward и fast track очень сложно делаются:(
  • Laravel 5.8 требует php7.2?

    @metajiji
    JhaoDa, могу пояснить специально для вас :)
  • Что делать если не отправляется письмо, хоть нету ошибок php?

    @metajiji
    wisgest, практически да. Скажу явно, проверьте локальную очередь писем. Но лучше начать с sendmail. На говнохостингах может случиться такое, что вместо sendmail затычка типа /bin/true, и это вообще труба. Ошибок не будет ага, Пых мамой будет клясться, что письмо ушло успешно и действительно его задача вызвать sendmail и передать в него на stdin тело письма. В такой ситуации Пых может только проверить exit code.
  • Как разрешить выход в интернет только с одного IP адреса?

    @metajiji
    Давай отталкиваться от постановки задачи.
    Выход в Интернет это OUTPUT цепочка, так мы отбросим лишнее.
    Дальше в условии сказано выход только при подключенном openvpn.
    Давай думать, как работает openvpn?
    С eth0 наружу бежит до впн сервера. Значит туда нельзя рубить доступ в OUTPUT!
    sudo iptables -A OUTPUT ! -s АЙПИ -j DROP
    Так мы запретили выход в интернет без впн, в том числе и до самого впн!
    Все, что нужно - добавить перед этом правилом разрешающее правило до впн сервера.
  • Сертификаты CAPsMAN бесполезны при DHCP?

    @metajiji
    Для корпоративного wifi вам необходим wpa-eap. А там уже авторизация через sso компании, сертификаты и прочие приятности.
    Сотрудник уволился, доступ к вафле потерял, в отличие от psk. Ну не менять же его при каждом увольнении.
  • Подключение к базе данных MySql, как правильно и современно?

    @metajiji
    Хм, давно в пыху не вляпывался. :D
    Никогда не копал настолько глубоко в php со времен 4-ки, но это не так сложно, итак смотрим, оба используют mysqlnd:
    https://github.com/php/php-src/blob/master/ext/pdo...
    #ifndef PDO_USE_MYSQLND
    #include <mysqld_error.h>
    #endif


    https://github.com/php/php-src/blob/master/ext/mys...
    #ifndef MYSQLI_USE_MYSQLND
    /* {{{ php_free_stmt_bind_buffer */
    void php_free_stmt_bind_buffer(BIND_BUFFER bbuf, int type)
    {

    mysqlnd включен по умолчанию, вот пример всем известного remi-repo
    #https://git.remirepo.net/cgit/rpms/php/php70.git/tree/php70.spec#n1353
          --with-pdo-mysql=shared,mysqlnd \

    Далеко ходить не будем, в первой попавшейся статье https://habr.com/ru/company/mailru/blog/234125/
    есть вполне налгядная картинка 83ae02aded864136b2fce829ae2f6753.png

    Ну да, вот, чтобы явно mysqli использовался, ага, тут вы меня поймали, а на деле драйвер один - mysqlnd. Есть там еще один, который deprecated был в 5.x, надеюсь в 7-ке выкинули его, все уже догадались, что речь о mysql драйвере, который медленный и работает чуть ли не на уровне shell https://github.com/php/php-src/blob/php5_5_0/ext/m...

    И по факту обе либы (с небольшими оговорками) одинаковые. Они обе лишь интерфейс с libmysql (mysqlind), предоставляющие программисту разный подход к написанию кода, со своими преимуществами и недостатками.

    Использовать PDO и не использовать ООП вполне можно, тем более для новичка, зато вектор роста в сторону ООП а примере PDO.
  • Подключение к базе данных MySql, как правильно и современно?

    @metajiji
    FanatPHP, аргументы? Pdo обзавелся собственным коннектором? Насколько мне известно pdo лишь обёртка над mysqli, кроме того, когда ставишь pdo, в зависимотях приезжает mysqli. Это не так? Можно ссылку на сорцы?
  • Docker - как запустить Apache от имени пользователя?

    @metajiji
    symnoob, Если ты на винде, то файлы прокидываются сперва в гостевую ОС, там какие-то "пермишены случаются" нужно как-то замапить владельца из винды в линукс (chown), видимо 1000:50 и есть то, во что замапилось, а вот права доступа (chmod) замапились крайне просто на все 777 (rwxrwxrwx) следовательно проблем с доступом к файлам не будет ни у гостя ни внутри контейнера.

    Если открываешь по вирт хосту sf4.local/, то на компе, где ты это делаешь оно должно резолвиться, т.е. в строке адреса в браузере должно быть sf4.local/, если открываешь по ip, то тебе нужно понять 1 вещь, в какой папке веб сервер ищет файлы, в данном случае, как я уже писал это:
    # grep ^DocumentRoot /usr/local/apache2/conf/httpd.conf
    DocumentRoot "/usr/local/apache2/htdocs"

    Значит вам надо просто смонтировать туда файлы сайта:
    volumes:
          - ./src/symfony:/usr/local/apache2/htdocs

    В таком случае сайт будет открываться по ip.
    Еще я не вижу в контейнере интерпретатора php, а вам не апач нужен по факту, а php :)

    Может все-таки вам лучше всего взять php-fpm + nginx? Хоть там и 2 контейнера будет, но это более современный стек получится. Там и с конфигами попроще, у nginx они в тысячи раз легче. У вас в проекте есть привязка к файлам .htaccess? Если нет, то ваш выбор nginx+php-fpm.
  • Docker - как запустить Apache от имени пользователя?

    @metajiji
    Мдя, все, что писал видимо не мимо :)

    Конфигурацию httpd вам точно нужно принести себе в проект и таки что-то там поделать это прям best-practice. А вот собирать образ с apache внутри, в нет никакой необходимости. Чтобы было меньше буковок, вот сразу готовый блок кода с необходимым минимумом:
    web:
        image: httpd:2.4-alpine  # Oficial image: https://hub.docker.com/_/httpd
        restart: always
        ports:
          - 8080:80  # HOST:CONTAINER

    Это запустить httpd в контейнере на 80 порту, а docker пробросит 80 порт контейнера на хост на порт 8080.

    Что делать с конфигом? Вместо 1000 слов я просто оставлю пошагово действия, которые покажут, как искать и читать конфиги, внутри образов. Проделал это даже на винде, как бы этого не хотелось :)))
    ::  Первым делом, нужно понять, что является точкой входа, т.е. как запускается приложение внутри контейнера
    :: Проверим какую команду и с какими аргументами запустят, при запуске контейнера
    PS C:\Users\admin\d> docker inspect httpd:2.4-alpine | FINDSTR /I "cmd"
                "Cmd": [
                    "CMD [\"httpd-foreground\"]"
                "Cmd": [
    PS C:\Users\admin\d> docker inspect httpd:2.4-alpine | FINDSTR /I "entry"
                "Entrypoint": null,
                "Entrypoint": null,
    
    :: Смотрим какой cwd будет иметь программа при запуске
    PS C:\Users\admin\d> docker inspect httpd:2.4-alpine | FINDSTR /I "workingdir"
                "WorkingDir": "/usr/local/apache2",
                "WorkingDir": "/usr/local/apache2",
    PS C:\Users\admin\d> docker run --rm -ti httpd:2.4-alpine sh
    
    :: Теперь нужно понять что внутри скрипта, который запускает httpd, который мы нашли в 1 шаге: "CMD [\"httpd-foreground\"]"
    # cat $(which httpd-foreground)
    #!/bin/sh
    set -e
    
    # Apache gets grumpy about PID files pre-existing
    rm -f /usr/local/apache2/logs/httpd.pid
    
    exec httpd -DFOREGROUND
    
    :: Ничего супер сложного, давай проверим с какими опциями разработчики собирали Httpd
    # /usr/local/apache2 # httpd -V
    Server version: Apache/2.4.39 (Unix)
    Server built:   Jun  5 2019 22:22:14
    Server's Module Magic Number: 20120211:84
    Server loaded:  APR 1.6.5, APR-UTIL 1.6.1
    Compiled using: APR 1.6.5, APR-UTIL 1.6.1
    Architecture:   64-bit
    Server MPM:     event
      threaded:     yes (fixed thread count)
        forked:     yes (variable process count)
    Server compiled with....
     -D APR_HAS_SENDFILE
     -D APR_HAS_MMAP
     -D APR_HAVE_IPV6 (IPv4-mapped addresses enabled)
     -D APR_USE_SYSVSEM_SERIALIZE
     -D APR_USE_PTHREAD_SERIALIZE
     -D SINGLE_LISTEN_UNSERIALIZED_ACCEPT
     -D APR_HAS_OTHER_CHILD
     -D AP_HAVE_RELIABLE_PIPED_LOGS
     -D DYNAMIC_MODULE_LIMIT=256
     -D HTTPD_ROOT="/usr/local/apache2"
     -D SUEXEC_BIN="/usr/local/apache2/bin/suexec"
     -D DEFAULT_PIDLOG="logs/httpd.pid"
     -D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
     -D DEFAULT_ERRORLOG="logs/error_log"
     -D AP_TYPES_CONFIG_FILE="conf/mime.types"
     -D SERVER_CONFIG_FILE="conf/httpd.conf"
    
    :: Вот то, что нужно! -D SERVER_CONFIG_FILE="conf/httpd.conf"
    :: Значит, при запуске контейнера, запустится скрипт /usr/local/bin/httpd-foreground, при этом cwd (рабочий каталог) будет /usr/local/apache2, скрипт запустит команду exec httpd -DFOREGROUND, причем exec заставит оболочку запустить httpd с pid 1.
    httpd собран таким, образом, что он ищет конфиг относительно своего cwd SERVER_CONFIG_FILE="conf/httpd.conf", значит конфиг файл находится тут: /usr/local/apache2/conf/httpd.conf
    
    :: где живет конфиг мы поняли, давай выяснять где httpd прячет файлики дефолтного сайта
    # grep ^DocumentRoot /usr/local/apache2/conf/httpd.conf
    DocumentRoot "/usr/local/apache2/htdocs"
    
    :: Теперь понятно, чтобы не трогая конфиги, подсунуть в httpd свой сайт, нужно прокинуть туда volume.
    Я проверил это очень просто:
        volumes:
          - /etc:/usr/local/apache2/htdocs
    :: А потом просто открыл в браузере:
    http://127.0.0.1:8080/hosts
    Как и ожидалось, я увидел файл :)

    И все-таки я бы рекомендовал организовать проект в такой структуре:
    src/  - кодик ваших программ
    src/application1
    src/application2
    data/ - вольюмы контейнеров с данными
    data/mysql
    conf/ - конфиги программ
    conf/mysql/main.cf
    conf/httpd/httpd.conf
    conf/httpd/conf/extra/httpd-vhosts.conf
    docker-compose.yml

    Кроме того конфиги могут быть для разных окружений разными! Например для dev/stage/production для httpd может быть разный набор vhosts, если внутри больше 1 сайта и необходимо ходить по SNI на них.
    Ну или для Mysql разные опции.
    Конфиги доставляются в контейнеры очень просто - через volumes
    web:
        image: httpd:2.4-alpine  # Oficial image: https://hub.docker.com/_/httpd
        ...
        volumes:
          - ./conf/httpd/httpd.conf:/usr/local/apache2/conf/httpd.conf
          - ./conf/httpd/conf/extra/httpd-vhosts.conf:/usr/local/apache2/conf/httpd-vhosts.conf

    Можно конечно психануть и для httpd всю папку /usr/local/apache2/conf притащить к себе в проект, но понять что-же именно менял человек и в каком файле будет сложно :( лучше держать в репе именно то, что необходимо.

    Надеюсь магии больше не будет :)
  • Docker - как запустить Apache от имени пользователя?

    @metajiji
    symnoob, на хосте какая ос? Тут одно из 2, либо действительно проблема с правами chown/chmod, либо selinux/apparmor.
    Не помешает compose файл, в нем 90% ответа :)
  • Как починить docker на windows 10?

    @metajiji
    Михаил, как раз речь и идёт о виртуальной машине в hyper-v, откройте оснастку и вы ее увидите. Wsl2 ещё не вышел, где есть ядро. А в wsl1 ядра нет, значит и dockerd запустить не удастся!
    Из вариантов только 1 - виртуалка с линуксом внутри, где будет запущен dockerd, что собственно и сделано в hyper-v. И это самый рекомендуемый способ ибо нативная виртуализация и поддержка со стороны комьюнити, либо делайте сами себе докер, например ставим Vbox/vmvare/что угодно, прокидываем папки сначала внутрь vm, оттуда потом вольюмы в контейнеры, либо работаем ролностю удаленно с файлами, ставим dockerd, запускаем... В этом варианте очень много ручных действий+не очевидные вещи в виде тюнинга окружения для работы под конкретным гипервизором.
  • Как запустить sh скрипты в Linux?

    @metajiji
    Положите скрипты в папку с ntfs или fat32 там все файлы исполняемые :)
  • Как правильно организовать разработку на Laravel + Docker?

    @metajiji
    Рекомендую переделать все на alpine образы и будете приятно удивлены, насколько меньше будут весить ваши образы:)