- Установка LAMP stack (Linux, Apache, MySQL, PHP) в Arch Linux
- Требования
- 1: Установка Apache
- Using MySQL Relational Databases on Arch Linux
- System Configuration
- Install MySQL
- Configure MySQL
- Use MySQL
- How to Reset MySQL’s Root Password
- Tuning MySQL
- More Information
- LEMP (Nginx, PHP, MariaDB/MySQL и phpMyAdmin) в Arch Linux: установка, создание виртуальных хостов, защита паролем папок, включение SSL
- Оглавление
- Подходит ли Arch Linux в качестве сервера
- Установка Nginx
- Установка MariaDB или MySQL
- Установка PHP
- Установка phpMyAdmin
- Включение PHP-FPM FastCGI
- Включение виртуальных хостов на Nginx
- Включение SSL с виртуальными хостами на Nginx
- Доступ к phpMyAdmin через виртуальный хост
- Защита директорий паролем на Nginx
- Перенаправление с HTTP на HTTPS в Nginx
- Заключение
Установка LAMP stack (Linux, Apache, MySQL, PHP) в Arch Linux
LAMP stack – это группа открытых программ для создания и запуска веб-серверов. Данный акроним расшифровывается как Linux, Apache, MySQL, PHP. Для установки программного обеспечения Arch Linux использует мощный менеджер пакетов Pacman, который позволяет загрузить последние версии необходимых пакетов для каждой программы с помощью одной команды.
Требования
Для того, чтобы следовать данному руководству, необходимы привилегии root (за справкой можно обратиться к статье «Начальная настройка сервера Arch Linux»).
1: Установка Apache
Apache – это свободное открытое программное обеспечение, обеспечивающее работу 50% веб-серверов в мире.
Перед установкой любой программы LAMP необходимо обновлять менеджер пакетов.
sudo pacman -Syu
Завершив обновление, можно приступать к установке Apache:
sudo pacman -S apache
Установив Apache, нужно внести пару изменений в настройки.
Откройте конфигурационный файл Apache:
sudo nano /etc/httpd/conf/httpd.conf
Раскомментируйте unique_id_module (для быстрого поиска используйте ctrl w):
#LoadModule unique_id_module modules/mod_unique_id.so
sudo systemctl restart httpd
При перезапуске Apache может появиться следующее сообщение:
httpd: apr_sockaddr_info_get() failed for droplet1
httpd: Could not reliably determine the server’s fully qualified domain name, using 127.0.0.1 for ServerName
[DONE]
Хотя это предупреждение не помешает запуску Apache, его можно легко устранить, внеся в конфигурации имя хоста.
Откройте файл hosts:
sudo nano /etc/hosts
Добавьте имя хоста в конец строки, которая начинается с 127.0.0.1:
127.0.0.1 localhost.localdomain localhost droplet1
В дальнейшем при перезагрузке Apache больше не будет отображать это сообщение.
Источник
Using MySQL Relational Databases on Arch Linux
This guide has been deprecated and is no longer being maintained.
MySQL is a popular database management system, used as the data storage provider for thousands of web and server applications. This guide will help beginners get started with MySQL on Arch Linux. If you would like to deploy MySQL as part of an application stack, consider our LEMP and LAMP guides.
System Configuration
Make sure your /etc/hosts file has proper entries, similar to the ones shown below. Replace “12.34.56.78” with your Linode’s public address, “servername” with your short hostname, and “mydomain.com” with your system’s domain name.
Set your system’s hostname by setting the HOSTNAME= value in the /etc/rc.conf file.
Install MySQL
Issue the following commands to update your system and install MySQL:
You will want to add the mysqld daemon to the DAEMONS-() array at the end of the /etc/rc.conf file to ensure that the mysql process starts following then next reboot cycle.
The MySQL server package will be installed on your server, along with dependencies and client libraries. Start MySQL by running the following command:
Configure MySQL
After installing MySQL, it’s recommended that you run mysql_secure_installation , a program that helps secure MySQL. While running mysql_secure_installation , you will be presented with the opportunity to change the MySQL root password, remove anonymous user accounts, disable root logins outside of localhost, and remove test databases. It is recommended that you answer yes to these options. If you are prompted to reload the privilege tables, select yes. Run the following command to execute the program:
By default, MySQL listens only for internal connections. If you plan to connect to your database via TCP/IP, you will need to remove or comment (e.g. prefix the line with a # ) add the bind-address line in the my.cnf file. as follows:
Allowing unrestricted access to MySQL on a public IP not advised, but you may change the address it listens on by modifying the bind-address parameter. If you decide to bind MySQL to your public IP, you should implement firewall rules that only allow connections from specific IP addresses.
Consult the “More Information” section at the end of this tutorial for additional resources that address the configuration of MySQL. Issue the following command to restart the daemon:
Please reference our secure MySQL remote access guide for information on connecting to your databases with local clients.
Use MySQL
The standard tool for interacting with MySQL is the mysql client program. To get started, issue the following command at your prompt:
You will be prompted to enter the root MySQL user’s password. Enter the password you assigned when you installed MySQL, and you’ll be presented with the MySQL monitor display:
To generate a list of commands for the MySQL prompt, type \h :
Let’s create a database and assign a user to it. Issue the following commands at the MySQL prompt:
Now let’s log back into the MySQL client as testuser and create a sample table called “customers.” Issue the following commands:
This creates a table with a customer ID field of the type INT for integer (auto-incremented for new records, used as the primary key), as well as two fields for storing the customer’s name. Of course, you’d probably want to store much more information than this for a customer, but it’s a good example of a common case nonetheless.
How to Reset MySQL’s Root Password
If you’ve forgotten your root MySQL password, you may reset it by issuing the following commands:
The following part of the password reset will now be done within the MySQL client program:
Last, restart MySQL by issuing the following command:
Tuning MySQL
MySQL Tuner is a useful tool that connects to a running instance of MySQL and provides configuration recommendations based on workload. Ideally, the MySQL instance should have been operating for at least 24 hours before running the tuner. The longer the instance has been running, the better advice MySQL Tuner will provide.
To install MySQL Tuner issue the following commands:
To run MySQL Tuner simply enter:
Please note that this tool is designed to provide configuration suggestions and is an excellent starting point. It would be prudent to perform additional research for tuning configurations based on the application(s) utilizing MySQL*.*
More Information
You may wish to consult the following resources for additional information on this topic. While these are provided in the hope that they will be useful, please note that we cannot vouch for the accuracy or timeliness of externally hosted materials.
This page was originally published on Tuesday, April 5, 2011.
Источник
LEMP (Nginx, PHP, MariaDB/MySQL и phpMyAdmin) в Arch Linux: установка, создание виртуальных хостов, защита паролем папок, включение SSL
Оглавление
Эта статья расскажет, как установить Nginx, PHP, MariaDB/MySQL и phpMyAdmin в Arch Linux на сервере или на домашнем компьютере. Если вместо Nginx вы хотите использовать Apache, то обратитесь к статье «Установка LAMP (Linux, Apache, MySQL/MariaDB, PHP7 и phpMyAdmin) в Arch Linux / BlackArch».
Другую информацию о настройке Arch Linux в качестве сервера (как подключить статичный IP, включить SSH, привязать доменное имя, настроить почтовый сервер и другое смотрите в разделе «Arch / BlackArch как сервер (VDS / VPS)» на главной странице этого сайта.
Подходит ли Arch Linux в качестве сервера
Можно встретить мнение, что из-за того, что Arch Linux это Rolling Release, в котором часто обновляются программы и используется самое последнее программное обеспечение, он не совсем подходит выступать в качестве сервера для обеспечения надёжных сетевых подключений, ведь это требует дополнительного времени для поддержки, непрерывных обновлений и конфигурации чувствительных файлов. Я несколько раз уже рассуждал на эту тему и я по-прежнему придерживаюсь мнения, что Arch Linux ничем не хуже в качестве сервера, чем другие дистрибутивы. В конце концов, если всё настроено и работает, необязательно каждую неделю делать обновления ядра. В качестве эксперимента, у меня работает сервер на Arch Linux (к моменту написания этой инструкции) уже третий год, сайт SuIP.biz. В качестве веб-сервера там используется Apache.
Установка Nginx
Установка Nginx выполняется следующей командой:
И проверьте её статус:
Мы видим предупреждение, выделенное красным мы исправим его чуть позже.
Установка MariaDB или MySQL
MariaDB — это улучшенная версия MySQL. В последнее время предпочитают именно её, в том числе многие хостинг провайдеры перешли с MySQL на MariaDB.
В стандартных репозиториях Arch Linux MySQL отсутствует и её нужно устанавливать из AUR.
Для установки MariaDB выполните команду:
На выбор доступны mariadb и percona-server, выберите СУБД MariaDB.
Перед запуском службы нужно выполнить установку баз данных и заполнение таблиц, необходимых для функционирования MariaDB:
Следующая команда усилит безопасность окружения СУБД MariaDB/MySQL, вам будет предложено установить пароль root аккаунта баз данных, а также удалить анонимный пользовательский аккаунт, удалить тестовую базу данных и доступ root аккаунтов за пределами localhost.
В самом начале, когда у вас спросят пароль рута, просто нажмите [Enter]. Далее на все вопросы рекомендуется отвечать Yes, а также установить пароль для аккаунта root.
Примечание: не путайте root аккаунта MariaDB/MySQL и пользователя root операционной системы Linux — это две совершенно разные вещи. У них одинаковое имя пользователя, но они работают на разных уровнях.
Запускаем и проверяем статус службы:
Чтобы проверить безопасность входа MariaDB, используйте команду:
после которой вам нужно ввести пароль.
Для выхода, наберите команду
Установка PHP
Теперь мы добрались до установки PHP — скриптового языка на стороне сервера. Он нужен для запуска сложных динамических веб-приложений, а не только обслуживания HTML/CSS кода.
Поскольку в качестве веб-сервера мы используем Nginx, нам нужно установить модуль PHP-FPM для коммуникации через Fast Common Gateway и изменения динамического контента, генерируемого PHP скриптами.
Выполните следующие команды для установки PHP-FPM службы, запуски фонового процесса и проверки статуса:
Для просмотра всех доступных PHP модулей выполните следующие команды:
Установка phpMyAdmin
Установим последний элемент веб-сервера — phpMyAdmin. Это веб-интерфейс для управления базами данных MariaDB/MySQL. Выполните следующую команду, для установки phpMyAdmin и необходимого для него PHP модуля, а также для создания символической ссылки, указывающей из расположения phpMyAdmin на дефолтный корневой путь Nginx:
Теперь нам нужно настроить файл php.ini чтобы включить необходимые для phpMyAdmin расширения:
Найдите и раскомментируйте (удалите ; в начале) следующие строки:
В этом же файле найдите строку
если она закоментирована, то раскоментируйте её, чтобы получилось
Также в этом же файле найдите и укажите расположение для выражения open_basedir и добавьте системный путь phpMyAdmin (/etc/webapps/ и /usr/share/webapps/) чтобы убедиться, что PHP имеет доступ для чтения файлов в этих директориях (Если вы ещё меняете путь виртуальных хостов DocumentRoot с /srv/http на другое расположение вам также нужно добавить сюда новые пути). При использовании путей по умолчанию, эта директива должна выглядеть так:
Включение PHP-FPM FastCGI
Следующим шагом мы включим PHP-FPM FastCGI на директиве localhost Nginx. Сделаем резервную копию файла конфигурации веб-сервера nginx.conf:
Создайте новый файл:
И скопируйте в него следующее:
После того, как все настройки в конфигурационных файлах сделаны, нужно только перезапустить службы Nginx и PHP-FPM
Если всё работает как задумано, то добавим службы LEMP в автозагрузку следующими командами:
Включение виртуальных хостов на Nginx
Одним из самых простых методов включения виртуальных хостов является использование выражений include в главном конфигурационном файле Nginx, который делает работу последующих настроек более простой и эффективной, поскольку вы можете создавать простые файлы для каждого хоста и поддерживать главный конфигурационный файл не захламлённым.
Этот подход работает тем же образом, как и на веб-сервере Apache. Первое, что вам нужно сделать, это указать новый путь, откуда Nginx должен считывать конфигурационные файлы с директивами.
Для этого откройте главный файл nginx.conf, расположенный в /etc/nginx/ и внизу, перед последней круглой скобкой «>» добавьте путь, где будут находиться будущие конфигурационные файлы:
Эта директива говорит Nginx, что он должен прочитать все файлы, которые найдёт в /etc/nginx/sites-enabled/ и которые имеют расширение .conf.
Следующий шаг — это создание директории sites-enabled и ещё одной sites-available, где будут храниться все конфигурационный файлы виртуальных хостов.
Настало время создать новый виртуальный хост. Этот пример будет использовать IP адрес системы в качестве имени виртуального хоста. Итак, создадим новый файл с именем name-ip.conf:
Добавим следующее содержимое (если вы используете Arch Linux, надеюсь для вас не нужно объяснять, что IP адрес у вас свой и как именно посмотреть IP):
Директива, которая активирует виртуальный хост, это выражение server_name под прослушивающим портом. Также другой важной директивой здесь является выражение root, которое указывает виртуальному хосту Nginx быть сервером для содержимого файлов из директории /srv/http/.
Последний шаг — это создание директории /srv/http/ (если её нет), также мы делаем конфигурационный файл name-ip.conf доступным для чтения Nginx (для этого используем символическую ссылку), затем перезапускаем демон, чтобы изменения вступили в силу:
Чтобы проверить это, откроем веб-браузер указав IP адрес сервера. То, что мы там увидим, должно отличаться от того, что показывает http://localhost. В моём случае, на виртуальном хосте нет файлов, именно это я и наблюдаю в браузере:
Создадим на виртуальном хосте небольшой файл, который заодно проверит конфигурацию FastCGI PHP:
Скопируем в этот файл:
Другой метод, который разработал Matei Cezar (автор с tecmint.com ) включения или отключения виртуальных хостов на Nginx является более элегантным и он вдохновлён скриптом Apache a2eniste.
Для использования этого метода создайте в текстовом редакторе новый файл с именем n2ensite в вашей папке $HOME:
скопируйте в него:
Сделайте его исполнимым:
Использовать следующим образом:
Для отключения виртуальных хостов создайте файл n2dissite:
Скопируйте в него:
Сделайте его исполнимым:
Теперь оба эти скрипты для включения и отключения виртуальных хостов вы можете использовать из домашней папки, для этого при их вызове необходимо указывать путь до созданных файлов. Вы также можете скопировать (перенести) их в /usr/local/bin/ и вызывать эти файлы как системные команды:
Включение SSL с виртуальными хостами на Nginx
SSL (Secure Sockets Layer) — это протокол, предназначенный для шифрования HTTP соединений через сеть или Интернет, в результате поток данных пересылается через безопасный канал, использующий симметричные/ассиметричные ключи шифрования. Чтобы использовать эту возможность, установите в Arch Linux пакет OpenSSL:
Для включения HTTPS подключений на Nginx нужно создать ключи виртуального хоста. Опять же, для упрощения, упомянутый автор создал небольшие скрипты, для автоматизации генерирования криптографических ключей в директорию /etc/nginx/ssl, при этом имена виртуальных хостов используются в качестве имён ключей.
Создайте файл с именем nginx_gen_ssl:
И скопируйте в него:
FQDN (от англ. Fully Qualified Domain Name — «полностью определённое имя домена», иногда сокращается до «полное имя домена») — имя домена, не имеющее неоднозначностей в определении. Включает в себя имена всех родительских доменов иерархии DNS.
После того, как скрипт создан, добавьте права на выполнения, запустите его, введите данные для сертификата. На самом деле, в этой ситуации важным является поле Common Name и именно его необходимо заполнить, а остальные можно оставить пустыми:
Когда ключи будут сгенерированы, будет выведен их список в директории /etc/nginx/ssl/:
Как и предыдущие скрипты, этот можно переместить в /usr/local/bin/ и обращаться к нему как к системной команде:
После того, как мы сгенерировали необходимые ключи для виртуального хоста Nginx с SSL, наступило время создать конфигурационный файл виртуального хоста с SSL. Я в примере буду использовать тот же самый IP адрес системы в качестве имени виртуального хоста для директивы server_name, но имя файла немного изменю, добавив ssl перед .conf, чтобы было наглядно, что это виртуальный хост name-ip с включённым SSL.
Содержимое конфигурационного файла:
В этом файле порт в выражении listen изменён на 443, а также указаны файлы сертификата и ключей SSL, которые мы создали чуть раньше.
После того, как файл был создан, используйте скрипт n2ensite или команду ln для его активации (создайте символическую ссылку в директорию sites-enabled), затем перезапустите демон Nginx чтобы настройки применились:
Вновь для проверки я открываю в браузере https://192.168.0.139, то есть с использованием протокола HTTPS. Поскольку сертификат самоподписанный, то к нему нет доверия:
С валидным сертификатом всё будет работать как надо (чтобы открыть страницу, я добавил свой локальный адрес в исключения).
Как вы можете увидеть, мы вновь видим содержимое виртуального хоста Nginx, с тем же контентом хоста name-ip, но в этот раз мы используем безопасное HTTP соединение.
Доступ к phpMyAdmin через виртуальный хост
Вы можете переключить доступ к phpMyAdmin через виртуальных хост. Это делается символической ссылкой пути /usr/share/webapps/phpMyAdmin/ указывающей на директорию виртуального хоста (/srv/http):
После этого на виртуальном хосте появится новая папка и вы сможете напрямую обращаться к phpMyAdmin.
Защита директорий паролем на Nginx
В отличие от Apache, Nginx использует модуль HttpAuthBasic для включения защиты папок паролем, но не предоставляет каких-либо инструментов для создания файла .htpasswd с хешем.
Чтобы сделать доступ в папку по паролю в Nginx на Arch Linux, установите веб-сервер Apache и используйте его инструменты для генерации зашифрованного файла .htaccess.
Если у вас уже установлен Apache, создайте новую директорию в /etc/nginx/ с именем passwd, где будет размещён файл .htpasswd и используйте команду htpasswd с опцией -c для добавления первого пользователя, который будет иметь доступ по паролю. Затем, используя утилиту htpasswd с опцией -c, вы можете добавить больше пользователей.
Чтобы защитить паролем корневую папку /srv/http/ виртуального хоста name-ip-ssl, а также все подпапки и файлы в нём, добавьте следующие инструкции внутрь блока server под директивой root конфигурационного файла виртуального хоста и укажите в нём на файл .htpasswd:
После того, как вы перезапустите службу Nginx и перезагрузите страницу, вас будет встречать всплывающее окно Authentication Required с предложением ввести ваши учётные данные.
Теперь мы научились включать защиту директорий с помощью пароля на Nginx. Помните, что в то же самое время Apache установлен на вашей системе, поэтому убедитесь, что он отключён, поскольку если он каким-либо образом запустится, что это приведёт к конфликту с Nginx из-за того, что они используют одни и те же порты.
Перенаправление с HTTP на HTTPS в Nginx
Если вы хотите, чтобы браузер автоматически перенаправлял все небезопасные HTTP запросы на HTTPS протокол, откройте и отредактируйте конфигурационный файл вашего виртуального хоста, добавив следующие инструкции под директиву server_name:
Заключение
Все настройки, сделанные в этой статье, тестировались в Arch Linux, выполняющим роль сервера, но большинство из них, особенно касающихся конфигурационных файлов Nginx, применимы для большинства других дистрибутивов Linux. В них может потребоваться небольшая корректировка с учётом путей до директорий в вашей системе.
Источник