Conclusion
Now that you have a LAMP stack installed, you have many choices for what to do next. You’ve installed a platform that will allow you to install most kinds of websites and web software on your server.
As an immediate next step, you should ensure that connections to your web server are secured, by serving them via HTTPS. Follow our guide on how to secure Apache with Let’s Encrypt to secure your site with a free TLS/SSL certificate.
Some other popular options are:
- Install WordPress the most popular content management system on the internet.
- Set Up PHPMyAdmin to help manage your MySQL databases from a web browser.
- Learn how to use SFTP to transfer files to and from your server.
Шаг 2 — Установка MySQL
Теперь, когда наш веб-сервер установлен и запущен, пора установить MySQL. MySQL это система управления базой данных. Она организует и обеспечит доступ к базам данных, в которых ваш сайт может хранить информацию.
Мы можем вновь использовать для загрузки и установки программного обеспечения. В этот раз мы также установим некоторые вспомогательные пакеты, которые помогут нам в налаживании взаимодействия между компонентами:
Внимание
В данном случае вам нет необходимости предварительно выполнять команду , т.к. мы выполняли ее недавно при установке Apache, и индекс пакетов на вашем комьпютере уже должен быть обновлен
Вам будет показан список пакетов, которые будут установлены, а также сколько места на диске они займут. Нажмите Y для продолжения установки.
В процессе установки ваш сервер попросит вас задать и подтвердить пароль для пользователя “root” в MySQL. Это администраторский аккаунт в MySQL, который имеет расширенные права. Рассматривайте его как аналог root-аккаунта для самого сервера (однако тот, который вы конфигурируете в данный момент, подходит только для MySQL). Задайте надёжный уникальный пароль, не оставляйте пароль не заданным.
После завершения установки нам потребуется выполнить некоторые дополнительные команды, чтобы наше окружение MySQL было настроено безопасным образом. Введите следующую команду:
Скрипт запросит пароль, который вы только что задали для root пользователя в MySQL. Далее вам будет предложено сконфигурировать плагин валидации паролей ().
Внимание: решение включать плагин валидации паролей или нет носит субъективный характер. При включении все пароли, которые не удовлетворяют определённым критериям безопасности, будут отвергаться MySQL с сообщением об ошибке
Это может вызывать проблемы, если вы используете “слабые” пароли совместно с программным обеспечением, которое конфигурирует профили пользователей MySQL, например, пакеты Ubuntu для phpMyAdmin. Вы можете оставить валидацию паролей отключенной, но в этом случае вам следует всегда использовать “сильные” уникальные пароли для пользователей базы данных.
Введите y для включения плагина или что-нибудь другое для продолжения без его включения:
Если вы включили валидацию паролей, вам будет предложено установить уровень надёжности паролей при валидации. Имейте в виду, что при выборе значения 2 (самый строгий уровень валидации), вы будете получать ошибки при попытке задать пароль без цифр, букв в верхнем и нижнем регистре, а также без специальных символов, а также при попытке использовать пароль, основанный на распространённых словах, которые уязвимы для подбора паролей по словарю.
Если вы включили валидацию паролей, вам будет показан уровень надёжности заданного вами ранее пароля root пользователя, а также вам будет предложено изменить этот пароль. Если вы не хотите менять пароль, введите n или no:
На все последующие вопросы просто вводите Y и нажимайте клавишу ENTER для выбора настроек по умолчанию. При этом удалятся некоторые тестовые пользователи и базы данных, будет отключена возможность удаленного доступа с учетной записью root-пользователя, и все изменения будут немедленно применены в MySQL.
Теперь ваша система управления базами данных установлена и мы можем двигаться дальше.
Установка и настройка FTP-сервера
Мы настроим ProFTPd, так как он позволит использовать виртуальных пользователей с uid пользователя www-data.
Для его установки вводим следующую команду:
apt-get install proftpd
Смотрим uid пользователя www-data:
id www-data
* в Ubuntu это, как правило, 33.
Создаем виртуального пользователя:
ftpasswd —passwd —file=/etc/proftpd/ftpd.passwd —name=ftpwww —uid=33 —gid=33 —home=/var/www —shell=/usr/sbin/nologin
* где /etc/proftpd/ftpd.passwd — путь до файла, в котором хранятся пользователи; ftpwww — имя пользователя (логин); uid и gid — идентификаторы пользователя и группы системной учетной записи (www-data); /var/www — домашний каталог пользователя; /usr/sbin/nologin — оболочка, запрещающая локальный вход пользователя в систему.
Открываем основной конфигурационный файл:
vi /etc/proftpd/proftpd.conf
Снимаем комментарий или редактируем опцию:
DefaultRoot ~
* данная опция говорит о том, что корневой директорией для пользователя будет домашняя директория. Это нужно, чтобы FTP-пользователи не могли выйти за пределы дозволенного и видеть на сервере сайты друг друга.
Создаем дополнительный конфигурационный файл для proftpd:
vi /etc/proftpd/conf.d/custom.conf
Со следующим содержимым:
UseIPv6 off
IdentLookups off
PassivePorts 60000 65535
RequireValidShell off
AuthUserFile /etc/proftpd/ftpd.passwd
AuthPAM off
LoadModule mod_auth_file.c
AuthOrder mod_auth_file.c
* где 60000 — 65535 — диапазон динамических портов для пассивного режима.
Разрешаем автозапуск FTP-серверу и запускаем его:
systemctl enable proftpd
systemctl restart proftpd
Пробуем подключиться к серверу, использую любые FTP-клиенты, например, FileZilla, Total Commander или тот же браузер.
При необходимости, можно настроить шифрование и хранение пользователей в базе данных. Подробнее в инструкции Установка и настройка ProFTPd на Ubuntu Server.
Предварительные требования
Для выполнения этого руководства вам потребуется следующее:
- Сервер Ubuntu 20.04 Этот сервер должен иметь пользователя без прав root с правами администратора, а также брандмауэр, настроенный с помощью . Чтобы выполнить настройку, воспользуйтесь руководством по начальной настройке сервера Ubuntu 20.04.
- Стек LAMP (Linux, Apache, MySQL и PHP), установленный на вашем сервере Ubuntu 20.04. Если вы еще не сделали этого, вы можете воспользоваться данным руководством по установке стека LAMP на Ubuntu 20.04.
Наконец, существует ряд важных соображений безопасности при использовании таких программных средств, как phpMyAdmin, поскольку phpMyAdmin:
- напрямую связывается с установленной у вас версией MySQL;
- управляет аутентификацией, используя учетные данные MySQL;
- исполняет и возвращает результаты для произвольных SQL запросов.
По этим причинам, и поскольку это широко применяемое PHP приложение, которое часто становится мишенью для атак, вы ни при каких условиях не должны запускать phpMyAdmin на удаленных системах, используя обычное HTTP-соединение.
Если у вас нет существующего домена с настроенным SSL/TLS сертификатом, вы можете воспользоваться следующим руководством по обеспечению безопасности Apache с помощью Let’s Encrypt в Ubuntu 20.04. Для этого вам потребуется зарегистрировать доменное имя, создать DNS запись для вашего сервера и .
Шаг 4: установите PHP 7.4
Последний компонент стека FAMP — это PHP, ведущий язык программирования в области веб-разработки на данный момент. Без PHP динамические веб-сайты, которые вы хотите запускать на своем сервере, не будут полностью функционировать.
Подобно тому, как мы использовали команду pkg раньше, мы также можем установить PHP из репозиториев FreeBSD.
Чтобы установить важные пакеты php74, php74-mysqli и mod_php74, введите команду ниже:
$ sudo pkg install -y php74 php74-mysqli mod_php74
Смотрите установленную версию:
$ php --version
Если установленная версия актуальна, перейдите к репликации образца файла конфигурации PHP, выполнив команду, как показано ниже:
$ sudo cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
Чтобы запустить PHP, введите:
$ sudo sysrc php_fpm_enable=yes $ sudo service php-fpm start
Чтобы проверить, запущен ли PHP, введите:
$ sudo service php-fpm status
Чтобы добавить что-то еще к только что установленному пакету PHP, попробуйте несколько вспомогательных модулей. Найдите пакеты, написанные с помощью модулей PHP:
$ php -m
Затем используйте команду ниже для поиска любых доступных модулей PHP:
$ pkg search ^php74-*
Вы должны увидеть несколько модулей PHP. Вы можете установить любой из них, который хотите попробовать, с помощью команды pkg.
Step 2 — Installing MySQL
Now that you have your web server up and running, it is time to install MySQL. MySQL is a database management system. Basically, it will organize and provide access to databases where your site can store information.
Again, use to acquire and install this software:
Note: In this case, you do not have to run prior to the command. This is because you recently ran it in the commands above to install Apache. The package index on your computer should already be up-to-date.
This command, too, will show you a list of the packages that will be installed, along with the amount of disk space they’ll take up. Enter to continue.
When the installation is complete, run a simple security script that comes pre-installed with MySQL which will remove some dangerous defaults and lock down access to your database system. Start the interactive script by running:
This will ask if you want to configure the .
Note: Enabling this feature is something of a judgment call. If enabled, passwords which don’t match the specified criteria will be rejected by MySQL with an error. This will cause issues if you use a weak password in conjunction with software which automatically configures MySQL user credentials, such as the Ubuntu packages for phpMyAdmin. It is safe to leave validation disabled, but you should always use strong, unique passwords for database credentials.
Answer for yes, or anything else to continue without enabling.
If you answer “yes”, you’ll be asked to select a level of password validation. Keep in mind that if you enter for the strongest level, you will receive errors when attempting to set any password which does not contain numbers, upper and lowercase letters, and special characters, or which is based on common dictionary words.
Regardless of whether you chose to set up the , your server will next ask you to select and confirm a password for the MySQL root user. This is not to be confused with the system root. The database root user is an administrative user with full privileges over the database system. Even though the default authentication method for the MySQL root user dispenses the use of a password, even when one is set, you should define a strong password here as an additional safety measure. We’ll talk about this in a moment.
If you’ve enabled password validation, you’ll be shown the password strength for the root password you just entered and your server will ask if you want to change that password. If you are happy with your current password, enter for “no” at the prompt:
For the rest of the questions, press and hit the key at each prompt. This will remove some anonymous users and the test database, disable remote root logins, and load these new rules so that MySQL immediately respects the changes you have made.
When you’re finished, test if you’re able to log in to the MySQL console by typing:
This will connect to the MySQL server as the administrative database user root, which is inferred by the use of when running this command. You should see output like this:
To exit the MySQL console, type:
Notice that you didn’t need to provide a password to connect as the root user, even though you have defined one when running the script. That is because the default authentication method for the administrative MySQL user is instead of . Even though this might look like a security concern at first, it makes the database server more secure because the only users allowed to log in as the root MySQL user are the system users with sudo privileges connecting from the console or through an application running with the same privileges. In practical terms, that means you won’t be able to use the administrative database root user to connect from your PHP application. Setting a password for the root MySQL account works as a safeguard, in case the default authentication method is changed from to .
For increased security, it’s best to have dedicated user accounts with less expansive privileges set up for every database, especially if you plan on having multiple databases hosted on your server. Please refer to our guide on How To Create a New User and Grant Permissions on MySQL for detailed instructions on how to create MySQL users and configure database access rights.
Your MySQL server is now installed and secured. Next, we’ll install PHP, the final component in the LAMP stack.
Настройка Apache (необязательно)
Теперь, когда у вас есть Apache, обслуживающий веб-страницы на вашем Ubuntu 20.04, могут потребоваться дополнительные настройки конфигурации.
Apache по умолчанию будет перечислять содержимое ваших каталогов без индексов (index.html, index.РНР).Это угроза безопасности, поскольку она позволяет хакерам просматривать ваш веб-сервер в поисках сценариев.
Вы также обнаружите, что.htaccessпо умолчанию в Apache будет игнорироваться.Если понадобится .htaccess, вы можете включить его, изменив файл конфигурации Apache.
Откройте файл конфигурации:
sudo nano /etc/apache2/apache2.conf
Нажмите CTRL+Wи найдите<Directory /var/www/>.
Блок должен выглядеть примерно так:
<Directory /var/www/> Options Indexes FollowSymLinks AllowOverride None Require all granted </Directory>
Удалите Indexes, чтобы остановить список каталогов Apache, и изменитеAllowOverride None на AllowOverride All, чтобы включить .htaccess.Теперь это должно выглядеть так:
<Directory /var/www/> Options FollowSymLinks AllowOverride All Require all granted </Directory>
Сохраняем и выходим (CTRL+X, Y, ENTER).
Далее перезапускаем Apache.
sudo systemctl restart apache2
Включить mod_rewrite
Если вы хотите настроить некоторые правила .htaccess, вам, скорее всего, придется включитьmod_rewrite.
sudo a2enmod rewrite
Далее нужно перезапустить Apache.
sudo systemctl restart apache2
На этом полная установка и настройка стека LAMP завершена.
В скором времени ждите материал по установке phpMyAdmin. Всех с наступающим!
Шаг 1. Подготовьте вашу систему FreeBSD к установке FAMP
Прежде чем мы начнем установку, лучше убедиться, что наша система обновлена.
Чтобы узнать, какую версию вы используете, введите:
$ freebsd-version
Если версия устарела, введите команду ниже, чтобы обновить ее:
$ freebsd-update fetch install
$ pkg update && pkg upgrade -y
Затем установите поддерживающие зависимости:
$ pkg install -y sudo vim bash curl
Затем добавьте нового пользователя с помощью следующей команды:
$ adduser
Вам будет предложено ввести учетные данные пользователя и информацию об учетной записи.
# Username: younis # Full name: Younis Said # Uid (Leave empty for default): # Login group : # Login group is younis. Invite younis into other groups? []: wheel # Login class : # Shell (sh csh tcsh nologin) : bash # Home directory [/home/younis]: # Home directory permissions (Leave empty for default): # Use password-based authentication? : # Use an empty password? (yes/no) : # Use a random password? (yes/no) : # Enter password: your_secure_password # Enter password again: your_secure_password # Lock out the account after creation? : # OK? (yes/no): yes # Add another user? (yes/no): no # Goodbye!
Наконец, выполните команду visudo, как показано ниже, чтобы делегировать командные привилегии администратора всем пользователям группы wheel:
$ visudo # Uncomment by removing hash (#) sign # %wheel ALL=(ALL) ALL
Используйте команду su, за которой следует новое имя пользователя, чтобы изменить учетную запись на ту, которую вы только что создали:
$ su - younis
Также обновите часовой пояс:
$ sudo tzsetup
Configure a Virtual Host (Optional)
If you want to host multiple domains on your Ubuntu 20.04 / 20.10 LAMP server or set up SSL certs with Let’s Encrypt, you will need to set up a virtual host.
If you do not have a domain name, you can instead trick your OS (Linux/Mac/Windows) to resolve a domain to your Ubuntu 20.04 / 20.10 server’s IP address. More on this in section 8.4. below.
8.1. Create Directory and index.html
Create a new directory in for your domain. Just replace mydomain.com with your own.
Create an file for testing.
Enter the following:
/var/www/mydomain.com/public_html/index.html
Save and exit (press + , press and then press )
8.2. Create Virtual Host
Create a virtual host configuration file replacing mydomain.com with your own.
Enter the following replacing mydomain.com with your own.
sudo nano /etc/apache2/sites-available/mydomain.com.conf
Save and exit (press + , press and then press )
Test for errors.
You can ignore any error that mentions “Could not reliably determine the server’s fully qualified domain name”.
Enable your virtual host replacing mydomain.com with your own.
Disable the default Apache website, otherwise it will override your virtual host.
Restart Apache.
8.3. Test Virtual Host
If you don’t have a registered domain name, you can skip to below to trick your OS into resolving a domain name of your choice to your Ubuntu 20.04 / 20.10 LAMP server.
You will now need to go to your domain registrar’s DNS settings and point the A record for your domain to the IP of your Ubuntu 20.04 / 20.10 LAMP server. Once the A record has propagated (may take 24-48 hours), you should be able to see your test page in the browser.
To add more domains, simply repeat Step 8 above.
8.4. Edit Hosts File (optional)
If you do not have any domains registered and instead just want to load mydomain.com in your browser as a test, you can edit the hosts file in your OS to point these domains to your Ubuntu 20.04 / 20.10 LAMP server.
To edit the hosts file in Linux or Mac, run in terminal. In Windows, follow this guide to edit hosts. Once the hosts files is open, enter your Ubuntu 20.04 / 20.10 LAMP server’s IP followed by the domain name you want to resolve.
hosts
Replace with your web server’s IP.
If you don’t know your web server’s IP, you can find out with:
Once you’ve saved your hosts file, you should be able to access mydomain.com in your browser.
Step 3 — Installing PHP
You have Apache installed to serve your content and MySQL installed to store and manage your data. PHP is the component of our setup that will process code to display dynamic content to the final user. In addition to the package, you’ll need , a PHP module that allows PHP to communicate with MySQL-based databases. You’ll also need to enable Apache to handle PHP files. Core PHP packages will automatically be installed as dependencies.
To install these packages, run:
Once the installation is finished, you can run the following command to confirm your PHP version:
At this point, your LAMP stack is fully operational, but before you can test your setup with a PHP script, it’s best to set up a proper Apache Virtual Host to hold your website’s files and folders. We’ll do that in the next step.
Шаг 6 — Тестирование подключения к базе данных для PHP (необязательно)
Если вы хотите проверить, может ли PHP подключаться к MySQL и выполнять запросы для базы данных, вы можете создать тестовую таблицу с шаблонными данными и запрашивать ее содержимое из скрипта PHP. Прежде чем сделать это, нам нужно создать тестовую базу данных и нового пользователя MySQL с правильной настройкой для доступа к ней.
На момент написания этого руководства родная библиотека MySQL PHP не поддерживает , метод аутентификации по умолчанию для MySQL 8. Мы должны создать нового пользователя с помощью метода аутентификации для подключения к базе данных MySQL из PHP.
Мы создадим базу данных с именем example_database и пользователя с именем example_user, но вы можете использовать и другие имена.
Вначале необходимо подключиться к консоли MySQL с помощью учетной записи root:
Чтобы создать новую базу данных, запустите следующую команду в консоли MySQL:
Теперь вы можете создать нового пользователя и предоставить ему полный набор прав для только что созданной вами базы данных.
Следующая команда создает нового пользователя с именем , используя в качестве метода аутентификации по умолчанию. Следующая команда определяет пароль этого пользователя как , но вы можете заменить его на безопасный пароль по вашему выбору.
Теперь нам нужно предоставить этому пользователю разрешение для базы данных :
В результате пользователь example_user получит полный набор привилегий для базы данных example_database, но не будет обладать возможностью создания или изменения других баз данных на сервере.
Теперь закройте оболочку MySQL:
Вы можете проверить наличие у нового пользователя необходимых разрешений, выполнив повторный вход в консоль MySQL, на этот раз используя учетные данные вашего собственного пользователя:
Обратите внимание на флаг в этой команде, который будет запрашивать пароль, который вы задаете при создании пользователя example_user. После входа в консоль MySQL убедитесь, что у вас есть доступ к базе данных example_database:. Результат будет выглядеть следующим образом:
Результат будет выглядеть следующим образом:
Далее мы создадим тестовую таблицу с именем todo_list. Из консоли MySQL запустите следующее выражение:
Теперь добавьте несколько строк содержимого в тестовую таблицу. Возможно, вам потребуется несколько раз повторить следующую команду, используя разные значения:
Чтобы подтвердить, что данные были успешно сохранены в таблицу, запустите следующую команду:
Вывод должен выглядеть так:
Убедившись в том, что у вас есть надлежащие данные в тестовой таблице, вы можете закрыть консоль MySQL:
Теперь вы можете создать скрипт PHP, который будет подключаться к MySQL и запрашивать ваше содержимое. Создайте новый файл PHP в пользовательской корневой веб-директории в предпочитаемом вами редакторе. Мы будем использовать :
Следующий скрипт PHP подключается к базе данных MySQL и запросам по содержимому таблицы todo_list, выводя результаты в список. Если существует проблема подключения к базе данных, будет выдана ошибка. Скопируйте это содержимое в скрипт :
/var/www/your_domain/todo_list.php
Сохраните и закройте файл после завершения редактирования.
Теперь вы можете получить доступ к этой странице в браузере, посетив доменное имя или публичный IP-адрес, настроенный для вашего сайта. После этого введите :
Вы должны увидеть примерно следующую страницу, отображающую содержимое, которое вы добавили в тестовую таблицу:
Это означает, что ваша среда PHP готова к подключению и взаимодействию с вашим сервером MySQL.
Устанавливаем php и phpextensions
Дальше устанавливаем php, настройки оставляем настройки по-умолчанию:
# cd /usr/ports/lang/php5 # make config-recursive # make install clean
После установки создаем файл конфигурации:
# cp /usr/local/etc/php.ini-production /usr/local/etc/php.ini
Устанавливаем расширения:
# cd /usr/ports/lang/php5-extensions # make config-recursive
Помимо настроек по-умолчанию, обязательно добавляем CURL, DOM, POSIX, FTP, GD, HASH, ICONV, XML, JSON, MBSTRING, MYSQL, MYSQLI, OPENSSL, SOCKETS, TOKENIZER, XMLREADER, ZLIB, EXIF, GETTEXT,
# make install clean
Теперь поставим модуль php для apache. Он теперь стал почему-то отдельным портом. Я не сразу первый раз сообразил, куда делся модуль, который всегда ставился вместе с портом php. В общем, ставим отдельно:
# cd /usr/ports/www/mod_php5 # make install clean
Для того, чтобы apache правильно обрабатывал php файлы, необходимо в конфиг httpd.conf добавить следующие строки:
<IfModule mod_php5.c> AddType application/x-httpd-php .php AddType application/x-httpd-php-source .phps DirectoryIndex index.php index.html </IfModule>
Теперь можно запустить apache и проверить, все ли у нас в порядке. Сначала проверим, нет ли у нас ошибок в конфигурации:
# apachectl -t AH00526: Syntax error on line 15 of /usr/local/etc/apache24/extra/httpd-vhosts.conf: Invalid command 'RewriteEngine', perhaps misspelled or defined by a module not included in the server configuration
У нас ошибка, модуль mod_rewrite не подключен. Чтобы это исправить, раскомментируем в конфиге апача строку
LoadModule rewrite_module libexec/apache24/mod_rewrite.so
Проверяем снова:
# apachectl -t AH00557: httpd: apr_sockaddr_info_get() failed for websrv.local AH00558: httpd: Could not reliably determine the server's fully qualified domain name, using 127.0.0.1. Set the 'ServerName' directive globally to suppress this message Syntax OK
Снова ошибка, но не критичная, можно работать и с ней, но мы все равно ее исправим. В фале httpd.conf находим строку со значением ServerName и приводим ее к виду:
ServerName websrv.local:80
Сохраняем файл, проверяем конфигурацию:
# apachectl -t Syntax OK
Все в порядке, можно стартовать apache:
# /usr/local/etc/rc.d/apache24 start
Проверяем, все ли запустилось:
# ps ax | grep httpd 60555 - Ss 0:00.06 /usr/local/sbin/httpd -DNOHTTPACCEPT 60556 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT 60557 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT 60558 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT 60559 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT 60560 - I 0:00.00 /usr/local/sbin/httpd -DNOHTTPACCEPT
Если получаете что-то подобное, значит все в порядке. Сейчас можно в браузере набрать http://ip-сервера/ и увидеть страничку с одной единственной надписью:
It works!
Это означает, что веб сервер apache работает, все в порядке.
Заключение
Теперь, когда ваш стек LAMP установлен, у вас есть множество вариантов того, что делать дальше. Фактически, вы установили платформу, которая позволит установить (развернуть) большинство типов веб-сайтов и сетевого программного обеспечения на вашем сервере.
В качестве первого шага мы рекомендуем настроить веб-сервер на работу через HTTPS. Самый простой вариант обезопасить свой сайт с помощью бесплатного TLS/SSL сертификата — это использовать сервис Let’s Encrypt.
Некоторые другие популярные мероприятия:
- Установить WordPress — наиболее популярную систему управления контентом в интернете.
- Установить PHPMyAdmin для управления базами данных MySQL из веб-браузера.
- Узнать больше о MySQL для управления базами данных.
- Научиться использовать SFTP для передачи файлов на ваш сервер и с него.
Обратите внимание: Мы будем обновлять указанные выше ссылки на документацию для 16.04 по мере ее написания