Pull to refresh

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

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

Но в основном было нытье, типа — я умнее тебя ты работаешь не правильно, конфиг не пацанский… никто так и не сказал как и что поправить, где сделать правильнее и по другому, какие еще есть возможности конфигурации, и тд. да и 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

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

спасибо за внимание.
извините если что не так :)
Tags:
Hubs:
Total votes 22: ↑12 and ↓10+2
Comments7

Articles