Оглавление

Что такое LAMP-стек?

LAMP — это акроним, который традиционно означает «Linux, Apache, MySQL и PHP», что является популярным набором программного обеспечения многих веб-приложений или веб-сайтов. Стек LAMP является достаточно мощным, и при этом он сравнительно прост и удобен в использовании.

В последние годы набирают популярность разные вариации LAMP-стека, например, вместо языка программирования PHP используют Python или Perl, а вместо СУБД MySQL используют PostgreSQL.

На виртуальных серверах ServerSpace операционная система семейства Linux, а именно Ubuntu 18.04, уже установлена, поэтому в инструкции будет описана установка остальных компонентов.

Установка LAMP в Ubuntu

Установка пакетов с помощью tasksel

Tasksel — это утилита, которая позволяет устанавливать пакеты различных программ буквально в одну команду. Она разработана для Debian, но может использоваться и в Ubuntu. Для её установки выполните в терминале:

sudo apt install tasksel

Затем, чтобы установить Lamp на Ubuntu, достаточно выполнить такую команду:

sudo tasksel install lamp-server

Установка займёт кое-какое время, потому что утилите придётся скачать и настроить все пакеты, но потом вы получите полностью работающий стек LAMP.

Обратите внимание, что десктопной версии Ubuntu tasksel использовать не желательно. LAMP установится нормально, но при попытке его удаления командой tasksel remove из-за бага утилита может снести вам всю систему. Пользователи сообщают о проблемах с этой утилитой в версии Ubuntu для рабочего стола.

Как установить Lamp в Ubuntu вручную

Если вы не хотите использовать tasksel, вы можете установить все пакеты по отдельности и настроить их для совместной работы. Сначала установим все необходимые пакеты. Установка последней версии Apache2 из репозиториев:

sudo apt install apache2

Установка базы данных MariaDB из репозиториев:

sudo apt install mariadb-server

Или вы можете установить MySQL:

sudo apt install mysql-server

Установка интерпретатора языка программирования PHP 7.2 и расширений, необходимых для его работы с Apache и MySQL:

sudo apt install php7.2 libapache2-mod-php7.2 php-mysql

Установка дополнительных расширений для PHP, которые вам понадобятся в будущем для хостинга большинства популярных проектов:

sudo apt install php-curl php-json php-cgi php-gd php-zip php-mbstring php-xml php-xmlrpc

Настройка брандмауэра

По умолчанию брандмауэр закрывает все неразрешённые входящие подключения. Поэтому, чтобы к вашему веб-серверу можно было получить доступ извне, необходимо добавить его порт в исключения:

sudo ufw allow in 80/tcp

Установка веб-сервера Apache

Apache — самый популярный в мире веб-сервер с открытым исходным кодом. Он позволяет размещать на сервере сайты и другие веб-приложения.

Установка выполняется в один шаг:

  • Ubuntu и Debian:

    apt update && apt -y install apache2

  • CentOS:

    yum -y install httpd

После установки нужно проверить, корректно ли запустился веб-сервер:

  • Ubuntu и Debian:

    systemctl status apache2

  • CentOS:

    systemctl status httpd

На Ubuntu и Debian службы после установки запускаются и добавляются в автозапуск автоматически, на Centos это нужно сделать вручную. Запустить веб-сервер и настроить его автоматический старт после загрузки системы можно следующим образом:

  • Ubuntu и Debian:

    systemctl start apache2 && systemctl enable apache2

  • CentOS:

    systemctl start httpd && systemctl enable httpd

На CentOS после установки нужно отредактировать настройки встроенного фаервола:

firewall-cmd —permanent —zone=public —add-service=http —add-service=https firewall-cmd —reload

Проверить, что настройки успешно применились, можно с помощью команды: 

firewall-cmd —list-all

В блоке Services в списке должны отображаться http и https.

Теперь можно открыть IP-адрес вашего сервера в браузере — откроется стартовая страница веб-сервера (при работе с CentOS 7; на CentOS 8 Apache по умолчанию не имеет приветственной страницы):

На Debian и Ubuntu можно сразу ввести IP-адрес вашего сервера в адресную строку браузера — откроется приветственная страница веб-сервера, размещённая в директории /var/www/html

Расширенные настройки веб-сервера доступны в конфигурационном файле:

  • Ubuntu и Debian:

    /etc/apache2/apache2.conf

  • CentOS:

    /etc/httpd/conf/httpd.conf

Настройка брандмауэра

Настоятельно рекомендуется настроить брандмауэр для обеспечения дополнительной безопасности вашего LAMP-стека в Ubuntu 20.04.

Мы начнем с добавления правила брандмауэра для SSH. Вы же не хотите получить блокировку при включении брандмауэра, когда настраиваете сервер удаленно? 

sudo ufw allow OpenSSH

Сообщение об ошибке «ERROR: could find a profile matching openSSH» означает, что вы не настраиваете сервер удаленно. Можно игнорировать. 

Теперь мы можем добавить правила брандмауэра для Apache:

sudo ufw allow in»Apache Full»

