Tiny Tiny RSS на nginx, php-fpm и postgresql

Качаем tt-rss с официального сайта https://tt-rss.org/

git clone https://tt-rss.org/git/tt-rss.git /path/to/tt-rss/www

Ставим nginx

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx

Конфиг nginx

server {
    listen 443 ssl http2;
    server_name rss.site.name;
    root /path/to/tt-rss/www/;
    index index.php index.html index.htm;
    access_log /path/to/tt-rss/log/ssl-access.log main;
    error_log /path/to/tt-rss/log/ssl-error.log;

    keepalive_timeout           60;
    ssl_certificate             /etc/letsencrypt/live/rss.site.name/fullchain.pem;
    ssl_certificate_key         /etc/letsencrypt/live/rss.site.name/privkey.pem;
    ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
    ssl_dhparam                 /etc/ssl/certs/dhparam.pem;
    add_header                  Strict-Transport-Security 'max-age=604800';

    # GZIP Compression
    gzip on;
    gzip_vary on;
    gzip_min_length 10240;
    gzip_proxied expired no-cache no-store private auth;
    gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml;
    gzip_disable "MSIE [1-6]\.";

    location ~ \.php$ {
    try_files  $uri =404;
    fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
    #fastcgi_pass    127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param DOCUMENT_ROOT /path/to/tt-rss/www/;
    fastcgi_param SCRIPT_FILENAME /path/to/tt-rss/www$fastcgi_script_name;
    fastcgi_param PATH_TRANSLATED /path/to/tt-rss/www$fastcgi_script_name;
    include fastcgi_params;
    fastcgi_param QUERY_STRING $query_string;
    fastcgi_param REQUEST_METHOD $request_method;
    fastcgi_param CONTENT_TYPE $content_type;
    fastcgi_param CONTENT_LENGTH $content_length;
    fastcgi_param HTTPS on;
    fastcgi_intercept_errors on;
    fastcgi_ignore_client_abort off;
    fastcgi_connect_timeout 60;
    fastcgi_send_timeout 180;
    fastcgi_read_timeout 180;
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 256k;
    fastcgi_busy_buffers_size 256k;
    fastcgi_temp_file_write_size 256k;
    }
    
    location /cache {
        deny all;
    }
    
    location = /config.php {
        deny all;
    }

}

server {
     listen  443 ssl http2;
     server_name  www.rss.site.name;
     rewrite ^ https://rss.site.name$request_uri? permanent;
}

Обращаю внимание, что у меня nginx работает с php-fpm через сокет. Если у вас по tcp порту, то ставьте
fastcgi_pass 127.0.0.1:9000;

Создаем директрию для логов

mkdir /path/to/tt-rss/log

Выставляем права

chown -R nginx. /path/to/tt-rss

Ставим сертификат от LetsEncrypt

yum install certbot
certbot certonly --standalone --preferred-challenges=http -d rss.site.name

Запускаем nginx

systemctl start nginx
systemctl enable nginx

Ставим php-fpm

rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install epel-release yum-utils
yum-config-manager --enable remi-php71
yum install php71 php-intl
yum install php-fpm php-pgsql 
systemctl start php-fpm
systemctl enable php-fpm

Настроим php-fpm

yum install net-tools
netstat -tulpn | grep php-fpm

Все в порядке, повис на порту 9000. Запустим его через unix сокет. Для этого открываем конфиг /etc/php-fpm.d/www.conf и комментируем строку:

vim /etc/php-fpm.d/www.conf

;listen = 127.0.0.1:9000

Вместо нее добавляем несколько других:

listen = /var/run/php-fpm/php-fpm.sock
listen.mode = 0660
listen.owner = nginx
listen.group = nginx

Заодно измените пользователя, от которого будет работать php-fpm. Вместо apache укажите nginx

user = nginx
group = nginx
systemctl restart php-fpm

Открываем 80, 443 порты

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

Уже можно заходить на rss.site.name и должно перекинуть в https://rss.site.name/install/

Осталось настроить postgresql

Подключим репозитрий

yum install https://download.postgresql.org/pub/repos/yum/11/redhat/rhel-7-x86_64/pgdg-centos11-11-2.noarch.rpm

