nginx magento ssl postfix — сервер и магазин своими руками

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

    Но в основном было нытье, типа — я умнее тебя ты работаешь не правильно, конфиг не пацанский… никто так и не сказал как и что поправить, где сделать правильнее и по другому, какие еще есть возможности конфигурации, и тд. да и heck с ним, у всех свои взгляды, я это принимаю.
    Все же кто то взял себе на заметку, ну а кто-то прошёл мимо.
    Почему я пишу об этом? Есть сайты, форумы со списками рассылок, есть много мануалов, но, люди продолжают сходить с ума в поисках нормального пояснения установок и настроек. Платят другим горе специалистам, а те ставят все криво и не полные конфиги, без оптимизации. А если нет разницы — зачем платить больше (с)??? Любой человек хотел бы настроить свой сервер и поставить магазин, и для начала ему нужен старт, показать, что это очень просто, что можно сэкономить на начале, потом, когда все заработает, уже задуматься — а всели так сложно? а могу ли я дальше все делать сам? сделать еще лучше поднабравшись опыта? Да все можно сделать самому. Не даром старая мудрость гласит — хочешь чтобы было хорошо, сделай все сам!

    Чтобы не писать порожняком, будем конкретно делать установку и запуск сервера для магазина, под управлением — МАГЕНТО 1.4.0.1


    =============================================================================

    порылся по нету, и нашел интересный сайтик и репозиторий с последними версиями пакетов для Сентос 5.
    вот само хранилище:
    centos.alt.ru/pub/repository/centos/5/i386

    Установка репозитория


    Репозиторий CentALT требует для своей работы подключенного репозитория EPEL.
    Установка производится также как и всегда:

    1. Устанавливаем epel репозиторий.
    rpm -ihv download.fedora.redhat.com/pub/epel/5/i386/epel-release-5-3.noarch.rpm

    2. Устанавливаем CentALT репозиторий.
    rpm -ihv centos.alt.ru/repository/centos/5/i386/centalt-release-5-3.noarch.rpm

    и далее конец строки подразумевает нажатие -enter- :)

    Смотрим что можно и нужно обновить:


    # yum list updates
    # yum update

    Смотрим что установлено


    # rpm -qa
    # yum list installed

    Устанавливаем нужное ПО:



    # yum install nginx
    # yum install php-fpm php-mysql php-gd php-mcrypt php-dom
    # yum install mysql-server
    # yum install openssl
    # yum install vsftpd
    # yum install postfix dovecot
    # yum install phpmyadmin
    # yum update

    Включаем автостарт сервисов:



    # /sbin/chkconfig nginx on
    # /sbin/chkconfig mysqld on
    # /sbin/chkconfig php-fpm on
    # /sbin/chkconfig dovecot on

    # /etc/init.d/sendmail stop
    # /sbin/chkconfig sendmail off

    Теперь нам нужно удалить установленный пакет sendmail:
    # yum remove sendmail

    # /sbin/chkconfig postfix on
    # /etc/init.d/postfix start

    линкуем phpMyAdmin в нашу рабочую директорию
    # find / -name 'phpmyadmin*'
    # ln -s /usr/share/phpMyAdminверсия? /var/www/html/phpmyadmin

    Если нужно использовать ssl, генерируем запрос на сертификат и ключ сервера:



    фишка вся в том, что сейчас можно получить сертификат совершенно бесплатно, у вашего хостера или регистратора доменов должна быть партнерка с COMODO, при при покупке домена или сервера дают сертификат.

    # cd
    # openssl req -nodes -newkey rsa:1024 -keyout myserver.key -out server.csr

    server.csr — > заполнив, ответив на все вопросы,

    support.comodo.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=3&nav=0,96,1

    Country Name (2 letter code) [AU]:
    State or Province Name (full name) [Some-State]:
    Locality Name (eg, city) []:
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:
    Organizational Unit Name (eg, section) []: IT
    Common Name (eg, YOUR name) []: www.mysite.com
    Email Address []:

    A challenge password []:
    An optional company name []:

    открываем файл и отправляем данные через
    специальную форму у провайдера на выдачу сертификата.

    далее получив от провайдера все нужные сертификаты, складываем их все в один bundle:
    посмотрите инструкцию
    # support.comodo.com/index.php?_m=knowledgebase&_a=viewarticle&kbarticleid=1209

    кидаем все в рут директорию, например.

    затем все это двигаем в папку откуда nginx будет все читать https для запросов
    # mkdir /etc/nginx/cert
    # cd
    # mv myserver.key /etc/nginx/cert/
    # mv bundle.crt /etc/nginx/cert/

    Конфигурируем nginx (файл /etc/nginx/nginx.conf).


    # В данном примере магазин расположен по пути / в папке /var/www/html/.
    # для php используется PHP-FPM подключенный через unix socket.

    ### config starts ###<br/>
     <br/>
    # USER - Директива задаёт пользователя и группу, с правами которого будут работать рабочие процессы. <br/>
    # Если группа не задана, то используется группа, имя которой совпадает с именем пользователя.<br/>
    user nginx;<br/>
     <br/>
    # число рабочих процессов.<br/>
    worker_processes 1;<br/>
     <br/>
    error_log /var/log/nginx/error.log;<br/>
     <br/>
    # файл, в котором хранится номер процесса.<br/>
    pid /var/run/nginx.pid;<br/>
    <br/>
    events {<br/>
    worker_connections 1024;<br/>
    }<br/>
     <br/>
    http {<br/>
    # include - включить в конфигурацию другой файл. Файл должен содержать синтаксически законченные директивы и блоки.<br/>
    include /etc/nginx/mime.types;<br/>
    default_type application/octet-stream;<br/>
     <br/>
    # лог заходов только на время теста<br/>
    # configure log format<br/>
    # log_format main '$remote_addr - $remote_user [$time_local] '<br/>
    #                  '"$request" $status  $body_bytes_sent "$http_referer" '<br/>
    #                  '"$http_user_agent" "$http_x_forwarded_for"';<br/>
    # access_log /var/log/nginx/access.log main;<br/>
    # лог заходов только на время теста<br/>
     <br/>
    # передавать заголовок ответа и начало файла в одном пакете в Linux и во FreeBSD 4.x.<br/>
    # передавать файл в полных пакетах. <br/>
    tcp_nopush            on;<br/>
    # состояние keep-alive.<br/>
    # если ненужно следить за действиями клиента (движение мышкой, интерактив) <br/>
    tcp_nodelay          off;<br/>
     <br/>
    sendfile on# использовать sendfile().<br/>
    keepalive_timeout 65;# соединение с клиентом не будет закрыто со стороны сервера.<br/>
     <br/>
    # Модуль ngx_http_gzip_module - это фильтр, сжимающий ответ методом gzip, что позволяет уменьшить размер передаваемых данных в 2 и более раз.<br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_gzip_module.html <br/>
    gzip on# Разрешает сжатие ответа методом gzip. <br/>
    gzip_proxied any; # разрешить сжатие для всех проксированных запросов.<br/>
    # сжатие ответа методом gzip для указанных MIME-типов в дополнение к "text/html". "text/html" сжимается всегда!<br/>
    gzip_types text/plain text/css application/x-javascript text/xml application/xml application/xml+rss text/javascript; <br/>
    gzip_http_version    1.1;<br/>
     <br/>
    # Директива задаёт таймаут при чтении ответа FastCGI-сервера.<br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html<br/>
    fastcgi_connect_timeout 300;<br/>
    fastcgi_send_timeout 300;<br/>
    fastcgi_read_timeout 300;<br/>
    # Директива задаёт размер буфера, в который будет читаться первая часть ответа, получаемого от FastCGI-сервера.<br/>
    fastcgi_buffer_size 64k;<br/>
    # Директива задаёт число и размер буферов для одного соединения, в которые будет читаться ответ, получаемый от FastCGI-сервера.<br/>
    fastcgi_buffers 4 64k;<br/>
     <br/>
    # fastcgi nodes<br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_upstream.html#upstream<br/>
    # Директива описывает группу серверов.<br/>
    upstream backend {<br/>
    server unix:/tmp/fcgi.sock; # в виде пути unix сокета<br/>
    }<br/>
     <br/>
    # Директива задаёт конфигурацию для виртуального сервера.<br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#server<br/>
    server {<br/>
     <br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#listen<br/>
    # Директива задаёт адрес и порт, на которых сервер принимает запросы. <br/>
    listen 80; <br/>
     <br/>
    # Директива задаёт имя и параметры сервера.<br/>
    # В качестве имени можно использовать доменное имя, адрес, порт или путь unix-сокета.<br/>
    # Если доменное имя резолвится в несколько адресов, то используются все.<br/>
    server_name www.name.com; # наш сайт<br/>
    root /var/www/html; # Директива задаёт корневой каталог для запросов.<br/>
    autoindex off# закрываем все пустые папки, directory listing - off<br/>
     <br/>
    # Директива задаёт URI, который будет показываться для указанных ошибок. <br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#error_page<br/>
    error_page   404          error/404.html;<br/>
    error_page   502 503 504  error/500.html;<br/>
    # error_page   404 = @magento;<br/>
     <br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_core_module.html#location<br/>
    # Директива устанавливает конфигурацию в зависимости от URI запроса.<br/>
    # все, что важно...<br/>
    location ~ (/(app/|includes/|lib/|pkginfo/|var/|report/config.xml)|/\.svn/|/.hta.+)<br/>
    {<br/>
    deny all# ...закрываем от посторонних<br/>
    }<br/>
     <br/>
    <br/>
    location ~ (\.php|/downloader/?|/report/?)$ {<br/>
    try_files /error/404.html $uri/ =404;<br/>
    # Директива задаёт адрес FastCGI-сервера.<br/>
    fastcgi_pass backend;<br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_fastcgi_module.html<br/>
    include /etc/nginx/fastcgi_params;<br/>
    fastcgi_param script_FILENAME $document_root$fastcgi_script_name;<br/>
    }<br/>
     <br/>
    # конкретные папки обрабатываем отдельно<br/>
    # заворачиваем <br/>
    location = /downloader { rewrite ^ /downloader/ permanent; }<br/>
     <br/>
    # завёрнутое идет на бакенд через свой индекс<br/>
    location = /downloader/ {<br/>
    try_files /error/404.html $uri/ =404;<br/>
    fastcgi_pass backend;<br/>
    include /etc/nginx/fastcgi_params;<br/>
    fastcgi_param script_FILENAME $document_root/downloader/index.php;<br/>
    }<br/>
     <br/>
    location = /report { rewrite ^ /report/ permanent; }<br/>
     <br/>
    location = /report/ {<br/>
    try_files /error/404.html $uri/ =404;<br/>
    fastcgi_pass backend;<br/>
    include /etc/nginx/fastcgi_params;<br/>
    fastcgi_param script_FILENAME $document_root/report/index.php;<br/>
    }<br/>
     <br/>
    location / {<br/>
    # set expire headers<br/>
    if ($request_uri ~* "\.(ico|css|js|gif|jpe?g|png)$") {<br/>
    expires max; # http://sysoev.ru/nginx/docs/http/ngx_http_headers_module.html#expires<br/>
    }<br/>
    # Префикс "@" задаёт именованный location. <br/>
    # Такой location не используется при обычной обработке запросов, <br/>
    # а предназначен только для перенаправления в него запросов. <br/>
    try_files $uri $uri/ @magento;<br/>
    index index.php;<br/>
    expires max;<br/>
    }<br/>
     <br/>
    # Префикс "@" (читай выше) для перенаправления и обработки<br/>
    location @magento {<br/>
    fastcgi_pass backend;<br/>
    include /etc/nginx/fastcgi_params;<br/>
    fastcgi_param script_FILENAME $document_root/index.php;<br/>
    }<br/>
    } <br/>
     <br/>
    # Далее следует конфигурация для HTTPS запросов, админка, корзина, и пользователь под логином.<br/>
    # если у вас включена опция в админке и есть сертификат<br/>
    server {<br/>
    listen 443# SSL port<br/>
    server_name www.name.com;<br/>
    root /var/www/html;<br/>
    autoindex off;<br/>
     <br/>
    # error_page   404 495 496 497        error/400.html;<br/>
    # error_page   502 503 504  error/500.html;<br/>
     <br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_ssl_module.html<br/>
    ssl on# Директива разрешает протокол HTTPS для данного виртуального сервера. <br/>
    ssl_protocols SSLv3 TLSv1; # Директива разрешает указанные протоколы. <br/>
    ssl_ciphers HIGH:!ADH:!MD5; # Директива описывает разрешённые шифры.<br/>
    # Директива указывает, чтобы при использовании протоколов SSLv3 и TLSv1 серверные шифры были более приоритетны, чем клиентские. <br/>
    ssl_prefer_server_ciphers on;<br/>
     <br/>
    # Директива указывает файл с сертификатами CA используемыми для проверки клиентских сертификатов. <br/>
    ssl_certificate /etc/nginx/cert/bundle.crt;<br/>
    # Директива указывает файл с секретным ключом для данного виртуального сервера. <br/>
    ssl_certificate_key /etc/nginx/cert/myserver.key;<br/>
     <br/>
    # Директива задаёт тип и размеры кэшей для хранения параметров сессий.<br/>
    ssl_session_cache    shared:SSL:10m;<br/>
    # Директива задаёт время, в течение которого клиент может повторно использовать параметры сессии, хранящейся в кэше<br/>
    ssl_session_timeout  10m;<br/>
     <br/>
     <br/>
    keepalive_timeout 65;<br/>
     <br/>
    # http://sysoev.ru/nginx/docs/http/ngx_http_headers_module.html#add_header<br/>
    add_header Front-End-Https on;<br/>
     <br/>
    location ~ (/(app/|includes/|lib/|pkginfo/|var/|report/config.xml)|/\.svn/|/.hta.+)<br/>
    {<br/>
    deny all;<br/>
    }<br/>
     <br/>
    location ~ (\.php|/downloader/?|/report/?)$ {<br/>
    try_files /error/404.html $uri/ =404;<br/>
    fastcgi_pass backend;<br/>
    include /etc/nginx/fastcgi_params;<br/>
    fastcgi_param script_FILENAME $document_root$fastcgi_script_name;<br/>
    fastcgi_param HTTPS on# все запросы идут ssl<br/>
    }<br/>
     <br/>
    location = /downloader { rewrite ^ /downloader/ permanent; }<br/>
     <br/>
    location = /downloader/ {<br/>
    try_files /error/404.html $uri/ =404;<br/>
     <br/>
    fastcgi_pass backend;<br/>
    include /etc/nginx/fastcgi_params;<br/>
    fastcgi_param script_FILENAME $document_root/downloader/index.php;<br/>
    fastcgi_param HTTPS on# все запросы идут ssl<br/>
    }<br/>
     <br/>
    location = /report { rewrite ^ /report/ permanent; }<br/>
     <br/>
    location = /report/ {<br/>
    try_files /error/404.html $uri/ =404;<br/>
     <br/>
    fastcgi_pass backend;<br/>
    include /etc/nginx/fastcgi_params;<br/>
    fastcgi_param script_FILENAME $document_root/report/index.php;<br/>
    fastcgi_param HTTPS on# все запросы идут ssl<br/>
    }<br/>
     <br/>
    location / {<br/>
    try_files $uri $uri/ @magento;<br/>
    index index.php;<br/>
    expires max;<br/>
    }<br/>
     <br/>
    location @magento {<br/>
    fastcgi_pass backend;<br/>
    include /etc/nginx/fastcgi_params;<br/>
    fastcgi_param script_FILENAME $document_root/index.php;<br/>
    fastcgi_param HTTPS on# все запросы идут ssl<br/>
    }<br/>
    # если установлен phpmyadmin, то будет открываться так https://www.mysite.com/phpmyadmin/<br/>
    location = /phpmyadmin { rewrite ^ /phpmyadmin/ permanent; }<br/>
    }<br/>
     <br/>
    } <br/>
     <br/>
     <br/>
    ### config ends ###<br/>
     



    Конфигурация PHP-FPM (файл /etc/php-fpm.conf). Используется локальный socket.


    
    <configuration>
            <section name="global_options">
                    <value name="pid_file">/var/run/php-fpm.pid</value>
                    <value name="error_log">/var/log/php-fpm.log</value>
                    <value name="log_level">notice</value>
                    <value name="emergency_restart_threshold">10</value>
                    <value name="emergency_restart_interval">1m</value>
                    <value name="process_control_timeout">5s</value>
                    <value name="daemonize">yes</value>
            </section>
            <workers>
                    <section name="pool">
                            <value name="name">default</value>
                            <value name="listen_address">/tmp/fcgi.sock</value>
                            <value name="listen_options">
                                    <value name="owner"></value>
                                    <value name="group"></value>
                                    <value name="mode">0666</value>
                            </value>
                            <value name="php_defines">
                            </value>
                            <value name="user">nginx</value>
                            <value name="group">nginx</value>
                            <value name="pm">
                                    <value name="style">static</value>
                                    <value name="max_children">10</value>
                                    <value name="apache_like">
                                            <value name="StartServers">20</value>
                                            <value name="MinSpareServers">5</value>
                                            <value name="MaxSpareServers">35</value>
                                    </value>
                            </value>
                            <value name="request_terminate_timeout">0s</value>
                            <value name="request_slowlog_timeout">0s</value>
                            <value name="slowlog">logs/slow.log</value>
                            <value name="rlimit_files">1024</value>
                            <value name="rlimit_core">0</value>
                            <value name="chroot"></value>
                            <value name="chdir"></value>
                            <value name="catch_workers_output">yes</value>
                            <value name="max_requests">500</value>
                            <value name="allowed_clients">127.0.0.1</value>
                            <value name="environment">
                                    <value name="HOSTNAME">$HOSTNAME</value>
                                    <value name="PATH">/usr/local/bin:/usr/bin:/bin</value>
                                    <value name="TMP">/tmp</value>
                                    <value name="TMPDIR">/tmp</value>
                                    <value name="TEMP">/tmp</value>
                                    <value name="OSTYPE">$OSTYPE</value>
                                    <value name="MACHTYPE">$MACHTYPE</value>
                                    <value name="MALLOC_CHECK_">2</value>
                            </value>
                    </section>
            </workers>
    </configuration>
    </code>


    Запускаем nginx и php-fpm:



    # /etc/init.d/php-fpm start
    # /etc/init.d/nginx start

    Запускаем mysqld, и назначаем пароль для mysql



    # /etc/init.d/mysqld start
    # /usr/bin/mysql_secure_installation

    Теперь добавляем пользователя и базу данных magento:



    # mysql --user=root -p
    # mysql> CREATE USER 'magento'@'localhost' IDENTIFIED BY 'my_password';
    # mysql> CREATE DATABASE magento;
    # mysql> GRANT ALL PRIVILEGES ON `magento`.* TO 'magento'@'%' WITH GRANT OPTION;

    Installing Magento Via SSH



    сюда качаем и здесь установим магенто
    # cd /var/www/html/
    # wget www.magentocommerce.com/downloads/assets/1.4.0.1/magento-1.4.0.1.tar.gz

    качаем демо продукты и установки
    # wget www.magentocommerce.com/downloads/assets/1.2.0/magento-sample-data-1.2.0.tar.gz

    распаковываем
    # tar -zxvf magento-1.4.0.1.tar.gz

    распаковываем
    # tar -zxvf magento-sample-data-1.2.0.tar.gz

    собираем все в одну кучу
    # mv magento-sample-data-1.2.0/media/* magento/media/

    подтягиваем базу данных
    # mv magento-sample-data-1.2.0/magento_sample_data_for_1.2.0.sql magento/data.sql

    и все перекидываем на корень
    # mv magento/* magento/.htaccess.

    правильные права
    # chmod o+w var var/.htaccess app/etc

    правильные права
    # chmod -R o+w media

    запихиваем базу, с вашими значениями — DBHOST DBUSER DBPASS DBNAME
    # mysql -h DBHOST -u DBUSER -pDBPASS DBNAME < data.sql

    установка
    # ./pear mage-setup.

    установка
    # ./pear install magento-core/Mage_All_Latest-stable

    чистим мусор
    # rm -rf downloader/pearlib/cache/* downloader/pearlib/download/*

    чистим мусор
    # rm -rf magento/ magento-sample-data-1.2.0/

    чистим мусор
    # rm -rf magento-1.4.0.1.tar.gz magento-sample-data-1.2.0.tar.gz data.sql

    Назначаем корректного владельца всем файлам:


    # cd /var/www/
    # chown -R nginx:nginx html

    READY!!!

    Теперь переходим к этапу настройки magento, указав в браузере адрес нашей установки,
    например www.mysite.com
    Должен заработать magento installation wizard.
    В настройках базы данных указываем пользователя magento (и назначенный вами пароль), адрес хоста – localhost.
    Также следует отметить флаг “Skip Base URL validation before next step”.

    Создаем FTP пользователя 'masterftp' и пароль:



    centos.name/?page/howto/Install-Vsftpd
    -> Настройка vsftpd

    новый пользователь в группу nginx только FTP access:
    # useradd -g nginx -s /sbin/nologin masterftp
    # passwd masterftp

    для пользователя который уже в системе только FTP access:
    # usermod -g nginx -s /sbin/nologin username

    Сам конфиг FTP сервера (just in case)
    # vi /etc/vsftpd/vsftpd.conf

    Запуск/стоп
    # service vsftpd start
    # service vsftpd stop

    Настройка мыла — будем принимать все, и форвардить на другой адрес:



    возможно нужен пользователь почты (john)?
    # adduser mailuser

    Теперь нужно минимально настроить postfix для приема и отправки почты
    самый оптимальный вариант настройки можно посмотреть здесь.
    на примере сделать свои изменения
    wiki.centos.org/HowTos/postfix#head-761bdd5d364ddb0dcbb4e1fcdc5af9d8f41286e5

    Создаем файл /etc/postfix/virtual для переадресации.
    # vi /etc/postfix/virtual

    Указываем что принимаем все и посылаем дальше:
    @yourdomain.com mymail@gmail.com

    Сохраняем.

    указываем новые правила почты:
    # postmap /etc/postfix/virtual

    Также ставим в /etc/postfix/main.cf:
    virtual_alias_maps = hash:/etc/postfix/virtual

    обновляем почтовик:
    # service postfix reload

    Теперь запускаем postfix:
    # service postfix restart

    ================================================================
    сервер настроен, магазин работает, почта летает… пиво льется…

    спасибо за внимание.
    извините если что не так :)
    Поделиться публикацией
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 7

      –4
      На каком этапе трясти бубном? А то при полной тишине ставить скучно ;)
        –4
        трясти-мардасти :)
          0
          плохо что на хабре нет до сих пор полной подцветки кода…
          • НЛО прилетело и опубликовало эту надпись здесь
              0
              ткните в один, который будет 100% читаться хабром?
              • НЛО прилетело и опубликовало эту надпись здесь
                  0
                  да, я это видел, спасибо,
                  в спецификации одного показано что есть nginx config file,
                  а в меню его так и не нашел

          Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

          Самое читаемое