Порой начиная новый проект мы примерно заранее знаем какие инструменты нам могут понадобиться.

Перед началом нового проекта я построил план работ, подобрал набор программ и решил подготовить небольшую и краткую инструкцию.

В качестве системы виртуализации я выбрать VMware Workstation.

Подготовка сервера


1. ОС: CentOS 7
2. Сервер для анализа и поиска данных: Elasticsearch
3. Сервер очередей: RabbitMQ
4. Веб сервер: Nginx + PHP7 FPM

Установка ОС CentOS 7


Скачиваем ОС с официального сайта. Устанавливаем систему с минимальным набором программ и настраиваем сеть.

Добавляем репозиторий Remi. В папку /etc/yum.repos.d/ добавляем файл с настройками репозитария:

[remi]
name=Les RPM de remi pour Enterprise Linux $releasever - $basearch
#baseurl=http://rpms.famillecollet.com/enterprise/$releasever/remi/$basearch/
mirrorlist=http://rpms.famillecollet.com/enterprise/$releasever/remi/mirror
enabled=1
priority=10
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-remi
failovermethod=priority

После добавляем ключ Remi:

root# rpm --import http://rpms.famillecollet.com/RPM-GPG-KEY-remi

Обновляем систему и устанавливаем сопутствующий набор программ:

root# yum install epel-release -y
root# yum update -y
root# yum groupinstall 'Development tools' -y
root# yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel git wget wxBase.x86_64

Установка Java JDK:

root# yum install java-1.8.0-openjdk -y

На этом подготовка ОС завершена.

Установка Elasticsearch


Проверяем установлена ли Java:

root# java -version
root# echo $JAVA_HOME

Скачиваем и устанавливаем ключ:

root# rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch

В папку /etc/yum.repos.d/ добавляем файл с настройками репозитария:

[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

Установка Elasticsearch:

root# yum install elasticsearch -y

Настраиваем Firewall, открываем порты для Elasticsearch

root# firewall-cmd --permanent --add-port=9200/tcp
root# firewall-cmd --permanent --add-port=9300/tcp
root# firewall-cmd --reload

Запускаем Elasticsearch и добавляем в автозагрузку

root# systemctl start elasticsearch
root# systemctl enable elasticsearch
root# systemctl status elasticsearch

Установка RabbitMQ


Установка Erlang

root# wget http://packages.erlang-solutions.com/erlang-solutions-1.0-1.noarch.rpm
root# rpm -Uvh erlang-solutions-1.0-1.noarch.rpm
root# yum update
root# yum install erlang

Установка RabbitMQ

root# wget https://www.rabbitmq.com/releases/rabbitmq-server/v3.6.10/rabbitmq-server-3.6.10-1.el7.noarch.rpm
root# rpm --import https://www.rabbitmq.com/rabbitmq-release-signing-key.asc
root# yum install rabbitmq-server-3.6.10-1.el7.noarch.rpm

Настраиваем Firewall, открываем порты для RabbitMQ

root# firewall-cmd --permanent --add-port=4369/tcp
root# firewall-cmd --permanent --add-port=25672/tcp
root# firewall-cmd --permanent --add-port=5671-5672/tcp
root# firewall-cmd --permanent --add-port=15672/tcp
root# firewall-cmd --permanent --add-port=61613-61614/tcp
root# firewall-cmd --permanent --add-port=8883/tcp
root# firewall-cmd --reload

Запускаем RabbitMQ и добавляем в автозагрузку

root# systemctl start rabbitmq-server
root# systemctl enable rabbitmq-server
root# rabbitmqctl status

Активация консоли управления RabbitMQ

root# rabbitmq-plugins enable rabbitmq_management
root# chown -R rabbitmq:rabbitmq /var/lib/rabbitmq/

После этого консоль управления RabbitMQ становиться доступным по адресу: ip-address:15672/

Добавляем пользователя

root# rabbitmqctl add_user mqadmin mqadmin
root# rabbitmqctl set_user_tags mqadmin administrator
root# rabbitmqctl set_permissions -p / mqadmin ".*" ".*" ".*"

Установка Веб сервера: Nginx + PHP7 FPM


Установка Nginx:

root# wget http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
root# rpm -Uvh nginx-release-centos-7-0.el7.ngx.noarch.rpm
root# yum install nginx -y
root# systemctl enable nginx

Установка PHP-FPM

root# yum install php70-php php70-php-cli php70-php-fpm php70-php-bcmath php70-php-devel php70-php-gd php70-php-json php70-php-mbstring php70-php-mcrypt php70-php-opcache php70-php-pecl-amqp php70-php-pecl-event -y

Запускаем PHP-FPM:

systemctl enable php70-php-fpm

Отключаем SELinux:

В файле /etc/selinux/config ставим параметр SELINUX=disabled, после выполняес команду:

root# setenforce 0

Настраиваем Nginx и PHP-FPM для совместной работы.

PHP-FPM:

Редактируем файл /etc/opt/remi/php70/php-fpm.d/www.conf *(не забудьте создать пользователя и группу www-data)*

listen = 127.0.0.1:9000

user = www-data
group = www-data

Создаем файл /etc/nginx/conf.d/php-fpm.conf

upstream php-fpm {
    server 127.0.0.1:9000;
    #server unix:/var/run/php-fpm/www.sock;
}

Создаем файл для проекта /etc/nginx/conf.d/project.conf

server {
    listen 80 default_server;
 
    root /home/project;
    index index.php index.html index.htm;
 
    server_name _;
 
    location / {
	index index.php index.html index.htm;
        try_files	$uri $uri/	=404;
    }
 
    location ~ \.php$ {
      try_files $uri =404;
      fastcgi_split_path_info ^(.+\.php)(/.+)$;
      fastcgi_pass php-fpm;
      fastcgi_index index.php;
      fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
      include fastcgi_params;
    }
 
}

Создаем папку с проектом /home/project.

(у вас может быть любая папка для проекта, главное не забудьте изменить путь в настройках Nginx)

В папке проекта создадит файл index.php для теста

<?php
     phpinfo();
?>

Перезапускам Nginx и PHP-FPM

root# systemctl restart nginx
root# systemctl restart php70-php-fpm

Проверяем работу Nginx: ip-address

На этом подготовка сервера завершена и можно приступать к разработке проекта.
Но это уже совсем другая история.

P.S. Видео процесса настройки сервера с пробами и ошибками.
Поделиться с друзьями
-->

Комментарии (34)


  1. shude
    22.06.2017 07:34

    Мне кажется установка PHP 7.0 в данный момент не актуальна. Я бы смотрел в сторону 7.1.3 и выше.


    1. GHostly_FOX
      22.06.2017 07:37
      -5

      На текущий момент не все еще фреймворки адекватно работают с 7.1
      7.0 для моего проекта будет в самый раз.


      1. shude
        22.06.2017 07:46

        Тогда хотелось бы увидеть для каких конкретно инструментов выбрана данная конфигурация. Если забегать немного вперед, то в ноябре появится Symfony 4, которая будет требовать PHP 7.1.3 и возможно ряд других фреймворков при полном переходе не семерку будут выдвигать такие же требования. Может случиться так, что для каких-то инструментов PHP 7.0 окажется не достаточно.


        1. GHostly_FOX
          22.06.2017 07:51
          -4

          Сейчас проект будет на Yii2. Он комфортно себя чувствует на 7.0
          В последующем не спорю, будут требовать 7.1 — будем ставить или апгрейдить до 7.1


          1. shude
            22.06.2017 08:01

            На всякий случай обратите внимание на обсуждение.
            Yii 2.1, скорее всего будет требовать PHP 7.1, но в целом я с вами согласен.


  1. eshimischi
    22.06.2017 08:07

    Centminmod — не так давно обнаружил такой проект, гляньте…


    1. GHostly_FOX
      22.06.2017 08:11

      Зачет, надо будет посмотреть.


  1. rokoko_dev
    22.06.2017 08:23
    +1

    Ещё бы supervisor для обработки очереди)
    кстати почему не unix socket для php-fpm?


  1. wom
    22.06.2017 08:43

    Для чего нужен репозиторий Remi и пакет wxBase?
    EPEL мало?


  1. oxidmod
    22.06.2017 08:44
    +1

    Docker же?


    1. negodnik
      22.06.2017 09:48

      Вы ещё про Windows спросите


      1. Akuma
        22.06.2017 12:45

        А что с ним не так? Прекрасно все работает


        1. negodnik
          22.06.2017 13:14

          Я наверное в целом про кейс. В 2017 году мы на винде поднимаем VMware, ради PHP, кролика и эластик?


          1. Akuma
            22.06.2017 14:04

            Ну тут вроде про dev-окружение статья. Так что почему бы и нет.

            Хотя в комментах какой-то нездоровый Docker-ажиотаж, как будто это что-то принципиально изменит в статье о рисовании совы.


            1. negodnik
              22.06.2017 14:21

              Тогда имхо вообще мало полезного этой статье, как-то совсем for dummies


              1. Akuma
                22.06.2017 16:30

                В общем то, да. Согласен :)


  1. ushliy
    22.06.2017 08:51
    +4

    Я никого не хочу обидеть, но не ожидал на Хабре в 2017 увидеть ман по установке 4 пакетов в центось. А я себя ругаю, что без статьи на Хабре до сих пор, все мои наработки и изыскания кажутся неинтересными


    1. GHostly_FOX
      22.06.2017 08:53
      -3

      Поделись опытом, наработками… изысканиями…


    1. AlexMal
      22.06.2017 09:19

      У самого та же беда… 10 лет в теме, 5 лет на хабре. Постоянно в творческом поиске, изучении, разработках… Сколько раз пытался бросить php, изучал столько языков и технологий. Как-то, один глупый комментарий всю карму испортил. Как начинаю думать, чтобы такое написать на хабр, потому что «до сих пор без статьи на Хабре!», так сразу все куда-то сдувается… Что делать?


      1. GHostly_FOX
        22.06.2017 09:33
        -2

        Может попробовать совместное творчество?
        Выбрать тему и попытаться раскрыть ее… Или попробовать начать стримить свою работу… это может даст толчок к написанию статьи?!

        Я вот сейчас готовлю проект один с описанием его реализации и может получению ценных советов как его лучше реализовать. И по сути эта статья идет как пролог к проекту.

        Есть сайт https://www.liveedu.tv по стримингу, и разработку проекта буду вести так сказать в режиме OnLine


      1. Lamaster
        22.06.2017 09:57

        Можно попробовать перевести статью, которая дала вам большой толчок в развитии. Из ресурсов можно выбрать блоги, которые вы читаете, HackerNews, Reddit.


    1. sHaggY_caT
      22.06.2017 09:46

      Угу, тоже удивилась, увидев тут это


  1. berezuev
    22.06.2017 10:04
    +1

    Поставил линукс @ напиши статью на Хабр.

    А вообще, в 2017-м году любой уважающий себя разработчик должен уметь оборачивать свои поделки в docker-compose. Или про это тоже надо написать статью?))


    1. wispoz
      22.06.2017 11:40

      Напишите я почитаю.


  1. http2
    22.06.2017 10:15

    Зачем файерволом открывать доступ всему миру к кролику и эластику?
    Почему нету РСУБД?


    1. GHostly_FOX
      22.06.2017 11:57
      -1

      Ну виртуалка собиралась как дев. машинка.

      РСУБД тут не нужна, система готовиться для сбора большого объема данных и аналитики по этим данным.


  1. ilyaplot
    22.06.2017 10:16

    Береги честь смолоду, или я бы сразу же добавил deny на .git*


  1. mikkisse
    22.06.2017 10:31

    Ваша статья могла бы быть интереснее, если бы вы не отключили selinux.


    1. Shaz
      22.06.2017 10:57

      А где-то есть мануалы по установке чего-то в centos\debian с настройкой selinux а не отключением?) Что-то ни разу не попадались. (маны направленные именно на настройку самого selinux в расчет не берем).


      1. GHostly_FOX
        22.06.2017 11:58

        Доработаю статью с настройкой selinux, визуализатором для Elasticsearch и supervisor для консьюмеров


      1. hamnsk
        22.06.2017 12:04

        есть просто мануалы по селинуксу, а так же все быстро гуглиться по ошибкам…
        в CoreOS например он включен, и вообще никак не мешает


  1. adombrovsky
    22.06.2017 11:01

    А где же установка базы данных, визуализатора для elasticsearch, supervisor для консьюмеров,?


  1. grSereger
    22.06.2017 12:01

    почему не использовали докер?


  1. ALexhha
    22.06.2017 13:48

    Сразу вспоминается картинка про сову. Ни одного объяснения или комментария к конфигам. А вся статья сводится к yum install/systemctl restart service.

    P.S.
    чем вас не устроил docker + docker-compose? В таком случае вы даете коллеге docker-compose.yml и он разворачивает окружение у себя за 5-10 минут. А так не понятно, что со всем этим делать