Создание eep-сайта на базе Nginx и I2Pd: различия между версиями

Материал из I2P-ilita вики
Перейти к навигацииПерейти к поиску
 
(не показана 1 промежуточная версия этого же участника)
Строка 2: Строка 2:


Предполагается, что у вас уже имеется следующее:
Предполагается, что у вас уже имеется следующее:
* Сервер на GNU/Linux или любой другой UNIX-подобной ОС, на которой представляется возможным установить/собрать и настроить нужное ПО. Конкретно в этой статья будут рассматриваться несколько дистрибутивов GNU/Linux. буду благодарен, если кто-то добавит информацию про другие ОС.
* Сервер на [[GNU/Linux]] или любой другой UNIX-подобной ОС, на которой представляется возможным установить/собрать и настроить нужное ПО. Конкретно в этой статья будут рассматриваться несколько дистрибутивов GNU/Linux. буду благодарен, если кто-то добавит информацию про другие ОС.
* Файлы сайта, к которым будут обращаться посетители;
* Файлы сайта, к которым будут обращаться посетители;
* Желание связываться со скрытосетями и их пользователями.
* Желание связываться со скрытосетями и их пользователями.


== Этап 1. Установка I2Pd ==
== Этап 1. Установка I2Pd ==
Для начала, я думаю, стоит рассказать о нескольких преимуществах I2Pd при использовании на серверной стороне:
Для начала, я думаю, стоит рассказать о нескольких преимуществах [[I2Pd]] при использовании на серверной стороне:
* Отстутствие необходимости держать Java Runtime;
* Отсутствие необходимости держать Java Runtime;
* Как следствие предыдущего пункта - меньшая прожорливость и способность работать там, где проблемы с запуском Java (например, сервера на OpenVZ);
* Как следствие предыдущего пункта - меньшая прожорливость и способность работать там, где проблемы с запуском Java (например, сервера на OpenVZ);
* Минималистичность, отсутсие ненужных для сервера вещей вроде i2psnark и susimail;
* Минималистичность, отсутствие ненужных для сервера вещей вроде i2psnark и susimail;
* Возможность присваивать посетителям адрес из подсети 127.0.0.0/8 на базе destination-хеша, тем самым с небольшой точностью различая их.
* Возможность присваивать посетителям адрес из подсети 127.0.0.0/8 на базе destination-хеша, тем самым с небольшой точностью различая их.


Строка 22: Строка 22:
  deb http://repo.lngserv.ru/debian release main
  deb http://repo.lngserv.ru/debian release main
  deb-src http://repo.lngserv.ru/debian release main
  deb-src http://repo.lngserv.ru/debian release main
3. Cобственно, устанавливаем i2pd:
3. Собственно, устанавливаем i2pd:
  $ sudo apt-get install i2pd
  $ sudo apt-get install i2pd


Строка 32: Строка 32:


=== Сборка из исходников ===
=== Сборка из исходников ===
В том случае, если для вашего дистрибутива нет пакетов, можно собрать I2Pd из исходных кодов. Для этого требуются компилятор C++11 (GCC версии страше 4.7 или Clang), Cmake, библиотеки Boost (1.49 или старше), OpenSSL и ZLib.
В том случае, если для вашего дистрибутива нет пакетов, можно собрать I2Pd из исходных кодов. Для этого требуются компилятор C++11 (GCC версии страше 4.7 или Clang), Cmake, библиотеки Boost (1.49 или старше), [[OpenSSL]] и ZLib.


1. Качаем исходники (если есть Git, то с помощью него, если нет, то можно скачать архивом):
1. Качаем исходники (если есть Git, то с помощью него, если нет, то можно скачать архивом):
Строка 75: Строка 75:
Далее перезагружаем I2Pd, чтобы применить новые настройки. Как это сделать - обращайтесь к мануалам вашего дистрибутива. В большинстве случаев достаточно одной из двух команд - "service i2pd restart" для систем с upstart и "systemctl restart i2pd" для систем с systemd.  
Далее перезагружаем I2Pd, чтобы применить новые настройки. Как это сделать - обращайтесь к мануалам вашего дистрибутива. В большинстве случаев достаточно одной из двух команд - "service i2pd restart" для систем с upstart и "systemctl restart i2pd" для систем с systemd.  


