Создание своего сайта/блога и зеркалирование его в i2p

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

Итак. Цель статьи как понятно из заголовка - установка и настройка своего хостинга с сайтом и пробросом его в i2p.

Имеется:
роутер i2p (настроенный по этой статье)
Безлимитный интернет.

Для справки и тех, кто в танке, на всякий пожарный:
$HOME - переменная, указывающая на домашнюю директорию в папку пользователя
$USER - переменная, обозначающая имя пользователя. В примерах ниже надо заменять на свои значения.


Ну.. поехали.

Для начала ставим LAMP. В интернете есть куча статей по настройке nginx в i2p, но я увы преверженец apache. Посему LAMP....

sudo apt-get install php5 apache2 mysql-server php5-mysql libapache2-mod-php5

Так сказать прожиточный минимум. Остальное подтянется. Не забудьте в mysql ввести пароль от root'a при установке. И хорошо запомнить его, для тех у кого нет памяти - лучше записать.

Теперь нам надо настроить Apache.

Для начала определимся. У меня сайт... эм.. блог... Эм.. страничка.. В общем не важно. Мне хватит и на /home метров 200... Посему буду его держать в папке с i2p.
Создаём папку $HOME/.i2p/eepsite/docroot/www - там у нас будет сайт.
Если он уже есть у вас, то его бэкапчик, или самораспаковывающийся архив суём туда. Если нет - ну и пофиг. Попозже к этому вернемся.
Поехали, нас ждёт Apache!
В теории тут настраивается всё просто.

Для копирования файла настройки из виртуального узла по умолчанию в новый файл (mysite) введите в командной строке следующую команду:

sudo cp /etc/apache2/sites-available/default /etc/apache2/sites-available/mysite

Отредактируйте в нем новый файл настройки (mysite):

sudo nano /etc/apache2/sites-available/mysite

Измените корневой узел документов, указав в нем новое местоположение:

/home/$USER/.i2p/eepsite/docroot/www/

Измените «Directory directive» путем замены <Directory /var/www/> на <Directory /home/$USER/.i2p/eepsite/docroot/www/>

Сохраните файл mysite

Активация нового виртуального узла

Для отключения виртуального узла по умолчанию и включения нового узла запустите терминал и выполните следующие две служебные программы в окне терминала:

sudo a2dissite default && sudo a2ensite mysite

Перезапустите сервер HTTP Apache:

sudo service apache2 restart

Работа с несколькими проектами

После этого небольшого тюнинга по адресу http://localhost нам выводится содержимое папки «www». И если там что-то уже лежит, то это нам и покажут 8) Но порой работаешь сразу над несколькими проектами — и теперь нам необходимо создать домены в этой папке с соответствующими привязками.

Итак, идем в папку /etc/apache2/sites-available/ и создаем там файл vhosts.conf.
touch /etc/apache2/sites-available/vhosts.conf

После этого открываем его любым текстовым редактором и добавляем туда такой текст:

<VirtualHost *:80>

ServerName first.my

ServerAlias www.first.my

DocumentRoot /home/$USER/.i2p/eepsite/docroot/www/first.my

</VirtualHost>

<VirtualHost *:80>

ServerName second.my

ServerAlias www.second.my

DocumentRoot /home/$USER/.i2p/eepsite/docroot/www/second.my

</VirtualHost>

Сохраняем документ, идем в свою папку /home/$USER/.i2p/eepsite/docroot/www/ и там создаем соответственно папки first.my и second.my.

Далее открываем в текстовом редакторе файл /etc/hosts и добавляем в конце следующий текст:

127.0.0.1 first.my
127.0.0.1 second.my

После этого активируем vhosts.conf в apache:
cd /etc/apache2/sites-enabled/

sudo ln -s ../sites-available/vhosts.conf

Задача выполнена. Все, что теперь осталось — только перегрузить сервер.

sudo service apache2 restart

После этого, набрав в адресной строке адреса http://first.my или http://second.my Вы должны увидеть содержимое соответствующих папок.

mod_rewrite

PS как выяснилось позже, у установленного таким образом апача отсутствует mod_rewrite, что делает невозможным использование .htaccess. Решение:

sudo a2enmod rewrite

sudo nano /etc/apache2/sites-available/default

Меняем у элементов «AllowOverride NONE» на «AllowOverride ALL»

sudo services apache2 restart

Поздравляю. Тут кончается первая часть. Установка и настройка apache. Теперь можно положить свой сайт в /home/$USER/.i2p/eepsite/docroot/www/ если ещё не сделали конечно. Для тех, кто за NAT'om - рекомендую использовать например сервис noip - на данный момент он бесплатен, и на 1-м аккаунте одновременно можно держать до 3-х доменов, правда чтобы настроить надо натыкаться..

