Лекция
Привет, Вы узнаете о том , что такое установка lamp, Разберем основные их виды и особенности использования. Еще будет много подробных примеров и описаний. Для того чтобы лучше понимать что такое установка lamp, lamp, fastcgi , mysql, ssh, ftp, proftpd, mailserver, postfix , настоятельно рекомендую прочитать все из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend) .
Ясно, что изучение PHP (и не только PHP) должно подкрепляться практикой.
Это значит, что у вас должна быть возможность выполнять скрипты на своем компьютере.
Для этого необходимо установить и настроить минимальный набор LAMP.
LAMP — акроним, обозначающий набор (комплекс) серверного программного обеспечения, широко используемый во Всемирной паутине. LAMP назван по первым буквам входящих в его состав компонентов:
Акроним LAMP может использоваться для обозначения:
Сейчас речь пойдет об установке Apache и PHP на Linux Ubunutu
1. Итак, сначала установим Apache 2.4.
Обновите свою систему, введя следующие команды:
$ sudo apt update
$ sudo apt upgrade
затем,
apt-get -y install apache2
проверка
введите в адресную строку браузера http://192.168.1.10 - где ип - это локальный ип на котором вы устанавливаете апач
при этом должно повится такая картинка
SSL / TLS является протоколом безопасности для шифрования соединения между веб-браузером и сервером. Выполните следующие команды на сервере, чтобы включить https: // поддержку.
a2enmod ssl
a2ensite default-ssl
которая позволяет модулю Ssl и добавляет символические ссылки в / и т.д. / apache2 / сайты с поддержкой папку в файл /etc/apache2/sites-available/default-ssl.conf, чтобы включить его в активную конфигурацию Apache. После этого перезапустите Apache, чтобы включить новую конфигурацию:
systemctl restart apache2
После этого SSL соединение станет доступным по адресу https://192.168.1.10 в web браузере.
2. Установка PHP.
1) apt install php7.0
потом
2) Установим все нужные модули
apt-cache search php7.0
apt-get -y install php7.0-mysql php7.0-curl php7.0-gd php7.0-intl php-pear php-imagick php7.0-imap php7.0-mcrypt php-memcache php7.0-pspell php7.0-recode php7.0-sqlite3 php7.0-tidy php7.0-xmlrpc php7.0-xsl php7.0-mbstring php-gettext
3) Затем настроим взаимодействие апача с PHP
3.1)если вы хотите, чтобы PHP работал как модуль Apache , то
apt install libapache2-mod-php7.0. Все остальное можно пропусить, до перезагрузки апача (3.6)
3.2) если как FAST CGI - то
apt install php7.0-fpm (установка FastCGI php модуля)
apt install libapache2-mod-fastcgi
3.3 выбор Модуля мультипроцессовой обработки (MPM - Multi-Processing Module)
3.3.1 apt install apache2-mpm-worker (для linux)
3.3.2 (или apt-get install apache2-mpm-prefork)(для linux)
3.4 Включение нужных модулей через файлы конфига для apache
a2enmod rewrite a2enmod actions alias
a2enmod proxy_fcgi (а - лучше) или a2enmod actions fastcgi (б)
3.5 Настройка FastCGI
3.5.1 если PHP+Apache взаимодействуют через FastCGI (и установлен модуль proxy_fcgi) (а - лучше)
то скопируйте файл конфига из доступных
File: /etc/apache2/conf-available/php7.0-fpm.conf
в задействованный
/etc/apache2/conf-enambled/php7.0-fpm.conf
примерное создержание конфигурации
# Redirect to local php-fpm if mod_php is not available # Enable http authorization headers SetEnvIfNoCase ^Authorization$ "(.+)" HTTP_AUTHORIZATION=$1
SetHandler "proxy:unix:/run/php/php7.0-fpm.sock|fcgi://localhost"
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Require all denied
# Deny access to files without filename (e.g. '.php')
Require all denied
3.5.2 если PHP+Apache взаимодействуют через FastCGI ( и установлен модуль fastcgi ) (б)
конфиг примерный - в конкретной версии нужно его уточнять
DocumentRoot "/etc/apache24/php70"
ServerName mysqrver.localhost
FcgidInitialEnv PHPRC "/etc/php70"
FcgidInitialEnv PATH "/etc/php70; и другие нужные папки;"
AddHandler fcgid-script .php
FcgidWrapper "/etc/php70/php-cgi" .php
"
создайте файл .user.ini в корне нужного сайта для кастомной пхп настройки
для этого сначала в файле
/etc/php/7.0/fpm/php.ini
расскоментируйте
zend_extension=<path_to_zend_debugger>
zend_extension=<path_to_zend_optimizer>
[xdebug]
zend_extension="<path to xdebug extension>"
xdebug.remote_enable=1
xdebug.remote_host=127.0.0.1
xdebug.remote_port="<the port (9000 by default) to which Xdebug connects>"
xdebug 3 или
[xdebug]
zend_extension="<path to xdebug extension>"
xdebug.mode=debug
xdebug.client_host=127.0.0.1
xdebug.client_port="<the port (9003 by default) to which Xdebug connects>"
затем создайте файл .user.ini в корне сайта
systemctl restart apache2
Если php не как модуль apache , то php нужно еще перезагружать отдельно
service php7.0-fpm restart
если у вас на одном сервере установлено несколько версий пхп то выбрать по умолчанию для консольных коман можно с помощью
пример проверить текущую версию по умолчанию
установить
запустите nano /var/www/html/info.php введите и сохраните в файле
phpinfo(); измените права и владельца на доступ к фалу chown www-data:www-data /var/www/html/info.php теперь конфиг доступен по адресу http://192.168.1.10/info.php
если Server API FPM/FastCGI , то у вас установлен FastCGI
если Apache 2.0 Handler, то вероятно интерпритатор установлен как модуль
3.1 установка MariaDB
В терминале вводим команду: s
apt-get -y install mariadb-server mariadb-client
Теперь мы устанавливаем рутовый пароль для MariaDB.
mysql_secure_installation
Вам будет предложено ответить на эти вопросы:
Enter current password for root (enter for none): <- нажмите клавишу ВВОД
Set root password? [Y/n] <-- y
New password: <- Введите новый пароль MariaDB корень здесь
Re-enter new password: <- Повторите пароль
Remove anonymous users? [Y/n] <-- y
Disallow root login remotely? [Y/n] <-- y
Reload privilege tables now? [Y/n] <-- y
Проверьте логин к MariaDB с "MySQL командой"
mysql -u root -p
Если вы хотите чтобы другие компьютеры с вашей локальной сети могли видеть ваш сервер mysql,
выполните команду sudo gedit /etc/mysql/my.cnf. Об этом говорит сайт https://intellect.icu . Откроется файл конфигурации MariaDB Mysql.
В нем следует найти строку bind-address = 127.0.0.1 и заменить
в ней 127,0,0,1 на IP адрес этого компьютера. Для этого компьютер должен располагать постоянным
IP адресом. Обратитесь по этому вопросу к вашему сетевому администратору или почитайте
о настройке DHCP для вашего домашнего роутера.
если нужно разрешить доступ с любого ип то установите 0.0.0.0
так же если будет ошибка SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column '.*' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
то нужно влючить старый режим для группировок нарушающий стандарт SQL sql_mode =''
так же если нужно то влючить евент шедулер event_scheduler = 1
в итоге все насройки выглядят так
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
bind-address = 0.0.0.0
key_buffer_size = 16M
max_allowed_packet = 16M
thread_stack = 192K
thread_cache_size = 8
myisam-recover-options = BACKUP
max_connections = 20000
sql_mode ='' #для отключения режима жесткй проверки стандарта SQL Group BY
SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #36 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'database.blk.id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
transaction-isolation = READ-UNCOMMITTED
event_scheduler = 1
slow_query_log = 1
slow_query_log_file = /var/www/slow_sql.log
long_query_time = 5
если нужно изменить пароль рута то
логинемся mysql -u root -p
меняем пароль SET PASSWORD = PASSWORD('xxxxxxxx');
1. для того чтобы дать доступ руту извне нужно сохздать пользователя root@%
2. и дать ему полный права на все базы данных
REVOKE ALL PRIVILEGES ON *.* FROM 'root'@'%'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' REQUIRE NONE WITH GRANT OPTION MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;
(но настоятельно это не рекомендуется в целях безопасности)
3.2 Если же вы хотите установить именно Mysql 5.7 на Ubuntu 16.04, то
Введите команду:
$ sudo apt install mysql-server mysql-client
Вам необходимо ввести пароль для рутового пользователя MySQL
(будьте внимательны к настройкам - если не знаете заем они то лучше не используйте жту утилиту)
необходимо выполнить следующую команду:
$ sudo mysql_secure_installation
3.3 Во время установки mysql возможно спросит пароль для root пользователя, а потом ввод данных в терминал будет начинаться со строки mysql>.Если это произошло, пропустите следующие два шага.
3.4. Выполните в терминале команду mysql -u root и вам предложат ввести пароль пользователя root. Если вы его не указывали при установке, просто нажмите enter.
3.5 . Ввод в терминале будет теперь начинаться со строки mysql> . Это значит что дальнейшие команды выполняет не операционная система, а база данных.
Тут можно выполнять такие команды как SELECT и любые другие.
Нам следует установить пароль для администратора root командой
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('ваш пароль');
3.7. Пользоваться root' ом в своих скриптах не стоит.. опасно. О том какой командой создать нового пользователя отлично рассказали создатели mysql по этому адресу.
Убедитесь только что команды вы по прежнему отправляете базе данных, а не операционной системе.
если нужно разрешиить подьзователю root доступ с любого хоста то (но это небузопасно)
логинемся mysql -u root -p
CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password AS '***'; GRANT USAGE ON *.* TO 'root'@'%' REQUIRE NONE;
так же проверьте порт и разрешение подключения с любого ип
bind-address = 0.0.0.0 в файле конфига
PhpMyAdmin является веб - приложением, с помощью которого вы можете управлять вашими базами данных MySQL
apt-get -y install phpmyadmin
You will see the following questions:
Web server to configure automatically: <- Выберите опцию: apache2
Configure database for phpmyadmin with dbconfig-common? <-- Yes
MySQL application password for phpmyadmin: <-- Нажмите ввод, apt создаст случайный пароль автоматически.
После этого вы можете получить доступ через бруузер к phpMyAdmin по адресу http://192.168.1.10/phpmyadmin/:
Мне никогда не нравилось где там нужно хранить свои php скрипты по умолчанию.
Я всегда настраивал домашнюю директорию на /home/название_сайта/www/
Делать это не сложно и можно отредактировав конфигурационный файл
Перезапускаем веб сервер: sudo /etc/init.d/apache2 restart
systemctl restart apache2
Обратите внимание что PHP Apache2 могут по разному взаимоействовать
PHP как модуль Apache
PHP через FastCGI с Apache (или Nginx) или (Apache и Nginx)
при этом апач может работать в трех режимах event , preworker, fork
и конфиги могут формироваться a2enmod fastcgi или a2enmod proxy_fcgi
если нужно установить и настроить фтп то
1.1. устанавливаем proftpd
apt-get -y install proftpd openssl
запускаем proftpd: <-- standalone
1.2. редактируем /etc/proftpd/proftpd.conf
[...]
DefaultRoot ~
ServerIdent on "FTP Server ready."
[...]
1.3. создаем FTP пользователя
useradd --shell /bin/false omftp (создаем и запрещаем вход через ssh на терминал )
mkdir /home/omftp (если нужно)
chown omftp:omfyp /home/omftp/
или доступ только к корню сайта даем- (к домашней папке)
usermod -d /var/www/site/ omftp
passwd omftp
При создании юзера для FTP (PROFTPD ) его нужно
в конфиге ftp /etc/proftpd/proftpd.conf разрешить
Order deny,allow
AllowUser omftp
так же рекомендуется следущий конфиг
UseIPv6 off
IdentLookups off
ServerName "Debian"
ServerType standalone
DeferWelcome off
MultilineRFC2228 on
DefaultServer on
ShowSymlinks on
TimeoutNoTransfer 600
TimeoutStalled 600
TimeoutIdle 1200
DisplayLogin welcome.msg
DisplayChdir .message true
ListOptions "-l"
DenyFilter \*.*/
DefaultRoot ~
Port 21
PassivePorts pasportstart00000 pasportend00000
MasqueradeAddress ип.се.рв.ера
MaxInstances 300
Umask 002 002
Если появляется ошибка 530 Login incorrect. и в логах
/var/log/auth.log.
Последние строки говорят, что:
USER setevoy (Login failed): Invalid shell: ‘/bin/bash’
В файл конфигурации ProFTPD /usr/local/etc/proftpd.conf добавляем строку:
RequireValidShell off
1.4 перезапускаем фтп сервер
systemctl restart proftpd.service
на этом все. но если нужно настроить шифрование то настраиваем его
1.5 настройка шифрования для proftpd
Для того , чтобы использовать TLS, необходимо создать сертификат SSL.
создаем каталог :
mkdir /etc/proftpd/ssl
После этого, мы можем генерировать сертификат SSL следующим образом:
openssl req -new -x509 -days 365 -nodes -out /etc/proftpd/ssl/proftpd.cert.pem -keyout /etc/proftpd/ssl/proftpd.key.pem
Country Name (2 letter code) [AU]: <- Введите Название страны (например, "DE").
State or Province Name (full name) [Some-State]: <- Введите Название региона или штата.
Locality Name (eg, city) []:<- Введите город.
Organization Name (eg, company) [Internet Widgits Pty Ltd]:<- Введите название организации (например, название вашей компании). .
Organizational Unit Name (eg, section) []:<- Введите Organizational Unit Name (например , "IT - отдел").
Common Name (eg, YOUR name) []:<- Введите полное доменное имя системы (например ,«server1.example.com»).
Email Address []:<- Введите ваш адрес электронной почты.
установите защиту на эти файлы
chmod 600 /etc/proftpd/ssl/proftpd.*
1.6 разрешаем TLS в ProFTPd
Для того , чтобы включить TLS в ProFTPd, открыт /etc/proftpd/proftpd.conf...
/etc/proftpd/proftpd.conf
... и раскомментируйте /etc/proftpd/tls.conf line:
[...]
#
# This is used for FTPS connections
#
Include /etc/proftpd/tls.conf
[...]
Затем откройте /etc/proftpd/tls.conf
TLSEngine on
TLSLog /var/log/proftpd/tls.log
TLSProtocol TLSv1.2
TLSCipherSuite AES128+EECDH:AES128+EDH
TLSOptions NoCertRequest AllowClientRenegotiations
TLSRSACertificateFile /etc/proftpd/ssl/proftpd.cert.pem
TLSRSACertificateKeyFile /etc/proftpd/ssl/proftpd.key.pem
TLSVerifyClient off
TLSRequired on
RequireValidShell no
Если вы используете TLSRequired on , то только TLS соединения разрешены (это блокирует любые пользователи со старыми FTP клиентов , которые не имеют поддержки TLS); закомментировав эту линию или использовать TLSRequired от соединений как TLS и не TLS разрешено, в зависимости от того, что поддерживает клиент FTP.
Перезапустите ProFTPd :
systemctl restart proftpd.service
Вот и все. Теперь вы можете попробовать подключиться с помощью FTP - клиента; Однако, вы должны настроить FTP - клиента для использования TLS
Если у вас возникли проблемы с TLS, вы посмотрите файл журнала TLS /var/log/proftpd/tls.log.
посмотреть текущие группы
groups ftplogin
groups www-data
для фтп юзера нужна 1 главная группа
usermod -g www-data ftplogin
а для веб пользователя добавить фтплогин группу
usermod -a -G opftp www-data
изменить конфиг proftpd Umask 002 002
так же можно настроить sftp на отдельном порту
1. Устанавливаем модуль php-mail (если он еще не установлен):
sudo apt-get install php-mail
$ sudo apt-get install sendmail $ sudo sendmailconfig
Ответьте на вопросы, которые будут заданы. Ниже перечислены основные файлы, в которые будут внесены изменения:
/etc/mail.sendmail.conf /etc/cron.d/sendmail /etc/mail/sendmail.mc
2.2. Если все в порядке, правим «php.ini»
nano /etc/php7/apache7/php.ini
Находим закомментированую строку «;sendmail_path = » (поиск в nano ctrl+w). Заменяем на строку следующего содержания:
sendmail_path = /usr/sbin/sendmail -t -i (в php7 уже есть эта опция)
2.3. Делаем рестарт Apache
sudo service apache2 restart
2.4. Проверить работоспособность sendmail можно двумя командами:
$ /usr/sbin/sendmail abc@gmail.com < "hi ... it is work." или $ sudo php -r "mail('you_mail@mail.ru', 'Проверка', 'Привет. все работает.');"
В течении минуты на указанный электронный адрес должно прийти письмо. Если этого не произошло, то следует посмотреть логи отправки в каталоге «/var/log/syslog». Если в логах появилось сообщение: «Connected time out», значит или firewall не пропускает пакеты через порт 25, или ионтернет-провайдер. Проверить это можно командой telnet:
telnet smtp.mail.ru 25
Если результатом работы команды стало так же «Connected time out», то разбирайтесь, где блокируется порт 25. Иногда бывает заблокирован провайдером или хостером.
установим home_mailbox переменную , Maildir/ которая будет создавать структуру каталогов под этим именем в домашнем каталоге пользователя. postconf Команда может быть использована для запроса или набора параметров конфигурации. Н
Далее, мы можем установить местоположение virtual_alias_maps таблицы. Эта таблица отображает произвольные учетные записи электронной почты в системных учетные записи Linux. Мы создадим эту таблицу в /etc/postfix/virtual.
Откройте файл виртуальной карты в текстовом редакторе:
contact@site.com user1 info@site.com user1 применить карту sudo postmap /etc/postfix/virtual и перезапустить
sudo systemctl restart postfix 3.2 включение шафрования для переджаваемых сообщений
в файле /etc/postfix/main.cf
smtp_use_tls = yes
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache # эта строчка возможно уже есть
smtp_tls_mandatory_protocols = !SSLv2, !SSLv3
протестировать работу- можно отправить письмо и командной строки mail -s "some subject" myemail@email.com < message.txt (или без файла с собщением, но тогда нужно водить текст и в конце поставить точку)
OPENDKIM как настроить рассказано в другой нашей статье
3.3 Проверка работы
проверка статуса sudo postfix status
если не запущен то запустить
sudo postfix start
проверить кто слушает 25 ый порт
netstat -anp | grep :25 | grep LISTEN
Проверить отправку письма и коммандной строки
echo " body of email" | mail -s " Test subject " emailto@email.com
Проверка подключения к порту 25 со стороны клиентов
telnet 1.2.3.4 25
(1 2 3 4 - ваш ип адрес сервера)
apt-get --purge remove postfix
apt-get purge sendmail*
8.1 установка скрипта сжимающий и отимимзрующий png apt-get install optipng сжатие одной фото ( -o7 - максимальная оптитизация)
optipng -o7 tecmint.png рекурсивное сжатие во всех сложенных папках find /var/www/site.site/public_html -name "*.png" -type f -exec optipng -o7 *.png {} {} \; 8.2 установка для линукса (для гугл предпочтительнее- работает медленнее но уменьшение размера файла с сохранением качества остаетсяс прежним)
wget http://static.jonof.id.au/dl/kenutils/pngout-20150319-linux.tar.gz &&\
tar -xf pngout-20150319-linux.tar.gz &&\
rm pngout-20150319-linux.tar.gz &&\
cp pngout-20150319-linux/x86_64/pngout /bin/pngout &&\
rm -rf pngout-20150319-linux
запуск для всех вложенных папок cd /var/www/site.site/public_html find . -name "*.png" -exec pngout {} \; 8.3 установка скрипта сжимающий и отимимзрующий jpg
установка
apt-get install libjpeg-progs сжатие одного файла
jpegtran -copy none -optimize -outfile min.image.jpg image.jpg
# сохранит оптимизированную копию в min.image.jpg
Для изменения формата на progressive следует использовать такую команду:
jpegtran -progressive -copy none -optimize -outfile min.pro.image.jpg image.jpg
сжатие рекурсивное с вложенныи папками
find /var/www/site.site/public_html -name "*.jpg" -type f -exec jpegtran -copy none -optimize -outfile {} {} \;
8.4 установка и использование jpegoptim
apt-get install jpegoptim
jpegoptim *.jpg --strip-all
jpegoptim file.jpg --strip-all
все в текущей папке jpegoptim *.jpg --strip-all
рекурсивно относительно текущей папки find . -name "*.jpg" -type f -exec jpegoptim --strip-all {} {} \;
9. если установлен только апач , включаем всевозможные сжатия включаем доп модули если они еще не включены
a2enmod expires
a2enmod headers
создаем файл в папке enabled config chashe.conf ====начало файла====
ExpiresActive On
ExpiresDefault "access 7 days"
ExpiresByType image/gif "access plus 1 year"
ExpiresByType image/jpeg "access plus 1 year"
ExpiresByType image/png "access plus 1 year"
ExpiresByType image/jpg "access plus 1 year"
ExpiresByType image/x-icon "access 1 year"
ExpiresByType application/x-shockwave-flash "access 1 year"
Header set Cache-Control "max-age=259200, public"
AddOutputFilterByType DEFLATE application/json
====конец файла====
запускаем проверку конфинурации апач
apachectl configtest
В заключение, эта статья об установка lamp подчеркивает важность того что вы тут, расширяете ваше сознание, знания, навыки и умения. Надеюсь, что теперь ты понял что такое установка lamp, lamp, fastcgi , mysql, ssh, ftp, proftpd, mailserver, postfix и для чего все это нужно, а если не понял, или есть замечания, то не стесняйся, пиши или спрашивай в комментариях, с удовольствием отвечу. Для того чтобы глубже понять настоятельно рекомендую изучить всю информацию из категории Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Ответы на вопросы для самопроверки пишите в комментариях, мы проверим, или же задавайте свой вопрос по данной теме.
разшешить юзерам логинется через конфиг при
ProFTPD login ошибке 530
incorrect login
RequireValidShell off
Limit SITE_CHMOD
Order deny,allow
AllowUser loginftp
Limit
Include etcproftpdconf.d
если ошибка повторяется то проверьте логи
sudo tail -f varlogproftpdproftpd.log
если ошибка error: unable to set DefaultRoot directory
поставил напрямую директорию - заработало varwww
Комментарии
Оставить комментарий
Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)
Термины: Выполнение скриптов на стороне сервера PHP (LAMP) NodeJS (Backend)