Создание eep-сайта на базе Nginx и I2Pd: различия между версиями
0men (обсуждение | вклад) (→Итог) |
|||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 2: | Строка 2: | ||
Предполагается, что у вас уже имеется следующее: | Предполагается, что у вас уже имеется следующее: | ||
* Сервер на GNU/Linux или любой другой UNIX-подобной ОС, на которой представляется возможным установить/собрать и настроить нужное ПО. Конкретно в этой статья будут рассматриваться несколько дистрибутивов GNU/Linux. буду благодарен, если кто-то добавит информацию про другие ОС. | * Сервер на [[GNU/Linux]] или любой другой UNIX-подобной ОС, на которой представляется возможным установить/собрать и настроить нужное ПО. Конкретно в этой статья будут рассматриваться несколько дистрибутивов GNU/Linux. буду благодарен, если кто-то добавит информацию про другие ОС. | ||
* Файлы сайта, к которым будут обращаться посетители; | * Файлы сайта, к которым будут обращаться посетители; | ||
* Желание связываться со скрытосетями и их пользователями. | * Желание связываться со скрытосетями и их пользователями. | ||
== Этап 1. Установка I2Pd == | == Этап 1. Установка I2Pd == | ||
Для начала, я думаю, стоит рассказать о нескольких преимуществах I2Pd при использовании на серверной стороне: | Для начала, я думаю, стоит рассказать о нескольких преимуществах [[I2Pd]] при использовании на серверной стороне: | ||
* | * Отсутствие необходимости держать Java Runtime; | ||
* Как следствие предыдущего пункта - меньшая прожорливость и способность работать там, где проблемы с запуском Java (например, сервера на OpenVZ); | * Как следствие предыдущего пункта - меньшая прожорливость и способность работать там, где проблемы с запуском Java (например, сервера на OpenVZ); | ||
* Минималистичность, | * Минималистичность, отсутствие ненужных для сервера вещей вроде 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. | 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-туннель от него к своему компьютеру: | ||
$ 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 | И так далее. Лично я на своём 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) тоже гуглите, поскольку если описывать всё этот тут, то статья выйдет ещё более громоздкой.