Кроме того там есть удобная утилита noip2, которую можно поставить из исходников... ИЛи из deb-пакета. Скачать скомпиленный уже пакетик можно тут (57,32 kb). При установке он запросит логин/пароль от учётной записи, ваше доменное имя и частоту обновления.
Теперь осталось только дообавить в /etc/crontab строчку
@reboot /usr/local/bin/noip2
Вуаля, всё должно работать. ЗЫ Это не является рекламой, если не доверяете noip, поставьте свой Dinamic DNS... Много информации про DynDNS есть на FreeDNS

Для дальнейшей простоты я буду называть "свой" сайт test.no-ip.biz. В сети i2p он будет носить имя test.i2p. Вы же не забудьте поменять их на свои.

Часть 2-ая. Настройка i2p. Зеркалирование блога на wordpress.

Помните начальную фразу про заворачивание Apache? Тоже самое надо сделать и для i2p.
nano $HOME/.i2p/eepsite/contexts/base-context.xml
И меняем значение переменной
<Set name="resourceBase">/home/$USER/.i2p/eepsite/docroot/</Set>
на
<Set name="resourceBase">/home/$USER/.i2p/eepsite/docroot/www/</Set>

Заходим в менеджер туннелей: 127.0.0.1:7657/i2ptunnel/index.jsp
Создаём новый серверный HTTP туннель:





Попадаем в настройки:






Теперь по пунктам:

  • Название(N) и Описание(e) — Просто имя и описание туннеля. Ни на что не влияют.
  • Адрес(H) и Порт(P) — Адрес и порт нашего веб-сервера. Мы будем ставить на 127.0.0.1 и порт 80.
  • Имя веб-сайта(W) — Домен, на котором мы планируем держать сайт.
  • Файл секретного ключа(k) — Файл, в котором будет храниться ключ, по которому генерируется адрес туннеля. Совет: после генерации файла (размер 663 байта) сразу сделайте его резервную копию, иначе, при его потере, вы потеряете доменное имя. Оно будет забито за вами, но вы не будете иметь к нему доступ.

Нажимаем «Сохранить». Затем «Запустить». После запуска идём в настройки туннеля и копируем Локальный адрес назначения(L). Он пригодится нам при регистрации в DNS.


Регистрация в DNS (красивый и бесплатный DNS в i2p)

Регистрация на сайте, предоставляющем hosts.txt в общем-то необязательна, ибо в I2P DNS является полностью распределённым. Клиенты сами обмениваются между собой «адресными книгами». Но уж если хочется, то… заходим на сервер stats.i2p и вводим свой хост [Имя веб-сайта(W)] и Локальный адрес назначения(L).

Регистрация завершена!

Через некоторое время ваш test.i2p будет доступен в сети i2p прямо по доменному имени!

Теперь начнём линковку....

Прежде, чем приступить к этой задаче, необходимо переделать туннель для сайта. Это несложно и делается в консоли управления. Сделайте у себя также, как на картинке, вставив свой адрес сервера, порт и домен.

Local destination создается автоматически. Больше на той странице менять ничего не надо. Сохраняйте (кнопка в самом низу страницы) и стартуйте этот туннель. После старта станет доступна кнопка Preview со ссылкой типа http://q3ekhqgqxnrgaeshsesdhdfhfsjhsf5vxlzoj76soarecgf3a.b32.i2p/ (не тыркайте зря, не работает, это ж пример). Если ваш сайт загружается по этой ссылке, то считайте вы уже прошли квест на четверть пути.

Теперь адаптация сайта под i2p. У меня - блог на Wordpress.

Для начала надо заменить все ссылки на сайте. Это можно сделать путем изменения записей в базе данных.

Подключитесь к базе данных и выберите вашу базу (моя называется wordpress):
# mysql -p
mysql> use wordpress;

Теперь необходимо найти таблицу опций

mysql> show tables;
У меня она называетя wp_options. У вас может быть имя таблицы с каким-нибудь другим префиксом, или вообще без него. Например, просто options. Когда вы нашли нужную таблицу пошлите 2 запроса, исправляющих параметры сайта. Их через админку wordpress не получится изменить.

mysql> pdate wp_options set option_value="/" where option_name="siteurl";
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

mysql> update options set wp_option_value="/" where option_name="home";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

Вуаля, теперь бОльшая часть ссылок будет работать правильно как в обычной сети, так и в i2p.

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

<div id="menu">
<ul>
<LI><a href="/">Главная страница</a></LI>
</ul>

Остальное шаманство автор запретил выкладывать, чтобы не переписывать и не травить ему душу - просто выложу путь к его страничке. Этот аффтор очень щепетилен по поводу печенек для себя любимого, и до коле очень жаден, поэтому будьте людьми, покормите его, зайдя к нему на сайт, отключив AdBlock... он будет признателен!

Не забудьте посмотреть как выглядит ваш сайт в i2p.

Вот как это выглядит в итоге (ВНИМАНИЕ! Если не работает, значит я сплю, увы пока не накопил на домашний сервачёк):
chibiko.no-ip.biz
i2p: chibiko.i2p

PPS по мотивам:
http://www.wikireality.ru/
http://www.shpargalko.com/2010/03/01/i2p-nastrojka/
http://habrahabr.ru/post/97996/