- Cookbook/Shortcuts
- Установка из пакетов в Ubuntu 16.04
- Собираем свой
- Управление
- Проба пера - psgi
- Проба пера - catalyst
- Конфиг
Cookbook/Shortcuts
Рестарт unitd
К сожалению на текущий момент у unit нет команды reload или restart, есть issues на это дело и также есть лайфхак issues
sudo curl -X PUT -d '{"APPVERSION":"'$(date +"%s")'"}' --unix-socket /var/run/control.unit.sock http://localhost/config/applications/hello-catalyst/environment
Запуск и tail
Как dev сервер не получиться, придеться делать скрипт запуска
$ cat ./start.sh
#!/usr/bin/env bash
sudo unitd --no-daemon &
sudo tail -f /var/log/unit.log
Установка из пакетов в Ubuntu 16.04
1) Ключики
wget http://nginx.org/keys/nginx_signing.key
sudo apt-key add nginx_signing.key
2) Добавить пути
sudo echo "deb http://nginx.org/packages/mainline/ubuntu/ xenial nginx" | sudo tee -a /etc/apt/sources.list
sudo echo "deb-src http://nginx.org/packages/mainline/ubuntu/ xenial nginx" | sudo tee -a /etc/apt/sources.list
3) update и install
sudo apt-get update
sudo apt-get -y install unit
По умолчанию, в пекетах собран unit с поддержкой модулей php и python. Для остальных нужно отдельно собирать
Собираем свой
1) качаем исходники
git clone https://github.com/nginx/unit.git && cd unit
2) настраиваем конфиг
./configure \
--prefix=/usr \
--bindir=/usr/bin \
--sbindir=/usr/sbin \
--modules=/usr/lib/unit/modules \
--state=/var/unit/state \
--pid=/var/run/unit.pid \
--log=/var/log/unit.log \
--user="$(id -un)" \
--group="$(id -gn)" \
--control=unix:/var/run/control.unit.sock
3) Скачиваем поддержку perl-dev!!!
Без этого (или из любого друого яп) будет ошибка
$ ./configure perl
configuring Perl module
checking for Perl ... not found
./configure: error: no Perl found.
sudo apt-get install libperl-dev
3) Добавляем поддержку модуля
$ ./configure perl
configuring Perl module
checking for Perl ... found
checking for Perl version ... 5.22.1
+ Perl module: perl.unit.so
4) Собираем
sudo make install
5) Собираем модуль
sudo make perl-install
6) Проверяем
$ sudo unitd --version
unit version: 1.10.0
configured as ./configure --prefix=/usr --bindir=/usr/bin --sbindir=/usr/sbin --modules=/usr/lib/unit/modules --state=/var/unit/state --pid=/var/run/unit.pid --log=/var/log/unit.log --user=vagrant --group=vagrant --control=unix:/var/run/control.unit.sock
$ ls -l /usr/lib/unit/modules
total 304
-rwxr-xr-x 1 root root 308568 Aug 17 12:05 perl.unit.so
Управление
Если установка через пакеты
1) запуск
sudo service unitd start
2) задаем конфиг файл
sudo service unitd restoreconfig /usr/share/doc/unit/examples/example.config
3) вывести текущий конфиг
sudo service unitd dumpconfig
Из пакетов
Запуск без фонового запуска
sudo unitd --no-daemon
Логи
sudo tail -f /var/log/unit.log
Настройка осуществляется через демона с помощью REST API
Поулчение конфига
vagrant@vagrant:~$ sudo curl -XGET --unix-socket /var/run/control.unit.sock http://localhost/config/
Проба пера - psgi
1) Запскаем простое psgi приложение
$ cat /home/vagrant/projects/hello-unit/index.pl
#!/usr/bin/env perl
use Data::Dumper;
my $app = sub {
my $env = shift;
return [
'200',
[ 'Content-Type' => 'text/plain' ],
[ "Hello from Unit, Perl $^V, environment:\n\n", Dumper($env) ],
];
};
$ cat /home/vagrant/projects/hello-unit/perl.conf
{
"listeners": {
"*:8080": {
"application": "hello-unit"
}
},
"applications": {
"hello-unit": {
"type": "perl",
"user": "nobody",
"processes": 1,
"working_directory": "/vagrant/projects/hello-unit/",
"script": "/vagrant/projects/hello-unit/index.pl"
}
}
}
2) Скармливаем конфиг демону
$ sudo curl -XPUT -d @perl.conf --unix-socket /var/run/control.unit.sock http://localhost/config/
{
"success": "Reconfiguration done."
}
Без sudo будет
curl: (7) Couldn't connect to server
Т.к. сокет создан из под рута
PS Для получения актуального конфига, также делается REST запрос
$ sudo curl -XGET --unix-socket /var/run/control.unit.sock http://localhost/config/
{
"listeners": {
"*:8080": {
"application": "hello-unit"
}
},
"applications": {
"hello-unit": {
"type": "perl",
"user": "nobody",
"processes": 1,
"working_directory": "/vagrant/projects/hello-unit/",
"script": "/vagrant/projects/hello-unit/index.pl"
}
}
}
3) пробуем обратиться к приложению, которое указали в конфиге
$ curl localhost:8080
Hello from Unit, Perl v5.22.1, environment:
$VAR1 = {
'psgi.input' => bless( , 'IO::File' ),
'psgi.url_scheme' => 'http',
'SERVER_PORT' => '80',
'psgi.run_once' => '',
'REQUEST_METHOD' => 'GET',
'REQUEST_URI' => '/',
'psgi.errors' => bless( , 'IO::File' ),
'psgi.multithread' => ${\$VAR1->{'psgi.run_once'}},
'SERVER_PROTOCOL' => 'HTTP/1.1',
'HTTP_ACCEPT' => '*/*',
'psgi.streaming' => 1,
'SERVER_ADDR' => '127.0.0.1',
'HTTP_USER_AGENT' => 'curl/7.47.0',
'SERVER_SOFTWARE' => 'Unit/1.10.0',
'psgi.multiprocess' => ${\$VAR1->{'psgi.streaming'}},
'SERVER_NAME' => 'localhost',
'PATH_INFO' => '/',
'REMOTE_ADDR' => '127.0.0.1',
'psgi.version' => [
1,
1
],
'psgi.nonblocking' => ${\$VAR1->{'psgi.run_once'}},
'HTTP_HOST' => 'localhost:8080',
'QUERY_STRING' => ''
};
Проба пера - catalyst
Установка каталиста см. Perl - Catalyst
Создаем конфиг
Конфиг
applications - список запускаемых приложений
listeners -
make perl-5.22-install make perl-5.22