ФорумПрограммированиеПыхнуть хотите?F.A.Q. → Установка mysql-server, nginx, php-fpm на vds с debian 6 с нуля

Установка mysql-server, nginx, php-fpm на vds с debian 6 с нуля

  • Ivan

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 30 августа 2011 г. 1:35, спустя 6 дней 20 часов 22 минуты

    Мини-фак расчитанный на новичков

    И так вы только что приобрели себе 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 &quot;<h1>Nginx works</h1>&quot; > /srv/www/default/index.html
    echo &quot;<?php phpinfo(); ?>&quot; > /srv/www/default/phpinfo.php

    printf &quot;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&quot; > /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 &quot;[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&quot; > /usr/local/etc/php-fpm.conf

    printf &quot;#! /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 \&quot;\$1\&quot; in\n  start)\n        echo -n \&quot;Starting \$DESC: \&quot;\n        start-stop-daemon –start –quiet –pidfile /var/run/\$NAME.pid –exec \$DAEMON – \$DAEMON_OPTS\n        echo \&quot;\$NAME.\&quot;\n        ;;\n  stop)\n        echo -n \&quot;Stopping \$DESC: \&quot;\n        start-stop-daemon –stop –quiet –pidfile /var/run/\$NAME.pid –exec \$DAEMON\n        echo \&quot;\$NAME.\&quot;\n        ;;\n  restart|force-reload)\n        echo -n \&quot;Restarting \$DESC: \&quot;\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 \&quot;\$NAME.\&quot;\n        ;;\n  reload)\n      echo -n \&quot;Reloading \$DESC configuration: \&quot;\n      start-stop-daemon –stop –signal HUP –quiet –pidfile /var/run/\$NAME.pid –exec \$DAEMON\n      echo \&quot;\$NAME.\&quot;\n      ;;\n  *)\n        N=/etc/init.d/\$NAME\n        echo \&quot;Usage: \$N {start|stop|restart|force-reload}\&quot; >&amp;2\n        exit 1\n        ;;\nesac\n \nexit 0&quot; > /etc/init.d/php-fpm

    chmod 755 /etc/init.d/php-fpm
    update-rc.d php-fpm defaults
    printf &quot;date.timezone = &#39;Europe/Moscow&#39;\nmysqli.default_port = ${MYSQL_SERVER_PORT}\nmagic_quotes_gpc = Off\nmagic_quotes_runtime = Off\nmagic_quotes_sybase = Off&quot;  > /usr/local/lib/php.ini


    И наконец запускаем сервера:
    /etc/init.d/php-fpm start
    /etc/init.d/nginx start
    {+++224+++} Установка ImageMagick:
    IMAGICK_VERSION=&quot;6.7.1-9&quot;
    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 &quot;extension=php_imagick.so&quot; >> /usr/local/lib/php.ini
  • Ivan

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 24 августа 2011 г. 6:40, спустя 5 часов 4 минуты 49 секунд

    ___
  • Sinkler

    Сообщения: 9658 Репутация: N Группа: в ухо

    Spritz 23 августа 2011 г. 5:04, спустя 22 часа 24 минуты 31 секунду

    дайте ему адеквата, пусть отредактирует))) {+++78+++} а че, у ферствдса уже нет фрибсд?
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 23 августа 2011 г. 5:13, спустя 8 минут 35 секунд

    Да, челу как минимум адеквата надо!
    adw/0
  • Ivan

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 30 августа 2011 г. 1:43, спустя 6 дней 20 часов 30 минут

    Альтернативный вариант конфигурации php, для поддержки MySQL (та конфигурация держит только mysqli), PDO_MySQL, LibJPEG, LibPNG, FreeType:
    ./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 –with-mysql –with-jpeg-dir=/usr/lib –with-png-dir=/usr/lib –with-freetype-dir=/usr/lib –enable-gd-native-ttf –with-pdo-mysql –with-mysql-sock
  • adw0rd

    Сообщения: 22902 Репутация: N Группа: в ухо

    Spritz 30 августа 2011 г. 2:50, спустя 1 час 7 минут 9 секунд

    И да, по традиции ссылку от меня http://adw0rd.ru/tag/php-fpm/
    adw/0
  • Ivan

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 4 декабря 2011 г. 7:27, спустя 96 дней 5 часов 36 минут

    http://dev.mysql.com/doc/refman/5.6/en/innodb-default-se.html
    InnoDB теперь дефолтный сторейдж енджин, поэтому конфиг приведенный выше не сработает и даже врядли даст откатится до 5.1, поэтому учимся конфигурировать InnoDB и забиваем окончательно на MYISAM в своих проектах
  • Ivan

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 4 декабря 2011 г. 8:13, спустя 46 минут 47 секунд

    default-storage-engine=MyISAM
    skip-innodb


    вставляем в секцию mysqld если нужно отключить innodb
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 4 декабря 2011 г. 12:20, спустя 4 часа 6 минут 44 секунды

    тек-с, а как поставить рядышком 2 версии пыхи: 5.2 и 5.3?
    и как сделать, что б разные сайты работали под разными пользователями?
  • Ivan

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 4 декабря 2011 г. 14:18, спустя 1 час 57 минут 46 секунд


    тек-с, а как поставить рядышком 2 версии пыхи: 5.2 и 5.3?

    если ты про фпм, то вероятно стоит одну версию повешать на один порт, другую на другой
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 4 декабря 2011 г. 14:20, спустя 1 минуту 50 секунд

    ну допустим, а с пользователями как?)
  • Ivan

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 4 декабря 2011 г. 14:28, спустя 8 минут 47 секунд

    –with-config-file-path=PATH
       Sets the path in which to look for php.ini.

    Еще после конфигура смотри Makefile, там должны быть установочные пути

    это я все к первому вопросу {+++190+++}

    ну допустим, а с пользователями как?)


    Вопрос нафига это тебе надо?
    Ну самый простой вариант, приходящий в голову - у одного фпм один юзер, у другого другой. {+++76+++} Или несколько nginx&#39;ов запустить, тоже вариант, но слегка несерьезный
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 4 декабря 2011 г. 14:38, спустя 9 минут 37 секунд

    Оо, та не, это вообще пиздец лютый


    для секьюрности. У меня несколько сайтов на сервере
  • Ivan

    Сообщения: ? Репутация: N Группа: Адекваты

    Spritz 4 декабря 2011 г. 15:07, спустя 28 минут 50 секунд


    Оо, та не, это вообще пиздец лютый

    для секьюрности. У меня несколько сайтов на сервере


    Спроси адворда может он знает?
  • Абырвалг

    Сообщения: 6477 Репутация: N Группа: Джедаи

    Spritz 4 декабря 2011 г. 15:09, спустя 2 минуты 4 секунды

    /cc @adword

    эх, жаль в текущей пыхе нельзя призывать людей в топик

Пожалуйста, авторизуйтесь, чтобы написать комментарий!