Categories: Инструкции

NGINX + Apache + MariaDB (MySQL) + PHP + PHP-FPM (fastCGI) + FTP + PHPMyAdmin + Memcached + Postfix на Ubuntu

Используемые термины: Linux , Ubuntu , NGINX , Apache , MySQL , MariaDB , PHP-FPM , FTP , phpMyAdmin , Memcached , Postfix .

Данная инструкция позволит настроить веб-сервер для решения большей части задач по размещению сайтов, порталов или веб-приложений. Она подходит для серверов на Ubuntu и других систем на основе deb-пакетов. Для RPM Linux читайте похожую инструкцию по настройке полноценного веб-сервера на CentOS .

Данные команды протестированы на Ubuntu версий 18, 20 и 22.

Содержание:

Настройка операционной системы

1. Обновляем Ubuntu:

apt update && apt upgrade

2. Настраиваем время:

apt install chrony

timedatectl set-timezone Europe/Moscow

systemctl enable chrony

* первая команда для установки пакета синхронизации времени; вторая задает часовой пояс по московскому времени; третья разрашит автозапуск chrony .

3. По умолчанию, в Ubuntu брандмауэр работает в режиме «разрешить все». Но если мы настроили защиту по максимуму, то для веб-сервера открываем следующие порты:

iptables -I INPUT 1 -p tcp —match multiport —dports 80,443,8080 -j ACCEPT

iptables -I INPUT 1 -p tcp —match multiport —dports 20,21,60000:65535 -j ACCEPT

* 80, 443 и 8080 порты для веб-сервера ; 20, 21 порты нужны для работы FTP; 60000-65535 также необходимы для работы FTP (динамические порты для пассивного режима); Подробнее про настройку iptables .

Для сохранения правил ставим пакет iptables-persistent:

apt install iptables-persistent

Для сохранения правил вводим команду:

netfilter-persistent save

Установка NGINX

Устанавливаем NGINX:

apt install nginx

Проверим работу веб-сервера. Открываем браузер и вводим в адресной строке http://<IP-адрес сервера> . В итоге мы должны увидеть заголовок «Welcome to nginx!»:

Если стартовая страница не загружается, проверяем состояние сервиса:

systemctl status nginx

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

Устанавливаем PHP и PHP-FPM:

apt install php php-fpm

* в каждой версии Ubuntu устанавливается своя нативная версия php. Но если нам нужно установить несколько версий PHP или конкретную версию, то использум инструкцию Установка разных версий PHP на Linux Ubuntu .

Далее, в зависимости от установленной версии PHP команды и действия будут различаться. Смотрим версию php:

php -v

Создадим переменную с версией PHP:

PHP_VER=7.4

* в моем случае будет версия 7.4.

Разрешаем автозапуск php-fpm и запускаем его:

systemctl enable php${PHP_VER}-fpm

* обратите внимание, что мы запустили php-fpm версии 7.4 (через переменную). Но установлена может быть и другая версия — ее можно узнать по версии php командой php -v .

Настройка связки NGINX + PHP

Открываем файл для настройки виртуального домена по умолчанию:

vi /etc/nginx/sites-enabled/default

В секции location или server редактируем параметр index на следующее значение:


index index.php index.html index.htm;

* в данном случае мы сказали серверу сначала искать индексный файл index.php , затем остальные по списку.

А внутри секции server добавим следующее:

location ~ .php$ {
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}

* где /var/www/html — корневой путь хранения скриптов; /run/php/php7.4-fpm.sock — путь до сокетного файла для взаимодействия с php-fpm. Обратите еще раз внимание, что если в нашей системе будет установлена другая версия php, необходимо внести соответствующую корректировку.

Пример файла default:

