Install phpMyAdmin
The easiest way to install phpmyadmin is through apt-get:
sudo apt-get install phpmyadmin apache2-utils
During the installation, phpMyAdmin will walk you through a basic configuration. Once the process starts up, follow these steps:
- Select Apache2 for the server
- Choose YES when asked about whether to Configure the database for phpmyadmin with dbconfig-common
- Enter your MySQL password when prompted
- Enter the password that you want to use to log into phpmyadmin
After the installation has completed, add phpmyadmin to the apache configuration.
sudo nano /etc/apache2/apache2.conf
Add the phpmyadmin config to the file.
Include /etc/phpmyadmin/apache.conf
Restart apache:
sudo service apache2 restart
You can then access phpmyadmin by going to youripaddress/phpmyadmin. The screen should look like this
Поддержка стандартов, возможности, особенности
PostgreSQL
PostgreSQL поддерживает большинство возможностей стандарта SQL: 2011, ACID-совместимая и транзакционная (включая большинство DDL утверждения) избегает проблемы блокировки с помощью механизма Многоверсионное управление параллельным доступом (MVCC), обеспечивает иммунитет к «грязному» чтению и полую сериализационность; управляет комплексными SQL запросами используя множество индексированных методов, которые недоступны в других базах данных; имеет обновляемые представления и материализованные представления, триггеры, внешние ключи; поддерживает функции и хранимые процедуры, и другие возможности расширения, и имеет множество расширений, написанных третьими лицами. В дополнение к возможности работы с основными фирменными и с открытым исходным кодом базами данных, PostgreSQL поддерживает миграцию из них, путем своей обширной поддержки стандарта SQL и доступных инструментов миграции. Фирменные расширения в базах данных, таких как Oracle можно эмулировать с помощью встроенных и сторонних расширений совместимости с открытым исходным кодом. Последние версии также обеспечивают репликацию самой базы данных для доступности и масштабируемости.
PostgreSQL является кросплотформенной и работает на множестве операционных систем, включая Linux, FreeBSD, macOS, Solaris, и Microsoft Windows. Начиная с Mac OS X 10.7 Lion Server, PostgreSQL это стандартная база данных по умолчанию, и клиентские инструменты PostgreSQL идут в комплекте с настольной версией. Подавляющее большинство дистрибутивов Linux имеет PostgreSQL доступным в поддерживаемых пакетах.
PostgreSQL разработан PostgreSQL Global Development Group, разнообразной группой из многих компаний и отдельных вкладчиков. Это свободное и открытое программное обеспечение, распространяемое по условиям Лицензии PostgreSQL, разрешительной лицензии свободного программного обеспечения.
Поскольку СУБД PostgreSQL выпускается под либеральной лицензией, её можно бесплатно использовать, модифицировать и распространять для любых целей, включая личные, коммерческие или академические.
На данный момент (версия 9.4.5), в PostgreSQL имеются следующие ограничения:
Максимальный размер базы данных | Нет ограничений |
Максимальный размер таблицы | 32 Тбайт |
Максимальный размер записи | 1,6 Тбайт |
Максимальный размер поля | 1 Гбайт |
Максимум записей в таблице | Нет ограничений |
Максимум полей в записи | 250—1600, в зависимости от типов полей |
Максимум индексов в таблице | Нет ограничений |
Сильными сторонами PostgreSQL считаются:
- высокопроизводительные и надёжные механизмы транзакций и репликации;
- расширяемая система встроенных языков программирования: в стандартной поставке поддерживаются PL/pgSQL, [PL/Perl, PL/Python и PL/Tcl; дополнительно можно использовать PL/Java, PL/PHP, PL/Py, PL/R, PL/Ruby, PL/Scheme, PL/sh и PL/V8, а также имеется поддержка загрузки C-совместимых модулей ;
- поддержка со стороны многих языков программирования: C\C++, Java, Perl, Python, Ruby, ECPG, Tcl, PHP и других.
- наследование;
- легкая расширяемость.
Step Two — Secure your phpMyAdmin Instance
We were able to get our phpMyAdmin interface up and running fairly easily. However, we are not done yet. Because of its ubiquity, phpMyAdmin is a popular target for attackers. We need to secure the application to help prevent unauthorized use.
One of the easiest way of doing this is to place a gateway in front of the entire application. We can do this using Apache’s built-in authentication and authorization functionalities.
Configure Apache to Allow .htaccess Overrides
First, we need to enable the use of file overrides by editing our Apache configuration file.
We will edit the linked file that has been placed in our Apache configuration directory:
We need to add an directive within the section of the configuration file, like this:
<pre>
<Directory /usr/share/phpmyadmin>
Options FollowSymLinks
DirectoryIndex index.php
<span class=“highlight”>AllowOverride All</span>
…
</pre>
When you have added this line, save and close the file.
To implement the changes you made, restart Apache:
Create an .htaccess File
Now that we have enabled use for our application, we need to create one to actually implement some security.
In order for this to be successful, the file must be created within the application directory. We can create the necessary file and open it in our text editor with root privileges by typing:
Within this file, we need to enter the following information:
Let’s go over what each of these lines mean:
- AuthType Basic: This line specifies the authentication type that we are implementing. This type will implement password authentication using a password file.
- AuthName: This sets the message for the authentication dialog box. You should keep this generic so that unauthorized users won’t gain any information about what is being protected.
- AuthUserFile: This sets the location of the password file that will be used for authentication. This should be outside of the directories that are being served. We will create this file shortly.
- Require valid-user: This specifies that only authenticated users should be given access to this resource. This is what actually stops unauthorized users from entering.
When you are finished, save and close the file.
Create the .htpasswd file for Authentication
Now that we have specified a location for our password file through the use of the directive within our file, we need to create this file.
We actually need an additional package to complete this process. We can install it from our default repositories:
Afterward, we will have the utility available.
The location that we selected for the password file was “”. Let’s create this file and pass it an initial user by typing:
<pre>
sudo htpasswd -c /etc/phpmyadmin/.htpasswd <span class=“highlight”>username</span>
</pre>
You will be prompted to select and confirm a password for the user you are creating. Afterwards, the file is created with the hashed password that you entered.
If you want to enter an additional user, you need to do so without the flag, like this:
<pre>
sudo htpasswd /etc/phpmyadmin/.htpasswd <span class=“highlight”>additionaluser</span>
</pre>
Now, when you access your phpMyAdmin subdirectory, you will be prompted for the additional account name and password that you just configured:
<pre>
http://<span class=“highlight”>domainnameor_IP</span>/phpmyadmin
</pre>
After entering the Apache authentication, you’ll be taken to the regular phpMyAdmin authentication page to enter your other credentials. This will add an additional layer of security since phpMyAdmin has suffered from vulnerabilities in the past.
Создаем простой скрипт
Давайте рассмотрим простой пример работы с PHP и создадим небольшой скрипт. Мы не будем подробно вникать в синтаксис языка и в назначение операторов, а лишь наглядно покажем, как PHP взаимодействует с HTML.
Для начала нам нужно установить компилятор PHP на компьютер. Так как мы выяснили, что PHP — это серверный язык, то существуют специальные готовые сборки веб-серверов, которые включают в себя, помимо PHP, и другие полезные инструменты, например, СУБД MySQL. Одной из таких сборок является Open Server. Для написания кода будем использовать текстовый редактор Sublime Text 3.
Перейдем в папку domains веб-сервера Open Server и создадим в ней новую папку example. Внутри папки example создадим2 файла: index.html и handler.php.
Код нашей главной страницы index.html будет иметь следующий вид:
Мы имеем форму с текстовым полем и кнопкой. Атрибут action тега <form> указывает на имя и путь файла-скрипта, который будет обрабатывать введенные данные, — в нашем случае это файл handler.php. Атрибут method указывает на способ передачи данных — get; также существует метод передачи post.
Напишем код для скрипта handler.php.
Немного разберем код:
- В строках 3–5 создается три массива, которые содержат информацию о фруктах, овощах и ягодах. На самом деле подобного рода данные должны храниться в базе данных и затем из нее вытягиваться. Но в качестве примера мы ввели их вручную в коде.
- В строке 7 создается переменная $searchText, которая содержит в себе введенное в текстовое поле значение. Это значение берется из суперглобального массива $_GET, в квадратных скобках которого указывается имя текстового поля, которое мы задали в файле index.html. Этот массив инициализируется при отправке формы.
- В строках 9–15 сначала проверяется, была ли нажата кнопка отправки формы, которая имеет имя searchSubmit, затем происходит проверка введенного значения и, в зависимости от того, какой вид продукта ввел пользователь, в переменную $products записывается ранее созданный соответствующий массив.
- В строках 17–28 происходит вывод массива на экран в виде таблицы. Как видите, PHP отличает HTML-теги от обычных строк и выводит в окно браузера с помощью функции echo HTML-таблицу.
- В строке 22 происходит перебор нашего массива products с помощью специального оператора цикла foreach.
Чтобы придать таблице красивый вид, мы создадим небольшой файл стилей styles.css. Он подключается в файле handler.php во второй строчке кода.
Все готово. Запустим наш веб-сервер и в адресной строке браузера перейдем по адресу example.
Введем в поле значение «фрукты» и нажмем кнопку Поиск.
Откроется главная страница index.html.
В результате веб-сервер перебросил нас на выполнение скрипта handler.php, который, в свою очередь, отобразил на экране таблицу фруктов
Обратите внимание на адресную строку.
Так выглядит наш get-запрос.
После вопросительного знака указывается имя параметра, в данном случае это название поля searchText, и через знак «=» указывается его введенное значение. Таких пар «имя = значение» может быть несколько, они должны разделяться между собой знаком «&». Не рекомендуется использовать данный метод передачи, если вам нужно передать большой объем данных либо же какие-то конфиденциальные данные, например, логин и пароль. В таких случаях используется метод post.
При дальнейшем изучении — например, в рамках курса PHP-разработчик от Skillbox — вы обязательно узнаете о таких важных вещах, как взаимодействие PHP с базой данных, построение объектной модели, выполнение асинхронных запросов без перезагрузки страницы, и о том, как строится архитектура высоконагруженных систем.
Шаг 3 – Установка PHP и настройка Nginx для использования процессора PHP
Теперь у вас есть Nginx для обслуживания ваших страниц и MySQL для хранения и управления данными, однако у вас до сих пор не установлено ПО, которое может генерировать динамический контент. Для этого требуется установить PHP.
Поскольку Nginx не поддерживает нативную обработку PHP, как некоторые другие веб-серверы, вам потребуется установить , т.е. «менеджер процессов fastCGI». Мы укажем Nginx передавать запросы PHP в это программное обеспечение для обработки.
Примечание. В зависимости от поставщика облачных услуг вам может потребоваться установить хранилище Ubuntu , которое включает бесплатное программное обеспечение и программное обеспечение с открытым исходным кодом, поддерживаемое сообществом Ubuntu, прежде чем устанавливать пакет . Для этого можно ввести следующую команду:
Установите модуль с дополнительным вспомогательным пакетом , который позволит PHP взаимодействовать с серверной частью вашей базы данных. При установке будут загружены необходимые файлы ядра PHP. Введите следующее:
Теперь у вас установлены все требуемые компоненты набора LEMP, однако вам нужно внести еще несколько изменений конфигурации, чтобы Nginx использовал процессор PHP для динамического контента.
Это изменение конфигурации выполняется уровне блока сервера (блоки сервера похожи на виртуальные хосты в Apache). Откройте новый файл конфигурации блока сервера в каталоге . В этом примере новый файл конфигурации блока сервера имеет имя , хотя вы можете использовать любое желаемое имя:
Если вам потребуется восстановить конфигурацию по умолчанию, вы можете отредактировать новый файл конфигурации блока сервера, а не изменять используемый по умолчанию файл.
Добавьте в новый файл конфигурации блока следующее содержимое, которое взято с некоторыми модификациями из файла конфигурации блока сервера по умолчанию:
/etc/nginx/sites-available/example.com
Ниже описано действие этих директив и блоков расположения:
- — определяет, что будет прослушивать порт Nginx. В данном случае он будет прослушивать порт , используемый по умолчанию для протокола HTTP.
- — определяет корневой каталог документа, где хранятся файлы, обслуживаемые сайтом.
- — задает для Nginx приоритет обслуживания файлов с именем (при наличии) при запросе файла индекса.
- — определяет, какой серверный блок должен использоваться для заданного запроса вашего сервера. Эта директива должна указывать на доменное имя или публичный IP-адрес вашего сервера.
- — первый блок расположения включает директиву , которая проверяет наличие файлов, соответствующих запросу URI. Если Nginx не сможет найти соответствующий файл, будет возвращена ошибка 404.
- — этот блок расположения отвечает за фактическую обработку PHP посредством указания Nginx на файл конфигурации и файл file, который объявляет, какой сокет ассоциирован с .
- — последний блок расположения отвечает за файлы , которые Nginx не обрабатывает. При добавлении директивы из файлов в корневой каталог документа они не будут выводиться посетителям.
После добавления этого содержания следует сохранить и закрыть файл. Для активации нового серверного блока создайте символическую ссылку от нового файла конфигурации серверного блока (в каталоге ) на каталог :
Затем уберите ссылку на файл конфигурации по умолчанию из каталога :
Примечание. Если вам потребуется восстановить конфигурацию по умолчанию, вы можете сделать это посредством воссоздания символической ссылки:
Протестируйте новый файл конфигурации на ошибки синтаксиса:
При появлении сообщений о каких-либо ошибках, вернитесь и повторно проверьте ваш файл, прежде чем продолжать.
Когда вы будете готовы, перезагрузите Nginx для внесения необходимых изменений:
Это завершает установку и настройку набора LEMP. Однако будет разумно убедиться, что все компоненты могут связываться друг с другом.
Ставим PHP 5.6
Сначала нужно удалить все старые версии, если есть
sudo apt-get purge `dpkg -l | grep php | awk ‘{print $ 2}’ | tr «\ n» «» `
1 | sudo apt-get purge`dpkg-l|grep php|awk'{print $ 2}’|tr»\ n»»»` |
добавляем PPA
sudo add-apt-repository ppa:ondrej/php
1 | sudo add-apt-repository ppaondrej/php |
обновляемся
sudo apt-get update
1 | sudo apt-get update |
ставим php
sudo apt-get install php5.6
1 | sudo apt-get install php5.6 |
дополнительные модули
sudo apt-get install php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml
1 | sudo apt-get install php5.6-mbstring php5.6-mcrypt php5.6-mysql php5.6-xml |
Смотрим версию:
sudo php -v
PHP 5.6.26-1 + deb.sury.org ~ xenial + 1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
1 |
sudo php-v PHP5.6.26-1+deb.sury.org~xenial+1(cli) Copyright(c)1997-2016The PHP Group Zend Engine v2.6.0,Copyright(c)1998-2016Zend Technologies with Zend OPcache v7.0.6-dev,Copyright(c)1999-2016,by Zend Technologies |
Перед установкой
Перед тем, как мы начнём, убедитесь, что у вас есть всё необходимое.
Прежде всего, мы будем исходить из того, что у вас есть не-рутовый (non-root) пользователь с привилегиями sudo. Настроить такую учётную запись пользователя можно следуя шагам 1-4 в статье о первичной настройке сервера на Ubuntu 16.04.
Мы также будем считать, что вы завершили настройку стека LAMP (Linux, Apache, MySQL и PHP) на вашем сервере с Ubuntu 16.04. Если вы ещё не сделали этого, вы можете ознакомиться с этим процессом в статье об установке стека LAMP на Ubuntu 16.04.
И, наконец, необходимо иметь в виду некоторые вопросы безопасности при использовании phpMyAdmin, поскольку он:
- Напрямую взаимодействует с MySQL.
- Выполняет аутентификацию использую логин и пароль MySQL.
- Выполняет и возвращает результаты произвольных запросов SQL.
По этим причинам, а также потому, что phpMyAdmin является одним из наиболее распространённых и атакуемых PHP приложений, вам не стоит запускать phpMyAdmin на удалённых машинах с простым соединением HTTP. Если у вас ещё нет домена с настроенным SSL/TLS сертификатом, рекомендуем ознакомиться со статьёй Делаем Apache безопаснее с помощью Let’ Encrypt на Ubuntu 16.04.
После выполнения описанных выше мероприятий, вы можете начать следовать шагам, указанным в этой статье.
Шаг 1 — Установка phpMyAdmin
Во-первых, мы установим phpMyAdmin из репозиториев Ubuntu по умолчанию.
Это делается с помощью обновления индекса пакета вашего сервера, после чего с помощью системы управления пакетами загружаются файлы и устанавливаются в вашей системе.
На этом этапе вам потребуется ответить на несколько вопросов для корректной настройки установки.
Предупреждение. При появлении первого диалогового окна вариант «apache2» выделен, но не выбран. Если вы не нажмете для выбора Apache, установщик не будет перемещать необходимые файлы при установке. Нажмите а потом для выбора Apache.
- Для выбора сервера нажмите
- Выберите при ответе на вопрос о том, необходимо ли использовать для настройки базы данных.
- Затем вам будет предложено выбрать и подтвердить пароль приложения MySQL для phpMyAdmin
В процессе установки будет добавлен файл конфигурации phpMyAdmin в каталог , где он будет считываться автоматически. От вас потребуется только явным образом активировать PHP расширение , что можно сделать с помощью следующей команды:
Перезапустите Apache для вступления изменений в силу.
После этого phpMyAdmin будет установлен и настроен. Однако, прежде чем вы сможете войти и начать взаимодействие с базами данных MySQL, вам нужно убедиться, что у пользователей MySQL есть права, необходимые для взаимодействия с программой.
Apache
Для поддержки файла .htaccess, который используется многими сайтами, необходимо установить и настроить веб-сервер Apache.
Устанавливаем apache и модуль для php:
apt-get 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 равную on. Данная настройки критична для функционирования некоторых CMS.
Запрещаем mpm_event:
a2dismod mpm_event
* по умолчанию, apache2 может быть установлен с модулем мультипроцессовой обработки mpm_event. Данный модуль не поддерживает php 7 и выше.
Разрешаем модуль мультипроцессовой обработки mpm_prefork:
a2enmod mpm_prefork
Разрешаем модуль php:
a2enmod php7.4
* в данном примере установлен 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
systemctl restart nginx
Пробуем открыть в браузере 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.
Enable Two-Factor Authentication
You can also harden phpMyAdmin by enabling two-factor authentication, which is a feature added in version 4.8. To enable it, log into phpMyAdmin. Then go to -> and select Authentication application (2FA).
After clicking the Configure two-factor authentication button, you will be presented with a QR code, which you need to scan with a two-factor authentication app on your phone.
Google Authenticator is a popular 2FA app, but I recommend FreeOTP, which is an open-source 2FA app developed by Red Hat. Once you enter the authentication code generated by your 2FA app, two-factor authentication is enabled. If you now log out and log back in, you need to enter the authentication code in addition to username and password.