• MongoDB индекс на удаление по существующему полю?

    @forspamonly2
    Ответ написан
    Комментировать
  • Как узнать username пользователя по его ID в телеграм-боте?

    @SwitcherN
    Начинаю изучать python
    При получении message:

    message.from_user.id
    message.from_user.first_name
    message.from_user.last_name
    message.from_user.username
    Ответ написан
    Комментировать
  • Несколько cron задач в одно время?

    @BorisKorobkov Куратор тега PHP
    Web developer
    Сделайте таблицу в БД.
    По крону каждую минуту проверяйте записи и выполняйте их.
    Ответ написан
    Комментировать
  • Как выполнить отложенное действие в Telegram Bot на PHP?

    HighQuality
    @HighQuality
    ☁ Ниндзя девелопер
    Крон — нормальное решение. Посмотреть ещё можно на фоновые очереди. Например, у ларавела из коробки такие есть.
    Ответ написан
    Комментировать
  • Как сделать регистрацию в Telegram боте на php?

    @edvardpotter
    Все тоже самое что и с обычной регистрацией/авторизацией на сайте:
    1. Получаем уникальный ID telegram-пользователя.
    2. Запрашиваем нужные данные(логин и пароль).
    3. Если данные верные то связываем этот логин с ID из первого шага.
    Ответ написан
    Комментировать
  • Как понимать алгоритмы?

    @Mercury13
    Программист на «си с крестами» и не только
    Есть три специфичных вида алгоритмов.
    • Математические. Из них я могу припомнить геометрические (выпуклая оболочка) и вычислительные (метод Рунге-Кутты).
    • Связанные с особыми структурами данных.
    • Параллельные.

    Для математических алгоритмов, естественно, нужна та область математики, с которой мы имеем дело. Скажем, для геометрических — векторная геометрия, для вычислительных — какие-то куски муть-анализа. Для вычислительных также важно понимать устройство чисел с плавающей запятой.

    Из общего — те части математики, которые служат основополагающими принципами работы компьютеров. Теория множеств, булева алгебра, комбинаторика, теория автоматов… Также важно изучить символы Ландау и понятие «асимптотическая сложность алгоритма».

    Для параллельных важно понимать архитектуру параллельных систем.
    Ответ написан
    Комментировать
  • Как управлять docker'ом?

    @canselot
    Собираем образ PHP
    Стандартный официальный образ PHP не включает в себя никаких модулей, поэтому чтобы включить их нужно собрать свой образ на основе официального. Звучит немного страшновато, но на деле все просто. Создаем директорию для нашего образа images/php и в ней создаем файл Dockerfile следующего содержания:

    # Для начала указываем исходный образ, он будет использован как основа
    FROM php:7.1-fpm
    # Необязательная строка с указанием автора образа
    MAINTAINER PHPtoday.ru <info@phptoday.ru>
    
    # RUN выполняет идущую за ней команду в контексте нашего образа.
    # В данном случае мы установим некоторые зависимости и модули PHP.
    # Для установки модулей используем команду docker-php-ext-install.
    # На каждый RUN создается новый слой в образе, поэтому рекомендуется объединять команды.
    RUN apt-get update && apt-get install -y \
            curl \
            wget \
            git \
            libfreetype6-dev \
            libjpeg62-turbo-dev \
            libmcrypt-dev \
            libpng12-dev \
        && docker-php-ext-install -j$(nproc) iconv mcrypt mbstring mysqli pdo_mysql zip \
        && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
        && docker-php-ext-install -j$(nproc) gd
        
    # Куда же без composer'а.
    RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
    
    # Добавим свой php.ini, можем в нем определять свои значения конфига
    ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini
    
    # Указываем рабочую директорию для PHP
    WORKDIR /var/www
    
    # Запускаем контейнер
    # Из документации: The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, 
    # or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.
    CMD ["php-fpm"]

    Также в этой папке создадим пока пустой php.ini, чтобы не было ошибки при сборке образа. Можете добавить в него нужные вам настройки.

    Источник
    Ответ написан
    Комментировать
  • Как управлять docker'ом?

    amelihovv
    @amelihovv
    Фулстек веб разработчик
    Чтобы поставить доп расширения какие-то или внести любые изменения в образ контейнера, нужно создать свой кастомный Dockerfile. Например, для php это будет выглядеть следующим образом:
    # php/Dockerfile
    
    FROM php:7-fpm:latest
    
    MAINTAINER Vasya Pupkin
    
    # Ставим, например, composer.
    
    RUN php -r "readfile('http://getcomposer.org/installer');" | php -- --install-dir=/usr/bin/ --filename=composer


    Затем обновляем docker-compose.yml. Указываем, что будем использовать свой Dockerfile и указываем имя нового образа.
    php:
            build:
    	    context: ./php
    	    dockerfile: Dockerfile
            image: my-php
            volumes:
                - ./www:/www
                - ./php/log.conf:/usr/local/etc/php-fpm.d/zz-log.conf
            networks:
                - code-network


    Чтоб теперь можно поиграться с композером, можно сделать следующие вещи:

    1. Зайти в контейнер по ssh и запускать композер оттуда

    docker-compose exec my-php bash
    composer --version


    2. Запустить композер с хостовой машины

    docker-compose exec my-php composer --version
    или
    docker-compose run --rm  my-php  composer --version


    Чтоб чуть упростить набор команд, можно создать скриптик на bash (установи себе git bash на windows, из него можно будет выполнять его).

    #!/usr/bin/env bash
    
    COMPOSE="docker-compose"
    
    if [ $# -gt 0 ]; then
        if [ "$1" == "composer" ]; then
            shift 1
            $COMPOSE run --rm \
                -w /www \
                my-php \
                composer "$@"
    
        # If "test" is used, run unit tests,
        # pass-thru any extra arguments to php-unit
        elif [ "$1" == "test" ]; then
            shift 1
            $COMPOSE run --rm \
                -w /www \
                my-php \
                ./vendor/bin/phpunit "$@"
    
        # If "npm" is used, run npm
        # from our node container
        elif [ "$1" == "npm" ]; then
            shift 1
            $COMPOSE run --rm $TTY \
                -w /var/www/html \
                node \
                npm "$@"
        else
            $COMPOSE "$@"
        fi
    else
        $COMPOSE ps
    fi


    Ну и с его помощью можно делать следующее

    ./dev.sh # docker-compose ps
    ./dev.sh logs my-php # docker-compose logs my-php
    ./dev.sh composer --version # выполнение любой composer команды
    ./dev.sh npm --version # выполнение любой npm команды
    ./dev.sh test --filter some_test_method # запуск phpunit тестов


    P. S. У меня тоже, когда-то, докер сложновато шел. Это нормально.
    Ответ написан
    2 комментария