У меня есть веб-проект (веб-сайт), на котором работает собственный веб-сервер (в моем случае я использую сервер оснастки Haskell, но это не имеет отношения к цели этого вопроса).
Как заставить его работать на системном порте 80, чтобы предоставлять его содержимое широкой публике? В частности меня интересуют:
/var/blah
? А в линуксе для этого есть стандартное место?Приветствуется любая помощь или указание в правильном направлении. Спасибо!
P.S .: Я использую Ubuntu 12.04 64bit, если это помогает.
Для этого я использовал выскочку из Ubuntu.
/etc/init/mysite.conf
(как корень)Добавить описание услуги (должности):
chdir /home/john/webapps/mysite
exec /home/john/webapps/mysite/bin/snap-app -p 80
Проверьте, работает ли он, и запустите его вручную, если необходимо:
initctl list | grep mysite
initctl start mysite
Обратите внимание, что здесь я использовал выскочку chdir
директива, указывающая ему запускать процесс из этого каталога. Это необходимо, потому что этот каталог содержит все необходимые шаблоны (html и т. Д.) Для двоичного файла (который находится в bin
папка).
Проект принадлежит пользователю john
, так что я думаю, что это нормально.
Можно положить куда угодно. / usr / bin - стандартное расположение сервера; / var / www - стандартное расположение содержимого сайта или CGI.
Хорошо написанная служба запускается как root, привязывается к порту 80 и отказывается от привилегий либо менее привилегированному пользователю, либо никому. Вот как он использует привилегированный порт. Если он использует сертификаты SSL, он также должен прочитать их как root, а затем отказаться от привилегий. Поэтому вы должны запустить его как root.
Корневой каталог (обычно / var / www) должен иметь доступ на чтение + выполнение для любого пользователя, которому ваш демон передает права. В любом случае доступность для чтения и выполнение во всем мире редко бывает плохой идеей для материалов, которые вы обслуживаете в Интернете.
Вы можете запустить его автоматически с помощью сценария инициализации. Существует демон вызова C (по крайней мере, в GNU C), который заставляет процесс сбрасывать свои терминалы и игнорировать hups, что означает, что он будет запущен после закрытия сеанса ssh и прекращения tty. Если это не так написано, вы можете добавить к команде амперсанд (&), чтобы она работала в фоновом режиме, и она будет сохраняться после смерти вашей оболочки.
Я также использую сервер оснастки в Ubuntu 12.04, и простое, я не знаю, «лучше» ли решение могло бы настроить такое задание cron.
sudo crontab -e
sudo
если вы действительно хотите порт 80, а затем добавьте эту строку
@reboot cd /home/path/yourapp; sudo /home/path/.cabal/bin/yourapp -p 80
Ctrl+x
и yes
или y
чтобы сохранить его (это редактор vi), и вы можете перезагрузиться и посмотреть. Фактическая перезагрузка - это запускаемый экземпляр. Теперь, если вы не остановите его, измените задание cron или выключите компьютер, он будет работать на порту 80.
Он также может работать с exec из проекта, но это проверено.
Версия Upstart также работает, но она простая.