Установим и запустим postgresql 11

yum install postgresql11-server
/usr/pgsql-11/bin/postgresql-11-setup initdb
systemctl start postgresql-11
systemctl enable postgresql-11

Cоздаем базу и пользователя для tt-rss

sudo -u postgres psql
postgres=# create database mydb;
postgres=# create user myuser with encrypted password 'mypass';
postgres=# grant all privileges on database mydb to myuser;

Смотрим где наша база и конфиги к ней

postgres=# SHOW config_file;
              config_file               
----------------------------------------
 /var/lib/pgsql/11/data/postgresql.conf
(1 row)

Выходим из postgresql

postgres=# \q

Правим файл /var/lib/pgsql/11/data/pg_hba.conf
Приводим его к виду

#local   all             all                                     peer
#host    all             all             127.0.0.1/32            ident
#host    all             all             ::1/128                 ident
local   all             all                                     md5
host    all             all             127.0.0.1/32            md5
host    all             all             ::1/128                 md5

Перезапускаем postgresql

systemctl restart postgresql-11

Возвращаемся к странице настроек https://rss.site.name/install/

По идее ошибок быть не должно. Сохраняем предложенный config.php файл. Его можно будет потом поправить и настроить под себя.

Дефолтные логин и пароль: admin — password

Осталось настроить проверку новых постов. Можно запускать по крону или написать демона, как подсказывает wiki: https://git.tt-rss.org/fox/tt-rss/wiki/UpdatingFeeds

Выбираю демоном

vim /etc/systemd/system/tt-rss.service

[Unit]
Description=ttrss_backend
After=network.target mysql.service postgresql.service

[Service]
User=nginx
ExecStart=/path/to/tt-rss/www/update_daemon2.php

[Install]
WantedBy=multi-user.target
systemctl start tt-rss.service
systemctl enable tt-rss.service

Обновляю так

cp -r /path/to/tt-rss/ /path/to/tt-rss.copy
cd /path/to/tt-rss/www/
git pull origin master

Zabbix 3 на nginx и php-fpm на centos 7

Идея в том, чтоб настроить веб-интерфейс zabbix 3 на nginx и php-fpm на одном сервере, а zabbix-server на другом.

Настраиваем веб-сервер

Ставим nginx

rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm
yum install nginx

systemctl start nginx
systemctl enable nginx

Конфиг nginx

vim /etc/nginx/conf.d/zabbix.conf
server {
listen 80;

root /usr/share/zabbix;
access_log /var/log/nginx/zabbix.access.log;
server_name 172.16.16.10;

location / {
index index.php index.html index.htm;
}

location ~ \.php$ {
#fastcgi_pass 127.0.0.1:9000;
fastcgi_pass unix:/var/run/php-fpm/php-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_param PHP_VALUE "
max_execution_time = 300
memory_limit = 128M
post_max_size = 16M
upload_max_filesize = 2M
max_input_time = 300
date.timezone = Europe/Moscow
always_populate_raw_post_data = -1
";
fastcgi_buffers 8 256k;
fastcgi_buffer_size 128k;
fastcgi_intercept_errors on;
fastcgi_busy_buffers_size 256k;
fastcgi_temp_file_write_size 256k;
}

client_max_body_size 32m;

}

Обращаю внимание, что у меня nginx работает с php-fpm через сокет. Если у вас по tcp порту, то ставьте

fastcgi_pass 127.0.0.1:9000;

Открываем 80, 443 порты

firewall-cmd --add-service=http --permanent
firewall-cmd --add-service=https --permanent
firewall-cmd --reload

Ставим php-fpm

rpm -ivh http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install epel-release yum-utils
yum-config-manager --enable remi-php71

yum install php71
yum install php-fpm php-cli php-mysql php-gd php-ldap php-odbc php-pdo php-pecl-memcache php-pear php-xml php-xmlrpc php-mbstring php-snmp php-soap

systemctl start php-fpm
systemctl enable php-fpm

Настроим php-fpm

yum install net-tools

netstat -tulpn | grep php-fpm

