Я развертываю приложение, созданное с помощью Meteor 1.8, на сервере под управлением Ubuntu 16.04. Я следовал инструкции здесь , чтобы использовать Phusion Passenger для развертывания приложения в сочетании с Nginx.
Однако способ установки Node.js отличается от способа, описанного вучебник, и это приводит к ошибке. В результате мне нужно изменить переменную среды $PATH
, чтобы сообщить Пассажиру, где найти узел.
——— ДЕТАЛИ (можно пропустить) ———
Я установил узел8.16.2 с использованием NVM. У меня есть пользователь без полномочий root по имени meteor
для запуска процесса приложения. При входе на сервер под именем meteor
команда which node
возвращает:
/home/meteor/.nvm/versions/node/v8.16.2/bin/node
Однако, когда я подключаюсь к поддомену, где должно обслуживаться приложение метеор, регистрируется ошибка, утверждающая узел: не найден :
App 32461 output: /bin/sh: 1: exec: node: not found
Чтобы получить больше информации о проблеме, я добавил следующую строку в файл conf nginx, который определяет поддомен:
passenger_friendly_error_pages on;
Мой файл конфигурации nginx теперь выглядит примерно так:
server {
listen 80;
server_name example.com;
# Tell Nginx and Passenger where your app's 'public' directory is
root /var/www/example/bundle/public;
# Turn on Passenger
passenger_enabled on;
# Tell Passenger that your app is a Meteor app
passenger_app_type node;
passenger_startup_file main.js;
# Tell your app where MongoDB is
passenger_env_var MONGO_URL mongodb://localhost:27017/gizmo;
# Tell your app what its root URL is
passenger_env_var ROOT_URL http://example.com;
### DEBUGGING ONLY ! REMOVE FOR PRODUCTION ###
passenger_friendly_error_pages on;
}
Теперь, Phusion Passenger дает мне полезную страницу с ошибкой. Имеется вкладка Подробная диагностика и вложенная вкладка Подпроцесс . При этом в разделе Переменные среды я вижу, как определяется $PATH
:
PATH=/home/meteor/bin:/home/meteor/.local/bin:/usr/local/gradle/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin
Другими словами, он не знает/home/meteor/.nvm/versions/node/v8.16.2/bin/node
.
———— ЖЕЛАЕМОЕ РЕШЕНИЕ ————
Лучшим решением, по-видимому, является добавление пути к узлу к $PATH
. Документы PhusionPassenger предлагают редактировать /etc/default/nginx
. Я добавил следующую строку в этот файл:
export PATH=/home/meteor/.nvm/versions/node/v8.16.2/bin/:$PATH
Но это не имеет никакого эффекта.
———— STOPGAP SOLUTION ————
В моем решении с временной задержкойбыло создать директорию /home/meteor/bin/
и создать символическую ссылку на приложение узла:
sudo mkdir /home/meteor/bin
sudo ln -s /home/meteor/.nvm/versions/node/v8.16.2/bin/node /home/meteor/bin
sudo chown -R meteor: /home/meteor/bin
Это работает, но я хотел бы понять, как заставить Nginx и PhusionPassenger использовать правильные $PATH
в переменных среды.