В качестве отклика на инструкцию «Как сделать простой веб-сайт за один час» я решил опубликовать собственную, состоящую из пяти простых и обозримых ?пятиминутных шагов.

Шаг 1. Установить движок Node.js в соответствии с инструкциями, имеющимися в вики для каждой из поддерживаемых операционных систем. (Для Windows достаточно скачать и запустить MSI-файл, для CentOS — воспользоваться системным менеджером пакетов, и так далее.)

Шаг 2. Создать пустой каталог и поместить в нём файл «site.js» следующего содержания:

site.js
// Перечисление зависимостей:
var path = require('path');
var express = require('express');

// Описание настроек:
var staticSiteOptions = {
   portnum: 80, // слушать порт 80
   maxAge: 1000 * 60 * 15 // хранить страницы в кэше пятнадцать минут
};

// Запуск сайта:
express().use(express.static(
   path.join(__dirname, 'static'),
   staticSiteOptions
)).listen(staticSiteOptions.portnum);

Настройки staticSiteOptions можно переменить по собственному вкусу.

Шаг 3. В том же каталоге подать команду «npm install express», которая автоматически создаст подкаталог «node_modules» и установит туда Express, скачав из Интернета.

Шаг 4. В том же каталоге создать подкаталог «static» и поместить в нём файлы статического сайта. Этот подкаталог станет корнем сайта. Файлы с именами «index.html» будут использоваться как файлы-индексы. Иными словами, при ответе сервера на запрос с адресом, содержащим только имя некоторого каталога (будь то корень сайта или один из его подкаталогов), будет показан файл с именем «index.html» из указанного каталога (если есть).

Шаг 5. В том же каталоге подать команду «node site», которая запустит сервер. Убедившись в её работоспособности, обеспечить автозапуск этой команды в этом каталоге после каждой перезагрузки операционной системы. (Например, на CentOS 6.2 можно использовать upstart для этой цели.)

Всё.

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

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

(Можно купить VPS с фиксированным IP-адресом, запустить на нём веб-сервер, а затем купить домен, купить DNS-серверы или подобрать бесплатные по вкусу, сообщить их имена доменоторговцу, а затем связать IP-адрес с желаемым именем в панели управления первичным DNS-сервером. Можно запускать веб-сервер на домашнем компьютере, а фиксированный IP-адрес для него купить у поставщика Интернета. Можно использовать динамический DNS, обходиться без фиксированного IP-адреса. А может оказаться, что внешнего IP-адреса и вовсе не надо, если веб-сервер нужен для интранета.)

Да и задачу о том, как пробросить через файерволл тот порт, который слушает сервер, я также оставляю на усмотрение читателя. Её решение обыкновенно излагается в инструкции к файерволлу.

Комментарии (19)


  1. dark_ruby
    30.03.2015 15:56
    +2

    зачем тянуть тяжелый експресс, если можно использовать node-static


    1. Mithgol Автор
      30.03.2015 16:02
      -4

      На вырост.

      Да и не особенно тяжёлый он: в нём и мегабайта кода не наберётся даже с основными зависимостями его.


      1. printf
        30.03.2015 17:04

        Да. Из четверки вообще все выкинули, кроме собственно express.static. Хороший сервер.


      1. Nerten
        30.03.2015 21:44

        Куда может рости статический сайт?


        1. Mithgol Автор
          30.03.2015 22:25
          +1

          Он может перестать быть статическим, когда обстоятельства дела потребуют этого.



  1. Crandel
    30.03.2015 16:22
    +1

    если нету готового сайта, то это будет явно побольше времени. у меня иногда придумывание названия переменной занимает больше 5 минут, а тут во втором шаге настройки надо придумывать)


  1. akamajoris
    30.03.2015 16:37
    +10

    python -m SimpleHTTPServer 80
    

    Зачем тратить время?


    1. xGromMx
      30.03.2015 16:49

      Также php -S localhost:8000


      1. Nerten
        30.03.2015 21:42

        Не делает листинг файлов :(


        1. xGromMx
          31.03.2015 00:52

          Ну это был как вариант, а так я юзаю http-server --cors на ноде


    1. aratak
      30.03.2015 19:58

      Для хипстеров есть еще

      ruby -run -e httpd . -p80
      


      1. Nerten
        30.03.2015 21:42

        Не делает листинг файлов :(


    1. Nerten
      30.03.2015 21:29

      Не многопоточный :(


  1. ivlis
    30.03.2015 17:44
    +14

    А зачем node.js для статичного сайта? Есть же ngnix.


    1. Nerten
      30.03.2015 21:44
      +1

      Бинго!


  1. stan_jeremy
    30.03.2015 19:52
    -3

    Mithgol открыл для себя nodejs.org


    1. Mithgol Автор
      30.03.2015 22:28
      -1

      Открыть-то я открыл, но так давно и так гласно, что в правом столбце в хабе Node.js видно, что именно я — лидер хаба (по крайней мере, в настоящее время).


      1. StreetStrider
        30.03.2015 23:31
        +1

        Mithgol, претензия к вам выше была, безусловно, необоснованна: мы давно знаем, что вы занимаетесь нодой. Но, при всём при этом, признайте — эта статья и правда слабовата — так что она естественным образом вызывает подобную реакцию.