После этого нужно зайти в вебконсоль и получить b32 и b64-адреса сайта. Если I2Pd запущен на той же машине, что и браузер, то идём на [http://127.0.0.1:7070/ 127.0.0.1:7070], жмём на I2P Tunnels и видим имя туннеля вместе с b32-адресом. Сохраняем b32-адрес, нажимаем на него и видим поле текста с b64-адресом. Его тоже сохраняем. В том случае, если I2Pd на удалённом сервере, делаем SSH-туннель от него к своему компьютеру:
После этого нужно зайти в веб-консоль и получить b32 и b64-адреса сайта. Если I2Pd запущен на той же машине, что и браузер, то идём на [http://127.0.0.1:7070/ 127.0.0.1:7070], жмём на I2P Tunnels и видим имя туннеля вместе с b32-адресом. Сохраняем b32-адрес, нажимаем на него и видим поле текста с b64-адресом. Его тоже сохраняем. В том случае, если I2Pd на удалённом сервере, делаем SSH-туннель от него к своему компьютеру:
  $ ssh -L 7071:127.0.0.1:7070 root@123.456.78.9
  $ ssh -L 7071:127.0.0.1:7070 root@123.456.78.9
После чего уже на этом компьютере открываем в браузере [http://127.0.0.1:7071/ 127.0.0.1:7071] и делаем то же самое.
После чего уже на этом компьютере открываем в браузере [http://127.0.0.1:7071/ 127.0.0.1:7071] и делаем то же самое.
Строка 82: Строка 82:


== Этап 3. Установка Nginx ==
== Этап 3. Установка Nginx ==
Так как Nginx всё-таки гораздо более популярный и востребованный продукт, то его преимущества и установку я подробным образом рассматривать не буду, лишь дам пару команд.
Так как [[Nginx]] всё-таки гораздо более популярный и востребованный продукт, то его преимущества и установку я подробным образом рассматривать не буду, лишь дам пару команд.
* '''Debian/Ubuntu''': sudo apt-get install nginx;
* '''Debian/Ubuntu''': sudo apt-get install nginx;
* '''Fedora''': sudo dnf install nginx;
* '''Fedora''': sudo dnf install nginx;
* '''Arch''': sudo pacman -S nginx;
* '''Arch''': sudo pacman -S nginx;
И так далее. Лично я на своём Debian предпочитаю включать [https://nginx.org/en/linux_packages.html#mainline официалньый mainline-рерозиторий от nginx] и устанавливать вебсервер оттуда.
И так далее. Лично я на своём Debian предпочитаю включать [https://nginx.org/en/linux_packages.html#mainline официальный mainline-рерозиторий от nginx] и устанавливать веб-сервер оттуда.


== Этап 4. Настройка nginx ==
== Этап 4. Настройка nginx ==
Строка 119: Строка 119:


== Итог ==
== Итог ==
Если всё сделано правильно, то у вас будет доступный только из-под I2P сайт со статическим содержимым. Если что-то не получается - гуглите ошибки, ведь наверняка вы не одни такие. Насчёт других конфигураций (например, установки PHP) тоже гуглите, поскольку если описывать всё этот тут, то статья выйдет ещё более громоздкой.
Если всё сделано правильно, то у вас будет доступный только из-под I2P сайт со статическим содержимым. Если что-то не получается - гуглите ошибки, ведь наверняка вы не одни такие. Насчёт других конфигураций (например, установки [[PHP]]) тоже гуглите, поскольку если описывать всё этот тут, то статья выйдет ещё более громоздкой.
 
== См. Также ==
 
* [[Создание I2P сайта]]
* [[Установка и настройка связки Apache+PHP+MySQL для I2P сети]]
* [[Создание зеркала домена в сети I2P]]
* [[Как создать зеркало I2P-сайта в Onion-сети (TOR)]]
* [[Руководство по настройке Linux Web сервера]]
* [[Рекомендации по поддержке ресурсов]]
 
[[Категория:I2P]]

Текущая версия на 05:00, 19 августа 2017

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

Предполагается, что у вас уже имеется следующее:

  • Сервер на GNU/Linux или любой другой UNIX-подобной ОС, на которой представляется возможным установить/собрать и настроить нужное ПО. Конкретно в этой статья будут рассматриваться несколько дистрибутивов GNU/Linux. буду благодарен, если кто-то добавит информацию про другие ОС.
  • Файлы сайта, к которым будут обращаться посетители;
  • Желание связываться со скрытосетями и их пользователями.

Этап 1. Установка I2Pd[править]

Для начала, я думаю, стоит рассказать о нескольких преимуществах I2Pd при использовании на серверной стороне:

  • Отсутствие необходимости держать Java Runtime;
  • Как следствие предыдущего пункта - меньшая прожорливость и способность работать там, где проблемы с запуском Java (например, сервера на OpenVZ);
  • Минималистичность, отсутствие ненужных для сервера вещей вроде i2psnark и susimail;
  • Возможность присваивать посетителям адрес из подсети 127.0.0.0/8 на базе destination-хеша, тем самым с небольшой точностью различая их.

Способы установки детально расписаны в мануале. Ниже приведу выдержки из него тех вариантов, которые я пробовал.

Debian[править]

1. Импортируем PGP-ключ репозитория, выполнив эти команды:

$ gpg --keyserver keys.gnupg.net --recv-keys 98EBCFE2
$ gpg -a --export 98EBCFE2 | sudo apt-key add -

2. Добавляем репозитории - создаём в папке /etc/apt/sources.list файл i2pd.list и записывает туда следующие строчки (где release - название используемой версии (jessie, stretch и т.д):

deb http://repo.lngserv.ru/debian release main
deb-src http://repo.lngserv.ru/debian release main

3. Собственно, устанавливаем i2pd:

$ sudo apt-get install i2pd

Ubuntu[править]

Здесь всё несколько быстрее. Достаточно выполнить следующие три команды:

$ sudo add-apt-repository ppa:purplei2p/i2pd
$ sudo apt-get update
$ sudo apt-get install i2pd

Сборка из исходников[править]

В том случае, если для вашего дистрибутива нет пакетов, можно собрать I2Pd из исходных кодов. Для этого требуются компилятор C++11 (GCC версии страше 4.7 или Clang), Cmake, библиотеки Boost (1.49 или старше), OpenSSL и ZLib.

1. Качаем исходники (если есть Git, то с помощью него, если нет, то можно скачать архивом):

$ git clone https://github.com/PurpleI2P/i2pd

либо

$ wget -O i2pd.tar.gz https://github.com/PurpleI2P/i2pd/archive/openssl.tar.gz
$ tar xpf i2pd.tar.xz
$ mv i2pd-openssl i2pd

2. Собираем исходники:

$ cd i2pd/build
$ cmake .
$ make

3. Далее можем устанавливать:

# make install

Этап 2. Настройка I2Pd[править]

Открываем/создаём i2pd.conf (в зависимости от дистрибутива и метода установки он может быть либо в /etc/i2pd/, либо в /var/lib/i2pd) и вносим пару настроек:

1. Включаем режим демона и сервиса, чтобы i2pd работал в фоне и хранил все настройки в /var/lib/:

daemon = true
service = true

2. Выставляем нужную скорость в зависимости от ограничений скорости и трафика вашего хостера/провайдера: (как я понял, скорость измеряется в килобайтах в секунду. L = 32 КБ/c, O = 256 КБ/с, P = 2048 КБ/с, X = неограничено)

bandwidth = L

3. В том случае, если сайт будет крутиться на дешёвом VPS, я рекомендую выключить транзитный трафик, так как он будет слишком сильно забивать канал, из-за чего некоторые хостеры могут даже засуспендить сервер:

notransit = true
share = 0

[limits]
transittunnels = 0

После этого открываем/создаём tunnels.conf, находящийся в той же папке, и настраиваем в нём туннель:

[mycoolsite]
type = http
host = 127.0.0.1
port = 13337
keys = mycoolsite.dat
  • [mycoolsite] - имя туннеля, которое будет отображаться в веб-панели;
  • type = http - тип туннеля. Так как мы создаём туннель для сайта, то выбираем http;
  • host = 127.0.0.1 и port = 13337 - указание насчёт того, какой ресурс туннелировать. Так как nginx будет крутиться на том же сервере, то host следует направить на 127.0.0.1. В качестве значения port стоит выбрать какое-нибудь пятизначное число в районе 10000-40000, и в дальнейшем запомнить его;
  • keys = mycoolsite.dat - имя файла с приватным ключом сайта, лежащего в /var/lib/i2pd/. Если файла нет, то I2Pd сгенерирует его. После генерации стоит сохранить его в безопасное место, чтобы иметь возможность восстановить сайт на том же адресе после суспенда/падения/отключения сервера.

Далее перезагружаем I2Pd, чтобы применить новые настройки. Как это сделать - обращайтесь к мануалам вашего дистрибутива. В большинстве случаев достаточно одной из двух команд - "service i2pd restart" для систем с upstart и "systemctl restart i2pd" для систем с systemd.

После этого нужно зайти в веб-консоль и получить b32 и b64-адреса сайта. Если I2Pd запущен на той же машине, что и браузер, то идём на 127.0.0.1:7070, жмём на I2P Tunnels и видим имя туннеля вместе с b32-адресом. Сохраняем b32-адрес, нажимаем на него и видим поле текста с b64-адресом. Его тоже сохраняем. В том случае, если I2Pd на удалённом сервере, делаем SSH-туннель от него к своему компьютеру:

$ ssh -L 7071:127.0.0.1:7070 root@123.456.78.9

После чего уже на этом компьютере открываем в браузере 127.0.0.1:7071 и делаем то же самое.

Наконец, включаем запуск I2Pd при загрузке системы: "systemctl enable i2pd" для систем на базе systemd, насчёт остальных обращайтесь к мануалам.

Этап 3. Установка Nginx[править]

Так как Nginx всё-таки гораздо более популярный и востребованный продукт, то его преимущества и установку я подробным образом рассматривать не буду, лишь дам пару команд.

  • Debian/Ubuntu: sudo apt-get install nginx;
  • Fedora: sudo dnf install nginx;
  • Arch: sudo pacman -S nginx;

И так далее. Лично я на своём Debian предпочитаю включать официальный mainline-рерозиторий от nginx и устанавливать веб-сервер оттуда.

Этап 4. Настройка nginx[править]

1. Стандартной конфигурации nginx в большинстве случаем достаточно, но я рекомендую изменить пару настроек. Открываем /etc/nginx/nginx.conf и изменяем его:

  • В стандартной поставке nginx будет ругаться на слишком длинные b32-адреса и откажется запускаться (выдавая ошибку could not build server_names_hash). Это можно починить следующей строчкой в секции http:
server_names_hash_bucket_size 128;
  • В той конфигурации, которую я предпочитаю использовать, настройки отдельных сайтов хранятся в /etc/nginx/sites-available, а nginx берёт их из симлинков в /etc/nginx/sites-enabled. По умолчанию же nginx настроен брать конфиги из /etc/nginx/conf.d. Поэтому меняем строчку "include /etc/nginx/conf.d/*.conf;" на "include /etc/nginx/sites-enabled/*.conf;", после чего создаём в /etc/nginx папки sites-available и sites-enabled.

2. После этого создаём файл /etc/nginx/sites-available/mycoolsite.conf и заполняем его:

server {
  listen 127.0.0.1:13337;

  server_name mycoolsite.i2p qge6prwkrvrmhtup7oixiolh5wununwzmmgf5vgus4ni5d46g7uo.b32.i2p;
  charset utf-8;

  root /var/www/mycoolsite;
  index index.html;

  access_log /dev/null;
  error_log /dev/null;
}
  • listen 127.0.0.1:13337 - адрес и порт, на котором будет крутится сайт. Если указать 127.0.0.1 в качестве адреса, то nginx будет принимать запросы только с локалхоста (то бишь, только с I2P-туннеля), с других источников (то бишь, клирнета) соединение идти не будет, что важно для безопасности.
  • server_name mycoolsite.i2p qge6prwkrvrmhtup7oixiolh5wununwzmmgf5vgus4ni5d46g7uo.b32.i2p; - домены сайта, который будет хостить nginx. В данном случае - человечный домен из адресной книги и b32-адрес.
  • charset utf-8; - стандартная кодировка для отправляемого посетителям содержимого. Сейчас весь мир на юникоде, так что не будем отставать.
  • root /var/www/mycoolsite - путь к корневой директории сайта, где будут храниться все его данные.
  • index index.html; - главная страница для каждой папки сайта. То есть, например, при открытии http://mycoolsite.i2p/directory/ будет открываться http://mycoolsite.i2p/directory/index.html, но без конкретного указания index.html в URL.
  • access_log /dev/null; и error_log /dev/null - пути, в которые сохранять логи посещений и ошибок сайта. Если вам они нужны, то направьте параметр на что-нибудь вроде /var/log/nginx/mycoolsite.access.log и /var/log/nginx/mycoolsite.error.log. В моём же случае они сохраняются в /dev/null, что означает, что они не сохраняются.

3. Далее, когда конфигурация сервера готова, делаем симлик в sites-enabled:

$ sudo ln -s /etc/nginx/sites-available/mycoolsite.conf /etc/nginx/sites-enabled/

4. Затем создаём папку /var/www/mycoolsite или другую, которую вы указали в конфиге, и перемещаем туда все файлы сайта.

В конце-концов перезапускаем и добавляем nginx в автозагрузку. Делается это аналогично I2Pd.

Итог[править]

Если всё сделано правильно, то у вас будет доступный только из-под I2P сайт со статическим содержимым. Если что-то не получается - гуглите ошибки, ведь наверняка вы не одни такие. Насчёт других конфигураций (например, установки PHP) тоже гуглите, поскольку если описывать всё этот тут, то статья выйдет ещё более громоздкой.

См. Также[править]