Ответы пользователя по тегу Ubuntu
  • Как установить PHP 5.4 на Nginx в Ubuntu Server 16.04?

    Если кратко, то можно так собрать:

    Установка php-5.4.45 + fpm

    mkdir -p /opt/php-5.4.45
    rm -rf /usr/local/src/php5-build && mkdir /usr/local/src/php5-build
    cd /usr/local/src/php5-build
    wget de2.php.net/distributions/php-5.4.45.tar.gz
    tar -vzxf php-5.4.45.tar.gz && cd php-5.4.45
    ./configure --prefix=/opt/php-5.4.45 --with-pdo-pgsql --with-zlib-dir --with-freetype-dir --enable-mbstring --with-libxml-dir=/usr --enable-soap --enable-calendar --with-curl --with-mcrypt --with-zlib --with-gd --with-pgsql --disable-rpath --enable-inline-optimization --with-bz2 --with-zlib --enable-sockets --enable-sysvsem --enable-sysvshm --enable-pcntl --enable-mbregex --enable-exif --enable-bcmath --enable-zip --with-pcre-regex --with-mysqli --with-mysql --with-pdo-mysql --with-mysqli --with-jpeg-dir=/usr --with-png-dir=/usr --enable-gd-native-ttf --with-openssl --with-fpm-user=www-data --with-fpm-group=www-data --with-libdir=/lib/x86_64-linux-gnu --enable-ftp --with-imap --with-imap-ssl --with-kerberos --with-gettext --with-xmlrpc --with-xsl --enable-fpm
    make && make install
    cp /usr/local/src/php5-build/php-5.4.45/php.ini-production /opt/php-5.4.45/lib/php.ini
    cp /opt/php-5.4.45/etc/php-fpm.conf.default /opt/php-5.4.45/etc/php-fpm.conf
    mkdir /opt/php-5.4.45/etc/php-fpm.d

    Редактируем некоторые параметры в /opt/php-5.4.45/etc/php-fpm.conf

    include=etc/php-fpm.d/*.conf
    [global]
    pid = run/php-fpm.pid
    log_level = error

    Меняем настройки в /opt/php-5.4.45/lib/php.ini по своему вкусу, у меня так:

    date.timezone = "Asia/Yekaterinburg"
    expose_php = Off
    short_open_tag = On
    max_execution_time = 600
    max_input_time = 300
    max_input_vars = 5000
    memory_limit = 512M
    error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
    post_max_size = 128M
    ;default_charset = "UTF-8"
    upload_max_filesize = 128M
    default_socket_timeout = 120
    mysql.connect_timeout = 120

    Если в Linux используется sysv, то создаем файл /etc/init.d/php-5.4.45-fpm, см. https://gist.github.com/CHERTS/bcf1006e90777ead77c...

    Назначаем права и автостарт
    # chmod 755 /etc/init.d/php-5.4.45-fpm
    # insserv -v /etc/init.d/php-5.4.45-fpm
    Запускаем:
    # /etc/init.d/php-5.4.45-fpm start

    Если в Linux используется systemd, то создаем файл
    /lib/systemd/system/php-5.4.45-fpm.service
    исходник https://gist.github.com/CHERTS/bcf1006e90777ead77c...

    Если в Linux используется systemd выполняем:
    # chown root:root /lib/systemd/system/php-5.4.45-fpm.service
    # systemctl daemon-reload
    # systemctl enable php-5.4.45-fpm.service
    # systemctl start php-5.4.45-fpm.service

    Проверить статус можно командой
    # systemctl status php-5.4.45-fpm.service

    Удалить
    # systemctl stop php-5.4.45-fpm.service
    # systemctl disable php-5.4.45-fpm.service
    # systemctl daemon-reload
    # systemctl reset-failed
    # rm /lib/systemd/system/php-5.4.45-fpm.service
    # systemctl daemon-reload

    Далее в каталоге /opt/php-5.4.45/etc/php-fpm.d/ создаем файл пула php-fpm с именем к примеру mysite.conf
    Содержание mysite.conf например такое (mysiteuser и mysitegroup - это имена системного пользователя и группу от имени которых будет работать данный пулл, в php_admin_value[open_basedir] указывается путь до корневого каталога сайта, на этот каталог у mysiteuser и mysitegroup должны быть полные права):

    [mysite]
    listen = /var/lib/php5-fpm/mysite.sock
    listen.owner = mysiteuser
    listen.group = mysitegroup
    listen.mode = 0660
    user = mysiteuser
    group = mysitegroup
    pm = dynamic
    pm.max_children = 8
    pm.start_servers = 2
    pm.min_spare_servers = 1
    pm.max_spare_servers = 5
    pm.max_requests = 500
    chdir = /
    php_admin_value[open_basedir] = /var/www/mysite/web:/usr/share/php5:/usr/share/php:/tmp:/usr/share/phpmyadmin:/etc/phpmyadmin:/var/lib/phpmyadmin
    php_admin_value[session.save_path] = /var/www/mysite/tmp
    php_admin_value[upload_tmp_dir] = /var/www/mysite/tmp

    После рестартуем
    systemctl status php-5.4.45-fpm.service
    или
    /etc/init.d/php-5.4.45-fpm restart

    В настройках nginx в качестве сокета php-fpm указываем /var/lib/php5-fpm/mysite.sock

    Вот как то так.
    Ответ написан
    Комментировать
  • Большое количество сайтов на nginx?

    В консоле сервера:

    Проверим soft limit:
    # ulimit -Sn

    Проверим hard limit:
    # ulimit -Hn

    Если мало, то динамически изменим текущие лимиты:
    # ulimit -n 65525

    Теперь добавляем лимиты в файлы настроек, чтобы при старте системы они выставились какие нам нужны:
    В файле /etc/security/limits.conf дописываем:
    * soft nofile 65525
    * hard nofile 100000
    nginx hard nofile 65000

    Теперь меняем лимиты в nginx, для этого в файле /etc/nginx/nginx.conf в самом начале, примерно после строк
    user www-data;
    worker_processes auto;
    пишем
    worker_rlimit_nofile 65000;

    В консоле:
    # nginx -t && nginx -s reload
    Ответ написан
    Комментировать
  • Что не так с записью в crontab?

    1. Проверьте бит исполнения (x) на скрипте ~/backup.sh командой
    ls -la ~/backup.sh
    если нет бита execute (x), то ставьте:
    chmod a+x ~/backup.sh

    2. Проверьте логи cron
    cat /var/log/syslog | grep CRON | grep backup.sh

    3. Всегда! Повторяю, Всегда указывайте полный путь к запускаемому скрипту, то есть
    @midnight bash /full/path/backup.sh >/var/log/backup.log 2>&1


    4. Рекомендую организовать вывод отладочной информации и обработку ошибок в лог на уровне скрипта, а в crontab писать конструкцию:
    @midnight bash /full/path/backup.sh >/dev/null 2>&1

    чтобы перенаправить все потоки вывода и ошибок в /dev/null

    если вы напишите конструкцию вида
    @midnight bash /full/path/backup.sh >/dev/null
    то только поток вывода будет перенаправлен в /dev/null, если произойдет ошибка выполнения скрипта, то cron уведомит пользователя root на email (при условии правильной настройки рассылки на сервере)
    Ответ написан