Теперь включите брандмауэр:

sudo ufw enable

Нажмите y, если вы видите сообщение «Command may disrupt existing ssh connections».

Если брандмауэр был активирован правильно, вы должны увидеть сообщение «Брандмауэр активен и включен при запуске системы»​.

Вы также можете проверить текущее состояние брандмауэра с помощью:

sudo ufw status

Ниже мы видим, что брандмауэр активен и имеет два правила для каждой службы. v6 это сокращение от IPv6.

Status: active To Action From — —— —- OpenSSH ALLOW Anywhere Apache Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Apache Full (v6) ALLOW Anywhere (v6)

Тестовый Apache

Чтобы узнать, правильно ли установлен Apache на Ubuntu 20.04, мы можем проверить текущее состояние службы:

sudoservice apache2 status

Если он включен и работает, вы должны увидеть зеленое активное состояние.

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

apache2.service — The Apache HTTP Server Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled) Drop-In: /lib/systemd/system/apache2.service.d └─apache2-systemd.conf Active: active (running) since Sat 2020-03-31 08:44:04 CEST; 15min ago Main PID: 5727 (apache2) Tasks: 55 (limit: 4915) CGroup: /system.slice/apache2.service ├─5727 /usr/sbin/apache2 -k start ├─5728 /usr/sbin/apache2 -k start └─5729 /usr/sbin/apache2 -k start Mar 31 08:44:04 ubuntu2004 systemd[1]: Starting The Apache HTTP Server… Mar 31 08:44:04 ubuntu2004 apachectl[5675]: AH00558: apache2: Could not reliably determine the server’s fully qualified domain name, using 127.0.1.1. Mar 31 08:44:04 ubuntu2004 systemd[1]: Started The Apache HTTP Server.

Возможно, вам придется нажать кнопку q для выхода из проверки состояния сервера при использовании SSH-клиента.

Теперь, когда служба Apache запущена, вы имеете возможность просмотреть тестовую веб-страницу Apache через свой веб-браузер.

Введите IP-адрес вашего сервера в адресную строку и нажмите ENTER.

apache2

Все готово! Вы можете найти страницу приветствия Apache в папке /var/www/html. Чтобы отредактировать этот файл, необходимо ввести:

sudonano /var/www/html/index.html

Нажмите CTRL+X, чтобы выйти из текстового редактора nano.

Если у вас есть доменное имя, вы можете указать его в IP-адресе вашего сервера без дальнейшей настройки, так как Apache должен загрузить эту страницу по умолчанию. Но если вы хотите разместить несколько доменов на своем сервере или настроить SSL-сертификаты с помощью Let’s Encrypt, вам следует настроить виртуальный хост (инструкция будет в конце этого руководства).

Установка PHP и дополнительных расширений

Проверить доступную для установки версию PHP можно командой:

  • Ubuntu и Debian:

    apt show php

  • CentOS:

    yum info php

Знать её нужно для корректной установки нужных компонентов на следующем шаге (для Ubuntu и Debian). В примере версия PHP — 7.4. Вам при установке нужно заменить её в команде на ту, которая доступна для вашей операционной системы.

Если версия по умолчанию вам подходит, после этого можно запустить установку:

  • Ubuntu и Debian:

    apt -y install php7.4 libapache2-mod-php7.4 php-mysql php7.4-xml php7.4-gd php7.4-mbstring php7.4-zipБудьте внимательны — в названии пакетов вам нужно указать ту версию PHP, которую отобразила система при проверке на предыдущем шаге.

  • CentOS:

    yum -y install php php-mysqlnd php-common php-cli php-json php-opcache php-mbstring php-zip

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

php -v

Установленная версия PHP автоматически настроится в качестве модуля Apache. После этого потребуется перезагрузить веб-сервер.

  • Ubuntu и Debian:

    systemctl restart apache2

  • CentOS:

    systemctl restart httpd

Дополнительные расширения PHP, доступные для установки, можно посмотреть командой:

  • Ubuntu и Debian:

    Для конкретной версии:

    apt-cache search php | egrep ‘7.4’ | grep module

    Версии по умолчанию:

    apt-cache search php | egrep ‘module’ | grep default

  • CentOS:

    yum search php | grep module

Установить выбранный модуль можно командой:

  • Ubuntu и Debian:

    apt -y install php7.4-soap

  • CentOS:

    yum -y install php-soap

Тест PHP в командной строке

После завершения установки пакета мы можем протестировать PHP в командной строке.

php -version

Если PHP установлен правильно, вы должны увидеть нечто подобное:

PHP 7.4.3 (cli) (built: Mar 26 2020 20:24:23) ( NTS ) Copyright (c) The PHP Group Zend Engine v3.4.0, Copyright (c) Zend Technologies with Zend OPcache v7.4.3, Copyright (c), by Zend Technologies

Тест PHP для Apache

Теперь давайте протестируем PHP для Apache.

Создайте новый файл с именем info.php в корневом каталоге документа.

sudonano /var/www/html/info.php

