441 lines
38 KiB
Markdown
441 lines
38 KiB
Markdown
---
|
||
source: https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-20-04-ru
|
||
---
|
||
|
||
## Введение
|
||
|
||
Программный стек #LEMP — это комплекс программного обеспечения, используемый для обслуживания динамических веб-страниц и веб-приложений, написанных на #php. Аббревиатура LEMP обозначает операционную систему **L**inux с веб-сервером #nginx (произносится как «**э**нджинкс»). Данные серверной части хранятся в базе данных **M**ySQL, а динамическая обработка выполняется **P**HP.
|
||
|
||
Это руководство рассказывает, как установить стек LEMP на сервер #Ubuntu 20.04. Операционная система Ubuntu обеспечивает выполнение первого требования. Далее мы расскажем, как настроить и запустить все остальные компоненты.
|
||
|
||
## Предварительные требования
|
||
|
||
Для выполнения настоящего обучающего руководства вам понадобится доступ к серверу Ubuntu 20.04 в качестве обычного пользователя без прав root с привилегиями `sudo`, а на вашем сервере должен быть включен брандмауэр. Чтобы выполнить настройку, воспользуйтесь руководством по [первоначальной настройке сервера Ubuntu 20.04](https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-20-04).
|
||
|
||
## Шаг 1 — Установка веб-сервера Nginx
|
||
|
||
Для демонстрации веб-страниц посетителям нашего сайта мы будем использовать современный и эффективный веб-сервер Nginx. Мы будем использовать диспетчер пакетов `apt` для получения этого программного обеспечения.
|
||
|
||
Поскольку в этом сеансе мы будем использовать `apt` впервые, нужно обновить указатель пакетов вашего сервера. После этого вы можете использовать `apt install` для установки Nginx:
|
||
|
||
При получении запроса введите `y` для подтверждения того, что вы хотите установить nginx. После завершения установки веб-сервер Nginx будет активирован и будет работать на вашем сервере Ubuntu 20.04.
|
||
|
||
Если у вас включен брандмауэр `ufw`, как рекомендуется в руководстве по первоначальной настройке сервера, вам нужно разрешить подключение к Nginx. После установки Nginx регистрирует несколько разных профилей приложений #ufw. Чтобы проверить, какие из профилей ufw доступны, выполните команду:
|
||
|
||
```shell
|
||
sudo ufw app list
|
||
```
|
||
|
||
```
|
||
Available applications:
|
||
Nginx Full
|
||
Nginx HTTP
|
||
Nginx HTTPS
|
||
OpenSSH
|
||
```
|
||
|
||
Рекомендуется применять самый ограничивающий профиль, который будет разрешать желаемый трафик. Поскольку в этом руководстве вы не настроили SSL для своего сервера, вам нужно будет только разрешить трафик на порту `80`.
|
||
|
||
Для этого введите следующее:
|
||
|
||
```shell
|
||
sudo ufw allow 'Nginx HTTP'
|
||
```
|
||
|
||
Для проверки изменения используйте команду:
|
||
|
||
```shell
|
||
sudo ufw status
|
||
```
|
||
|
||
Результат выполнения этой команды покажет, что трафик HTTP теперь разрешен:
|
||
|
||
```
|
||
Status: active
|
||
|
||
To Action From
|
||
-- ------ ----
|
||
OpenSSH ALLOW Anywhere
|
||
Nginx HTTP ALLOW Anywhere
|
||
OpenSSH (v6) ALLOW Anywhere (v6)
|
||
Nginx HTTP (v6) ALLOW Anywhere (v6)
|
||
```
|
||
|
||
После добавления нового правила брандмауэра вы можете проверить, запущен ли сервер, указав в браузере доменное имя вашего сервера или публичный IP-адрес.
|
||
|
||
Если у вас нет доменного имени, указывающего на ваш сервер, и вы не знаете публичный IP-адрес вашего сервера, вы можете найти его, введя в терминал следующую команду:
|
||
|
||
```shell
|
||
ip addr show eth0 | grep inet | awk '{ print $2; }' | sed 's/\/.*$//'
|
||
```
|
||
|
||
Команда выведет несколько IP-адресов. Вы можете попробовать каждый из них в своем браузере.
|
||
|
||
Также вы можете проверить доступность IP-адреса из других мест в интернете:
|
||
|
||
```shell
|
||
curl -4 icanhazip.com
|
||
```
|
||
|
||
Введите полученный адрес в браузер, и вы попадете на страницу Nginx по умолчанию:
|
||
|
||
```
|
||
http://server_domain_or_IP
|
||
```
|
||
|
||
![[nginx_default.png]]
|
||
|
||
Если вы видите эту страницу, значит, вы успешно установили Nginx и активировали трафик HTTP для вашего веб-сервера.
|
||
|
||
## Шаг 2 — Установка MySQL
|
||
|
||
Мы запустили веб-сервер, и теперь нам нужно установить #СУБД, которая может хранить данные вашего сайта и управлять ими. #MySQL — популярная СУБД, используемая в средах PHP.
|
||
|
||
Используйте `apt` для получения и установки этого программного обеспечения:
|
||
|
||
```shell
|
||
sudo apt install mysql-server
|
||
```
|
||
|
||
Для подтверждения установки введите `Y`, а затем нажмите `ENTER`.
|
||
|
||
После завершения установки рекомендуется запустить скрипт безопасности, предустановленный в MySQL. Этот скрипт будет удалять некоторые небезопасные настройки по умолчанию и блокировать доступ к системе управления базы данных. Для запуска интерактивного скрипта введите следующую команду:
|
||
|
||
```shell
|
||
sudo mysql_secure_installation
|
||
```
|
||
|
||
Скрипт предложит настроить плагин `VALIDATE PASSWORD PLUGIN`.
|
||
|
||
**Примечание.** Эту функцию следует активировать при наличии разумных оснований. Если она активирована, MySQL будет отклонять пароли, не соответствующие определенным критериям, и выводить сообщение об ошибке. Оставить проверку отключенной достаточно безопасно, но для входа в базу данных всегда нужно использовать надежные уникальные пароли.
|
||
|
||
Выберите `Y` для активации или любой другой вариант, чтобы продолжить без активации этой функции.
|
||
|
||
```
|
||
VALIDATE PASSWORD PLUGIN 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 plugin?
|
||
|
||
Press y|Y for Yes, any other key for No:
|
||
```
|
||
|
||
Если вы ответите утвердительно, вам будет предложено выбрать уровень проверки пароля. Если вы укажете самый высокий уровень `2`, система будет выводить сообщения об ошибке при попытке установки пароля, который не будет содержать цифры, буквы в верхнем и нижнем регистре и специальные символы или будет содержать распространенные словарные слова.
|
||
|
||
```
|
||
There are three levels of password validation policy:
|
||
|
||
LOW Length >= 8
|
||
MEDIUM Length >= 8, numeric, mixed case, and special characters
|
||
STRONG Length >= 8, numeric, mixed case, special characters and dictionary file
|
||
|
||
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 1
|
||
```
|
||
|
||
Вне зависимости от того, будете ли вы использовать плагин `VALIDATE PASSWORD PLUGIN`, ваш сервер предложит вам выбрать и подтвердить пароль для пользователя **root** в MySQL. Не нужно путать его с **системным пользователем root**. Пользователь **root базы данных** — это пользователь с правами администратора, который имеет все права для работы с системой управления базы данных. Хотя в MySQL метод аутентификации пользователя root по умолчанию не требует использования пароля **даже при его наличии**, задайте надежный пароль для обеспечения дополнительной безопасности. Чуть дальше мы расскажем об этом подробнее.
|
||
|
||
Если вы включили использование паролей, вы увидите уровень надежности введенного пароля root, и ваш сервер запросит у вас подтверждение дальнейшего использования этого пароля. Если вас устраивает текущий пароль, введите `Y` в диалоге для подтверждения:
|
||
|
||
```
|
||
Estimated strength of the password: 100
|
||
Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) : y
|
||
```
|
||
|
||
Для всех остальных вопросов нужно выбирать `Y` и нажимать `ENTER` в каждом диалоге. Выбрав эти ответы, вы удалите ряд анонимных пользователей и тестовую базу данных, отключите возможность удаленного входа пользователя root и загрузите новые правила, чтобы внесенные изменения немедленно активировались в MySQL.
|
||
|
||
Завершив настройку, проверьте возможность входа в консоль MySQL, набрав следующую команду:
|
||
|
||
```shell
|
||
sudo mysql
|
||
```
|
||
|
||
В результате будет установлено подключение к серверу MySQL с помощью пользователя **root** базы данных с правами администратора, который логически выводится в результате использования `sudo` при запуске данной команды. Результат должен выглядеть следующим образом:
|
||
|
||
```
|
||
Welcome to the MySQL monitor. Commands end with ; or \g.
|
||
Your MySQL connection id is 22
|
||
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
|
||
```
|
||
|
||
Обратите внимание, что для подключения под именем пользователя **root** не требуется вводить пароль, хотя вы и задали его при запуске скрипта `mysql_secure_installation`. Это происходит, поскольку используемый по умолчанию метод аутентификации для пользователя MySQL с правами администратора — `unix_socket`, а не `password`. Хотя это может выглядеть как возможный источник проблем с безопасностью, на самом деле эти действия делают сервер базы данных более защищенным, поскольку единственные пользователи, которые могут выполнять вход в систему с правами доступа **root** для MySQL — это пользователи системы с привилегиями sudo, подключенные с использованием консоли или через приложение, использующее аналогичные привилегии. На практике это означает, что вы не сможете использовать пользователя **root** базы данных с правами администратора для подключения из вашего приложения PHP. Настройка пароля учетной записи **root** MySQL работает как гарантия, если метод аутентификации по умолчанию меняется с `unix_socket` на `password`.
|
||
|
||
Для дополнительной безопасности рекомендуется иметь специальные учетные записи пользователей с менее обширными привилегиями, особенно если вы планируете использовать несколько баз данных на сервере.
|
||
|
||
**Примечание.** На момент написания этого руководства родная библиотека MySQL PHP `mysqlnd` [не поддерживает](https://www.php.net/manual/en/ref.pdo-mysql.php) `caching_sha2_authentication`, метод аутентификации MySQL 8 по умолчанию. Поэтому при создании пользователей базы данных для приложений PHP на MySQL 8 вам нужно убедиться, что вместо этого пароля они настроены на использование `mysql_native_password`. Мы расскажем об этом в [шаге 6](https://www.digitalocean.com/community/tutorials/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-20-04-ru#step-6-%E2%80%94-testing-database-connection-from-php-(optional)).
|
||
|
||
Теперь ваш сервер MySQL установлен и защищен. Далее мы выполним установку PHP, последнего компонента стека LEMP.
|
||
|
||
## Шаг 3 — Установка PHP
|
||
|
||
Вы установили Nginx для обслуживания вашего контента и MySQL для хранения и управления данными. Теперь вы можете установить PHP для обработки кода и генерации динамического контента для веб-сервера.
|
||
|
||
Хотя Apache встраивает интерпретатор PHP в каждый запрос, Nginx требуется внешняя программа для обработки PHP и организации моста между самим интерпретатором PHP и веб-сервером. Это позволяет обеспечить более высокую производительность на большинстве веб-сайтов на базе PHP, но для этого необходимо выполнить дополнительную настройку. Вы должны установить `php-fpm`, т. е. диспетчер процессов PHP #fastCGI, и указать Nginx на необходимость передачи запросов PHP данному программному обеспечению. Также вам потребуется `php-mysql`, модуль PHP, который позволяет PHP взаимодействовать с базами данных MySQL. Ключевые пакеты PHP автоматически будут установлены в качестве зависимостей.
|
||
|
||
Для установки пакетов `php-fpm` и `php-mysql` воспользуйтесь следующей командой:
|
||
|
||
При поступлении запроса введите `Y` и `ENTER` для подтверждения установки.
|
||
|
||
Теперь вы установили компоненты PHP. Далее вы настроите Nginx для их использования.
|
||
|
||
## Шаг 4 — Настройка Nginx для использования процессора PHP
|
||
|
||
При использовании веб-сервера Nginx вы можете создавать _блоки сервера_ (аналогичные виртуальным хостам в Apache) для инкапсуляции данных конфигурации и размещения на одном сервере нескольких доменов. В этом руководстве мы будем использовать **your_domain** в качестве примера доменного имени. Чтобы узнать больше о настройке доменного имени с помощью DigitalOcean, см. наше обучающее руководство [Введение в DigitalOcean DNS](https://www.digitalocean.com/docs/networking/dns/).
|
||
|
||
В Nginx на Ubuntu 20.04 по умолчанию включен один серверный блок, настроенный для вывода документов из директории `/var/www/html`. Хотя это хорошо работает для отдельного сайта, при размещении нескольких сайтов это может доставлять неудобства. Вместо изменения `/var/www/html` мы создадим внутри `/var/www` структуру директорий для нашего сайта **your_domain**, оставив `/var/www/html` в качестве директории по умолчанию для вывода в случае, если запросу клиента не соответствуют никакие другие сайты.
|
||
|
||
Создайте корневую веб-директорию для **your_domain** следующим образом:
|
||
|
||
```shell
|
||
sudo mkdir /var/www/your_domain
|
||
```
|
||
|
||
Затем необходимо назначить права владения для директории с помощью переменной среды $USER, которая будет использоваться для текущего системного пользователя:
|
||
|
||
После этого откройте новый файл конфигурации в директории Nginx `sites-available` с помощью любого редактора командной строки. Мы будем использовать `nano`:
|
||
|
||
В результате будет создан новый пустой файл. Вставьте следующую пустую конфигурацию:
|
||
|
||
```
|
||
server {
|
||
listen 80;
|
||
server_name your_domain www.your_domain;
|
||
root /var/www/your_domain;
|
||
|
||
index index.html index.htm index.php;
|
||
|
||
location / {
|
||
try_files $uri $uri/ =404;
|
||
}
|
||
|
||
location ~ \.php$ {
|
||
include snippets/fastcgi-php.conf;
|
||
fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
|
||
}
|
||
|
||
location ~ /\.ht {
|
||
deny all;
|
||
}
|
||
}
|
||
```
|
||
|
||
Ниже описано действие этих директив и блоков расположения:
|
||
|
||
- `listen` — определяет, что будет прослушивать порт Nginx. В данном случае он будет прослушивать порт `80`, используемый по умолчанию для протокола HTTP.
|
||
- `root` — определяет корневую директорию документа, где хранятся файлы, обслуживаемые этим сайтом.
|
||
- `index` — задает для Nginx приоритет обслуживания файлов индекса для этого сайта. Довольно часто вы указываете файлы `index.html`, которые имеют высший приоритет по сравнению с файлами `index.php`, чтобы обеспечить быструю настройку начальной страницы в приложениях PHP. Вы можете менять эти настройки в зависимости от потребностей вашего приложения.
|
||
- `server_name` — определяет, на какие доменные имена и/или IP-адреса должен реагировать ваш серверный блок. **Эта директива должна указывать на доменное имя или публичный IP-адрес вашего сервера.**
|
||
- `location /` — первый блок расположения включает директиву `try_files`, которая проверяет наличие файлов или директорий, соответствующих запросу URI. Если Nginx не сможет найти соответствующий ресурс, будет возвращена ошибка 404.
|
||
- `location ~ \.php$` — этот блок расположения отвечает за фактическую обработку PHP посредством указания Nginx на файл конфигурации `fastcgi-php.conf` и файл `php7.4-fpm.sock`, который объявляет, какой сокет ассоциирован с `php-fpm`.
|
||
- `location ~ /\.ht` — последний блок расположения отвечает за файлы `.htaccess`, которые Nginx не обрабатывает. При добавлении директивы `deny all`, если любой из файлов `.htaccess` попадет в корневую директорию документа, они не будут выводиться посетителям.
|
||
|
||
Когда вы закончите редактирование, сохраните и закройте файл. Если вы используете `nano`, можно ввести `CTRL+X`, а затем `y` и `ENTER` для подтверждения.
|
||
|
||
Активируйте вашу конфигурацию посредством привязки к файлу конфигурации из директории Nginx `sites-enabled`:
|
||
|
||
```shell
|
||
sudo ln -s /etc/nginx/sites-available/your_domain /etc/nginx/sites-enabled/
|
||
```
|
||
|
||
Это укажет Nginx использовать эту конфигурацию в следующий раз при перезагрузке. Вы можете протестировать вашу конфигурацию на наличие ошибок синтаксиса с помощью команды:
|
||
|
||
Если есть какие-либо ошибки, вернитесь в файл конфигурации и проверьте его содержание перед тем, как продолжить.
|
||
|
||
Когда будете готовы, перезагрузите Nginx для внесения необходимых изменений:
|
||
|
||
Теперь ваш новый веб-сайт активен, но корневая веб-директория `/var/www/your_domain` все еще пуста. Создайте файл `index.html` в этом расположении, чтобы убедиться, что веб-сервер работает, как ожидалось:
|
||
|
||
Внесите в файл следующее:
|
||
|
||
```html
|
||
<html>
|
||
<head>
|
||
<title>your_domain website</title>
|
||
</head>
|
||
<body>
|
||
<h1>Hello World!</h1>
|
||
|
||
<p>This is the landing page of <strong>your_domain</strong>.</p>
|
||
</body>
|
||
</html>
|
||
```
|
||
|
||
Теперь откройте браузер и получите доступ к доменному имени сервера или IP-адресу, как указано в директиве `server_name` в файле конфигурации вашего серверного блока:
|
||
|
||
```
|
||
http://server_domain_or_IP
|
||
```
|
||
|
||
Страница будет выглядеть следующим образом:
|
||
|
||
![[landing_page.png]]
|
||
|
||
Если вы видите эту страницу, это означает, что ваш серверный блок Nginx работает, как и ожидалось.
|
||
|
||
Вы можете оставить этот файл в качестве временной начальной страницы для вашего приложения, пока не настроите файл `index.php` для его замены. Как только вы сделаете это, не забудьте удалить или переименовать файл `index.html` из корневой директории документов, так как он будет иметь приоритет перед фалом `index.php` по умолчанию.
|
||
|
||
Теперь ваш стек LEMP полностью настроен. В следующем шаге мы создадим скрипт PHP для проверки способности Nginx обрабатывать файлы `.php` на вашем недавно настроенном веб-сайте.
|
||
|
||
## Шаг 5 — Тестирование PHP с помощью Nginx
|
||
|
||
Теперь набор LEMP должен быть полностью настроен. Вы можете протестировать его, чтобы убедиться, что Nginx может правильно передавать файлы `.php` на процессор PHP.
|
||
|
||
Вы можете сделать это, создав тестовый файл PHP в корневой директории документов. Откройте в своем текстовом редакторе новый файл с именем `info.php` внутри корневой директории документов:
|
||
|
||
Введите или вставьте следующие строки в новый файл. Это корректный код PHP, который будет возвращать информацию о вашем сервере:
|
||
|
||
```php
|
||
<?php
|
||
phpinfo();
|
||
```
|
||
|
||
После завершения сохраните и закройте файл с помощью команды `CTRL`+`X`, а затем введите `y` и `ENTER` для подтверждения.
|
||
|
||
Теперь вы можете получить доступ к этой странице в веб-браузере, посетив доменное имя или публичный IP-адрес, настроенный в файле конфигурации Nginx, добавив `/info.php` в конце:
|
||
|
||
```
|
||
http://server_domain_or_IP/info.php
|
||
```
|
||
|
||
Вы увидите веб-страницу, содержащую подробную информацию о вашем сервере:
|
||
|
||
![[phpinfo.png]]
|
||
|
||
После проверки соответствующей информации о вашем сервере PHP с помощью данной страницы рекомендуется удалить созданный вами файл, поскольку он содержит конфиденциальную информацию о вашей среде PHP и о вашем сервере Ubuntu. Вы можете использовать `rm` для удаления этого файла:
|
||
|
||
```shell
|
||
sudo rm /var/www/your_domain/info.php
|
||
```
|
||
|
||
При необходимости вы всегда сможете восстановить этот файл.
|
||
|
||
## Шаг 6 — Тестирование подключения к базе данных для PHP (необязательно)
|
||
|
||
Если вы хотите проверить, может ли PHP подключаться к MySQL и выполнять запросы для базы данных, вы можете создать тестовую таблицу с шаблонными данными и запрашивать ее содержимое из скрипта PHP. Прежде чем сделать это, нам нужно создать тестовую базу данных и нового пользователя MySQL с правильной настройкой для доступа к ней.
|
||
|
||
На момент написания этого руководства родная библиотека MySQL PHP `mysqlnd` [не поддерживает](https://www.php.net/manual/en/ref.pdo-mysql.php) `caching_sha2_authentication`, метод аутентификации по умолчанию для MySQL 8. Мы должны создать нового пользователя с помощью метода аутентификации `mysql_native_password` для подключения к базе данных MySQL из PHP.
|
||
|
||
Мы создадим базу данных с именем **example_database** и пользователя с именем **example_user**, но вы можете использовать и другие имена.
|
||
|
||
Вначале необходимо подключиться к консоли MySQL с помощью учетной записи **root**:
|
||
|
||
Чтобы создать новую базу данных, запустите следующую команду в консоли MySQL:
|
||
|
||
Теперь вы можете создать нового пользователя и предоставить ему полный набор прав для только что созданной вами базы данных.
|
||
|
||
Следующая команда создает нового пользователя с именем `example_user`, используя `mysql_native_password` в качестве метода аутентификации по умолчанию. Следующая команда определяет пароль этого пользователя как `password`, но вы можете заменить его на безопасный пароль по вашему выбору.
|
||
|
||
Теперь нам нужно предоставить этому пользователю разрешение для базы данных `example_database`:
|
||
|
||
В результате пользователь **example_user** получит полный набор привилегий для базы данных **example_database**, но не будет обладать возможностью создания или изменения других баз данных на сервере.
|
||
|
||
Теперь закройте оболочку MySQL:
|
||
|
||
Вы можете проверить наличие у нового пользователя необходимых разрешений, выполнив повторный вход в консоль MySQL, на этот раз используя учетные данные вашего собственного пользователя:
|
||
|
||
Обратите внимание на флаг `-p` в этой команде, который будет запрашивать пароль, который вы задаете при создании пользователя **example_user**. После входа в консоль MySQL убедитесь, что у вас есть доступ к базе данных **example_database**:
|
||
|
||
Результат будет выглядеть следующим образом:
|
||
|
||
```
|
||
+--------------------+
|
||
| Database |
|
||
+--------------------+
|
||
| example_database |
|
||
| information_schema |
|
||
+--------------------+
|
||
2 rows in set (0.000 sec)
|
||
```
|
||
|
||
Далее мы создадим тестовую таблицу с именем **todo_list**. Из консоли MySQL запустите следующее выражение:
|
||
|
||
```
|
||
item_id INT AUTO_INCREMENT,
|
||
```
|
||
|
||
Теперь добавьте несколько строк содержимого в тестовую таблицу. Возможно, вам потребуется несколько раз повторить следующую команду, используя разные значения:
|
||
|
||
Чтобы подтвердить, что данные были успешно сохранены в таблицу, запустите следующую команду:
|
||
|
||
Вывод должен выглядеть так:
|
||
|
||
```
|
||
+---------+--------------------------+
|
||
| item_id | content |
|
||
+---------+--------------------------+
|
||
| 1 | My first important item |
|
||
| 2 | My second important item |
|
||
| 3 | My third important item |
|
||
| 4 | and this one more thing |
|
||
+---------+--------------------------+
|
||
4 rows in set (0.000 sec)
|
||
|
||
```
|
||
|
||
Убедившись в том, что у вас есть надлежащие данные в тестовой таблице, вы можете закрыть консоль MySQL:
|
||
|
||
Теперь вы можете создать скрипт PHP, который будет подключаться к MySQL и запрашивать ваше содержимое. Создайте новый файл PHP в пользовательской корневой веб-директории в предпочитаемом вами редакторе. Мы будем использовать `nano`:
|
||
|
||
Следующий скрипт PHP подключается к базе данных MySQL и запросам по содержимому таблицы **todo_list**, выводя результаты в список. Если существует проблема подключения к базе данных, будет выдана ошибка. Скопируйте это содержимое в скрипт `todo_list.php`:
|
||
|
||
```php
|
||
<?php
|
||
$user = "example_user";
|
||
$password = "password";
|
||
$database = "example_database";
|
||
$table = "todo_list";
|
||
|
||
try {
|
||
$db = new PDO("mysql:host=localhost;dbname=$database", $user, $password);
|
||
echo "<h2>TODO</h2><ol>";
|
||
foreach($db->query("SELECT content FROM $table") as $row) {
|
||
echo "<li>" . $row['content'] . "</li>";
|
||
}
|
||
echo "</ol>";
|
||
} catch (PDOException $e) {
|
||
print "Error!: " . $e->getMessage() . "<br/>";
|
||
die();
|
||
}
|
||
```
|
||
|
||
Сохраните и закройте файл после завершения редактирования.
|
||
|
||
Теперь вы можете получить доступ к этой странице в веб-браузере, посетив доменное имя или публичный IP-адрес, настроенный для вашего веб-сайта, добавив `/todo_list.php` в конце:
|
||
|
||
```
|
||
http://server_domain_or_IP/todo_list.php
|
||
```
|
||
|
||
Вы должны увидеть примерно следующую страницу, отображающую содержимое, которое вы добавили в тестовую таблицу:
|
||
|
||
![[todo_list.png]]
|
||
|
||
Это означает, что ваша среда PHP готова к подключению и взаимодействию с вашим сервером MySQL.
|
||
|
||
## Заключение
|
||
|
||
С помощью этого руководства мы создали гибкую основу для обслуживания веб-сайтов PHP и приложений для ваших посетителей, используя Nginx в качестве веб-сервера и MySQL в качестве системы управления базы данных.
|
||
|
||
Теперь можно выполнить ряд последующих шагов. Например, вы можете проверить защищенность соединений с вашим сервером. Для этого вы можете [обеспечить безопасность установки Nginx с помощью Let’s Encrypt](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-20-04). Следуя указаниям настоящего руководства, вы получите бесплатный сертификат TLS/SSL для вашего сервера, который позволит ему обслуживать контент через протокол HTTPS.
|
||
|
||
### Want to learn more? Join the DigitalOcean Community!
|
||
|
||
Join our DigitalOcean community of over a million developers for free! Get help and share knowledge in our Questions & Answers section, find tutorials and tools that will help you grow as a developer and scale your project or business, and subscribe to topics of interest.
|
||
|
||
[Sign up](https://www.digitalocean.com/api/dynamic-content/v1/login?success_redirect=https%3A%2F%2Fwww.digitalocean.com%2Fcommunity%2Ftutorials%2Fhow-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-20-04-ru&error_redirect=https%3A%2F%2Fwww.digitalocean.com%2Fauth_error)
|