Не выполняются команды из rc.local

Дата: 29.01.2016Метки:

В большинстве дистрибутивов Linux есть штатная возможность выполнить произвольные команды в конце процесса загрузки. Для автоматического запуска необходимо указать путь к программе или скрипту в содержимом файла rc.local.

Если у вас не выполняются команды из rc.local, то одной из возможных причин может быть отсутствие прав для запуска скрипта. Если сразу после установки в CentOS не работает автозагрузка, то скорее всего причина именно в этом. Для исправления просто выполните команду:

chmod +x /etc/rc.d/rc.local

Сборка ядра Linux в Debian

Недавно мне пришлось собрать свежее ядро Linux для использования его в системе Debian 8. Вообще мне не часто пригодится собирать ядро Linux. Во-первых, редко бывают ситуации, когда действительно не обойтись без самостоятельной сборки ядра. Во-вторых, процесс это порой долгий и монотонный.

Но раз уж руки до самостоятельной сборки ядра Linux, я решил коротко описать этот процесс. За исходную конфигурации я взял параметры ядра, которое установлено в Debian 8 по умолчанию. В дальнейшем вы можете изменить параметры ядра Linux в зависимости от ваших целей.

Сборку ядра я выполнял на виртуальной машине. Если вы последуете моему примеру, выделите виртуальной машине максимально возможное количество процессорных ядер. Благодаря этому совету, вы существенно сократите время, затраченное на компиляцию модулей ядра.

Для начала установим все необходимые для сборки ядра Linux пакеты:

apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc kernel-package

Теперь нам необходимо загрузить исходники ядра Linux. Для примера возьмем ядро Linux 4.4, которое я загружаю с сайта kernel.org:

wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.4.tar.xz

Распаковываем архив с исходниками ядра и переходим в каталог с файлами:

tar xvf linux-4.4.tar.xz
cd linux-4.4

Копируем существующий конфигурационный файл ядра Linux:

cp /boot/config-$(uname -r) .config

Для изменения настроек ядра выполните команду:

make menuconfig

Например, можно удалить из ядра драйвера неиспользуемых устройств. Это не повлияет на работу ядра, зато может немного сэкономить время. После изменения настроек сохраните параметры ядра. Затем вы должны очистить дерево исходных текстов и сбросить параметры ядра:

make-kpkg clean

Запускаем процесс компиляции:

fakeroot make-kpkg --initrd --append-to-version=-vanilla --revision=r1 kernel_image kernel_headers -j 5

В качестве параметров укажите ревизию ядра --revision и количество ядер процессора +1 -j 5, которые будет задействованы в процессе сборки.
После того как будет собран deb-пакет, установите ядро командой:

dpkg -i linux-headers-4.4.0_1.0_amd64.deb
dpkg -i linux-image-4.4.0_1.0_amd64.deb

Чтобы убедится, что Debian использует новое ядро, после перезагрузки выполните команду:

uname -a

Будет не лишним проверить наличие ошибок:

dmesg | egrep -i --color 'error|critical|failed'

Для удаления старого ядра Linux, выполните команду:

apt-get remove linux-image-(unused_version_number)

Установка PHP 7 в Ubuntu

Дата: 24.01.2016Метки: ,

В этой статье я опишу процесс установка PHP 7 в Ubuntu из PPA-репозитория. Эта заметка будет написана в формате небольшого мануала, поэтому я постараюсь кратко изложить техническую техническую сторону процесса. Дополнительно, в предыдущих моих постах вы можете прочить как установить PHP 7 в Debian и CentOS. А еще есть описание процесса установки PHP 7 из исходников в Debian, это вариант более трудоемкий, но зато имеет очевидные преимущества с точки зрения оптимизации.

Установка PHP 7 в Ubuntu

На данный момент PHP 7 официально не доступен для установки в Ubuntu. Но мы можем установить PHP 7 в Ubuntu используя PPA — персональный репозиторий apt, размещенный на сайте Launchpad. С помощью PPA сторонние разработчики имеют возможность создавать и распространять пакеты для Ubuntu за пределами официальных каналов.