После открытия редактора nano введите следующий PHP-код:

/var/www/html / info.РНР CTRL+X, Y и затем ENTER).

Теперь мы можем загрузить этот файл в браузере, перейдя по http://your_ip/info.php или http://example.com/info.php.

Ниже мы видим, что страница info.php работает правильно.

PHP 7 тестовая страница на Apache и Ubuntu 20.04

После того как вы подтвердили, что PHP работает правильно, важно удалить info.php, поскольку он содержит информацию, которая может быть полезна хакерам.

sudorm /var/www/html/info.php

Если вы планируете загружать файлы размером более 2 Мб через WordPress или аналогичный движок, нужно будет изменить файл конфигурации PHP и установить максимальный размер загрузки. 

Установка стека LAMP на Ubuntu 20.04 завершена! Если вы хотите настроить виртуальные хосты или дополнительную конфигурацию для Apache, читайте далее.

Мало кто знает, но LAMP на VDS можно установить автоматически. Такую услугу предоставляет хостинг-провайдер Timeweb. Все просто:

  1. Выберите  тариф VDS .
  2. Оплатите его.
  3. При настройке сервера отметьте Ubuntu 20.04 и стек LAMP.

Установка MySQL

MySQL — самый популярный сервер баз данных. Установка состоит из двух этапов:

Установка самого сервера БД:

  • Ubuntu и Debian:

    apt -y install mysql-server

  • CentOS:

    yum -y install mysql-server

После установки нужно проверить, запустился ли MySQL:

  • Ubuntu и Debian:

    systemctl status mysql

  • CentOS:

    systemctl status mysqld

При необходимости — запустить его и добавить в автозапуск вручную:

  • Ubuntu и Debian:

    systemctl start mysql && systemctl enable mysql

  • CentOS:

    systemctl start mysqld && systemctl enable mysqld

Проверить версию установленного сервера баз данных можно командой:

mysql —version

По умолчанию после установки сервер MySQL имеет несколько небезопасных опций. Чтобы их отключить, нужно запустить автонастройку безопасности:

mysql_secure_installation

В процессе система предложит настроить компонент для проверки надёжности паролей, запросит новый пароль для пользователя root сервера MySQL. После этого будет предложено подтвердить или отклонить дополнительные настройки безопасности — для согласия введите y (yes), для отказа — любую другую клавишу и нажмите Enter. Рекомендуется подтвердить все параметры, так как они воплощают базовые рекомендации по безопасности сервера БД.

Список настраиваемых параметров по порядку: 

  • Активация модуля проверки надёжности паролей
  • Выбор уровня надёжности (0 — слабый / 1 — средний/ 2 — сильный)
  • Ввод и подтверждение нового пароля для root-пользователя MySQL
  • Удаление анонимных пользователей
  • Отключение удалённого подключения к БД для root-пользователя MySQL 
  • Удаление открытой тестовой базы данных
  • Перезагрузка таблиц привилегий для применения новых настроек

Настройка безопасности MySQL

Теперь вы должны запустить mysql_secure_installation, чтобы настроить безопасность для вашего сервера MySQL на Ubuntu 20.04.

sudo mysql_secure_installation

Компонент проверки пароля (необязательно)

Вас спросят, хотите ли вы настроить плагин проверки пароля. Если вы по какой-то причине не хотите применять строгую политику паролей, эта настройка не нужна.

Securing the MySQL server deployment. Connecting to MySQL using a blank password. VALIDATE PASSWORD COMPONENT can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD component? Press y|Y for Yes, any other key for No:

Нажмите ENTER, если не хотите настраивать плагин проверки пароля.

Создать пароль root

Если вы еще не создали пароль root для MySQL, вы должны создать его сейчас.

Please set the password for root here. New password: Re-enter new password:

Создайте надежный пароль  и введите его. Обратите внимание, что при вводе паролей в Linux ничего не отображается (никаких звездочек или точек тоже не будет).

Удаление анонимных пользователей

Далее вам будет предложено удалить анонимных пользователей.

By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удалить анонимных пользователей.

Отключить удаленный корневой вход в систему

Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удаленно запретить вход в систему root.

Удалить тестовую базу данных

By default, MySQL comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

Нажмите y и ENTER, чтобы удалить тестовую базу данных.

Тестовый сервис MySQL

Компонент MySQL вашего стека LAMP на Ubuntu 20.04 готов к работе.

Вы должны войти в систему сервера MySQL, чтобы убедиться, что она работает правильно. Поскольку вы запускаете эту команду как sudo, она автоматически войдет в MySQL, используя корневую учетную запись. Если вам будет предложено ввести пароль, введите пароль своей учетной записи Linux, а не MySQL.

sudo mysql

Вы увидите подобную информацию:

Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 15 Server version: 8.0.19-0ubuntu5 (Ubuntu) Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type ‘help;’ or ‘h’ for help. Type ‘c’ to clear the current input statement. mysql>

Чтобы выйти из MySQL, введите exit и нажмите ENTER.

exit

