Поднимаем свой LEMP / LAMP веб-сервер

Техничка Работа с сервером

by SENSATION 1 week ago
Поднимаем свой LEMP / LAMP веб-сервер

Все свои проекты я всегда разворачиваю только на своем сервере. Это удобно, ведь ты имеешь полный функционал настроек и простор для творчества, где тебя ни кто не ограничивает. Единственный минус – нужны базовые навыки в системном администрировании nix систем, что моментально перестает быть минусом, если у тебя есть интернет и google.

Есть и вариант попроще, это использовать панели управления сервером, такие как: ISPmanager (платно), VestaCP (бесплатно) и множество других решений. У каждой панели есть свои плюсы, так и минусы. По опыту, я отказался от всего этого, т.к эти панели не всегда работают стабильно и как мне нужно, поэтому проще пойти по классическому пути и администрировать свои серверы напрямую, руками и через SSH.


SSH — сетевой протокол, позволяющий производить удалённое управление операционной системой.

LEMP – это стек технологий веб-сервера, работающих на базе Linux, Nginx, MySQL и PHP.

LAMP – это стек технологий веб-сервера, работающих на базе Linux, Apache, MySQL и PHP.


Про OneInStack


Данный bash-скрипт позволит вам в кратчайшие сроки развернуть следующие стеки LEMP/LAMP/LNMP/LNMPA/LTMP(Linux, Nginx/Tengine/OpenResty, MySQL/MariaDB/Percona, PHP, JAVA) и прочие прекрасные вещи, готовые решить ваши задачи просто из пакета.
Содержит этот прекрасный скрипт следующие штуки:

  • Автоматическую установку из актуальных репозиториев (большинство компонентов будут скачаны из официальных репозиториев и скомпилированы на вашем сервере)
  • Поддержка самых распространенных баз данных (MySQL, MariaDB, Percona, PostgreSQL, MongoDB)
  • Все актуальные версии PHP так же в наборе (PHP-8.0, PHP-7.4, PHP-7.3, PHP-7.2, PHP-7.1, PHP-7.0, PHP-5.6, PHP-5.5, PHP-5.4, PHP-5.3)
  • Поддержка Nginx, Tengine, OpenResty и ngx_lua_waf
  • Возможность установить  Tomcat
  • Поддержка JDK версий
  • Все актуальные версии Apache
  • Множество PHP модулей включающие: ZendOPcache, xcache, apcu, eAccelerator ,ZendGuardLoader, ionCube, SourceGuardian, imagick,gmagick, fileinfo, imap, ldap, calendar, phalcon, yaf, yar, redis, memcached, memcache, mongodb, swoole, xdebug
  • Установка Pureftpd, phpMyAdmin по требованию
  • Установка memcached, redis по требованию
  • Jemalloc под MySQL и Nginx
  • Готовый скрипт добавляющий Let’s Encrypt SSL сертефикат к каждому вашему домену
  • Система бекапов, как локальная, так и с выгрузкой на Aliyun OSS, Qcloud COS, UPYUN, QINIU, Amazon S3, Google Drive и Dropbox


Подготовка


  • Приобретаем веб-сервер (я рекомендую HETZNER, по моей ссылке вам зачислят 20€ на баланс,  как подарок от меня).
  • Скачиваем SSH терминал (для Windows Putty, для macOS Termius).
  • Привязываем домен к ip сервера.
  • Определяемся с операционной системой: OneInStack поддерживает CentOS 7 ~ 8 (включая RedHat), Debian 8 ~ 10, Ubuntu 16 ~ 20, Fedora 27+.


Запускаем терминал, подключаемся к серверу и вводим построчно:

apt-get update
apt-get -y install wget screen

Первой строкой мы обновляем системные пакеты до актуальных, второй устанавливаем screen.

Далее запускаем установочный скрипт, распаковываем его и переходим в директорию с ним:

wget http://mirrors.linuxeye.com/oneinstack-full.tar.gz
tar xzf oneinstack-full.tar.gz
cd oneinstack

Далее вводим:

screen -S oneinstack