С помощью команды ниже добавьте репозиторий PHP 7 в Ubuntu:

add-apt-repository ppa:ondrej/php

После установки PPA, обновите локальный кэш пакетов:

apt-get update

Теперь у нас есть доступ к новым пакетам, мы можем выполнить установку PHP 7 в Ubuntu. В этой статье я опишу процесс настройки PHP 7 для использования его в связке с веб-сервером Nginx. Для этого нам потребуется установить PHP-FPM:

apt-get install php7.0-fpm

Если ваше скрипты используют в процессе работы MySQL, выполните команду:

apt-get install php7.0-mysql

Настройка PHP 7 для работы с Nginx

Процессы PHP 7 и Nginx взаимодействуют между собой с помощью unix-сокета. По умолчанию в PHP 7 unix-сокет имеет следующее расположение:

/var/run/php/php7.0-fpm.sock

Откройте конфигурационный файл default в текстовом редакторе nano:

nano /etc/nginx/sites-enabled/default

Полностью удалите все содержимое файла default, а заетем скопируйте строки из примера ниже:

server {
    listen 80 default_server;

    root /var/www/html;
    index index.php index.html;

    server_name _;

    location / {
        try_files $uri $uri/ /index.php?q=$uri&$args;
    }

    location ~ \.php$ {
        try_files $uri = 404;
        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }
}

Закройте файл и сохраните изменения. Чтобы использовать новые настройки необходимо перезапустить Nginx:

nginx -t
service nginx restart

Проверка работы PHP 7

Чтобы проверить правильность установки и настройки PHP 7 в Ubuntu, в коневом каталоге сайта создайте файл:

nano /var/www/html/info.php

Следующего содержания:

<?php
phpinfo();
?>

Откройте файл в вашем браузере:

http://server_ip/info.php

Если вы правильно установили и настроили PHP 7 в Ubuntu, вы должны увидеть страницу содержащую информацию о его конфигурации.

Установка PHP 7 в CentOS 7

Дата: 22.01.2016Метки: ,

В данной статье я расскажу о установке PHP 7, выпуск финальной версии которого стал одним из важнейших событий прошедшего года. Команда разработчиков выполнила просто огромную работу, судя по тестам, производительность PHP 7 вплотную приблизилась к показателям конкурента HHVM. Следует отметить, что рост производительности был достигнуть за счет оптимизации и никак не повлиял на увеличение потребления ресурсов.

Если сравнивать с предыдущей версией, то по моему мнению, PHP 7 абсолютно лишен недостатков. Исходя из имеющейся информации, можно сделать прогноз, что темпы перехода на PHP 7 будут достаточно быстрыми. Ранее я уже описывал процесс установки PHP 7 из исходников или репозитория Debian, в этой записи я расскажу как быстро установить PHP 7 в Cent OS 7.

На данный момент в официальном репозитории Cent OS 7 отсутствуют пакеты для установки PHP 7. Связи с чем, стоит немного повременить с переводом на PHP 7 серьезных коммерческих проектов. Зато будет не лишним установить PHP 7 на тестовый серевер, чтобы заранее проверить совместимость приложений и ознакомиться с новыми возможностями языка PHP 7.

В этой записи я опишу свой опыт установки PHP 7 для использования его в сочетании с веб-сервером Nginx. Для установки я использовал систему CentOS 7.1 и пакеты PHP 7 из неофициального репозитория IUS.

Установка PHP 7 в Cent OS 7

Перед установкой PHP 7 нам необходимо подключить к Cent OS репозиторий IUS. Для этого нам необходимо загрузить и выполнить специальный скрипт, после его запуска репозиторий IUS будет автоматически добавлен в систему.

Переходим в каталог tmp и загружаем скрипт на сервер:

cd /tmp
curl 'https://setup.ius.io/' -o setup-ius.sh