Вы успешно установили и настроили MySQL для вашего стека-«фонаря»​ на Ubuntu 20.04!

Удаление LAMP в Ubuntu

Чтобы полностью удалить LAMP из системы, достаточно удалить все пакеты, которые вы установили ранее:

sudo apt purge  apache2 mariadb-server php7.2 libapache2-mod-php7.2 php-mysql php-curl php-json php-cgi php-gd php-zip php-mbstring php-xml php-xmlrpc

Команда purge позволяет удалить не только пакеты, но и их конфигурационные файлы. Если вы хотите оставить конфигурационные файлы, используйте команду remove.

Если установка LAMP на Ubuntu выполнялась с помощью tasksel, то для удаления необходимо выполнить:

sudo tasksel uninstall lamp-server

Проверка установки LAMP-стека

С помощью текстового редактора создайте проверочный файл php:

vi /var/www/html/info.php

Добавьте в него следующее содержимое и сохраните изменения:

Выполните перезагрузку сервера Apache:

service apache2 restart

Перейдите в браузере по следующему адресу:

http://IP-адрес-сервера/info.php

Если все установлено верно, то вы увидите информационную страницу.

Информационная страница

Что такое LЕMP

LEMP — это аналог популярного стека LAMP, используемого для разработки и развертывания веб-приложений. Традиционно LAMP состоит из Linux, Apache, MySQL и PHP. Благодаря своей модульной природе компоненты легко могут быть заменены. В LEMP Apache заменяется легким, но мощным Nginx, который может обеспечить более предсказуемую производительность при высоких нагрузках.

Как установить LEMP в Ubuntu 20.04

LEMP это программный стек — набор инструментов, связанных вместе, для реализации задачи по построению WEB сервера. Этот акроним обозначает операционную систему Linux и Nginx, MySQL/MariaDB и PHP. LEMP — это аналог популярного стека LAMP, используемого для разработки и развертывания веб-приложений. Традиционно LAMP состоит из Linux, Apache, MySQL и PHP. 

В данной статье мы установим Nginx, MariaDB и PHP7.4 (я напишу пару слов и об установке других версий PHP). Также я покажу, как создавать сайты с доменами в Nginx и работать с базой данных на примере установки wordpress.

Технические требования

Перед тем как продолжить работу с данным руководством, у нас должен быть создан сервер с установленным дистрибутивом Ubuntu 14.04, а также настроено подключение к серверу по SSH для пользователя с административными (sudo) привилегиями.

Как это сделать — описано в руководстве «Vscale: создаём первый сервер».

Настройка Firewall

Так как по умолчанию порты 80 и 443 закрыты настройками файрвола, следует выполнить несколько команд для получения доступа к веб-серверу из интернета.

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

sudo firewall-cmd —permanent —zone=public —add-service=http

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

sudo firewall-cmd —permanent —zone=public —add-service=https

Перезагружаем службу:

sudo systemctl restart firewalld

Проверяем внесенные изменения:

sudo firewall-cmd —zone=public —list-services

В итоге должно отобразиться следующее:

dhcpv6-client http https ssh

Установка Nginx

Чтобы поставить Nginx для LEMP вам необходимо подключиться к VPS с ОС Ubuntu и исполнить следующие команды:

sudo apt-get update
sudo apt-get install nginx

Чтобы проверить установку сервера nginx, перейдите в любом браузере по следующей ссылке, указав IP-адрес вашего VDS:

http:///
Например: http://5.101.77.24/

Примечание: если у вас не получается подключиться, проверьте настройки FireWall, веб-сервер Nginx по умолчанию работает на порту 80, чтобы добавить правило выполните следующую пару команд:

iptables -A INPUT -p tcp —dport 80 -j ACCEPT
iptables-save

Настройка Nginx

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

sudo nano /etc/nginx/nginx.conf

Вносим следующие изменения в файл:

server {
listen 80 default_server;
listen [::]:80 default_server;
server_name 46.243.182.96; #Пишем имя сервера или IP адрес
root /usr/share/nginx/html;
include /etc/nginx/default.d/*.conf;
location / {
root /usr/share/nginx/html;
index index.php index.html index.htm; #Добавляем index.php
}
error_page 404 /404.html;
location = /40x.html {
root /usr/share/nginx/html;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
location ~ .php$ { #Добавляем возможность обрабатывать запросы 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;
}
}

Настало время проверить наш веб-сервер. Создадим страницу по следующему пути:

nano /var/www/html/info.php

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

Перезапустим Nginx командой:

sudo systemctl restart nginx

Теперь, если вы зайдете через браузер на ваш веб-сервер по адресу http://server_name/info.php (http://xxx.xxx.xxx.xxx/info.php, где xxx.xxx.xxx.xxx — адрес), то увидите информационную страницу:

Установка MySQL(MariaDB) на Ubuntu

MySQL — это система управления базами данных (СУБД), которая используется для организации и получения контента.

Сегодня в LEMP стеке MySQL заменяется на популярный аналог — MariaDB. MariaDB имеет те же возможности, что и MySQL, и при этом является полностью бесплатной.

Примечание: если вы предпочитаете использовать базу данных MySQL в Ubuntu или ваш проект работает именно с ней, вам нужно будет добавить необходимые репозитории и установить БД с помощью инструкции.

Установите пакеты из главного репозитория Ubuntu с помощью менеджера пакетов:

sudo apt-get install mariadb-server mariadb-client

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

sudo mysql_secure_installation

Здесь MariaDB попросит вас задать пароль супер-пользователя БД. Затем система попросит ответить на несколько вопросов (они служебные и на каждый из них без лишних проблем можно ответить Yes).

После этого конфигурирование базы данных завершено, и можно переходить к следующему шагу настройки LEMP стека — установке PHP.

Установка PHP

Небольшое отступление по поводу версии PHP, ведь для некоторых проектов иногда требуется установка более ранних версий. Если тебе необходима другая версия php, например php5.6 или 7.0, тогда добавь в систему ppa ondrej/php и делай все по аналогии с инструкцией, но в первой команде установки PHP замени 7.4 на, например, 5.6 или 7.0 и далее используй не php7.4*, а php5.6* или 7.0. И, главное, обрати внимание, что в конфигурации сервера Nginx тебе тоже придется изменить адрес сокета PHP (с /run/php/php7.4-fpm.sock/run/php/php7.0-fpm.sock) Команда добавления ppa:

sudo add-apt-repository ppa:ondrej/php

Вернемся к установке актуальной версии — 7.4. Выполним команду по установке php из стандартных репозиториев Ubuntu 20.04:

sudo apt install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl

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

Запустим PHP:

sudo systemctl start php7.4-fpm

Остановка сервиса и его добавление и изъятие из автозагрузки происходит аналогично сервисам Nginx и MariaDB: systemctl stop — остановка, systemctl enable — автозапуск, systemctl disable — отключение автозапуска.

Проверим статус сервиса PHP:

systemctl status php7.4-fpmСтатус сервиса PHP

Установка MariaDB

MariaDB — это замена MySQL. Она представляет собой надежный и масштабируемый SQL-сервер с богатым набором расширений.
Для начала вы должны удалить все пакеты MySQL, если они у вас установлены:

[root@server ~]# yum remove mysql* mysql-server mysql-devel mysql-libs

Установите репозиторий REMI, чтобы решить проблему совместимости с MySQL, иначе при попытке установки MariaDB вы, скорее всего, увидите сообщения об ошибках с зависимостями.

[root@server ~]# rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm

Теперь установите пакет compat-mysql55:

[root@server ~]# yum —enablerepo=remi-test —disablerepo=remi install compat-mysql55

Создайте файл репозитория для MariaDB, и добавьте в него следующие строки:

Для 32-битных систем:

[root@server ~]# vi /etc/yum.repos.d/mariadb.repo # MariaDB 5.5 CentOS repository list — created 2013-06-06 07:42 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/5.5/centos6-x86 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

Для 64-битных систем:

[root@server ~]# vi /etc/yum.repos.d/mariadb.repo # MariaDB 5.5 CentOS repository list — created 2013-06-06 07:53 UTC # http://mariadb.org/mariadb/repositories/ [mariadb] name = MariaDB baseurl = http://yum.mariadb.org/5.5/centos6-amd64 gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB gpgcheck=1

Сохраните и закройте файл, после чего запустите yum update:

[root@server ~]# yum update

Теперь установите MariaDB:

[root@server ~]# yum install MariaDB-devel MariaDB-client MariaDB-server -y

Запустите службу MariaDB и настройте ее автоматический запуск при каждой загрузке:

[root@server ~]# /etc/init.d/mysql start Starting MySQL… SUCCESS! [root@server ~]# chkconfig mysql on Set MySQL root password

По умолчанию пароль root в MySQL пустой. Поэтому, чтобы предотвратить несанкционированный доступ к MySQL, установите пароль root:

[root@server ~]# /usr/bin/mysql_secure_installation /usr/bin/mysql_secure_installation: line 379: find_mysql_client: command not found NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY! In order to log into MariaDB to secure it, we’ll need the current password for the root user. If you’ve just installed MariaDB, and you haven’t set the root password yet, the password will be blank, so you should just press enter here. Enter current password for root (enter for none): OK, successfully used password, moving on… Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation. You already have a root password set, so you can safely answer ‘n’. Change the root password? [Y/n] y New password: Re-enter new password: Password updated successfully! Reloading privilege tables.. … Success! By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? [Y/n] … Success! Normally, root should only be allowed to connect from ‘localhost’. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? [Y/n] … Success! By default, MariaDB comes with a database named ‘test’ that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? [Y/n] — Dropping test database… ERROR 1008 (HY000) at line 1: Can’t drop database ‘test’; database doesn’t exist … Failed! Not critical, keep moving… — Removing privileges on test database… … Success! Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? [Y/n] … Success! Cleaning up… All done! If you’ve completed all of the above steps, your MariaDB installation should now be secure. Thanks for using MariaDB!

Создание блока сервера Nginx и тест PHP

Серверный блок Nginx это нечто подобное виртуальному хосту в Apache. В блоке по умолчанию нужно много менять, чтобы добиться работы PHP, так что мы создадим другой стандартный блок.

Для начала удалим дефолтный:

sudo rm /etc/nginx/sites-enabled/default

И создадим свой:

sudo nano /etc/nginx/conf.d/default.conf

И вставим в него следующий текст (ничего менять не надо, это блок по умолчанию):

server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

В окне редактора nano нужно нажать SHIFT+INSERT, чтобы вставить текст (или мышкой можно). Далее сохраним файл, нажав CTRL+O и выйдем — CTRL+W.

После этого нужно перезагрузить Nginx:

sudo systemctl restart nginx

Приступим к тесту php, создадим файл с функцией phpinfo() в корне сервера:

sudo nano /usr/share/nginx/html/phpinfo.php

Впишем в него:

Редактор nano

Редактор nano

После сохранения файла php перейдем в браузере по ссылке IP/phpinfo.php

phpinfo

phpinfo

Если мы видим информационную таблицу препроцессора, значит все работает.

Создание блоков для нескольких доменов

Для примера создадим домен test.ru на машине с только что установленным LEMP. Если машина локальная, то сначала нужно добавить домен в файл hosts, чтобы можно было обратиться к нему из браузера, на хостинге же нужно просто указать вручную в NS записях домена (у регистроатора домена), свой ip адрес сервера и дождаться обновления DNS и делать все по аналогии (в hosts добавлять не нужно, хотя и можно, чтобы не ждать, пока обновятся записи DNS).

Добавим домен в файл hosts:

sudo nano /etc/hosts

Впишем строку:

127.0.0.1 test.ru

Далее продолжим обязательные манипуляции и создадим каталог для домена (не обязательно он должен располагаться в /usr/share/nginx/html, он может быть, например в /var/www):

sudo mkdir /usr/share/nginx/html/test.ru

Зададим права и пользователя для каталога:

sudo chown www-data:www-data /usr/share/nginx/html/test.ru -R sudo chmod ug+rwx /usr/share/nginx/html/test.ru -R

Создадим в каталоге файл index.html:

nano /usr/share/nginx/html/test.ru/index.html

В него вставим html код:

Hello world!

Далее копируем наш файл default.conf в каталог sites-available и назовем его test.ru:

sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/sites-available/test.ru

Откроем его в текстовом редакторе и немного изменим:

sudo nano /etc/nginx/sites-available/test.ru server { listen 80; listen [::]:80; server_name test.ru www.test.ru; root /usr/share/nginx/html/test.ru; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ /index.php; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

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

server_name test.ru www.test.ru;

root /usr/share/nginx/html/test.ru;

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

sudo ln -s /etc/nginx/sites-available/test.ru /etc/nginx/sites-enabled/test.ru

Все, нужно перезагрузить Nginx, чтобы изменения вступили в силу:

sudo systemctl restart nginx

Открываем в браузере test.ru для проверки:

Тестовый сайт

Тестовый сайт

Настройки Nginx для сайта test.ru будут в созданном файле /etc/nginx/sites-available/test.ru (например настройка кэша или IP6). И по аналогии с созданием test.ru можно создать любое количество сайтов.

Установка PHP на Ubuntu

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

sudo apt-get install php7.0-mysql php7.0-curl php7.0-json php7.0-cgi php7.0 libapache2-mod-php7.0 php7.0-xml

В процессе установки потребуется 1 или 2 раза ответить ‘Yes’ на вопросы системы.

Тест PHP

Создайте простой файл «testphp.php» в корневой директории Apache и добавьте в него строки, как показано ниже:

[root@server ~]# vi /usr/share/nginx/html/testphp.php

Сохраните и закройте файл. Перезапустите службу nginx:

[root@server ~]# /etc/init.d/nginx restart

Перейдите в браузере по адресу http://server-ip-address/testphp.php. Вы должны увидеть страницу с подробной информацией об установленной версии php.

тестовая страница PHP

Если вы хотите установить модули php, введите команду yum install php* и перезапустите службу nginx. Для верификации модулей откройте веб-браузер и перейдите по адресу http://server-ip-address/testphp.php. Вы увидите список всех установленных модулей php.

Создание тестовой веб-страницы

Последним шагом создадим тестовую веб-страницу, которая сгенерирует и выведет информацию о сервере. Создадим в корневой директории веб-сервера файл «phpinfo.php»:

sudo nano /var/www/html/phpinfo.php

В открывшемся редакторе вставим следующий PHP-код:

phpinfo();

Сохраним созданный файл («Ctrl + o») и выйдите из редактора («Ctrl + x»).

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

Для этого нам нужно обратиться к адресу созданной выше страницы в браузере:

http://IP_адрес_сервера/phpinfo.php

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

Для удаления файла воспользуйтесь следующей командой:

sudo rm /usr/share/nginx/html/phpinfo.php

Установка PHP и дополнительных расширений

Проверить доступную для установки версию PHP можно командой:

  • Ubuntu и Debian:

    apt show php

  • CentOS:

    yum info php

Знать её нужно для корректной установки нужных компонентов на следующем шаге (для Ubuntu и Debian). В примере версия PHP — 7.4. Вам при установке нужно заменить её в команде на ту, которая доступна для вашей операционной системы.

Если версия вам подходит, после этого можно перейти к установке:

  • Ubuntu и Debian:

    apt -y install php7.4 php7.4-fpm php7.4-mysql php-common php7.4-cli php7.4-common php7.4-json php7.4-opcache php7.4-readline php7.4-mbstring php7.4-xml php7.4-gd php7.4-curl php7.4-zip

  • CentOS:

    yum -y install php-fpm php-mysqlnd php-cli php-json php-mbstring php-xml php-gd php-curl php-zip

Дополнительные расширения PHP, доступные для установки, можно посмотреть командой:

  • Ubuntu и Debian:

    Для конкретной версии:

    apt-cache search php | egrep ‘7.4’ | grep module

    Версии по умолчанию:

    apt-cache search php | egrep ‘module’ | grep default

  • CentOS:

    yum search php | grep module

Установить выбранный модуль можно командой:

  • Ubuntu и Debian:

    apt -y install php7.4-soap

  • CentOS:

    yum -y install php-soap

После установки PHP запускаем менеджер процессов php-fpm и добавляем его в автозагрузку:

  • Ubuntu и Debian:

    systemctl start php7.4-fpm && systemctl enable php7.4-fpm

  • CentOS:

    systemctl start php-fpm && systemctl enable php-fpm

Проверим установленную версию PHP: 

php -v

После установки PHP нужно отредактировать настройки php-fpm по умолчанию, предназначенные для веб-сервера Apache:

  • Ubuntu и Debian:

    nano /etc/php/7.4/fpm/pool.d/www.conf

  • CentOS:

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

В файле ищем блок кода Unix user/group of processes и меняем apache на www-data для Debian и Ubuntu и nginx для CentOS.

Остался последний штрих. Открываем для редактирования конфигурационный файл PHP:

  • Ubuntu и Debian:

    nano /etc/php/7.4/fpm/php.ini

  • CentOS:

    vim /etc/php.ini

В файле ищем раздел Paths and Directories (он почти в самом конце файла), внутри находим параметр cgi.fix_pathinfo. Нужно раскомментировать его (удалить «;» в начале строки) и изменить значение с «1» на «0».

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

  • Ubuntu и Debian:

    systemctl reload nginx && systemctl reload php7.4-fpm

  • CentOS:

    systemctl reload nginx && systemctl reload php-fpm

Настройка базового конфигурационного файла для сайта

Чтобы веб-сервер мог корректно обрабатывать запросы к сайтам, осталось добавить базовый конфигурационный файл вместо установленного по умолчанию. Для этого:

  1. Удаляем конфигурационный файл default, использующийся по умолчанию, и создаём его замену, default.conf:

    • Ubuntu и Debian:

      unlink /etc/nginx/sites-enabled/default touch /etc/nginx/sites-available/default.conf ln /etc/nginx/sites-available/default.conf /etc/nginx/sites-enabled/default.conf

    • CentOS:

      touch /etc/nginx/conf.d/default.conf

  2. Откроем новый файл в консольном текстовом редакторе и добавим туда содержимое:

    • Ubuntu и Debian:

      nano /etc/nginx/sites-available/default.conf

    • CentOS:

      vim /etc/nginx/conf.d/default.conf

    Скопируйте в файл следующий блок настроек:

    • Ubuntu и Debian:

      server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ .php$ { fastcgi_pass unix:/run/php/php7.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; include snippets/fastcgi-php.conf; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

    • CentOS:

      server { listen 80; listen [::]:80; server_name _; root /usr/share/nginx/html/; index index.php index.html index.htm index.nginx-debian.html; location / { try_files $uri $uri/ =404; } location ~ .php$ { 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; } location ~ /.ht { access_log off; log_not_found off; deny all; } }

Осталось проверить, что в конфигурационном файле отсутствуют ошибки, и перезапустить nginx для применения настроек:

nginx -t
systemctl reload nginx

Установка tasksel

По умолчанию tasksel обычно установлен, но если это не так, то вы можете установить tasksel командой

apt-get install tasksel

По зависимостям установится также пакет tasksel-data, включающий официальные задачи для установки. Дополнительно можно установить следующие пакеты:

education-tasks — Задачи для Debian Edu, включающие серверную часть и часть для тонких клиентов или рабочих станций

games-tasks — Задачи Debian Games, включающие большое количество игр, разделенных по жанрам, а также задачи для установки эмуляторов, лучших игр и разработки игр

gis-tasks — Задачи Debian GIS, включающие программы для работы с OpenStreetMap, GPS и другие программы, связанные с географической информацией

junior-tasks — Задачи Debian Jr. и Doudou Linux, включающие игры и обучающие программы, программы для видео, обучения печати и другие

и так далее. Полный список пакетов с заданиями можно посмотреть при помощи команды

apt-cache search tasksel

Использование tasksel

Программа tasksel может работать как в режиме командной строки, так и в интерактивном режиме. Если никакие параметры командной строки не указаны, программа будет работать в интерактивном режиме, будет показано меню с конфигурациями, вам только надо будет проставить флажки и затем нажать кнопку «OK».
tasksel001

В командном режиме программа будет работать только тогда, когда указаны параметры командной строки. Их немного:

—list-tasks Вывести список всех существующих задач
install задача Установить пакеты, определенные в задаче
remove задача Удалить пакеты, определенные в задаче
-t, —test Тестовый режим. Не удалять и не устанавливать пакеты на самом деле
—task-packages задача Вывести список пакетов, которые относятся к задаче и доступны в данный момент
—task-desc задача Вывести описание задачи
—new-install Автоматически выбрать задачи без отображения их пользователю. Используется при новой инсталляции Debian
—debconf-apt-progress опции Передать указанные опции команде debconf-apt-progress, которую запускает tasksel

Создание desc-файла для задачи tasksel

Tasksel позволяет достаточно быстро создавать собственные задачи. Для этого создается файл c расширением .desc, который размещается в директории /usr/share/tasksel/descs. Каждый файл .desc может включать одну и более задач, а каждая задача должна иметь определенную структуру, состоящую из полей с названием и значением. Вот эти поля:

Task Название задачи. Например. «Task: web-server» без кавычек
Section Секция, в которую входит задача. Например, «Section: httpd» или «Section: debian-games»
Description Описание задачи. Описание может занимать несколько строчек. Первая строчка — краткое описание задачи, а последующие, начинающиеся с пробела, — более подробное описание.
Relevance Релевантность. Обычно значение в этом поле выставляют равным 10. Пример: «Relevance: 10»
Enhances Задача, которую расширяет данная задача. Например, «Enhances: desktop»
Key Ключевое слово задачи. Часто совпадает с названием задачи
Packages Список пакетов, входящих в задачу. Если пакетов несколько, то после заголовка пишется слово «list», а сами пакеты перечисляются на следующих строках, каждый пакет с новой строки, перед названием пакета пробел

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

Пример задачи tasksel

Как пример давайте рассмотрим задачу для установки файлового менеджера Midnight Commander:

Task: mc-file-manager Section: utils Description: Midnight Commander — многофункциональный диспетчер файлов GNU Midnight Commander – полноэкранный текстовый файловый менеджер. В нём используется двухпанельный интерфейс и встроенная командная оболочка. Также имеется встроенный редактор с подсветкой синтаксиса и просмотрщик, поддерживающий двоичные файлы. Программа поддерживает виртуальную файловую систему (VFS), что позволяет работать с файлами на удалённых машинах (например, на серверах FTP, SSH) и с файлами внутри архивов, как с обычными файлами. Relevance: 10 Key: mc Packages: list e2fslibs libc6 libglib2.0-0 libgpm2 libslang2 libssh2-1 mc-data

Теперь можно сохранить этот файл в директории /usr/share/tasksel/descs под названием mc.desc и запустить tasksel без параметров. В появившемся меню вы увидите задачу для установки Midnight Commander.
Установка программ в Debian при помощи tasksel

Заключение

После чего в браузере пишем название свое доменное имя, или же можно “ip” адрес, либо “localhost”, в результате вы должный увидеть вывод информации php:

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

[spoiler title=»Источники»]

  • https://serverspace.ru/support/help/ustanovka-lamp-steka-na-ubutu-18-04/
  • https://losst.ru/ustanovka-lamp-ubuntu-18-04
  • https://FirstVDS.ru/technology/lamp-install
  • https://timeweb.com/ru/community/articles/kak-ustanovit-stek-lamp-na-ubuntu-20-04
  • https://1cloud.ru/help/linux/ustanovka-lemp-steka-linux-nginx-mysql-php
  • https://maddot.ru/kak-ustanovit-lemp-v-ubuntu-20-04.html
  • https://community.vscale.io/hc/ru/community/posts/208340569-%D0%9A%D0%B0%D0%BA-%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C-%D0%B8-%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B8%D1%82%D1%8C-LEMP-Linux-Nginx-MySQL-PHP-%D0%BD%D0%B0-%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%B5-%D1%81-Ubuntu-16-04
  • https://serverspace.by/support/help/ustanovka-lemp-steka-na-centos-7/
  • http://rus-linux.net/MyLDP/server/lemp.html
  • https://FirstVDS.ru/technology/lemp-install
  • https://mnorin.com/ustanovka-programm-v-debian-pri-pomoshhi-tasksel.html
  • https://cyber-x.ru/%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%B0%D0%B2%D0%BB%D0%B8%D0%B2%D0%B0%D0%B5%D0%BC-%D1%81%D1%82%D0%B5%D0%BA-lamp-%D0%B2-ubuntu-20-04-%D0%B8-debian-10/
[/spoiler]