Стартовая настройка Ubuntu 18 / Ubuntu 20 LTS
Тут коротко что нужно последовательно дергать, чтобы установить LAMP на Ubuntu 18 LTS / Ubuntu 20 LTS
Общее
sudo -i
apt update
Ставим вспомогательные программы:
apt install -y mc htop iotop curl git unzip net-tools
Установка Apache:
apt install apache2 -y apt install libapache2-mpm-itk -y a2enmod rewrite systemctl restart apache2
cd /etc/apache2/sites-available/ touch hostname.conf nano hostname.conf
hostname - может быть любым именем
Пример конфига виртуального хоста для http:
<VirtualHost *:80> ServerName site.ru ServerAlias www.site.ru DocumentRoot /home/site/www/public AssignUserId site site <Directory /home/site/www/public > Options FollowSymLinks AllowOverride All Require all granted </Directory> </VirtualHost>
<VirtualHost *:80> ServerName site.ru ServerAlias www.site.ru site.ru DocumentRoot /home/site/www/public AssignUserId site site <Directory /home/site/www/public > Options FollowSymLinks AllowOverride All Require all granted </Directory> RewriteEngine on RewriteCond %{SERVER_NAME} =site.ru [OR] RewriteCond %{SERVER_NAME} =www.site.ru RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent] </VirtualHost>
<IfModule mod_ssl.c> <VirtualHost *:443> ServerName site.ru ServerAlias www.site.ru site.ru DocumentRoot /home/site/www/public AssignUserId site site <Directory /home/site/www/public > Options FollowSymLinks AllowOverride All Require all granted </Directory> SSLCertificateFile /etc/letsencrypt/live/site.ru/fullchain.pem SSLCertificateKeyFile /etc/letsencrypt/live/site.ru/privkey.pem SSLEngine on SSLProtocol all -SSLv2 -SSLv3 SSLCipherSuite ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES2$ SSLHonorCipherOrder on SSLCompression off SSLOptions +StrictRequire LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" vhost_combined LogFormat "%v %h %l %u %t \"%r\" %>s %b" vhost_common </VirtualHost> </IfModule>
/home/site/www/public - это путь до корневой директории сайта. В этом примере - такое подходит для Laravel, например
site.ru - имя сайта, какого он уровня - не важно
site - это имя пользователя, apache будет работать в его папке из под него (это ОЧЕНЬ удобно, кто так не делает - обрекает себя на бесконечные страдания и решение вопросов в доступами к файлам через предоставление прав 777 на папки)
/etc/letsencrypt/live/site.ru/fullchain.pem и /etc/letsencrypt/live/site.ru/privkey.pem - путь до файлов с сертификатами.
Также в файл /etc/apache2/apache2.conf нужно добавить ServerName localhost:
nano /etc/apache2/apache2.conf ServerName localhost
проверить что настройки верные:
apache2ctl configtest
применяем настройки, просим apache применить их:
a2ensite sites.conf systemctl reload apache2
SSL для Apache2
Если нужно сделать домен с самоподписным сертификатом, то сертификат можно выпустить вот так:
openssl req -new -x509 -days 10000 -nodes -out cert.pem -keyout cert.key -subj "/C=RU/ST=MSK/L=MSK/O=Alfmaster/OU=Alfmaster/CN=site.ru/CN=www.site.ru"
После этого в Apache2 можно вписать вот такой конфиг:
<VirtualHost *:443> ServerName site.ru ServerAlias www.site.ru DocumentRoot /home/site/www/public AssignUserId site site <Directory /home/site/www/public > Options FollowSymLinks AllowOverride All Require all granted </Directory> SSLEngine on SSLCertificateFile cert/site.ru/cert.pem SSLCertificateKeyFile cert/site.ru/cert.key </VirtualHost>
cert/site.ru/cert.pem - это адрес относительно папки апача (/etc/apache2/)
MySQL
apt install mysql-server
После этого делаем так, чтобы было удобно пользоваться паролем
mysql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '{PASSWORD}'; FLUSH PRIVILEGES; exit
mysql_secure_installation
на все вопросы отвечаем "Y", на второй вопрос про пароль: 2 (MEDIUM: 8+ символов, включая буквы разных регистров, цифры, спецсимволы),
Файл конфигурации для разного количества RAM:
nano /etc/mysql/mysql.conf.d/mysqld.cnf
Можно выбрать один из готовых конфигов.
MySQL5.7: 8GB_RAM: https://alfmaster.ru/conf/mysql57_8gb.conf MySQL5.7: 16GB_RAM: https://alfmaster.ru/conf/mysql57_16gb.conf MySQL5.7: 32GB_RAM: https://alfmaster.ru/conf/mysql57_32gb.conf MySQL8: 4GB_RAM: https://alfmaster.ru/conf/mysql8_4gb.conf MySQL8: 8GB_RAM: https://alfmaster.ru/conf/mysql8_8gb.conf MySQL8: 16GB_RAM: https://alfmaster.ru/conf/mysql8_16gb.conf MySQL8: 32GB_RAM: https://alfmaster.ru/conf/mysql8_32gb.conf MySQL8: 64GB_RAM: https://alfmaster.ru/conf/mysql8_64gb.conf service mysql stop service mysql start
Важно: При этих настройках MySQL "зажрет" почти всё свободную память на VM (но при этом хорошо будет работать на нагрузках). Если базы у вас небольшие - возьмите самый маленьких конфиг (на 4Gb)
Восстановить пароль от root, если потерял:
nano /etc/mysql/mysql.conf.d/mysqld.cnf добавить после [mysqld]: skip-grant-tables После этого: mysql update user set authentication_string=PASSWORD('root_password') where user='root' and host='localhost'; flush privileges; exit;
Теперь пользователя надо создавать вот так:
CREATE database {DBNAME}; CREATE USER '{USER}'@'localhost' IDENTIFIED BY '{PASSWORD}'; GRANT ALL PRIVILEGES ON {DBNAME}.* TO '{USER}'@'localhost'; FLUSH PRIVILEGES; \q
Проверить какие доступы есть для пользователя:
SELECT host FROM mysql.user WHERE User = '{USER}';
PHP
apt install -y php libapache2-mod-php php-mysql php-bcmath php-bz2 php-cli php-common php-curl php-gd php-imap php-json php-mail php-mbstring php-redis php-soap php-xml php-zip
После установки настраиваем параметры в php.ini:
nano /etc/php/*.*/apache2/php.ini _ для php7.4: /etc/php/7.4/apache2/php.ini для php8.0: /etc/php/8.0/apache2/php.ini для php8.1: /etc/php/8.1/apache2/php.ini
Заменяем, чтобы было вот так (ну или как вам там надо):
memory_limit = 512M post_max_size = 128M upload_max_filesize = 128M max_execution_time = 120 max_input_time = 120
nano /etc/apache2/mods-enabled/dir.conf
Переставить во второй строчке index.php на первое место
systemctl restart apache2
cd ~ curl -sS https://getcomposer.org/installer -o composer-setup.php php composer-setup.php --install-dir=/usr/local/bin --filename=composer