вторник, 12 мая 2015 г.

Развёртывание DLE 10.4 на NGINX на CentOS 7.0



Процесс установки новостного движка DataLife Engine 10.4 на CentOS7, от установки операционной системы до полной готовности системы к работе.

Установка и подготовка операционной системы:

Устанавливаем CentOS в редакции Minimal:
Во время установки обязательно настроить сеть (IP, Gateway):

Размечаем диск вручную, указав использование LVM:
    (кто не хочет заморачиваться может пропустить)



     Отключаем SElinux:
     $ setenforce 0
     $ vi /etc/sysconfig/selinux
          SELINUX=disabled

     Установить Net-Tools:
     yum -y install net-tools
(чтобы можно было выполнить ifconfig и прочие команды по сети)

Установить VMware Tools (опционально, для виртуальной машины):

     Отключаем FirewallD:
     systemctl stop firewalld
     systemctl disable firewalld

     Устанавливаем и настраиваем IPtables:
     yum -y install iptables-services

     Добавляем IPtables в автозагрузку и запускаем:
     systemctl enable iptables
     systemctl start iptables

     Прописываем нужные правила в IPtables:

    $ vi /etc/sysconfig/iptables

# SSH
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
# HTTP
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
# HTTPs
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT

    $ service iptables restart

Установка и настройка NGINX

     Подключаем нужные репозитории:
yum -y install epel-release wget

wget http://rpms.famillecollet.com/enterprise/remi-release-7.rpm

rpm -Uvh remi-release-7.rpm

    Устанавливаем, запускаем и добавляем в автозагрузку nginx:
yum install nginx
systemctl start nginx.service
systemctl enable nginx.service

     Выключаем "Буферизация вывода" NGINX для DataLife Engine (DLE)
$ echo 'fastcgi_param  PHP_VALUE          output_buffering=Off;' >> /etc/nginx/fastcgi_params

     Создаём 2 рабочие директории для конфигураций
$ mkdir /etc/nginx/off     (для всего конфигураций)
$ mkdir /etc/nginx/sites  (для включенных конфигураций)

     Указываем nginx откуда подгружать конфиги
