Здравствуйте уважаемые пользователи! Сегодня я поделюсь с вами секретом, как я создавал игровые сервера с последующей сдачей в аренду. В данной теме я объясню как арендовать виртуальный сервер "VDS" (VDS — он же VPS — Virtual Dedicated(Private) сервер — виртуальная машина, сервер — нужен он, когда обычного хостинга мало, а выделенный сервер дорого), как его настроить и как начать зарабатывать деньги с умом. Так сложилось, что легче всего и без проблем у меня получилось работать толька с ОС Ubuntu, поэтому на протяжении всей статьи я буду использовать только ее. И так, приступим. Уверенно настраиваем себя на успех, и первым делом идем покупать наш будущий сервер. После покупки сервера сразу обращаемся в Тех Поддержку и просим установить нам на сервер Ubuntu - 12.04.1 LTS. Для работы я заранее советую использовать удобнейшую программку Bitvise SSH Client. Она отличается от стандартных ssh клиентов тем, что одновременно работая в консоли, мы можем одновременно в режиме проводника просматривать файлы сервера, папки, создавать, удалять, скачивать и закачивать файлы. Далее буду рассказывать про разные фичи, которые я настраивал на своем сервере, какие-то могут быть вам полезны. Так как подавляющее большинство выполняющихся далее команд требуют root привилегий, а я человек ленивый, то все действия я выполняю под рутом. Залогиниться сразу под рутом обычно нельзя, поэтому заходим под пользователем с правами sudo и выполняем команду sudo -s В этой части статьи мы установим и настроим веб-сервер, рассчитанный на большое количество соединений. Сначала установим стандартный «детский» набор пакетов для веб сервера. Код: aptitude update aptitude install mysql-server mysql-client libmysqlclient15-dev apache2 apache2-doc apache2-mpm-prefork apache2-utils libexpat1 ssl-certlibapache2-mod-php5 libapache2-mod-ruby php5 php5-common php5-curl php5-dev php5-gd php5-idn php-pear php5-imagick php5-imap php5-mcrypt php5-memcache php5-mhash php5-ming php5-mysql php5-pspell php5-recode php5-snmp php5-sqlite php5-tidy php5-xmlrpc php5-xsl phpmyadmin g++ Нас будут просить задать пароль от MySQL, потом спросят чем обрабатывать phpmyadmin — нужно ответить то апачем, и спросят пароль от MySQL для нужд phpmyadmin На момент написания статьи phpmyadmin автоматически не прописывался в конфигурации apache2, вследствие чего по адресу адрес_сайта.зона/phpmyadmin мы видим ошибку 404, поэтому открываем файл /etc/apache2/apache2.conf и в конец дописываем строчку Код: Include /etc/phpmyadmin/apache.conf Включаем модули apache2 Код: a2enmod include a2enmod rewrite a2enmod suexec a2enmod ssl Рисуем дефолтный конфиг апача. Для этого открываем /etc/apache2/sites-available/default стираем в этом файле все и пишем следующее: Код: <VirtualHost *:800> ServerAdmin твой@e-mail DocumentRoot /home/www/адрес_сайта.зона <Directory /> Options FollowSymLinks AllowOverride All </Directory> <Directory /home/www/> Options Indexes FollowSymLinks MultiViews AllowOverride All Order deny,allow deny from all allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride All Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch Order allow,deny Allow from all </Directory> ErrorLog /var/log/apache2/error.log # Possible values include: debug, info, notice, warn, error, crit, # alert, emerg. LogLevel crit CustomLog /var/log/apache2/access.log combined Alias /doc/ "/usr/share/doc/" <Directory "/usr/share/doc/"> Options Indexes MultiViews FollowSymLinks AllowOverride All Order deny,allow Deny from all Allow from 127.0.0.0/255.0.0.0 ::1/128 </Directory> </VirtualHost> То, что указан восьмисотый порт — это не ошибка, на стандартном для http восьмидесятом порту будет висеть nginx. Параметр DocumentRoot по неизвестным мне причинам большинство советуют указывать /var/www/…, на мой же взгляд логичнее держать важные данные в /home — проще будет настраивать резервное копирование. Правим файл /etc/apache2/ports.conf Код: NameVirtualHost *:800 Listen 800 Копируем файл /etc/apache2/sites-available/default в /etc/apache2/sites-enabled/адрес_сайта Директории и файлы с конфигами лучше называть по адресам сайтов т.к. в будущем это упростит поиск нужных конфигов\директорий, например /home/www/myserv.ru /etc/apache2/sites-enabled/myserv.ru Правим файл /etc/apache2/apache2.conf — меняем значение параметра MaxClients на 20, сделать это надо в двух местах. Прописываем репозиторий nginx, для этого откроем файл /etc/apt/sources.list и допишем в конец Код: deb http://nginx.org/packages/ubuntu/ precise nginx deb-src http://nginx.org/packages/ubuntu/ precise nginx • Устанавливаем nginx и apache2-mod-rpaf wget http://nginx.org/keys/nginx_signing.key apt-key add nginx_signing.key aptitude update aptitude install libapache2-mod-rpaf libpcre3 libpcre3-dev nginx Далее настроим nginx, для этого открываем файл /usr/local/etc/nginx/nginx.conf и заменяем содержимое следующим Код: user www-data; worker_processes 1; error_log /var/log/nginx/error.log; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include /etc/nginx/mime.types; default_type application/octet-stream; server_names_hash_bucket_size 64; access_log /var/log/nginx/access.log; sendfile on; #tcp_nopush on; #keepalive_timeout 0; keepalive_timeout 65; tcp_nodelay on; gzip on; gzip_proxied any; gzip_min_length 300; gzip_http_version 1.0; gzip_buffers 4 8k; gzip_comp_level 9; gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; } include /etc/nginx/conf.d/*.conf; include /etc/nginx/sites-enabled/*; в том случае если роль веб-сервера является основной ролью вашего сервера и\или сайты имеют большую посещаемость значение worker_processes выставляем равным количеству доступных ядер ЦП, в противном случае одного процесса будет вполне достаточно создаем конфиг для нашего сайта /etc/nginx/sites-enabled/адрес_сайта.зона Код: server { listen 80; server_name адрес_сайта.зона; access_log /var/log/nginx.access_log; location ~* \.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|xls|exe|pdf|ppt|tar|wav|bmp|rtf|swf|ico|flv|txt|xml|docx|xlsx|mp3|bsp)$ { root /home/www/адрес_сайта.зона/; index index.php index.html index.htm; access_log off; expires 30d; } location ~ /\.ht { deny all; } location / { proxy_pass http://127.0.0.1:800/; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-for $remote_addr; proxy_set_header Host $host; proxy_connect_timeout 60; proxy_send_timeout 90; proxy_read_timeout 90; proxy_redirect off; proxy_set_header Connection close; proxy_pass_header Content-Type; proxy_pass_header Content-Disposition; proxy_pass_header Content-Length; } } устанавливаем memcached, никаких дополнительных настроек для него не требуеся Код: aptitude install memcached устанавливаем eAccelerator Код: aptitude install php5-dev aptitude install make cd /tmp/ wget https://github.com/downloads/eaccelerator/eaccelerator/eaccelerator-0.9.6.1.tar.bz2 tar xvjf eaccelerator-0.9.6.1.tar.bz2 cd eaccelerator-0.9.6.1 теперь, прежде чем мы скомпилируем eAccelerator, поправим один баг в коде, из за которого возникают всяческие проблемы, например перестает работать авторизация в phpmyadmin. Откроем файл eaccelerator.c, строка 867. Заменим Код: if (php_check_open_basedir(realname TSRMLS_CC)) { на Код: if (php_check_open_basedir(p->realfilename TSRMLS_CC)) { Сохраняемся и продолжаем… Код: phpize ./configure --enable-eaccelerator=shared make make install Создаем папку для кэша, и даем на нее права Код: mkdir -p /var/cache/eaccelerator chmod 0777 /var/cache/eaccelerator Настраиваем php для работы с eaccelerator, для этого откроем файл /etc/php5/apache2/php.ini и допишем сверху Код: [PHP] extension = "eaccelerator.so" eaccelerator.shm_size = "16" eaccelerator.cache_dir = "/var/cache/eaccelerator" eaccelerator.enable = "1" eaccelerator.optimizer = "1" eaccelerator.check_mtime = "1" eaccelerator.debug = "0" eaccelerator.filter = "" eaccelerator.shm_max = "0" eaccelerator.shm_ttl = "0" eaccelerator.shm_prune_period = "0" eaccelerator.shm_only = "0" eaccelerator.compress = "1" eaccelerator.compress_level = "9" eaccelerator.allowed_admin_path = "/var/www/eaccelerator" Перезапускаем сервисы, убедившись что в /home/www/имя_сайта лежит сайт Код: service apache2 restart service nginx restart service memcached restart Теперь мы имеем достаточно шустрый веб-сервер, который потребляет меньше 100Мб оперативной памяти. Todo: Есть один недочет – phpmyadmin, который доступен по адресу адрес_сайта.зона/phpmyadmin отображается некрасиво(без картинок), временное решение, которое я могу предложить – открывать phpmyadmin по адресу адрес_сайта.зона:800/phpmyadmin Установка FTP сервера pure-ftpd с поддержкой MySQL ФТП сервер пригодиться нам для простого и быстрого и удобного переноса информации с сервера и на сервер. Устанавливаем pure-ftpd с поддержкой mysql Код: aptitude install pure-ftpd-mysql Создаем группу для пользователей ftp и пользователя в ней – это делается для того чтобы впоследствии было удобней следить за тем, что происходит на вашем сервере. Код: groupadd -g 4001 ftpusers && useradd -u 4001 -s /bin/false -d /bin/null -c "pureftpd user" -g ftpusers ftp Создадим базу данных в MySQL для pure-ftpd. Это можно сделать и через phpmyadmin, но великим и могучим копипастом это быстрее сделать в консоли Код: mysql -u root –p CREATE DATABASE pureftpd; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP ON pureftpd.* TO 'pureftpd'@'localhost' IDENTIFIED BY 'пароль_для_pureftpd'; FLUSH PRIVILEGES; Создадим таблицу, в которой будут храниться учетные записи фтп. Код: USE pureftpd; CREATE TABLE ftpd ( User varchar(16) NOT NULL default '', status enum('0','1') NOT NULL default '0', Password varchar(64) NOT NULL default '', Uid varchar(11) NOT NULL default '-1', Gid varchar(11) NOT NULL default '-1', Dir varchar(128) NOT NULL default '', ULBandwidth smallint(5) NOT NULL default '0', DLBandwidth smallint(5) NOT NULL default '0', comment tinytext NOT NULL, ipaccess varchar(15) NOT NULL default '*', QuotaSize smallint(5) NOT NULL default '0', QuotaFiles int(11) NOT NULL default 0, PRIMARY KEY (User), UNIQUE KEY User (User) ) ENGINE=MyISAM; quit; Теперь настроим pure-ftpd, для этого откроем файл /etc/pure-ftpd/db/mysql.conf и сделаем его содержание таким: Код: MYSQLSocket /var/run/mysqld/mysqld.sock MYSQLUser pureftpd MYSQLPassword пароль_для_pureftpd MYSQLDatabase pureftpd MYSQLCrypt md5 MYSQLGetPW SELECT Password FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetUID SELECT Uid FROM ftpd WHERE User="\L" AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetGID SELECT Gid FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MYSQLGetDir SELECT Dir FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthUL SELECT ULBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetBandwidthDL SELECT DLBandwidth FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTASZ SELECT QuotaSize FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R") MySQLGetQTAFS SELECT QuotaFiles FROM ftpd WHERE User="\L"AND status="1" AND (ipaccess = "*" OR ipaccess LIKE "\R")[code] [LIST] [*]Теперь сделаем так, чтобы домашняя директория пользователя автоматически создавалась если она не существует [/LIST] [code]echo "yes" > /etc/pure-ftpd/conf/CreateHomeDir Следующая команда не даст пользователям доступа к директориям, которые выше чем их домашний каталог. Код: echo "yes" > /etc/pure-ftpd/conf/ChrootEveryone И наконец отключим проверку хостнеймов пользователей – это значительно ускорит процесс авторизации и немного сократит количество трафика. Код: echo "yes" > /etc/pure-ftpd/conf/DontResolve Перезапустим сервис чтобы применить настройки Код: service pure-ftpd-mysql restart Теперь создадим пользователя www-ftp с GID и UID 4002, домашней директорией /home/www лимитами скорости загрузки\отдачи по одному мегабайту в секунду и без ограничений по занимаемому дисковому пространству. Приведу пример с использованием командной строки, вы же можете использовать и «выполнить SQL-запрос» в phpmyadmin, или даже воспользоваться «добавить строки» в phpmyadmin – но в этом случае нужно не прошляпить то, что пароль в БД храниться в виде его md5 хеша, и в поле password выбрать «Функция» md5 Код: mysql -u root -p USE pureftpd; INSERT INTO `ftpd` (`User`, `status`, `Password`, `Uid`, `Gid`, `Dir`, `ULBandwidth`, `DLBandwidth`, `comment`, `ipaccess`, `QuotaSize`, `QuotaFiles`) VALUES ('www-ftp', '1', MD5('пароль_для_пользователя_www-ftp'), '4002', '4002', '/home/www', '1024', '1024', 'Комментарий', '*', '0', '0'); quit; Вот и все, можно пробовать подключаться к вашему фтп серверу по адресу адрес_сайта.зона c логином www-ftp и указанным паролем. Если вы собираетесь передавать по протоколу ФТП данные, которые не должны попасть в чужие руки, то не лишним будет настроить TLS шифрование. Для этого выполним следующее: Код: echo 1 > /etc/pure-ftpd/conf/TLS mkdir -p /etc/ssl/private/ Устанавливаем пакет openssl, если он не установлен и генерируем сертификат. Код: aptitude update aptitude install openssl openssl req -x509 -nodes -days 3652 -newkey rsa:2048 -keyout /etc/ssl/private/pure-ftpd.pem -out /etc/ssl/private/pure-ftpd.pem Отвечаем на вопросы – эти данные будут отображаться в созданном сертификате. Устанавливаем права доступа на сертификат и перезапускаем pure-ftpd Код: chmod 600 /etc/ssl/private/pure-ftpd.pem service pure-ftpd-mysql restart Вот и все. Помните, что для того чтобы данные шифровались необходимо включить tls шифрование со стороны клиента, и далеко не все фтп клиенты поддерживают его. Установка комплекса управления игровыми серверами – Open Game Panel Open game panel – он же OGP — единственное из мною найденных бесплатное решение, которое позволяет осуществлять мониторинг и управление разнообразными игровыми серверами. На момент написания статьи поддерживаются более 50 разных игр с серверами на платформах Windows и Linux. В том числе такие популярные как Counter-Strike (2D, 1.5, 1.6, Source, GO) и Minecraft( Vanilla, Bukkit) Состоит комплекс из двух частей – веб-морды, через которую осуществляется мониторинг и управление(фронтэнд) и агента – сервиса, который висит на машинах с игровыми серверами и передает логи в фронтэнд, а команды из фронэнда игровым серверам. Первым делом регистрируемся на http://www.opengamepanel.org – для установки это не обязательно, но на сайте можно скачать дополнительные модули(например систему биллинга), темы и прочие плюшки. Устанавливаем необходимые пакеты Код: aptitude update aptitude install libxml-parser-perl libpath-class-perl libarchive-any-perl screen/[code] [LIST] [*]Если система x64, то дополнительно устанавливаем ia32-libs [/LIST] [code]aptitude install ia32-libs Скачиваем сам агент Код: wget "http://www.opengamepanel.org/downloads/ogp_agent_nightly.tar.gz" -O agent.tar.gz tar xf agent.tar.gz cd agent Устанавливаем. Внимание – я предварительно создал пользователя в системе, включил его в группы root и sudo и создал ему домашний каталог – это все необходимо для того чтобы агент корректно работал. Код: bash ./install.sh У нас будут спрашивать имя пользователя под которым будет крутиться сервис – нужно указать того, про которого я говорил в предыдущем пункте, его пароль, директорию в которой будут находиться исполняемые файлы(/home/имя пользователя/OGP) и попросят ввести ключ агента – это не пароль пользователя, а ключ управления агентом, он нам пригодится позже, и еще нас попросят согласиться с правилами политики Steam. После установки залогиниваемся под созданным пользователем и запускаем Код: cd /home/имя пользователя/OGP perl ./ogp_agent.pl --log-stdout Нам должны написать что все в порядке, процесс запущен и слушает на 12679 порту. Нажимаем ctrl+c, логинимся под рутом и прописываем – это нужно для того чтобы сервис стартовал при запуске ситемы Код: update-rc.d ogp_agent defaults Если серверов (выделенных или виртуальных) несколько, то агент необходимо установить на каждом Теперь установим веб-интерфейс от OGP, скачиваем архив и распаковываем Код: wget "http://www.opengamepanel.org/downloads/ogp_web_nightly.tar.gz" -O upload.tar.gz tar xf upload.tar.gz Перемещаем содержимое папки upload в папку, в которой у нас лежит сайт В браузере открываем адрес_сайта.зона/папка_с_ogp/ и выбираем язык, если вдруг насм говорят что не хватает прав на создание каких-либо файлов или папок то выдаем права 777 chmodом, для этого зайдем в папку с ogp и выполним команду. Код: chmod 777 –v –R * Возвращаемся в веб-интерфейс и нажимаем «Повторить», потом «Дальше» Указываем параметры подключения к БД и нажимаем «Дальше» Регистрируем учетную запись администратора и нажимаем «Дальше»• Далее следуем инструкциям, возможно в следующей статья я опишу процесс добавления серверов в OGP