Это нужно, если во время установки произошел обрыв связи с консолью (закрыли приложение, отключился интернет итд. Если такое произошло, переподключитесь к серверу и еще раз введите ее.

Запускаем установку


(PS: до вызова этой команды, вы можете отредактировать некоторые тонкие моменты в файле options.conf )

Далее вводим:

./install.sh

После запуска скрипта, начнется процесс загрузки и установки пакетов, ждем когда на экране появится выбор порта для SSH подключения, стандартный порт это 22 но вы всегда можете выбрать другой.

Please input SSH port(Default: 22):

Жмем Enter или вводим нужный вам порт.

Do you want to enable iptables? [y/n]:

Если вы не разбираетесь в тонкой настройке фаервола, то на этом этапе просто жмите клавишу y и Enter.
Далее скрипт спросит вас, хотите ли вы установить Веб-сервер. Конечно же соглашаемся прожав  y и Enter.

Do you want to install Web server? [y/n]:

Далее установщик предложит вам несколько вариантов настройки Nginx, жмем 1 и Enter

Please select Nginx server:
        1. Install Nginx
        2. Install Tengine
        3. Install OpenResty
        4. Do not install
Please input a number:(Default 1 press Enter) 

Далее нас спросят хотим ли мы установить Apache в качестве backend веб сервера:

Do you want to install Apache? [y/n]:

Если не  разбираетесь, то нажимайте y и enter
Если вы таки решили выбрать Apache как backend-сервер следует определиться со способом обработки запросов, если не разбираетесь, жмите Enter:

Please select Apache mode:
        1. php-fpm
        2. mod_php
Please input a number:(Default 1 press Enter) 

В случае выбора Apache как бэкенд сервера советую почитать о работе Apache MPM, чтобы выбрать наиболее подходящий для себя вариант, я же в этом случае соглашаюсь с предложением  по умолчанием (1)

Please select Apache MPM:
        1. event
        2. prefork
        3. worker
Please input a number:(Default 1 press Enter) 

После пойдут более тонкие настройки в виде выбора Apache Tomcat, значение по умолчанию стоит 5, т.е не устанавливать, это оптимальный выбор для типичного пользователя, а для профессионала предоставлен широкий выбор.

Please select tomcat server:
        1. Install Tomcat-10
        2. Install Tomcat-9
        3. Install Tomcat-8
        4. Install Tomcat-7
        5. Do not install
Please input a number:(Default 5 press Enter) 

После того как вы определились с выбором веб сервера скрипт спросит вас о базе данных, для начала вопрос будет очень прост, хотите ли вы ее установить:

Do you want to install Database? [y/n]:

В нашем случае это ответ да (т. е. y).
Далее нам предложат выбрать версию (и даже тип) базы данных, тут каждый решит что для него удобнее, но мой выбор это 5 (MariaDB-10.5)

Please select a version of the Database:
         1. Install MySQL-8.0
         2. Install MySQL-5.7
         3. Install MySQL-5.6
         4. Install MySQL-5.5
         5. Install MariaDB-10.5
         6. Install MariaDB-10.4
         7. Install MariaDB-10.3
         8. Install MariaDB-5.5
         9. Install Percona-8.0
        10. Install Percona-5.7
        11. Install Percona-5.6
        12. Install Percona-5.5
        13. Install PostgreSQL
        14. Install MongoDB
Please input a number:(Default 2 press Enter) 

Сразу же после выбора типа базы данных скрипт предложит задать пароль для это самой БД. Как вариант, можно просто нажать Enter и запомнить значение, которое нам сгенерировал сервер, либо ввести свой вариант.

Please input the root password of MySQL(default: WlAjMNcx):

Следующий этап установки спросит вас, хотите ли вы установить БД из бинарников, либо же из исходников, тут решать только вам, если не разбираетесь жмите 1 и enter

Please choose installation of the database:
        1. Install database from binary package.
        2. Install database from source package.
Please input a number:(Default 1 press Enter) 

Потом будет вопрос об установке PHP и его версии. Соглашаемся в случае необходимости (y — да, n — нет ) и выбираем версию.

Do you want to install PHP? [y/n]:

В нашем случае я выбирая пункт 9 (PHP7.4, на середину 2021 года это актуальная версия под которую работает подавляющее кол-во модулей необходимых для нормального существования)

Please select a version of the PHP:
         1. Install php-5.3
         2. Install php-5.4
         3. Install php-5.5
         4. Install php-5.6
         5. Install php-7.0
         6. Install php-7.1
         7. Install php-7.2
         8. Install php-7.3
         9. Install php-7.4
        10. Install php-8.0
Please input a number:(Default 7 press Enter) 

После того как вы определились с выбором версии PHP пойдут более тонкие настройки, например установка модуля opcode, как правило я его устанавливаю, поэтому в моем гайде в следующем пункте у меня будет выбор y.

Do you want to install opcode cache of the PHP? [y/n]:

Далее смело жмем enter

Please select a opcode cache of the PHP:
        1. Install Zend OPcache
        3. Install APCU
Please input a number:(Default 1 press Enter) 

Когда мы определились с основными настройками веб сервера, установщик предложит установить дополнительные модули. Далее я дам список относительно моего опыта (2 4 5 6 16 ):

Please select PHP extensions:
         0. Do not install
         1. Install zendguardloader(PHP<=5.6)
         2. Install ioncube
         3. Install sourceguardian(PHP<=7.2) 4. Install imagick 5. Install gmagick 6. Install fileinfo 7. Install imap 8. Install ldap 9. Install phalcon(PHP>=5.5)
        10. Install yaf(PHP>=7.0)
        11. Install redis
        12. Install memcached
        13. Install memcache
        14. Install mongodb
        15. Install swoole
        16. Install xdebug(PHP>=5.5)
Please input numbers:(Default '4 11 12' press Enter) 

После того как мы определились с модулями скрипт спросит о том хотим ли мы установить FTP сервер, тут все просто, ответ y – да, n – нет.

Do you want to install Pure-FTPd? [y/n]:

В нашем случае мы конечно же соглашаемся и устанавливаем FTP сервер.
Далее последует вопрос об установке phpMyAdmin, смело жмем y, а после Enter.

Do you want to install phpMyAdmin? [y/n]:

После этого пункта вас спросят об установке redis и memcached , если вам это не нужно ставьте n.
Далее наступит ожидание, которое займет 20-40 минут в зависимости от конфигурации сервера, а по окончанию установки в консоли появится долгожданное сообщение об успешном завершении всех процессов. Так же в этом сообщении будут важные данные (логин пароль к БД, путь к phpMyAdmin, и команда для создания новых FTP пользователей), которые было бы не плохо сохранить для дальнейшего использования.

Pure-Ftp installed successfully! 
[xprober.php] found
[ocp.php] found
####################Congratulations########################
Total OneinStack Install Time: 49 minutes

Nginx install dir:              /usr/local/nginx

Apache install dir:             /usr/local/apache

Database install dir:           /usr/local/mariadb
Database data dir:              /data/mariadb
Database user:                  root
Database password:              WlAjMNcx

PHP install dir:                /usr/local/php
Opcache Control Panel URL:      http://65.**.156.1*8/ocp.php

Pure-FTPd install dir:          /usr/local/pureftpd
Create FTP virtual script:      ./pureftpd_vhost.sh

phpMyAdmin dir:                 /data/wwwroot/default/phpMyAdmin
phpMyAdmin Control Panel URL:   http://65.**.156.1*8/phpMyAdmin

Index URL:                      http://65.**.156.1*8/

Please restart the server and see if the services start up fine.
Do you want to restart OS ? [y/n]: 


Соглашаемся с предложением перезагрузить сервер
(y – перезагрузить, n – оставить как есть).

Поздравляю! Ваша система настроена и успешно установлена.


Советы в использовании

Кстати, если вы решили использовать Apache в качестве backend сервера закройте доступ к директории /data/wwwroot/default/ при помощи HTTP Basic Authentication (.htaccess + .htpasswd).

А в случае если вы решили использовать nginx как бекенд и фронтенд сервер, вы достаточно прокачаны, чтоб защитить уязвимые директории.

Теперь чтоб добавить новый домен вам достаточно ввести в консоли следующую команду:

~/oneinstack/vhost.sh

И выбрать варианты в соответствии к вашим требованиям.
Чтобы создать доступ через FTP к вашему домену воспользуйтесь командой:

~/oneinstack/pureftpd_vhost.sh

И далее следуйте по инструкции.
Чтобы удалит домен введите команду:

~/oneinstack/vhost.sh —del

Далее выберите интересующий вас домен.
Чтобы настроить архивирование сервера (бэкап данных), пропишите в консоли такие команды:

~/oneinstack/backup_setup.sh
~/oneinstack/backup.sh

Редактировать список активных cron задач:

crontab -e

И последней строкой вписываем там команду:

0 1 * * * ~/oneinstack/backup.sh > /dev/null 2>&1

Жмем ctrl+x и подверждаем сожранение
Все, теперь у нас данные будут бекапиться.

Так же по мере использования этого набора у вас могут возникать различные задачи, которые потребуют перезагрузки некоторых сервисов:

Nginx/Tengine/OpenResty:
service nginx {start|stop|status|restart|reload|configtest}
MySQL/MariaDB/Percona:
service mysqld {start|stop|restart|reload|status}
PostgreSQL:
service postgresql {start|stop|restart|status}
MongoDB:
service mongod {start|stop|status|restart|reload}
PHP:
service php-fpm {start|stop|restart|reload|status}
Apache:
service httpd {start|restart|stop}
Tomcat:
service tomcat {start|stop|status|restart}
Pure-FTPd:
service pureftpd {start|stop|restart|status}
Redis:
service redis-server {start|stop|status|restart|reload}
Memcached:
service memcached {start|stop|status|restart|reload}

А вот чтобы проверить на обновление пакетов и обновить систему в случае если таковые имеются следует воспользоваться командой:

~/oneinstack/upgrade.sh

Ну а если случится страшное, и вы решите полностью удалить эту систему, то специально для вас есть команда:

~/oneinstack/uninstall.sh

Еще такой момент, возможно вам придется увеличить время исполнения php скриптов вызванных из браузера при установленном Apache на бекенде делать это нужно непосредственно через настройки самого Apache. Путь к которым можно получить вызвав функцию phpinfo(); в любом php файле.