$ vi /etc/nginx/nginx.conf
 вставляем в конце include /etc/nginx/sites/*.conf;
 должно выйглядеть так:
    # Load modular configuration files from the /etc/nginx/conf.d directory.
    # See http://nginx.org/en/docs/ngx_core_module.html#include
    # for more information.
    include /etc/nginx/conf.d/*.conf;
    include /etc/nginx/sites/*.conf;
}


     Создаём VirtualHost
$ vi /etc/nginx/off/river.ru

 server {
        listen 80;
        server_name  river.ru www.river.ru;
        root   /var/www/river;

        access_log  /var/www/river/logs/access.log  main;
        error_log  /var/www/river/logs/error.log;

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

}

     Включаем конфиг river.conf:
$ ln -s /etc/nginx/off/river.conf /etc/nginx/sites/river.conf


     Добавляем "реврайты" (rewrite) в конфиг файл (чтобы работал ЧПУ)
     Должно получиться так:

server {
        listen 80;
        server_name  river.ru www.river.ru;
        root   /var/www/river;

        access_log  /var/www/river/logs/access.log  main;
        error_log  /var/www/river/logs/error.log;

        location ~ \.php$ {
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
            include        fastcgi_params;
        }

# Редиректы
rewrite "^/page/([0-9]+)(/?)$" /index.php?cstart=$1 last;

# Сам пост
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&cstart=$5&news_name=$6&seourl=$6 last;
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page,([0-9]+),(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last;
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/print:page,([0-9]+),(.*).html(/?)+$" /engine/print.php?subaction=showfull&year=$1&month=$2&day=$3&news_page=$4&news_name=$5&seourl=$5 last;
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/(.*).html(/?)+$" /index.php?subaction=showfull&year=$1&month=$2&day=$3&news_name=$4&seourl=$4 last;

rewrite "^/([^.]+)/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$4&news_page=$2&cstart=$3&seourl=$5&seocat=$1 last;
rewrite "^/([^.]+)/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$2&seourl=$4&seocat=$1 last;
rewrite "^/([^.]+)/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$2&newsid=$3&seourl=$4&seocat=$1 last;
rewrite "^/([^.]+)/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&seourl=$3&seocat=$1 last;

rewrite "^/page,([0-9]+),([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$3&news_page=$1&cstart=$2&seourl=$4 last;
rewrite "^/page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$2&news_page=$1&seourl=$3 last;
rewrite "^/print:page,([0-9]+),([0-9]+)-(.*).html(/?)+$" /engine/print.php?news_page=$1&newsid=$2&seourl=$3 last;
rewrite "^/([0-9]+)-(.*).html(/?)+$" /index.php?newsid=$1&seourl=$2 last;

# За день
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2&day=$3 last;
rewrite "^/([0-9]{4})/([0-9]{2})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&day=$3&cstart=$4 last;

# За весь месяц
rewrite "^/([0-9]{4})/([0-9]{2})(/?)+$" /index.php?year=$1&month=$2 last;
rewrite "^/([0-9]{4})/([0-9]{2})/page/([0-9]+)(/?)+$" /index.php?year=$1&month=$2&cstart=$3 last;

# Вывод за весь год
rewrite "^/([0-9]{4})(/?)+$" /index.php?year=$1 last;
rewrite "^/([0-9]{4})/page/([0-9]+)(/?)+$" /index.php?year=$1&cstart=$2 last;

# вывод отдельному тегу
rewrite "^/tags/([^/]*)(/?)+$" /index.php?do=tags&tag=$1 last;
rewrite "^/tags/([^/]*)/page/([0-9]+)(/?)+$" /index.php?do=tags&tag=$1&cstart=$2 last;

# поиск по доп полям
rewrite "^/xfsearch/([^/]*)(/?)+$" /index.php?do=xfsearch&xf=$1 last;
rewrite "^/xfsearch/([^/]*)/page/([0-9]+)(/?)+$" /index.php?do=xfsearch&xf=$1&cstart=$2 last;

# вывод для отдельного юзера
rewrite "^/user/([^/]*)/rss.xml$" /engine/rss.php?subaction=allnews&user=$1 last;
rewrite "^/user/([^/]*)(/?)+$" /index.php?subaction=userinfo&user=$1 last;
rewrite "^/user/([^/]*)/page/([0-9]+)(/?)+$" /index.php?subaction=userinfo&user=$1&cstart=$2 last;
rewrite "^/user/([^/]*)/news(/?)+$" /index.php?subaction=allnews&user=$1 last;
rewrite "^/user/([^/]*)/news/page/([0-9]+)(/?)+$" /index.php?subaction=allnews&user=$1&cstart=$2 last;
rewrite "^/user/([^/]*)/news/rss.xml(/?)+$" /engine/rss.php?subaction=allnews&user=$1 last;

# вывод всех последних новостей
rewrite "^/lastnews(/?)+$" /index.php?do=lastnews last;
rewrite "^/lastnews/page/([0-9]+)(/?)+$" /index.php?do=lastnews&cstart=$1 last;

# вывод в виде каталога
rewrite "^/catalog/([^/]*)/rss.xml$" /engine/rss.php?catalog=$1 last;
rewrite "^/catalog/([^/]*)(/?)+$" /index.php?catalog=$1 last;
rewrite "^/catalog/([^/]*)/page/([0-9]+)(/?)+$" /index.php?catalog=$1&cstart=$2 last;

# вывод непрочитанных статей
rewrite "^/newposts(/?)+$" /index.php?subaction=newposts last;
rewrite "^/newposts/page/([0-9]+)(/?)+$" /index.php?subaction=newposts&cstart=$1 last;

# вывод избранных статей
rewrite "^/favorites(/?)+$" /index.php?do=favorites last;
rewrite "^/favorites/page/([0-9]+)(/?)+$" /index.php?do=favorites&cstart=$1 last;

rewrite "^/rules.html$" /index.php?do=rules last;
rewrite "^/statistics.html$" /index.php?do=stats last;
rewrite "^/addnews.html$" /index.php?do=addnews last;
rewrite "^/rss.xml$" /engine/rss.php last;
rewrite "^/sitemap.xml$" /uploads/sitemap.xml last;

if (!-d $request_filename) {
        rewrite "^/([^.]+)/page/([0-9]+)(/?)+$" /index.php?do=cat&category=$1&cstart=$2 last;
        rewrite "^/([^.]+)/?$" /index.php?do=cat&category=$1 last;
}

if (!-f $request_filename) {
        rewrite "^/([^.]+)/rss.xml$" /engine/rss.php?do=cat&category=$1 last;
        rewrite "^/page,([0-9]+),([^/]+).html$" /index.php?do=static&page=$2&news_page=$1 last;
        rewrite "^/print:([^/]+).html$" /engine/print.php?do=static&page=$1 last;
}

if (!-f $request_filename) {
        rewrite "^/([^/]+).html$" /index.php?do=static&page=$1 last;
}

}


     Перезагружаем nginx
systemctl start nginx.service

Установка и настройка SQL-сервера

$ yum -y install mariadb-server
$ systemctl start mariadb.service
$ systemctl enable mariadb.service

     Настраиваем:
$ mysql_secure_installation
               Enter current password for root (enter for none):  PRESS ENTER

               Set root password? [Y/n] Y
               New password:  ENTER YOUR NEW PASSWORD
               Re-enter new password:    RE-ENTER YOUR NEW PASSWORD
               Password updated successfully!

               Remove anonymous users? [Y/n] Y
                ... Success!

               Disallow root login remotely? [Y/n] Y
               ... Success!

               Remove test database and access to it? [Y/n] Y
                - Dropping test database...
                ... Success!
                - Removing privileges on test database...
                ... Success!

               Reload privilege tables now? [Y/n] Y
                ... Success!

               Thanks for using MariaDB!

     Создаём базу данных:
$ mysql -u root -p
               CREATE DATABASE river CHARACTER SET cp1251;
               GRANT ALL PRIVILEGES ON river .* TO root@localhost IDENTIFIED BY 'ROOT PASSWORD';
               FLUSH PRIVILEGES;
               exit;

Установка и настройка DLE

     Копируем содержимой папки upload из скачанного дистрибутива DLE на веб-сервер в целевую директорию (в нашем случае /var/www/river) при помощи программы WinSCP 

     Прописываем права на файлы и директории в DLE
 http://dle-news.ru/extras/online/index.html?overview.html 

     Для упрощения создаём небольшой скрипт
vi /root/dlerights.sh
    find ./templates/ -type d -exec chmod 777 {} + 
    find ./templates/ -type f -exec chmod 666 {} +
    find ./backup -type d -exec chmod 777 {} + 
    find ./uploads -type d -exec chmod 777 {} +
    find ./engine/data -type d -exec chmod 777 {} + 
    find ./engine/cache -type d -exec chmod 777 {} +
    find ./engine/cache/system -type d -exec chmod 777 {} +
    chmod 444 ./.htaccess

    chmod 444 ./templates/.htaccess


     Переходим в директорию сайта и запускаем скрипт для установки прав
cd /var/www/river
sh /root/dlerights.sh

     Перезагружаем nginx
systemctl restart nginx.service

     Открываем брайзер и заходим на страницу http://river.ru

     Прописываем, всё что нас спрашивают
     По завершении установки получите уведомление, что нужно удалить файл install.php.
     Удалите его и перезагрузите страницу http://river.ru

     Готово.

1 комментарий:

  1. Спасибо, за ЧПУ, на других сайтах кривые, а тут все ок =)

    ОтветитьУдалить