Затем выполните скрипт командой:

bash setup-ius.sh

Если на сервере присутствует PHP, удалите все установленные пакеты. Для первой установки PHP 7 на сервере, следующий пункт нужно пропустить.

yum remove php-fpm php-cli php-common

Чтобы установить PHP 7 и модули php-fpm, php-mysqlnd, выполните команду:

yum install php70u-fpm-nginx php70u-cli php70u-mysqlnd

Я установил PHP 7 с минимальным набором модулей. В дальнейшем вы можете установить дополнительные модули по своему усмотрению. Если у вас процесс установки прошел без ошибок — я вас поздравляю. У меня же первый блин был комом, с первой попытки установить PHP 7 в CentOS мне не удалось. Подробнее описание решения проблемы вы можете прочитать в конце статьи.

Настройка PHP 7 для работы с Nginx

После завершения установки PHP 7, нам нужно внести изменения в конфигурацию PHP-FPM и Nginx. По умолчанию в PHP 7 для соединений использует локальный TCP-порт. Общеизвестным фактом является то, что для лучшего быстродействия PHP-FPM и Nginx желательно использовать Unix-сокет.

Используя PHP-FPM можно обрабатывать несколько пулов дочерних процессов. По умолчанию в PHP 7 сконфигурирован на использование одного общего пула WWW. Его настройки хранятся в файле /etc/php-fpm.d/www.conf. Откройте этот файл в текстовом редакторе:

nano /etc/php-fpm.d/www.conf

Закомментируйте строку listen = 127.0.0.1:9000, она отвечает за работу PHP-FPM через порт 9000. Вместо нее раскомментируйте строку listen = /run/php-fpm/www.sock расположенную ниже.

;listen = 127.0.0.1:9000
; WARNING: If you switch to a unix socket, you have to grant your webserver user
;          access to that socket by setting listen.acl_users to the webserver user.
listen = /run/php-fpm/www.sock

Затем найдите блок listen.acl_users и раскомментируйте в нем строку listen.acl_users = nginx.

; When POSIX Access Control Lists are supported you can set them using
; these options, value is a comma separated list of user/group names.
; When set, listen.owner and listen.group are ignored
;listen.acl_users = apache,nginx
;listen.acl_users = apache
listen.acl_users = nginx
;listen.acl_groups =

Закройте файл и сохраните изменения. Теперь нам необходимо изменить конфигурацию Nginx, для того чтобы веб-сервер использовал сокет во время взаимодействия с PHP-FPM. Откройте файл:

nano /etc/nginx/conf.d/php-fpm.conf

Нам необходимо переключить способ взаимодействия Nginx и PHP-FPM с tcp-порта 9000 на использование сокета. Для этого измените содержимое файла следующим образом:

# PHP-FPM FastCGI server
# network or unix domain socket configuration

upstream php-fpm {
        #server 127.0.0.1:9000;
        server unix:/run/php-fpm/www.sock;
}

Закройте файл и сохраните изменения. Чтобы новые директивы вступили в силу нам необходимо перезапустить PHP-FPM и Nginx:

systemctl restart php-fpm
systemctl restart nginx

Вы можете проверить статус каждого сервиса, используя systemctl:

systemctl status php-fpm
systemctl status nginx

Проверка работы PHP 7

После того как мы установили PHP 7 и подготовили к работе веб-сервер Nginx, необходимо убедится, что все настроено правильно. Начните с проверки версии PHP, для этого выполните команду:

# php -v
PHP 7.0.1 (cli) (built: Dec 18 2015 16:35:26) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies

Затем создадим в корневом каталоге веб-сервера файл info.php:

nano /usr/share/nginx/html/info.php

Скопируйте в файл следующий код:

<?php
phpinfo();

Закройте файл и сохраните изменения. Введите в браузере ip-адрес или доменное имя вашего сервера и укажите название файла info.php:

http://server_ip/info.php

