Стартовая настройка 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;
exitmysql_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