И так вы только что приобрели себе VDS, с доступным VDSManager'ом. Уже установленная операционная система не важна - список операционных систем в самом VDSManager'е обычно куда больше чем предлагают на сайте. Первым делом зайдём в VDSManager и установим ту систему, которую нам надо - в нашем случае Debian 6 (почему-то его не могут поставить сразу, криворукие админы всегда ставят 5, ну или у них там заранее заложенный скрипт под Debian 5…)
Длительность переустановки системы - около 10 секунд.
Затем логинимся по ssh, и начинаем вводить команды.
Для начала зададим переменные для простоты установки и настройки:
NGINX_VERSION="1.0.5"
PHP_VERSION="5.3.8"
MYSQL_SERVER_PORT="15432"
PHP_FPM_PORT="15001"
PHP_FPM_USER="www-data"
PHP_FPM_GROUP="www-data"
PHP_FPM_ALLOWED="127.0.0.1"
Переходим в opt:
cd /opt
Обновляем пакетарий:
echo "deb-src http://mirror.yandex.ru/debian/ squeeze main contrib non-free" >> /etc/apt/sources.list
echo "deb-src http://mirror.yandex.ru/debian-security/ squeeze/updates main contrib non-free" >> /etc/apt/sources.list
echo "deb http://packages.dotdeb.org stable all" >> /etc/apt/sources.list
echo "deb-src http://packages.dotdeb.org stable all" >> /etc/apt/sources.list
wget http://www.dotdeb.org/dotdeb.gpg
cat dotdeb.gpg | apt-key add -
gpg –keyserver hkp://subkeys.pgp.net –recv-keys 07DC563D1F41B907
gpg –export | apt-key add -
apt-get update
rm dotdeb.gpg
Устанавливаем всякие пакеты, которые нам пригодятся:
apt-get -y install htop zlibc zlib-bin zlib-gst zlib1g zlib1g-dev aptitude gcc libc6-dev zip ruby libpcre3 libpcre3-dev openssl libcrypt-openssl-rsa-perl libcurl4-openssl-dev curl build-essential ffmpeg libxml2 libxml2-dev libsqlite-dev libmysqlclient-dev libgd2-xpm libgd2-xpm-dev libmagick-dev libmcrypt-dev autoconf
Они в свою очередь вытянут еще огромную кучу пакетов на все случаи жизни =)
Переходим к установке mysql:
apt-get -y install mysql-server mysql-client
Ждем графического окна и вбиваем туда пароль от свежего mysql-сервера, затем настраиваем сервер:
printf "# The following options will be passed to all MySQL clients\n[client]\nport = ${MYSQL_SERVER_PORT}\nsocket = /var/run/mysqld/mysqld.sock\n\n# The MySQL server\n[mysqld]\nport = ${MYSQL_SERVER_PORT}\nsocket = /var/run/mysqld/mysqld.sock\nskip-locking\nskip-innodb\nkey_buffer_size = 16K\nmax_allowed_packet = 1M\ntable_open_cache = 4\nsort_buffer_size = 64K\nread_buffer_size = 256K\nread_rnd_buffer_size = 256K\nnet_buffer_length = 2K\nthread_stack = 128K\nserver-id = 1\n\n[mysqldump]\nquick\nmax_allowed_packet = 16M\n\n[mysql]\nno-auto-rehash\n\n[myisamchk]\nkey_buffer_size = 4M\nsort_buffer_size = 4M\n\n[mysqlhotcopy]\ninteractive-timeout\n" > /etc/my.cnf
/etc/init.d/mysql restart
Эта настройка для слабых VDS, отличается от my-small.cnf лишь отключенным InnoDB (skip-innodb) и уменьшенным буфером myisamchk.
Удаляем ненужный нам apache2:
/etc/init.d/apache2 stop
apt-get -y remove apache2
rm /etc/init.d/apache2
rm -r -f /etc/apache2
rm -r -f /usr/share/apache2
update-rc.d apache2 remove
И устанавливаем nginx (выполняйте команды по очереди):
wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz
tar zxvf *
cd nginx*
./configure –with-http_ssl_module –with-http_gzip_static_module –with-http_realip_module
make
make install
cd ..
rm -r -f nginx*
printf "#! /bin/sh\n \n### BEGIN INIT INFO\n# Provides: nginx\n# Required-Start: \$all\n# Required-Stop: \$all\n# Default-Start: 2 3 4 5\n# Default-Stop: 0 1 6\n# Short-Description: starts the nginx web server\n# Description: starts nginx using start-stop-daemon\n### END INIT INFO\n \nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\nDAEMON=/usr/local/nginx/sbin/nginx\nNAME=nginx\nDESC=nginx\n \ntest -x \$DAEMON || exit 0\n \n# Include nginx defaults if available\nif [ -f /etc/default/nginx ] ; then\n. /etc/default/nginx\nfi\n \nset -e\n \ncase \"\$1\" in\nstart)\necho -n \"Starting server: \"\nstart-stop-daemon –start –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec \$DAEMON – \$DAEMON_OPTS\necho \"ok.\"\n;;\nstop)\necho -n \"Stopping server: \"\nstart-stop-daemon –stop –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec \$DAEMON\necho \"ok.\"\n;;\nrestart|force-reload)\necho -n \"Restarting server: \"\nstart-stop-daemon –stop –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec \$DAEMON\nsleep 1\nstart-stop-daemon –start –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec \$DAEMON – \$DAEMON_OPTS\necho \"ok.\"\n;;\nreload)\necho -n \"Reloading server configuration: \"\nstart-stop-daemon –stop –signal HUP –quiet –pidfile /usr/local/nginx/logs/nginx.pid –exec \$DAEMON\necho \"ok.\"\n;;\n*)\nN=/etc/init.d/\$NAME\necho \"Usage: \$N {start|stop|restart|force-reload}\" >&2\nexit 1\n;;\nesac\n \nexit 0" > /etc/init.d/nginx
chmod 755 /etc/init.d/nginx
update-rc.d nginx defaults
mkdir /srv/www
printf "# another virtual host using mix of IP-, name-, and port-based configuration\n#\n#server {\n# listen 8000;\n# listen somename:8080;\n# server_name somename alias another.alias;\n\n# location / {\n# root html;\n# index index.html index.htm;\n# }\n#}\n\n\n# HTTPS server\n#\n#server {\n# listen 443;\n# server_name localhost;\n\n# ssl on;\n# ssl_certificate cert.pem;\n# ssl_certificate_key cert.key;\n\n# ssl_session_timeout 5m;\n\n# ssl_protocols SSLv2 SSLv3 TLSv1;\n# ssl_prefer_server_ciphers on;\n\n# location / {\n# root html;\n# index index.html index.htm;\n# }\n#}" > /srv/www/sites.cfg
mkdir /srv/www/default
echo "<h1>Nginx works</h1>" > /srv/www/default/index.html
echo "<?php phpinfo(); ?>" > /srv/www/default/phpinfo.php
printf "user ${PHP_FPM_USER};\nworker_processes 4;\n\nevents {\n worker_connections 20000;\n}\n\nhttp {\n include mime.types;\n default_type application/octet-stream;\n sendfile on;\n keepalive_timeout 0;\n\n server {\n listen 80;\n server_name localhost;\n\n charset utf-8;\n\n location / {\n root /srv/www/default;\n index index.html index.htm;\n }\n\n error_page 500 502 503 504 /50x.html;\n location = /50x.html\n {\n root html;\n }\n\n location ~ \\.php\$ {\n root /srv/www/default;\n fastcgi_pass 127.0.0.1:${PHP_FPM_PORT};\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME /srv/www/default\$fastcgi_script_name;\n include fastcgi_params;\n }\n \n }\n \n include /srv/www/sites.cfg;\n\n}\n" > /usr/local/nginx/conf/nginx.conf
Теперь таким же образом собираем и настраиваем php-fpm, с необходимыми нам модулями:
wget http://www.php.net/get/php-${PHP_VERSION}.tar.gz/from/ru.php.net/mirror
tar zxvf *
cd php*
./configure –enable-fpm –with-mcrypt –with-zlib –enable-mbstring –with-curl –disable-debug –disable-rpath –enable-inline-optimization –enable-sockets –enable-sysvsem –enable-sysvshm –enable-pcntl –enable-mbregex –with-mhash –enable-zip –with-pcre-regex –with-gd –with-mysqli
make
make install
cd ..
rm -r -f php*
printf "[global]\n\nrlimit_files = 20000\nrlimit_core = 0\n\n[www]\n\nlisten = 127.0.0.1:${PHP_FPM_PORT}\nlisten.allowed_clients = ${PHP_FPM_ALLOWED}\nuser = ${PHP_FPM_USER}\ngroup = ${PHP_FPM_GROUP}\npm = dynamic\npm.max_children = 50\npm.min_spare_servers = 5\npm.max_spare_servers = 35\nrlimit_files = 20000\nrlimit_core = 0\n" > /usr/local/etc/php-fpm.conf
printf "#! /bin/sh\n\n### BEGIN INIT INFO\n# Provides: php-fpm\n# Required-Start: \$all\n# Required-Stop: \$all\n# Default-Start: 2 3 4 5\n# Default-Stop: 0 1 6\n# Short-Description: starts the php-fpm server\n# Description: starts php-fpm using start-stop-daemon\n### END INIT INFO\n \nPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin\nDAEMON=/usr/local/sbin/php-fpm\nNAME=php-fpm\nDESC=php-fpm\n\ntest -x \$DAEMON || exit 0\n\ncase \"\$1\" in\n start)\n echo -n \"Starting \$DESC: \"\n start-stop-daemon –start –quiet –pidfile /var/run/\$NAME.pid –exec \$DAEMON – \$DAEMON_OPTS\n echo \"\$NAME.\"\n ;;\n stop)\n echo -n \"Stopping \$DESC: \"\n start-stop-daemon –stop –quiet –pidfile /var/run/\$NAME.pid –exec \$DAEMON\n echo \"\$NAME.\"\n ;;\n restart|force-reload)\n echo -n \"Restarting \$DESC: \"\n start-stop-daemon –stop –quiet –pidfile /var/run/\$NAME.pid –exec \$DAEMON\n sleep 1\n start-stop-daemon –start –quiet –pidfile /var/run/\$NAME.pid –exec \$DAEMON – \$DAEMON_OPTS\n echo \"\$NAME.\"\n ;;\n reload)\n echo -n \"Reloading \$DESC configuration: \"\n start-stop-daemon –stop –signal HUP –quiet –pidfile /var/run/\$NAME.pid –exec \$DAEMON\n echo \"\$NAME.\"\n ;;\n *)\n N=/etc/init.d/\$NAME\n echo \"Usage: \$N {start|stop|restart|force-reload}\" >&2\n exit 1\n ;;\nesac\n \nexit 0" > /etc/init.d/php-fpm
chmod 755 /etc/init.d/php-fpm
update-rc.d php-fpm defaults
printf "date.timezone = 'Europe/Moscow'\nmysqli.default_port = ${MYSQL_SERVER_PORT}\nmagic_quotes_gpc = Off\nmagic_quotes_runtime = Off\nmagic_quotes_sybase = Off" > /usr/local/lib/php.ini
И наконец запускаем сервера:
/etc/init.d/php-fpm start
/etc/init.d/nginx start
IMAGICK_VERSION="6.7.1-9"
wget ftp://ftp.imagemagick.org/pub/ImageMagick/ImageMagick-${IMAGICK_VERSION}.zip
unzip ImageMagick-${IMAGICK_VERSION}.zip
cd Image*
./configure
make
make install
cd ..
rm -r -f ImageMagick*
pecl install imagick
echo "extension=php_imagick.so" >> /usr/local/lib/php.ini