Centos 7 apache nginx php-fpm git — установка. Nginx apache centos 7
Веб-сервер на связке NGINX + Apache (httpd) + MariaDB + PHP + PHPMyAdmin +FTP на CentOS 7
Разворачиваем веб-сервер на связке NGINX + Apache (httpd) + MariaDB + PHP + PHPMyAdmin +FTP, или по-простому NGINX + LAMP.
Будем следовать следующему принципу — сначала всё установим, а потом уже будем заниматься настройкой.
Устанавливаем компоненты
Это своего рода чек-лист для проверки наличия компонентов:
- NGINX — подробно описано в этой статье.
- PHP и PHP-FRM — подробно описано в этой статье.
- Apache (httpd) — подробно описано в этой статье.
- MariaDB — подробно описано в этой статье.
- PhpMyAdmin — подробно описано в этой статье.
Перед настройкой. Важно для понимания!
Общая картина выглядит следующим образом:
- Настройка сервера на какой-нибудь домен — это настройка всего ДВУХ основных компонентов — httpd и nginx. Для домена создается один конфиг в httpd и другой в nginx, и все по сути.
- Но, чтобы прописать конфиги правильно, нужно заранее определиться со структурой папок для сайта на своем сервере, потому что в конфигах пишутся пути до этих папок, и нужно их заранее знать уже.
Ну, и сразу тогда разберемся со структурой этих папок, подготовим их.
Вы можете придумать свою структуру, но лично я, как и многие другие вебмастера, использую следующую (просто посмотрите, а чуть позже создадим):
/web | создаем новую папку в самом корне сервера, т.е. на одном уровне с папками etc, var и др. Это будет основной раздел, где будут все наши сайты. |
/web/site1.ru /web/site2.ru /web/site3.ru | внутри нее будем создавать отдельную папку под каждый сайт, так удобно. |
И для каждого сайта создаем две папки:
| |
/web/site1.ru/www | эта папка будет содержать все файлы сайта (сюда будем заливать по ftp) |
/web/site1.ru/logs | а сюда будут сваливаться все логи |
Теперь создаем это все одной командой:
mkdir /web && mkdir /web/site1.ru && mkdir /web/site1.ru/www && mkdir /web/site1.ru/logs
mkdir /web && mkdir /web/site1.ru && mkdir /web/site1.ru/www && mkdir /web/site1.ru/logs |
*таким образом мы создали все необходимые папки для одного сайта.
Не забываем назначить владельца папки:
И дать права на эту папку:
Переходим к настройке связки NGINX + Apache (httpd)
Важно для понимания!
Как мы помним, для того, чтобы наш сервер обслуживал какой-нибудь домен, нужно для этого домена:
- написать конфиг в httpd
- написать конфиг в nginx
То есть всего лишь 2 конфига и все!
Конфиг для httpd
Перед созданием нового конфига, нужно проверить, чтобы в основном конфиге сервиса /etc/httpd/conf/httpd.conf была раскомментирована строка (она обычно в самом конце):
IncludeOptional conf.d/*.conf
IncludeOptional conf.d/*.conf |
*тогда наш отдельный новый конфиг будет подхватываться сервисом автоматически.
Открываем на редактирование и правим (раскомментируем):
mcedit /etc/httpd/conf/httpd.conf
mcedit /etc/httpd/conf/httpd.conf |
Сохраняем.
Теперь заходим в директорию /etc/httpd/conf.d/ и внутри нее создаем файл-конфиг с названием сайта site1.ru.conf
То есть можно выполнить команду:
mcedit /etc/httpd/conf.d/site1.ru.conf
mcedit /etc/httpd/conf.d/site1.ru.conf |
*тогда откроется несуществующий файл, мы туда занесем инфу, сохраним его и файл тут же создастся с этим содержимым.
Классический конфиг выглядит так:
#в связке nginx+apache ставим именно порт 8080 <VirtualHost *:8080> #тут все понятно, пишем домен и его алиас ServerName site1.ru ServerAlias www.site1.ru #определяем корневую папку сайта для доступа из интернета DocumentRoot /web/site1.ru/www #определяем куда будут сваливаться логи ошибок и доступа ErrorLog /web/site1.ru/logs/error.log CustomLog /web/site1.ru/logs/access.log common #следующий блок определяет опции и разрешения для корневой папки сайта <Directory /web/site1.ru/www> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
#в связке nginx+apache ставим именно порт 8080 <VirtualHost *:8080>
#тут все понятно, пишем домен и его алиас ServerName site1.ru ServerAlias www.site1.ru
#определяем корневую папку сайта для доступа из интернета DocumentRoot /web/site1.ru/www
#определяем куда будут сваливаться логи ошибок и доступа ErrorLog /web/site1.ru/logs/error.log CustomLog /web/site1.ru/logs/access.log common
#следующий блок определяет опции и разрешения для корневой папки сайта <Directory /web/site1.ru/www> Options FollowSymLinks AllowOverride All Require all granted </Directory>
</VirtualHost> |
Сохраняем и проверяем корректность настроек конфига:
Перезапускаем httpd:
В принципе, теперь можно перейти к настройке конфига nginx. Но для мозгоебов перфекционистов, к которым я себя тоже отношу, можно пойти по пути универсализации этого конфига.
Настройка конфига httpd для перфекционистов
Этот блок можно пропустить и читать уже про наcтройку конфига nginx. Здесь я просто попытаюсь его изменить так, чтобы для каждого нового сайта исправлять конфиг приходилось самый минимум, то есть сделать его практически универсальным.
Мы видим, что у нас часто повторяется название сайта site1.ru. И для каждого нового домена придется менять его снова во многих местах. Это неудобно, поэтому сделаем так, чтобы его приходилось менять только в одном месте.
Для этого название сайта определим в переменную, а потом будем просто использовать эту переменную в любом месте.
Никуда не пишем, просто для понимания:
Define domain site1.ru #команда define определяет переменную
Define domain site1.ru #команда define определяет переменную |
Теперь в том месте, где нам понадобится вывести название нашего сайта, мы просто будем писать:
Теперь берем наш классический конфиг (которые уже сделали выше) и сначала задаем переменную, а потом везде site1.ru меняем на ${domain}.
Итоговый конфиг такой:
#в связке nginx+apache ставим именно порт 8080 <VirtualHost *:8080> #определяем переменную, пишем это в самом начале Define domain site1.ru #тут все понятно, пишем домен и его алиас ServerName ${domain} ServerAlias www.${domain} #определяем корневую папку сайта для доступа из интернета DocumentRoot /web/${domain}/www #определяем куда будут сваливаться логи ошибок и доступа ErrorLog /web/${domain}/logs/error.log CustomLog /web/${domain}/logs/access.log common #следующий блок определяет опции и разрешения для корневой папки сайта <Directory /web/${domain}/www> Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#в связке nginx+apache ставим именно порт 8080 <VirtualHost *:8080>
#определяем переменную, пишем это в самом начале Define domain site1.ru
#тут все понятно, пишем домен и его алиас ServerName ${domain} ServerAlias www.${domain}
#определяем корневую папку сайта для доступа из интернета DocumentRoot /web/${domain}/www
#определяем куда будут сваливаться логи ошибок и доступа ErrorLog /web/${domain}/logs/error.log CustomLog /web/${domain}/logs/access.log common
#следующий блок определяет опции и разрешения для корневой папки сайта <Directory /web/${domain}/www> Options FollowSymLinks AllowOverride All Require all granted </Directory>
</VirtualHost> |
— этот конфиг удобен тем, что название сайта нужно менять только в одном месте, там где задается переменная. А в остальных местах подставляется эта самая переменная.
Если идти еще дальше, то одинаковые куски кода можно вынести в дефолтный конфиг httpd, который лежит вот здесь /etc/httpd/conf/httpd.conf.
Здесь одинаковым блоком может стать:
<Directory /web/${domain}/www> Options FollowSymLinks AllowOverride All Require all granted </Directory>
<Directory /web/${domain}/www> Options FollowSymLinks AllowOverride All Require all granted </Directory> |
Но, чтобы он стал универсальным и подходил для любого домена, нужно ${domain} заменить на * (звездочку).
<Directory /web/*/www> Options FollowSymLinks AllowOverride All Require all granted </Directory>
<Directory /web/*/www> Options FollowSymLinks AllowOverride All Require all granted </Directory> |
И запихать этот код в дефолтный конфиг /etc/httpd/conf/httpd.conf, а в классическом конфиге тогда этот кусок нужно вырезать.
Не забываем перезапустить httpd.
Конфиг для NGINX
Перед созданием нового конфига, нужно проверить, чтобы в основном конфиге сервиса /etc/nginx/nginx.conf была раскомментирована строка:
include /etc/nginx/conf.d/*.conf
include /etc/nginx/conf.d/*.conf |
*тогда наш новый конфиг подхватится сервисом автоматически.
Открываем и проверяем:
mcedit /etc/nginx/nginx.conf
mcedit /etc/nginx/nginx.conf |
Аналогично, заходим в директорию /etc/nginx/conf.d/ и внутри нее создаем файл-конфиг с названием сайта site1.ru.conf или просто выполняем команду:
mcedit /etc/nginx/conf.d/site1.ru.conf
mcedit /etc/nginx/conf.d/site1.ru.conf |
И в него заносим:
server { listen 80; server_name site1.ru www.site1.ru; gzip on; gzip_disable "msie6"; gzip_min_length 1000; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript; # Ведём журнал доступа: access_log /web/site1.ru/logs/access.log; # Разделяем статику и динамку, статику храним в кэше 10 дней: location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ { root /web/site1.ru/www; expires 10d; } location / { proxy_pass http://127.0.0.1:8080/; proxy_redirect off; log_not_found off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
server { listen 80; server_name site1.ru www.site1.ru; gzip on; gzip_disable "msie6"; gzip_min_length 1000; gzip_vary on; gzip_proxied expired no-cache no-store private auth; gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
# Ведём журнал доступа: access_log /web/site1.ru/logs/access.log;
# Разделяем статику и динамку, статику храним в кэше 10 дней: location ~* ^.+\.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ { root /web/site1.ru/www; expires 10d; }
location / { proxy_pass http://127.0.0.1:8080/; proxy_redirect off; log_not_found off; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $http_host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } } |
В данном конфиге — для нового сайта нужно заменить имя сайта в четырех местах.
Проверяем корректность настройки конфига:
Перезапускаем nginx:
Важно! После каждого изменения любого конфига, необходим перезапуск сервиса!
FTP
В качестве ftp лучше использовать sftp. Установка sftp на centos 7 рассмотрена в этой статье.
kilobax.ru
Настройка VDS с нуля на Centos 7, Nginx, PHP-fpm без Apache — Mac и Linux
Здесь собраны все необходимые процедуры для настройки сервера с нуля на основе Centos 7.x без использования Apache для экономии серверных ресурсов. Apache заменяет Nginx с модулем PHP-FPM 5.6. В качестве базы данных используется MariaDB.
1. Nginx
2. PHP 5.6
3. php.ini
4. PHP-FPM
5. Настроить конфиги php-fpm и nginx
6. Пользователей, кроме root, сменить пароль root
7. Firewall или iptables
8. Папки сайтов и логов
9. MariaDB
Очистка старого SSH ключа на локальной машине
ssh-keygen -R *ip_address_or_hostname*
cat /etc/centos-release — проверка версии centos
Апдейт
yum clean all
yum update
yum autoremove
Package 1:nginx-1.10.2-1.el7.x86_64 already installed and latest version
Package php-fpm-5.6.30-1.el7.remi.x86_64 already installed and latest version
Package php-mysql-5.4.45-13.el7.remi.x86_64 is obsoleted by php-mysqlnd-5.6.30-1.el7.remi.x86_64 which is already installed
Package 1:mariadb-server-5.5.52-1.el7.x86_64 already installed and latest version
Package unzip-6.0-16.el7.x86_64 already installed and latest version
Firewall
systemctl status firewalld — проверка статуса файрволла
firewall-cmd —list-ports
Меняем порт SSH
$ sudo firewall-cmd —zone=public —add-port=974/tcp —permanent
$ sudo firewall-cmd —reload
firewall-cmd —zone=public —remove-port=22/tcp
systemctl restart firewalld.service
nano /etc/ssh/sshd_config
systemctl restart sshd.service
nano /etc/sysconfig/selinux — проверить disable
Устанавливаем NGINX
yum install epel-release
yum install nginx
systemctl start nginx
systemctl status nginx
If you are running a firewall, run the following commands to allow HTTP and HTTPS traffic:
sudo firewall-cmd —permanent —zone=public —add-service=http
sudo firewall-cmd —permanent —zone=public —add-service=https
nginx -V
check
http://server_domain_name_or_IP/ проверить IP — ip addr
You should now put your content in a location of your choice and edit the root configuration directive in the nginx configuration file /etc/nginx/nginx.conf.
Start every boot
systemctl enable nginx
Default Server Root
The default server root directory is /usr/share/nginx/html. Files that are placed in there will be served on your web server. This location is specified in the default server block configuration file that ships with Nginx, which is located at /etc/nginx/nginx.conf.
Server Block Configuration
Any additional server blocks, known as Virtual Hosts in Apache, can be added by creating new configuration files in /etc/nginx/conf.d. Files that end with .conf in that directory will be loaded when Nginx is started.
Nginx Global Configuration
The main Nginx configuration file is located at /etc/nginx/nginx.conf. This is where you can change settings like the user that runs the Nginx daemon processes, and the number of worker processes that get spawned when Nginx is running, among other things.
Версия PHP
php -v
Обновление до PHP 5.6
# wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm
# rpm -Uvh remi-release-7*.rpm
В CentOS php.ini лежит в /etc, прямо в корне.
We will change both of these conditions by uncommenting the line and setting it to «0» like this:
/etc/php.ini excerpt
cgi.fix_pathinfo=0
Установка PHP-FPM
sudo nano /etc/yum.repos.d/remi.repo
удаляем 5.5 и ставим enabled=1 для remi и remi-php56
Теперь обновляем php 5.4 до php 5.6:
# yum —enablerepo=remi,remi-php56 install php php-common php-mysql php-mbstring php-mcrypt php-devel php-xml php-gd php-fpm
Запускаем
systemctl start php-fpm
systemctl enable php-fpm
Создаём конфиг php-fpm
nano /etc/nginx/default.d/php-fpm.conf
And add the following content to it:
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
location ~ \.php$ {
root /usr/share/nginx/html;
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
Next, open the php-fpm configuration file www.conf:
sudo vi /etc/php-fpm.d/www.conf
Find the line that specifies the listen parameter, and change it so it looks like the following:
127.0.0.1 заменить на
listen = /var/run/php-fpm/php-fpm.sock
Next, find the lines that set the listen.owner and listen.group and uncomment them. They should look like this:
listen.owner = nobody
listen.group = nobody
Lastly, find the lines that set the user and group and change their values from «apache» to «nginx»:
user = nginx
group = nginx
Then save and quit.
Now, we just need to start our PHP processor by typing:
sudo systemctl start php-fpm
This will implement the change that we made.
Next, enable php-fpm to start on boot:
sudo systemctl enable php-fpm
systemctl restart php-fpm
systemctl restart nginx
Узнать версию MySql
rpm -qa | grep mysql
Пакеты MySql
Пакеты MySql
yum list installed | grep mysql
Просмотр установленных пакетов
yum list installed
Установка MariaDB
yum install -y mariadb mariadb-server
Добавляем mariadb в автозапуск:
# systemctl enable mariadb.service
Запускаем mariadb:
# systemctl start mariadb
Перезапуск mariadb/mysql в CentOS 7:
# systemctl restart mariadb
Проверяем, запустилась или нет:
# netstat -tulnp | grep mysqld
Теперь запускаем стандартный скрипт настройки безопасности:
# /usr/bin/mysql_secure_installation
www.artvolt.ru
Centos 7 apache nginx php-fpm git
Пошаговая инструкция по установка окружения веб-разработчика на чистой VPS CentOS 7
cat /etc/redhat-release yum update # Общие пакеты yum install sudo curl vim mc net-tools bind-utils mlocate gcc-c++ # Apache yum install httpd systemctl enable httpd # PHP 5.6 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install php56w php56w-opcache php56w-xml php56w-mcrypt php56w-gd php56w-devel php56w-intl php56w-mbstring php56w-bcmath php56w-pdo php56w-mysql php56w-pgsql php56w-pear php56w-pecl-apcu php56w-fpm php56w-process systemctl enable php-fpm # Nginx vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=https://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 yum install nginx systemctl enable nginx # GIT wget https://github.com/git/git/archive/v2.6.3.tar.gz tar -zxf v2.6.3.tar.gz cd git-2.6.3/ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc xmlto docbook2x perl-devel docbook2X ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi make configure ./configure --prefix=/usr make all doc info make install install-doc install-html install-info # MySql 5.6 wget https://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-server systemctl start mysqld systemctl enable mysqld mysql_secure_installation # PostgreSQL 9.4 yum install https://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm yum install postgresql94-server postgresql94-contrib /usr/pgsql-9.4/bin/postgresql94-setup initdb systemctl enable postgresql-9.4.service systemctl start postgresql-9.4.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
cat /etc/redhat-release yum update
# Общие пакеты yum install sudo curl vim mc net-tools bind-utils mlocate gcc-c++
# Apache yum install httpd systemctl enable httpd
# PHP 5.6 rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum install php56w php56w-opcache php56w-xml php56w-mcrypt php56w-gd php56w-devel php56w-intl php56w-mbstring php56w-bcmath php56w-pdo php56w-mysql php56w-pgsql php56w-pear php56w-pecl-apcu php56w-fpm php56w-process systemctl enable php-fpm
# Nginx vim /etc/yum.repos.d/nginx.repo [nginx] name=nginx repo baseurl=https://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 yum install nginx systemctl enable nginx
# GIT wget https://github.com/git/git/archive/v2.6.3.tar.gz tar -zxf v2.6.3.tar.gz cd git-2.6.3/ yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel asciidoc xmlto docbook2x perl-devel docbook2X ln -s /usr/bin/db2x_docbook2texi /usr/bin/docbook2x-texi make configure ./configure --prefix=/usr make all doc info make install install-doc install-html install-info
# MySql 5.6 wget https://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm rpm -ivh mysql-community-release-el7-5.noarch.rpm yum install mysql-server systemctl start mysqld systemctl enable mysqld mysql_secure_installation
# PostgreSQL 9.4 yum install https://yum.postgresql.org/9.4/redhat/rhel-6-x86_64/pgdg-redhat94-9.4-1.noarch.rpm yum install postgresql94-server postgresql94-contrib /usr/pgsql-9.4/bin/postgresql94-setup initdb systemctl enable postgresql-9.4.service systemctl start postgresql-9.4.service |
Раздел: CentOS Linux MySQL PHP PostgreSQL Метки: apache, centos, git, mysql, nginx, php, postgresql
zeka.kiev.ua