Все в порядке, повис на порту 9000. Запустим его через unix сокет. Для этого открываем конфиг /etc/php-fpm.d/www.conf и комментируем строку:

vim /etc/php-fpm.d/www.conf

;listen = 127.0.0.1:9000

Вместо нее добавляем несколько других:

listen = /var/run/php-fpm/php-fpm.sock
listen.mode = 0660
listen.owner = nginx
listen.group = nginx

Заодно измените пользователя, от которого будет работать php-fpm. Вместо apache укажите nginx

user = nginx
group = nginx

Ставим zabbix

rpm -ivh http://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpm
yum install zabbix-web-mysql

Настроим selinux
Дадим права на подключение к удаленной базе mysql

getsebool -a | grep httpd_can_network_connect_db
setsebool -P httpd_can_network_connect_db 1

Дадим возможность вебморде подключаться к серверной части

getsebool -a | grep zabbix
setsebool -P httpd_can_connect_zabbix 1

Настроим права

chown -R nginx. /etc/zabbix/web
chown -R nginx. /usr/share/zabbix

Дабы не получать ошибку

PHP message: PHP Fatal error:  Uncaught Exception: Cannot start session. in /usr/share/zabbix/include/classes/core/CSession.php:50

в /etc/php-fpm.d/www.conf ищем строку

php_value[session.save_path]    = /var/lib/php/session

И выставляем полные права на директорию /var/lib/php/session

chmod 770 /var/lib/php/session
chown :nginx /var/lib/php/session
systemctl restart php-fpm

Перезапускаем nginx

systemctl restart nginx.service

 

Настраиваем второй сервер

Ставим mariadb

yum install mariadb-server mariadb-devel
systemctl enable mariadb.service
systemctl start mariadb.service

Создадим базу и дадим права

create database zabbix;
grant all privileges on zabbix.* to 'zabbix'@'localhost' identified by 'пароль';
grant all privileges on zabbix.* to 'zabbix'@'172.16.16.10' identified by 'пароль';
flush privileges;

где 172.16.16.10 — ip адрес веб-сервера

Ставим zabbix-сервер

rpm -ivh http://repo.zabbix.com/zabbix/3.5/rhel/7/x86_64/zabbix-release-3.5-1.el7.noarch.rpm
yum install zabbix-server-mysql zabbix-agent

Указываем пароль базы

vim /etc/zabbix/zabbix_server.conf
DBPassword=пароль

Запускаем

systemctl start zabbix-server.service
systemctl enable zabbix-server.service
systemctl start zabbix-agent.service
systemctl enable zabbix-agent.service

Откроем порт mysql

firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

Открываем порты 10051, 10050, snmp

firewall-cmd --permanent --new-service=zabbix
firewall-cmd --service=zabbix --add-port=10051/tcp --permanent
firewall-cmd --service=zabbix --add-port=10050/tcp --permanent
firewall-cmd --add-service=zabbix --permanent
firewall-cmd --add-service=snmp --permanent
firewall-cmd --reload

По мотивам:
https://serveradmin.ru/ustanovka-i-nastroyka-nginx-php-fpm-php7-1-na-centos-7/
https://serveradmin.ru/ustanovka-zabbix-3-na-nginx-php-fpm/

301 редирект с домена на домен

Вчера столкнулся с таким интересным явлением, когда у совершенно стороннего чужого домена в качестве А записи в DNS с был указан ip нашего ресурса. Т.о. этот совершенно чужой домен показывал контент нашего портала и даже индексировался поисковиками. Для чего это было сделано не знаю, возможно ради повышения ТИЦ и PR своего домена.

Исправил это безобразие записью в .htaccess

Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} чужойсайт.ru
RewriteRule ^(.*)$ http://нашсайт.ru/ [R=301,L]

В случае, если нужно сделать под nginx, тогда создаем конфиг файл, например, /etc/nginx/bx/site_enabled/redirect.conf (путь может быть другой, т.к. я делал для битрикса)

server {
        listen 80;
        server_name чужойсайт.ru www.чужойсайт.ru чужойсайт2.ru;
        rewrite ^ http://нашсайт.ru$request_uri? permanent;
}

затем

service nginx configtest
service nginx reload