server {
listen 80 default_server;
listen [::]:80 default_server;

root /var/www/html;
index index.php index.html index.htm index.nginx-debian.html;
server_name _;

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

location ~ .php$ {
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
}

Проверяем правильность настроек nginx и перезагружаем его:

nginx -t && nginx -s reload

Открываем конфигурационный файл PHP-FPM:

vi /etc/php/${PHP_VER}/fpm/pool.d/www.conf

Проверяем, что путь до сокетного файла такой же, как мы задали в настройках NGINX:

listen = /run/php/php7.4-fpm.sock

В противном случае меняем его и перезапускаем сервис:

systemctl restart php${PHP_VER}-fpm

Теперь заходим в каталог хранения настроенного сайта:

cd /var/www/html

Создаем index.php со следующим содержимым:

vi index.php

<?php phpinfo(); ?>

Открываем браузере и переходим по адресу http://<IP-адрес сервера> . Мы должны увидеть сводную информацию по PHP и его настройкам:

* в данном примере используется php версии 7.4.

Установка СУБД

В данной статье мы установим MariaDB. Установка выполняется следующей командой:

apt install mariadb-server

Входим в SQL-оболочку:

mysql

Задаем пароль для пользователя root@localhost:

> SET PASSWORD FOR ‘root’@’localhost’ = PASSWORD(‘New_Password’);

> flush privileges;

* где New_Password — пароль, который мы хотим установить для учетной записи root.

Выходим из sql-консоли:

> quit

PHP + MariaDB

Для возможности подключаться к базе данных скриптами PHP, необходимо установить следующие модули:

apt install php-mysql php-mysqli

После перезагружаем php-fpm:

systemctl restart php${PHP_VER}-fpm

И открываем наш сайт в браузере. В phpinfo появится новая секция MySQL:

* несмотря на то, что мы установили mariadb, в заголовке мы видим mysql. Так и должно быть.

Установка phpMyAdmin

Для установки phpMyAdmin вводим следующую команду:

apt install phpmyadmin

* в процессе установки система может потребовать ввод пароля для пользователя phpmyadmin . Его нужно ввести дважды.

Теперь создадим конфигурационный файл. Содержимое будет отличаться в зависимости от того, как мы будем настраивать наш сервер.

а) Виртуальный домен в NGINX:

vi /etc/nginx/sites-enabled/phpmyadmin.conf

server {
listen 80;
server_name phpmyadmin.remontka.local;
set $root_path /usr/share/phpmyadmin;

root $root_path;

location / {
index index.php;
}

location ~ .php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}
}

* где phpmyadmin.remontka.local — адрес для виртуального домена, именно этот адрес должен быть введен в адресную строку браузера, чтобы открылся нужный сайт. Поэтому есть нет возможность зарегистрировать домен и имя узла в DNS , можно воспользоваться локальным файлом hosts. /usr/share/phpmyadmin — это каталог, в который по умолчанию устанавливается phpMyAdmin.

б) Используем location /phpmyadmin:

vi /etc/nginx/sites-enabled/default

Добавляем location (выделено желтым):

server {
listen 80 default_server;

location /phpmyadmin {
root /usr/share/;
index index.php;
location ~ ^/phpmyadmin/(.+.php)$ {
root /usr/share/;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
fastcgi_read_timeout 300;
}
location ~* ^/phpmyadmin/(.+.(jpg|jpeg|gif|css|png|js|ico|html|xml|txt))$ {
root /usr/share/;
}
}
}

После перезапускаем NGINX:

systemctl reload nginx

Открываем браузер. В зависимости от выбранного способа настройки, ссылка на phpmyadmin будет разной:

  1. http://phpmyadmin.remontka.local — если настроили phpmyadmin на отдельном виртуальном домене (способ а).
  2. http://<IP-адрес сервера>/phpmyadmin — если настроили location /phpmyadmin (способ б).

Откроется форма для авторизации — вводим логин phpmyadmin и пароль, который мы указали при установке phpmyadmin.

Если система вернула ошибку входа из-за неправильного пароля, необходимо задать пароль для учетной записи root@localhost (рассказывается выше в разделе установки MariaDB).

Установка Memcached

Для начала, выполняем установку пакетов:

apt install memcached php-memcached

После разрешаем автозапуск и запускаем сервис кэширования:

systemctl enable memcached

Перезапускаем php-fpm:

systemctl restart php${PHP_VER}-fpm

Для проверки, что модуль memcached появился в PHP, открываем наш сайт в браузере — в phpinfo должна появиться новая секция:

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

Мы настроим ProFTPd, так как он позволит использовать виртуальных пользователей с uid пользователя www-data.

Для его установки вводим следующую команду:

apt install proftpd

Смотрим uid пользователя www-data:

id www-data

* в Ubuntu это, как правило, 33 .

Создаем виртуального пользователя:

ftpasswd —passwd —file=/etc/proftpd/ftpd.passwd —name=ftpwww —uid=33 —gid=33 —home=/var/www —shell=/usr/sbin/nologin

* где /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи; ftpwww — имя пользователя (логин); uid и gid — идентификаторы пользователя и группы системной учетной записи (www-data); /var/www — домашний каталог пользователя; /usr/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.

Открываем основной конфигурационный файл:

vi /etc/proftpd/proftpd.conf

Снимаем комментарий или редактируем опцию:

DefaultRoot ~

* данная опция говорит о том, что корневой директорией для пользователя будет домашняя директория. Это нужно, чтобы FTP-пользователи не могли выйти за пределы дозволенного и видеть на сервере сайты друг друга.

Создаем дополнительный конфигурационный файл для proftpd:

vi /etc/proftpd/conf.d/custom.conf

Со следующим содержимым:

UseIPv6 off
IdentLookups off
PassivePorts 60000 65535

RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c

* где 60000 — 65535 — диапазон динамических портов для пассивного режима.

Разрешаем автозапуск FTP-серверу и запускаем его:

systemctl enable proftpd

systemctl restart proftpd

Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.

При необходимости, можно настроить шифрование и хранение пользователей в базе данных. Подробнее в инструкции Установка и настройка ProFTPd на Ubuntu Server .

Apache

Для поддержки файла .htaccess, который используется многими сайтами, необходимо установить и настроить веб-сервер Apache.

Устанавливаем apache и модуль для php:

apt install apache2 libapache2-mod-php

Заходим в настройки портов:

vi /etc/apache2/ports.conf

И редактируем следующее:

Listen 8080

#<IfModule ssl_module>
# Listen 443
#</IfModule>

#<IfModule mod_gnutls.c>
# Listen 443
#</IfModule>

* мы настроили прослушивание на порту 8080 , так как на 80 уже работает NGINX. Также мы закомментировали прослушивание по 443 , так как и он будет слушаться NGINX.

Теперь открываем настройку следующего модуля:

vi /etc/apache2/mods-available/dir.conf

И добавляем впереди индексных файлов index.php:

<IfModule dir_module>
DirectoryIndex index.php index.html …
</IfModule>

* если не указан конкретный скрипт, сначала веб-сервер пытается найти и запустить index.php , затем index.html и так далее.

Открываем основной конфигурационный файл для apache:

vi /etc/apache2/apache2.conf

Рядом с опциями Directory дописываем:

