agran (agran) wrote,
agran
agran

Categories:

Как я сделал сервис для альтернативной bitcoin-подобной криптовалюты

Для начала я арендовал облачный сервер вот у этого хостера: http://infobox.ru/ Арендовать облочный сервер может быть удобнее и выгоднее, чем стандартный сервер. Так можно иметь слабенький, но полноценный сервер уже за 400-500р в месяц. Обычный сервер будет в разы дороже. И если проект станет популярным, то ресурсы можно будет легко нарастить.

Выбрал:
Процессор: 1 X 2 Ghz.
RAM: 2 GB.
Диск: 10 GB.
1 IP адрес.
Сеть: 10 мегабит.
OS: Ubuntu 12.04

Я создавал сервис для альтернативной криптовалюты MemoryCoin2.

Подключился к серверу по SSH с помощью программы putty. Порключаемся, вводим ваш логин и пароль (копирование/вставка в putty осуществляется только правой кнопкой мыши, символы пароля не отображаются при вводе).

Сначала установил все обновления.

sudo su -
apt-get update
apt-get upgrade
reboot


Потом установил пакеты, необходимые для memorycoin, скачал сам memorycoin и откомпилировал его.

sudo su -
apt-get install -y nano
apt-get install -y git make g++ build-essential dos2unix
apt-get install -y autoconf automake libtool yasm m4
apt-get install -y libminiupnpc-dev libdb++-dev libgmp-dev libssl-dev libboost-all-dev
git clone https://github.com/memorycoin/memorycoin
cd memorycoin/src/
make -f makefile.unix USE_PNP=-
strip bitcoind
mv bitcoind /usr/local/bin/memorycoind
mkdir /root/.memorycoin
cd /root/.memorycoin/
nano memorycoin.conf


Мой memorycoin.conf:

server=1
daemon=1
rpcuser=<ваш логин>
rpcpassword=<ваш пароль>
rpcallowip=127.0.0.1
logtimestamps=1
addnode=81.17.19.139
addnode=91.121.8.23:8080
addnode=138.91.140.219
addnode=168.63.28.249
addnode=137.116.168.89
addnode=209.173.79.71

Меняем тут на свой новый логин и пароль.

Запускаем наш MemoryCoin2 сервис командой: memorycoind

Дальше какое-то время memorycoind будет синхронизироваться. Можно проверять состояние командой "memorycoind getinfo", в выводе стоит обратить внимание на поле "connections". Оно должно быть более 0. Лучше более 8. Если это значение = 0, то значит сервис не подключён ни к одной ноде. В этом случае стоит поискать рабочие ноды и добавлять их командой "memorycoind addnode 81.17.19.139 add". Когда количество блоков в вашем memorycoind станет равным количеству блоков в сети, можно продолжать. Количество блоков в сети memorycoin можно узнать на сайте http://www.mmc-chain.com/ (поле Total Blocks).

Далее можно начать майнинг командой "memorycoind setgenerate true 32", где 32 надо заменить на количество ядер своего процессора.

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


memorycoind listaddressgroupings
<address>
memorycoind dumpprivkey <address>
<privkey>


Дальше в на своём компьютере в memorycoin-qt в консоли вводим:


walletpassphrase <пароль от кошелька> 600
importprivkey <privkey> <метка> true


Перезапускаем memorycoin-qt.

Но майнинг сейчас уже не так актуален как прежде из-за роста сложности. Если есть видеокарты, то есть смысл майнить на них с помощью специального майнера http://mmc.1gh.com/ .

Продолжим тему о настройке сервера. Теперь поднимем web-сервер. Для этого вводим в консоли:

sudo apt-get install apache2 mysql-server mysql-client php5 phpmyadmin curl php5-curl

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

Если всё установится правильно, то введя в браузере ip-адрес своего сервера вы увидите сообщение: "It works!".

Через какое-то время с ростом популярности мой сайт стал жутко тормозить хотя ресурсов было предостаточно. Выяснилось что по умолчанию у апача стоит настройка на 10 одновременных соединений.

Что бы это исправить делаем так:


nano /etc/apache2/apache2.conf

MaxClients <количество соединений>


Я поставил 128. Сайт снова стал работать как надо.
Там кстати несколько раз встречается MaxClients, я изменил все.
Что бы изменения вступили в силу необходимо перезагрузить апач командой: "/etc/init.d/apache2 restart".
Кстати, для определения оптимального значения MaxClients может пригодится утилита server-status. В ней можно смотреть сколько апачей свободно и если свободных нет, то значит стоит увеличивать MaxClients. server-status по умолчанию доступен на сервере по адресу: http://serverip/server-status. Но для того что бы получить к нему доступ с внешнего компьютера необходимо отредактировать файл "/etc/apache2/mods-available/status.conf" Я открыл доступ к server-status для всех IP, но сменил адрес страницы на произвольный. Получилось так:


<Location /server-status2304210394>
SetHandler server-status
Order deny,allow
Allow from all
</Location>


После внесёных изменений надо перезагрузить апач и теперь по адресу http://youserver.net/server-status2304210394?refresh=5 можно увидеть статистику вебсервера по текущим запросам с периодом обновления 5 секунд.

Теперь нам как-то надо загрузить php-странички на наш сервер. Сначала я пробовал поднять ftp-сервер, но столкнулся с некоторыми сложностями и в итоге решил что проще всего пользоваться для передачи файлов уже поднятым SSH сервером. Программа FileZilla Client умеет работать по ssh. Для этого надо либо создать в менеджере сайтов новый сайт, выбрав протокол: SFTP, либо вбить следующий адрес: "sftp://login:pass@ipadress" в поле хост. Свои странички и скрипты надо загружать в паку "/var/www". Я пользовался пользователем root, но можно для целей передачи файлов создать нового пользователя.
Создать пользователя с доступом к www папке можно так:


sudo useradd --home /var/www newuser
sudo passwd newuser


Где newuser - имя вашего нового пользователя.

Могут возникнуть проблемы с правами доступа к файлам, поэтому я сделал так:


chmod -R 777 /var/www


Что бы начать работать с memorycoind из php я воспользовался библиотекой jsonRPCClient.php.

Вот пример её использования:


<?php

require_once 'jsonRPCClient.php';
$memorycoind = new jsonRPCClient('http://login:pass@127.0.0.1:1925/');

$difficulty = $memorycoind->getdifficulty();
echo sprintf("%.8f", $difficulty);

?>

Так мы выводим текущую сложность.

Логин и пароль здесь указываем тот что указали в memorycoin.conf.
Команды здесь все такие же как при работе с memorycoind через консоль.

Что бы узнать сложность 1000-го блока, делаем так:

$blockhash = $memorycoind->getblockhash(1000);
$getblock = $memorycoind->getblock($blockhash);
$diff = sprintf("%.8f", $getblock['difficulty']);


Здесь "sprintf("%.8f",..." делает красивый вывод дробного числа с 8 знаками после запятой.

Ещё в своём проекте я использовал запуск своего php-скрипта по планировщику.

sudo nano /etc/crontab

*/5 * * * * root php /var/www/anim.php

Это будет запускать скрипт каждые 5 минут. Конечно, пользователя, наверное, лучше указать другого, не root, а например www-data. В запускаемых скриптах пути к файлам стоит указывать полные, например: "/var/www/123.txt".



Получившийся сервис: http://agran.net/
Tags: записки сисадмина
Subscribe
  • Post a new comment

    Error

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 0 comments