Если вы правильно установили и настроили PHP 7 в CentOS, вы должны увидеть страницу содержащую информацию о конфигурации PHP 7.

Проблемы во время установки PHP 7

Далее я расскажу о небольшой проблеме, с которой я столкнулся во время установки PHP 7 на CentOS 7.1.

Error: Package: php70u-fpm-7.0.1-1.ius.centos7.x86_64 (ius)
           Requires: libsystemd.so.0()(64bit)
Error: Package: php70u-fpm-7.0.1-1.ius.centos7.x86_64 (ius)
           Requires: libsystemd.so.0(LIBSYSTEMD_209)(64bit)
 You could try using --skip-broken to work around the problem
 You could try running: rpm -Va --nofiles --nodigest

Очень часто хостеры вносят свои изменения в шаблоны контейнеров виртуальных машин. В моем случае, проблема была вызвана тем, что CentOS 7 использовала кривые зеркала centos-base и testing репозиториев. Для тех, кто столкнулся с подобной проблемой, откройте файл:

nano /etc/yum.repos.d/CentOS-Base.repo

Чтобы устанавливать пакеты из официальных репозиториев CentOS 7, используйте конфигурацию ниже:

[base]
name=CentOS-$releasever - Base
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/os/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#released updates
[updates]
name=CentOS-$releasever - Updates
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=updates&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/updates/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that may be useful
[extras]
name=CentOS-$releasever - Extras
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=extras&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/extras/$basearch/
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

#additional packages that extend functionality of existing packages
[centosplus]
name=CentOS-$releasever - Plus
mirrorlist=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=centosplus&infra=$infra
#baseurl=http://mirror.centos.org/centos/$releasever/centosplus/$basearch/
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7

Редактор по умолчанию в Ubuntu

Дата: 20.01.2016Метки:

В процессе работы в Ubuntu по ошибке выбрал в качестве редактора по умолчанию ed. Для того чтобы изменить редактор по умолчанию обычно необходимо просто выполнить команду:

# update-alternatives --config editor

Как оказалось, данный метод не работает если запустить команду из под sudo su. Что бы я не делал, crontab -e упорно не хотел использовать редактор nano.

Немного погуглив, на одном из форумов нашел простое решение моей проблемы. Чтобы сбросить настройки и повторно выбрать редактор по умолчанию в Debian/Ubuntu удалите файл:

rm $HOME/.selected_editor

Настройка сети на VPS от OVH

Дата: 19.01.2016Метки:

Настройка сети на виртуальном сервере OVH имеет свои нюансы. После установки сервер автоматически получает настройки сети по DHCP. Если вы хотите использовать дополнительный адрес, тогда вам необходимо вручную изменить настройки сетевого интерфейса eth0. В этой заметке я опишу процесс настройки статического ip-адреса и расскажу как добавить дополнительный адрес для вашего сервера.

Все действия производятся на сервере с установленной системой Debian/Ubuntu. Для начала нам необходимо получить информацию о сетевых настройках, которые сервер автоматически получил по DHCP. Для этого поочередно выполните команды ifconfig и route.

В моем случае я получил следующий результат:

# ifconfig
eth0      Link encap:Ethernet  HWaddr ff:ff:ff:ff:ff:ff
          inet addr:41.23.36.11  Bcast:41.23.36.11  Mask:255.255.255.255
          inet6 addr: fe80::f816:3eff:fedc:9a4/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:1622483 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1351266 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:1106814117 (1.0 GiB)  TX bytes:1152293091 (1.0 GiB)
# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         41.23.36.1     0.0.0.0         UG    0      0        0 eth0
41.23.36.1     *               255.255.255.255 UH    0      0        0 eth0

Для настройки сети нас интересует следующая информация:

Inet addr: 41.23.36.11
Bcast: 41.23.36.11
Mask: 255.255.255.255
Gateway: 41.23.36.1

Откройте файл:

nano /etc/network/interfaces

Закомментируйте строки, которые отвечают за автоматическое получения адреса по DHCP:

#auto eth0
#iface eth0 inet dhcp

И добавьте свои настройки сети, как это сделано в примере ниже:

auto eth0
iface eth0 inet static
address 41.23.36.11
netmask 255.255.255.255
broadcast 41.23.36.11
post-up route add 41.23.36.1 dev eth0
post-up route add default gw 41.23.36.1
post-down route del default gw 41.23.36.1
post-down route del 41.23.36.1 dev eth0

Если вы хотите использовать дополнительный ip-адрес для вашего сервера, необходимо добавить алиас для сетевого интерфейса eth0:

auto eth0:0
iface eth0:0 inet static
address 41.24.32.121
netmask 255.255.255.255
broadcast 41.24.32.121

Скрыть версию PHP и Nginx

Дата: 09.01.2016Метки: ,

Если просмотреть заголовок ответа веб-сервера, можно получить информацию о используемой версии PHP и Nginx на сервере. В случае регулярных обновлений информация не представляет серьезной опасности. Тем не менее, если есть такая возможность, лучше лишний раз перестраховаться и предусмотрительно скрыть версию PHP и Nginx от любопытных глаз.

Для примера с помощью этого сервиса я получил заголовок ответа веб-сервера для первого попавшегося сайта:

Server: nginx/1.9.5
Content-Type: text/html; charset="UTF-8"
Transfer-Encoding: chunked
Connection: keep-alive
Vary: Accept-Encoding
X-Powered-By: PHP/5.5.9-1ubuntu4.14
Set-Cookie: PHPSESSID=bsi4talrrugln1btgfen1mjmj3;
expires="Sun, 08-Jan-2017 19:27:38 GMT"; Max-Age=31536000;
path=/
Cache-Control: no-cache
Date: Sat, 09 Jan 2016 19:27:38 GMT
Content-Encoding: gzip

Как видите, мы без особого труда можем точно установить используемую версию PHP, Nginx, название и версию установленной операционной системы.

Чтобы скрыть версию PHP, измените значение параметра expose_php в файле php.ini:

expose_php = off

Чтобы скрыть версию Nginx, необходимо добавить в секцию http следующий параметр:

server_tokens off;

Не забудьте перезапустить PHP и Nginx, для того чтобы изменения вступили в силу.

Установить Ghost в Debian

Мне давно хотелось пощупать Node.js поближе, но все время не было повода для этого. В этой статье решил рассказать о первом опыте работы с этой платформой. Свое знакомство с работой Node.js мне пришлось начать с установки Ghost на Debian.

Хотелось бы упомянуть интересные факты из истории Ghost. Ghost был создан Джоном О’Ноланом, который в свое время выполнял функции заместителя руководителя разработки пользовательского интерфейса WordPress. Изначально Ghost создавался как альтернатива WordPress, но со временем он вырос из движка для блога и превратился в сложную CMS.

Если использовать Ghost в качестве блог-платформы, то его можно считать одним из основных конкурентов WordPress. Одно из преимуществ Ghost — его лаконичность, простота и скорость работы. Что касается функциональности этих CMS, Ghost сильно уступает возможностям WordPrees.

Как вариант, можно использовать Ghost вместе с Nginx. Веб-сервер Nginx будет прослушивать трафик, поступающий на порт 80, а затем передавать все запросы платформе Ghost. Благодаря разнообразию вариантов установки Ghost, вам нет необходимости обязательно устанавливать MySQL или Nginx.

Из недостатков Ghost, хочу отметить потребление ресурсов плаформой Node.js. В моем случае, на сервере Debian 8 х64, под виртуализацией KVM я увидел следующую картину:

  PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND
 9135 root      20   0 1039856 120372  10348 S  0.0 23.8   0:05.46 node
 9128 root      20   0  836588  28992   8792 S  0.0  5.7   0:00.32 npm