<Directory /var/www/*/www>
AllowOverride All
Options Indexes ExecCGI FollowSymLinks
Require all granted
</Directory>

* где Directory указывает на путь, для которого мы хотим задать настройки; AllowOverride — позволит переопределить все настройки с помощью файла .htaccess; Options задает некоторые настройки: Indexes разрешает списки каталогов, ExecCGI разрешает запуск cgi скриптов, Require all granted — предоставляет всем доступ к сайтам в данном каталоге.

Ниже допишем:

<IfModule setenvif_module>
SetEnvIf X-Forwarded-Proto https HTTPS=on
</IfModule>

* этой настройкой мы при получении заголовка X-Forwarded-Proto со значением https задаем переменную $_SERVER[‘HTTPS’] равную on . Данная настройки критична для функционирования некоторых CMS.

Запрещаем mpm_event:

a2dismod mpm_event

* по умолчанию, apache2 может быть установлен с модулем мультипроцессовой обработки mpm_event . Данный модуль не поддерживает php 7 и выше.

Разрешаем модуль мультипроцессовой обработки mpm_prefork:

a2enmod mpm_prefork

Разрешаем модуль php:

a2enmod php${PHP_VER}

* в данном примере установлен php версии 7.4.

Разрешаем модуль setenvif:

a2enmod setenvif

Разрешаем модуль rewrite:

a2enmod rewrite

В процессе включения модулей, если мы видим «Module … already enabled», значит модуль уже включен.

Разрешаем автозапуск Apache и перезапускаем службу:

systemctl enable apache2

systemctl restart apache2

Открываем браузер и вводим в адресную строку http://<IP-адрес сервера>:8080 . Мы должны увидеть привычную страницу:

* в разделе Server API мы должны увидеть Apache .

NGINX + Apache

Ранее мы настроили связку nginx + php-fpm. Теперь настроим nginx + apache. Открываем конфигурационный файл nginx для сайта по умолчанию:

vi /etc/nginx/sites-enabled/default

Находим наш настроенный location для php-fpm:


location ~ .php$ {
set $root_path /var/www/html;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $root_path$fastcgi_script_name;
include fastcgi_params;
fastcgi_param DOCUMENT_ROOT $root_path;
}

и меняем на:


location ~ .php$ {
proxy_pass http://127.0.0.1:8080;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

Проверяем и перезапускаем nginx:

nginx -t && nginx -s reload

Пробуем открыть в браузере http://<IP-адрес сервера> — должна открыться та же страница, что при проверке Apache (с добавлением 8080):

Apache Real IP

Запросы на apache приходят от NGINX, и они воспринимаются первым как от IP-адреса 127.0.0.1. На практике, это может привести к проблемам, так как некоторым сайтам необходимы реальные адреса посетителей. Для решения проблемы будем использовать модуль remoteip.

Создаем конфигурационный файл со следующим содержимым:

vi /etc/apache2/mods-available/remoteip.conf

<IfModule remoteip_module>
RemoteIPHeader X-Forwarded-For
RemoteIPTrustedProxy 127.0.0.1/8
</IfModule>

Активируем модуль:

a2enmod remoteip

Перезапускаем apache:

systemctl restart apache2

Для проверки настройки открываем браузер и вводим в адресную строку http://<IP-адрес сервера> , где откроется наша страница phpinfo. В разделе Apache Environment мы должны увидеть внешний адрес компьютера, с которого обращаемся к серверу в опции REMOTE_ADDR .

Postfix

В качестве агента MTA мы будем использовать удобный в настройке и надежный Postfix.

Установка, настройка и запуск

Устанавливаем пакет postfix:

apt install postfix

Вносим некоторые изменения в настройки:

vi /etc/postfix/main.cf

myorigin = $mydomain
smtp_generic_maps = hash:/etc/postfix/generic_map

* mydomain — домен сервера; myorigin — имя домена, которое будет подставляться всем отправляемым сообщениям без явного указания оного; smtp_generic_maps указывает на карту с общими правилами пересылки .

Открываем карту пересылки:

vi /etc/postfix/generic_map

И добавляем:

@remontka.local no-reply@remontka.local

* данной настройкой мы будем подставлять всем отправляемым письмам без поля FROM адрес no-reply@remontka.local .

Создаем карту:

postmap /etc/postfix/generic_map

Включаем автозапуск почтового сервера и перезапускаем его службу:

systemctl enable postfix

systemctl restart postfix

Корректная отправка

Для того, чтобы сервер мог отправлять сообщения на внешние ящики, необходимо корректно настроить в DNS , как минимум, записи A и PTR.

Для добавления А-записи, необходимо в настройках панели управления нашим доменом создать запись типа. Ее имя и IP-адрес должны соответствовать имени и адресу нашего сервера.

Для создания PTR-записи необходимо написать письмо Интернет-провайдеру, к которому подключен наш сервер. Если наш сервер арендуется у хостинговой компании, необходимо либо написать данное письмо данной хостинговой компании, либо данная возможность может быть предоставлена в панели управления хостинговыми услугами.

Тюнинг веб-сервера

PHP

Внесем небольшие изменения в нашу конфигурацию PHP:

  • post_max_size — максимальный объем отправляемых на сервер данных;
  • upload_max_filesize — максимально допустимый размер одного загружаемого файла;
  • short_open_tag — разрешение использования короткого способа открытия php ( <? );
  • date.timezone — временная зона, которая будет использоваться веб-сервером, если ее не переопределить настройками в коде php или в файле .htaccess.
  • error_reporting — устанавливает уровень отчетности об ошибках, которые должны быть показаны.

Данные изменения вносятся в разные файлы в зависимости от версии PHP и обработчике. Например, для php версии 7.4 и Apache мы открываем на редактирование следующий файл:

vi /etc/php/7.4/apache2/php.ini

И правим следующее:

post_max_size = 1G

upload_max_filesize = 512M

short_open_tag = On

date.timezone = «Europe/Moscow»

error_reporting = E_ALL & ~E_NOTICE

Но мы упростим задачу. Для начала, создадим две переменные:

PHP_VER=7.4

INT=apache2

Теперь мы можем упростить настройку для Apache:

sed -e «s/post_max_size = 8M/post_max_size = 1G/» -i /etc/php/$PHP_VER/$INT/php.ini

sed -e «s/upload_max_filesize = 2M/upload_max_filesize = 512M/» -i /etc/php/$PHP_VER/$INT/php.ini

sed -e «s/short_open_tag = Off/short_open_tag = On/» -i /etc/php/$PHP_VER/$INT/php.ini

sed -e «s/;date.timezone =/date.timezone =’Europe/Moscow’/» -i /etc/php/$PHP_VER/$INT/php.ini

sed -e «s/error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT/error_reporting = E_ALL & ~E_NOTICE/» -i /etc/php/$PHP_VER/$INT/php.ini

Посмотреть результат можно командой:

cat /etc/php/$PHP_VER/$INT/php.ini | grep -e «^post_max_size|^upload_max_filesize|^short_open_tag|^date.timezone|^error_reporting»

Теперь меняем интерпретатор:

INT=fpm

И повторяем:

sed -e «s/post_max_size = 8M/post_max_size = 1G/» -i /etc/php/$PHP_VER/$INT/php.ini

sed -e «s/upload_max_filesize = 2M/upload_max_filesize = 512M/» -i /etc/php/$PHP_VER/$INT/php.ini

sed -e «s/short_open_tag = Off/short_open_tag = On/» -i /etc/php/$PHP_VER/$INT/php.ini

sed -e «s/;date.timezone =/date.timezone =’Europe/Moscow’/» -i /etc/php/$PHP_VER/$INT/php.ini

sed -e «s/error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT/error_reporting = E_ALL & ~E_NOTICE/» -i /etc/php/$PHP_VER/$INT/php.ini

Проверяем:

cat /etc/php/$PHP_VER/$INT/php.ini | grep -e «^post_max_size|^upload_max_filesize|^short_open_tag|^date.timezone|^error_reporting»

Перезапускаем php-fpm и apache:

systemctl restart php${PHP_VER}-fpm

systemctl restart apache2

NGINX

Открываем на редактирование следующий файл:

vi /etc/nginx/nginx.conf

И внутри секции http добавляем:

client_max_body_size 512M;

После перезапускаем nginx:

systemctl reload nginx

Создание первого сайта

Настало время проверить наш сервер на реальном примере. Задаем переменную, значение которой будет домен сайта:

TMP_SITE=site1.local

* где site1.local заменить на имя домена, для которого создаем первый сайт. Нам будет намного удобнее копировать и вставлять команды с переменной (не придется править после копипасты).

1. Добавление виртуального домена

Создаем новый файл виртуального домена NGINX.

а) Для HTTP:

cat <<EOF > /etc/nginx/sites-enabled/$TMP_SITE.conf
server {
listen 80;
server_name $TMP_SITE www.$TMP_SITE;
set $root_path /var/www/$TMP_SITE/www;

access_log /var/www/$TMP_SITE/log/nginx/access_log;
error_log /var/www/$TMP_SITE/log/nginx/error_log;

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;

root $root_path;
index index.php index.html index.htm;

location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location ~* ^.+.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
expires modified +1w;
}
}
EOF

* где /var/www/$TMP_SITE — каталог, в котором будет размещаться сайт.
** все запросы будут переводиться на локальный сервер, порт 8080, на котором работает apache, кроме обращений к статическим файла (jpg, png, css и так далее).

б) Для HTTPS:

cat <<EOF > /etc/nginx/sites-enabled/$TMP_SITE.conf
server {
listen 80;
listen 443 ssl;

ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;

if ($scheme = ‘http’) {
return 301 https://$host$request_uri;
}

server_name $TMP_SITE www.$TMP_SITE;
set $root_path /var/www/$TMP_SITE/www;

access_log /var/www/$TMP_SITE/log/nginx/access_log;
error_log /var/www/$TMP_SITE/log/nginx/error_log;

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;

root $root_path;
index index.php index.html index.htm;

location / {
proxy_pass http://127.0.0.1:8080/;
proxy_redirect off;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

location ~* ^.+.(jpg|jpeg|gif|png|css|zip|tgz|gz|rar|bz2|doc|docx|xls|xlsx|exe|pdf|ppt|tar|wav|bmp|rtf|js)$ {
expires modified +1w;
}
}
EOF

* ssl_certificate и ssl_certificate_key — пути к публичному и приватному ключам соответственно.
** для получения бесплатного сертификата читайте статью Получение бесплатного SSL сертификата Let’s Encrypt .

Теперь создаем виртуальный домен в Apache:

cat <<EOF > /etc/apache2/sites-enabled/$TMP_SITE.conf
<VirtualHost *:8080>
Define root_domain ${TMP_SITE}
Define root_path /var/www/${TMP_SITE}

ServerName ${root_domain}
ServerAlias www.${root_domain}
DocumentRoot ${root_path}/www

ErrorLog ${root_path}/log/apache/error_log
TransferLog ${root_path}/log/apache/access_log

php_admin_value upload_tmp_dir ${root_path}/tmp
php_admin_value doc_root ${root_path}
php_admin_value open_basedir ${root_path}:/usr/local/share/smarty:/usr/local/share/pear
php_admin_value session.save_path 0;0660;${root_path}/tmp
</VirtualHost>
EOF

Создаем каталоги для сайта:

mkdir -p /var/www/$TMP_SITE/{www,tmp}

mkdir -p /var/www/$TMP_SITE/log/{nginx,apache}

Создаем индексный файл со следующим содержимым:

vi /var/www/$TMP_SITE/www/index.php

<?php echo «<h1>Hello from site1</h1>»; ?>

Задаем права на папки:

chown -R www-data:www-data /var/www/$TMP_SITE

chmod -R 775 /var/www/$TMP_SITE

Проверяем корректность настроек конфигурационных файлов:

nginx -t

apachectl configtest

Перезапускаем веб-сервер:

systemctl reload nginx

systemctl reload apache2

Открываем сайт в браузере по нашему домену site1.local (он должен быть прописан в DNS или можно его задать в локальном файле hosts того компьютера, с которого мы открываем сайт в браузере). Мы должны увидит фразу «Hello from site1».

2. Создание базы данных

Создаем базу данных для сайта командами:

mysql

> CREATE DATABASE site1 DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;

> CREATE USER ‘dbuser’@’localhost’ IDENTIFIED BY ‘password’;

> GRANT ALL PRIVILEGES ON site1.* TO dbuser@localhost;

> quit

* данными sql-командами мы создаем базу данных site1 и предоставляем к ней доступ для учетной записи dbuser с паролем password .

3. Создание пользователя FTP

Для возможности подключения к сайту по FTP, создаем отдельного пользователя:

ftpasswd —passwd —file=/etc/proftpd/ftpd.passwd —name=site1.local —uid=33 —gid=33 —home=/var/www/$TMP_SITE —shell=/usr/sbin/nologin

* тут мы создадим пользователя site1.local , который будет иметь доступ к каталогу /var/www/$TMP_SITE .

admin

Recent Posts

Что такое Zulip

Zulip — программное обеспечение для реализации корпоративного чата. Разработан в 2012 году, в 2014 был…

4 дня ago

Что такое Zookeeper

Zookeeper — cервис-координатор, который позволяет обеспечить контроль синхронизации данных. Разработан на Java компанией Apache Software…

4 дня ago

Что такое Zimbra

Zimbra — программное обеспечение для реализации почтового сервиса или, если сказать точнее, автоматизации совместной деятельности…

4 дня ago

Что такое Zabbix

Zabbix — бесплатная система мониторинга. Позволяет отслеживать состояние сетевых узлов, компьютеров и серверов. Возможности: Поддержка…

4 дня ago

Что такое YouTube

YouTube — компания-владелец одноименного портала для просмотра и хранения видео. Чтобы пользоваться данным порталом достаточно…

4 дня ago

Что такое yota

Yota — провайдер, предоставляющий доступ к сети Интернет по беспроводной связи. Впервые, сервис начал работать…

4 дня ago