Достаточно часто встречается связка Nginx + PHP-FPM, которая заменяет собой привычный многим Apache + mod_php. А когда требуется добавить возможность работать с Oracle из PHP, то не подготовленный человек, а точнее привычный к настройке Oracle Client для PHP, работающего как модуль Apache, может столкнуться с непредвиденными проблемами, о решении которых я попробую рассказать.
Итак, у нас CentOS (в принципе на других Linux все будет аналогично) на который уже установлен Nginx, PHP, PHP-FPM и Oarcle Client + модуль php_oci8. На всякий случай, в этом можно убедиться командой:
# php -m | grep oci
Если вывод такой же, как в примере ниже, то модуль установлен:
# php -m | grep oci
oci8
А вот если, там ругань об отсутствующей библиотеке вроде:
PHP Startup: Unable to load dynamic library 'oci8.so' (tried: /usr/lib/php/20170718/oci8.so (libmql1.so: cannot open shared object file: No such file or directory), /usr/lib/php/20170718/oci8.so.so (/usr/lib/php/20170718/oci8.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
То надо сделать (замените путь из примера на свой):
# echo /u01/app/oracle/product/12.1.02/db_1/lib > /etc/ld.so.conf.d/oracle.conf # ldconfig
* в случае Oracle Instant Client путь будет до папки клиента, например /opt/oracle/instantclient_12_2
.
Теперь модуль должен нормально заработать в консольном режиме.
Но после этого все равно при попытке использовать oci_connect(...) получаем вот такую ошибку в ответе от сервера:
Warning: oci_connect(): OCIEnvNlsCreate() failed. There is something wrong with your system - please check that ORACLE_HOME and LD_LIBRARY_PATH are set and point to the right directories in /var/www/...
Когда все известные бубны с прописыванием ORACLE_HOME и LD_LIBRARY_PATH во все скрипты запуска и прочие перебраны, но все равно не работает, то простое решение кажется просто невозможным, но оно есть!
Итак, у нас для начала уже есть сервер на котором настроен gitolite по адресу git.example.com, на нем расположен репозиторий myrepo в котором есть две основные ветки master и develop.
Общий принцип разработки такой:
Задача заключается в том, чтоб при изменениях в ветке develop они автоматически переносились в рабочую копию на хост develop.example.com, а изменения сделанные в master - на хост production.example.com.
Переехав на Elementary OS, столкнулся с тем, что в ее родном терминале штатный раскас mc крайне не читабелен. Озадачившись вопросом смены окраса накопал следующие полезные вещи:
MC умеет скины и они у него есть в комплекте, хранятся в
/usr/share/mc/skins
Попробовать скин можно коммандой
mc -S skinname
Скины бывают обычные и высококачественные, для 256 цветов, например мне полюбился xoria256 (на картинке выше), который и захотелось использовать везде. Везде - это везде куда я прихожу по ssh.
Для того, чтоб избавиться от длинной команды можно установить переменную окружения MC_SKIN, чтоб не набирать каждый раз. Ну а раз можно так, то значит можно пробросить эту переменную через ssh.
В качестве возможности провести свободное время, расскажу свой опыт настройки сервера gitolite на Linux машине и организовать работу клиента на Mac OS :)
На старте у нас имеется сервер под управлением CentOS, который будет выступать хостингом репозиториев; и клиент на Mac OS Yosemite, который будет с ним работать.
Для самого начала нам потребуются ssh ключи. На любой машине генерим приватный и публичный ключ командой
ssh-keygen -t rsa
После этого будет создана пара ключей
~/.ssh/id_rsa.pub
и
~/.ssh/id_rsa
Эти ключи будут использоваться для администратора gitolite, но их так же можно использовать и для себя в качестве клиента, поэтому можно создавать их и на клиентской машине. Далее я буду рассматривать ситуацию когда эти ключи используются как для админа так и для клиента, поэтому приватный ключ должен оказаться на клиентской машине, например в файле ~/.ssh/git, а публичный - на сервере в файле /tmp/git.pub.
Важное замечание, если вы генерите non-openssh public keys, например, при помощи PuTTY gen, то для использования в gitolite публичный ключ придется конвертировать командой
ssh-keygen -i -f /tmp/ssh2/YourName.ppk > /tmp/openssh/YourName.pub
Это типичная проблема при использовании, например, TurtoiseGit на windows, когда для того чтоб он принял ключ он должен быть в формате *.ppk, а на сервере - в фомате openssh.