Под нагрузкой процесс Ghost создает сильную нагрузку на процессор. Этот недостаток устраняется кэшированием в Nginx. Потребление памяти должно компенсироваться за счет отсутствия необходимости держать в системе процессы PHP и MySQL, но это не устраняет проблем с ее утечками.

Как я уже говорил, чтобы установить Ghost в Debian, вам не нужно устанавливать PHP, MySQL и Nginx. Платформа Ghost выполняет функции движка и веб-сервера одновременно. За хранение данных по умолчанию отвечает SQLite, вы можете ее изменить на MySQL или PostgreSQL при необходимости.

Установить Ghost в Debian

Установить Ghost достаточно просто. Вам нужно установить пакеты nodejs, npm и их зависимости. Запустите в консоли команды ниже:

apt-get install nodejs npm
# Необходимо для Node.js в Debian, подробнее /usr/share/doc/nodejs/README.Debian
ln -s /usr/bin/nodejs /usr/bin/node

Чтобы установить Ghost на сервер, используйте npm:

cd /home
npm install ghost
cd node_modules/ghost
npm install

После завершения установки Ghost, важно выполнить первый запуск, после чего можно переходить к изменению настроек.

npm start --production

Фрагмент результата выполнения команды:

Ghost is running in production...
Your blog is now available on http://my-ghost-blog.com
Ctrl+C to shut down

Остановите процесс при помощи клавиш Ctrl-C. Откройте файл:

nano config.js

Здесь необходимо изменить адрес и порт на котором Ghost будет принимать входящие соединения. Находим секцию и меняем значения параметров на свои:

production: {
    url: 'http://test.codebeer.ru',
    mail: {},
    database: {
        client: 'sqlite3',
        connection: {
            filename: path.join(__dirname, '/content/data/ghost.db')
        },
        debug: false
    },

    server: {
        host: '95.213.199.106',
        port: '80'
    }
}

Повторно запускаем Ghost:

npm start --production

Автоматический запуск Ghost

После установки Ghost, необходимо добавить добавить запуск платформы в автозагрузку. Для контроля запуска и управления работой Ghost я буду использовать пакет supervisor:

apt-get install supervisor

Создадим файл с параметрами запуска Ghost:

nano /etc/supervisor/conf.d/ghost.conf

Добавьте в него следующие строки:

[program:ghost]
command = node /home/node_modules/ghost/index.js
directory = /home/node_modules/ghost
user = ghost
autostart = true
autorestart = true
stdout_logfile = /var/log/supervisor/ghost.log
stderr_logfile = /var/log/supervisor/ghost_err.log
environment = NODE_ENV="production"

В целях безопасности, создадим отдельного пользователя, под которым будем выполнять запуск Ghost:

useradd -r ghost -U

Дадим пользователю права на каталог установки Ghost:

chown -R ghost:ghost /home/node_modules/ghost/

После установки supervisor и изменения настроек, обязательно нужно перезагрузить сервер. Теперь для управления процессом Ghost вручную, можно использовать следующие команды:

supervisorctl start ghost
supervisorctl stop ghost

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

Установить Ghost вместе с Nginx

Когда Ghost установлен и работает, займемся оптимизацией работы сервера. В качестве примера я настрою Nginx в роли фронтенда. Веб-сервер Nginx, который запущен на внешнем интерфейсе, будет принимать и передавать соединения от клиентов к серверу Ghost. Затем в обход сервера Ghost, Nginx будет отдавать из кэша статику клиентам. Использование Nginx позволит нам более гибко настроить работу сервера.

Для начала меняем host и port в конфигурационном файле Ghost:

production: {
    url: 'http://test.codebeer.ru',
    mail: {},
    database: {
        client: 'sqlite3',
        connection: {
            filename: path.join(__dirname, '/content/data/ghost.db')
        },
        debug: false
    },

    server: {
        host: '127.0.0.1',
        port: '8080'
    }
}

Устанавливаем веб-сервер Nginx:

apt-get install nginx

Создайте конфигурационный файл Nginx и добавьте в него следующие строки:

server {
    listen 95.213.199.106:80;

    server_name test.codebeer.ru;

    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header HOST $http_host;
        proxy_set_header X-NginX-Proxy true;
        proxy_pass http://127.0.0.1:8080;
        proxy_redirect off;
    }
}

Чтобы применить настройки, выполните команду:

service nginx reload

После изменения настроек Nginx перестал запускаться:

2015/12/10 22:34:38 [emerg] 9714#0: bind() to 95.213.199.106:80 failed (98: Address already in use)

В качестве решения проблемы, мне помог перезапуск сервера.

Установка PHP 7 с Dotdeb

Дата: 08.12.2015Метки: ,

Буквально на днях в репозиториях Dotdeb появился пакет финальной версии PHP 7. Многие жалуются на Dotdeb, но у меня никогда проблем с пакетами установленными из Dotdeb не возникало. В этой записи я опишу установку PHP7 в связке с Nginx. Вы можете ознакомится с информацией о установке PHP7 для Apache2 в следующей моей записи.

Для установки PHP 7 в Debian сначала необходимо добавить репозиторий в систему. Для этого откройте файл:

/etc/apt/sources.list

Затем добавьте в него следующие строки:

deb http://packages.dotdeb.org jessie all
deb-src http://packages.dotdeb.org jessie all

Скачиваем и устанавливаем ключ GnuPG:

wget https://www.dotdeb.org/dotdeb.gpg
apt-key add dotdeb.gpg

Выполните команду:

apt-get update

Установить PHP 7:

apt-get install php7.0-fpm

Для управления PHP 7, используем команды:

service php7.0-fpm start
service php7.0-fpm stop
service php7.0-fpm restart

Установка PHP 7 в Debian 8

Дата: 08.12.2015Метки: ,

Совсем недавно вышла финальная версия PHP 7.0.0, а это значит, что разработка достигла своего финала и пора обновить инструкцию по установке PHP 7 в Debian. Процесс сборки PHP 7 выполнялся из исходников под OS Debian 8.

Перед началом компиляции, вы можете добавить или удалить модули из сборки PHP 7. В этой статье я использую минимальный набор модулей, который необходим для нормального функционирования WordPress. Дополнительно я опишу процесс добавления модулей, которые не входят в PHP 7 по умолчанию.

Для тех кто не осилит сборку PHP 7 из исходников, описание установки PHP 7 из репозитория Dotdeb можно прочитать по этой ссылке.

Для начала установим все необходимые для сборки и работы PHP 7 зависимости:

apt-get install build-essential autoconf re2c bison libssl-dev libcurl4-openssl-dev pkg-config libpng-dev libxml2-dev libxml2 libcurl3

Указанные выше зависимости составлены исходя из указанных мной модулей PHP 7. Если вы хотите добавить другие модули, возможно, понадобиться дополнительно установить необходимые для сборки пакеты. Иначе в процессе выполнения команды ./configure вы получите ошибку.

Установка PHP 7

Все действия будем выполнять в директории:

cd /usr/src

Скачиваем и распаковываем исходники PHP 7.0.4:

wget http://de1.php.net/get/php-7.0.4.tar.bz2/from/this/mirror -O php-7.0.4.tar.bz2
tar -xvjf php-7.0.4.tar.bz2

Если на момент чтения этой статьи, уже вышла более свежая версия PHP 7, скачайте самостоятельно исходники с официального сайта.

Переходим в каталог с исходниками PHP 7:

cd php-7.0.4

Для того чтобы установить PHP 7, нам необходимо выполнить компиляцию из исходников. Перед тем как начать, добавьте или удалите неиспользуемые модули из состава PHP 7 и укажите параметры сборки.

./buildconf --force

CONFIGURE_STRING="--prefix=/usr/local/php-fpm 
--enable-fpm
--enable-mysqlnd
--enable-mbstring
--disable-pdo
--disable-phar
--with-config-file-scan-dir=/usr/local/php-fpm/etc/conf.d
--with-curl
--with-gd
--with-fpm-user=www-data
--with-fpm-group=www-data
--with-mysql-sock=/var/run/mysqld/mysqld.sock
--with-mysqli=mysqlnd
--with-zlib
--without-sqlite3
--without-pdo-sqlite"

Данная конфигурация проверена мной и протестирована на WordPress 4.4.2 с минимальным набором плагинов. Если вы хотите добавить в PHP 7 другие модули, найдите их в списке доступных параметров сборки:

./configure --help

Для компиляции и установки PHP 7, необходимо выполнить команду:

./configure $CONFIGURE_STRING
make && make install

Настройка PHP 7

Если в процессе компиляции не было ошибок, файлы PHP 7 должны быть расположены в директории:

/usr/local/php-fpm

Нам осталось внести изменения в конфигурационный файлы и добавить PHP 7 в автозагрузку. Для начала скопируем файл php.ini из каталога с исходниками в каталог установки PHP 7:

cp /usr/src/php-7.0.4/php.ini-production /usr/local/php-fpm/lib/php.ini

Чтобы включить модуль Zend OPcache, создайте файл:

mkdir -p /usr/local/php-fpm/etc/conf.d/
nano /usr/local/php-fpm/etc/conf.d/modules.ini

Скопируйте в него следующие параметры:

# Zend OPcache
zend_extension=opcache.so

Для настройки работы PHP-FPM создайте файл:

nano /usr/local/php-fpm/etc/php-fpm.conf

И добавьте в него следующие параметры:

[global]

pid = /var/run/php-fpm.pid
error_log = /var/log/php-fpm.log

include=/usr/local/php-fpm/etc/php-fpm.d/*.conf

Затем создайте файл:

nano /usr/local/php-fpm/etc/php-fpm.d/www.conf

И добавьте в него параметры:

[www]
user = www-data
group = www-data

listen = /var/run/php7-fpm.sock
listen.owner = www-data
listen.group = www-data
listen.mode = 0777

pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3

Добавим PHP 7 в автозагрузку, создадим символическую ссылку на файл php-fpm:

ln -s /usr/local/php-fpm/sbin/php-fpm /usr/local/php-fpm/sbin/php7-fpm

Создадим в каталоге init.d скрипт для запуска PHP-FPM:

nano /etc/init.d/php-fpm

Добавьте в содержимое файла:

Дадим права на запуск, добавим скрипт в автозагрузку:

chmod +x /etc/init.d/php-fpm
update-rc.d php-fpm defaults

Затем необходимо выполнить команду:

service php-fpm restart

Для работы PHP-FPM в Nginx, добавьте в секцию server виртуального хоста:

location ~ .php$ {
    try_files $uri = 404;
    fastcgi_pass unix:/var/run/php-fpm7.sock;
    fastcgi_index index.php;
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    include fastcgi_params;
}

Проблемы в процессе установки PHP 7

Список ошибок, который может возникнуть по причине отсутствия установленных зависимостей.

./buildconf: 46: ./buildconf: make: not found

# Выполните установку:
apt-get install build-essential
buildconf: autoconf not found.
           You need autoconf version 2.59 or newer installed
           to build PHP from Git.
build/build.mk:37: recipe for target 'buildmk.stamp' failed

# Выполните установку:
apt-get install autoconf
configure: WARNING: You will need re2c 0.13.4 or later if you want to regenerate PHP parsers.

# Выполните установку:
apt-get install re2c
configure: error: bison is required to build PHP/Zend when building a GIT checkout!

# Выполните установку:
apt-get install bison
configure: error: Cannot find OpenSSL's 

# Выполните установку:
apt-get install libssl-dev libcurl4-openssl-dev pkg-config
configure: error: png.h not found.

# Выполните установку:
libpng-dev
configure: error: xml2-config not found. Please check your libxml2 installation.

# Выполните установку:
apt-get install libxml2 libxml2-dev