Статья «Сетевой Карфаген» | [Часть I] Поднятие Linux сервера, настройка Apache 2, PHP и MySQL

MyrMyrBl9

MyrMyrBl9

Member
18.12.2018
5
30
Всем шалом, мои дорогие форумчане Codeby.net!

Я проводил как то опрос чтобы узнать о вашем желание видеть мою техническую писанину. Прошло довольно много дней (недель?), мне не хватало ни времени, ни сил на начало написания этих статей. Но вот наконец то свершилось! Данную серию учебных пособий (шпаргалок) под названием «Сетевой Карфаген» я посвящу подробному разбору различных вопросов, нюансов и проектов в сфере сетевого программирования, что не мало важно в пентестинге и этичном хакинге. Начнем мы конечно же с основ и плавно будем переходить к более сложным вещам. Постараюсь максимально подробно все описать и ответить на все возникающие вопросы.

Но, перед началом, хотелось бы сказать отдельное спасибо уважаемому al04e за его труд в разборе языка программирования Python, как инструмента этичного хакинга, что и подтолкнуло меня оторваться от зубрежки и приступить к реализации некоторых личных проектов. Грац!

Поехали!


Зовут меня MyrMyrBl9. Молодой кодер самоучка из России. Начал свое становление как программист в октябре 2018 года с книжки Майкла Доусона «Программируем на Python». Считаю себя обычным скриптером-ламером, но пытаюсь пробиться в «люди». Пишу код, в первую очередь, на пайтоне. Нахожусь в процессе изучения JS и C-подобных языков. Немного умею на PHP, Java и SQL. В планах изучение искусства реверса и ассемблера. Являюсь сторонником Open Source проектов.
1. О чем данная статья?
Начало серии статей «Сетевой Карфаген» я решил посвятить настройке VPS сервера и дальнейшей установке на него сетевой сборки Apache + PHP + MySQL.
Всю эту почву мы подготовим для дальнейшей разработки и внедрению самого простого web-сниффера. В конце мы напишем свою собственную кроссплатформенную утилиту на Python для удаленного доступ ко всему этому механизму.
Информации получилось достаточно много и потом пришлось ее разделить примерно на три части (возможно выйдет больше).

2. Для кого данная статья?
В первую очередь для новичков, которые как и я хотят оторваться от зубрежки и приступить к реализации реальных проектов.

3. Какие знания необходимы?
Думаю будет вполне достаточно прочтения одной книги по любому языку программирования, чтобы иметь основы понимания программирования.
В статьях я постараюсь все максимально подробно разбирать.
Хорошее настроение и две бутылки Bud!
[ АЛКОГОЛЬ ВРЕДИТ ВАШЕМУ ЗДОРОВЬЮ ]

Начнем же мы с основы - настройка нашего сервера.
Использовать и демонстрировать всю работу я буду на простом и дешевом (+-70 руб/мес) сервере на Ubuntu 18.04 Linux с amd64 архитектурой. Вы же можете использовать любой другой, в рамках приличия, конечно же (имею ввиду не windows). Нас интересует «белый» IP-адрес, доменное имя не нужно. Конечно можно воспользоваться репозиторием и роль веб-сервера даровать своей собственной машинке, но в данном случае нам это не подходит. Но обещаю написать о Seeker в отдельной статье.

Чтож, допустим вы уже получили доступ к shell-оболочке своего сервере. В первую очередь мы должны приступить к обязательным четырем шагам настройки:
Далее я буду использовать системные команды без sudo от лица root-пользователя
Так же для тех кто не знал, поясню:
  • Знак $, в начале кода, символизирует обращение к системе от лица пользователя без root-прав;
  • Знак же # - это обращение root-пользователя к системе;
  • Во время самой работы вводить эти знаки не нужно, они вставляются автоматически. В тексте они лишь выполняют роль демонстрации начала команды;
1. СВЕЖЕСТЬ
Первым делом нам необходимо проверить на релевантность кешей пакетов нашей Linux системы. Для этого выполним две команды # apt update и # apt upgrade. Система может предупредить об изменении объема занятого дискового пространства (в случае если есть обновления для репозиториев), и запросить вашего разрешения. Вводим «Y» и продолжаем.
Чем старее ваша версия Ubuntu Server, тем больше времени уйдет на ее обновление, но это необходимая операция. По завершению обязательно перезагрузим систему командой # reboot

2. TIME
Желательно настроить протокол синхронизации времени, обычно он включен по умолчанию. Пренебрежение этим пунктом может повлечь за собой многие проблемы в будущем - рассинхронизация работы приложений (кода) и путаница в логах в плоть до нескольких минут. Проверим установлен ли NTP командой # systemctl status ntp. Если его нет, то вводим # apt-get install ntp и добавляем в автозагрузку # systemctl enable ntp, перезагружаем # systemctl restart ntp. Конфигурации оставляем по умолчанию, в данном случае точность времени будет составлять +-0.05 секунды, что нас вполне устраивает.

3. SECURE SHELL
Для работы наших программ и удаленного доступа к системе сервера нам необходим SSH протокол. Если вас попутал лукавый и вы пропустили первый пункт (аминь за вашу душу), то выполните следующую команду # apt upgrade ssh. Далее нам необходимо сменить стандартные порты в конфигурациях, иначе рано или поздно мы можем подвергнуться попыткам . Открываем файл # nano /etc/ssh/sshd_config, находим строку # Port 22 (она будет практически в самом начале документа), раскомментируем ее (удаляем «#» (хеш) в начале строки) и изменяем стандартное число 22 на любое другое в диапазоне 0 - 65535. Например пусть это будет 4545:
26929
Далее находим строку # GatewayPorts no. Данная директива определяет можно ли удаленно подключится к порту, выделенному для SSH туннелирования трафика. Значение по-умолчанию «no» разрешает доступ только в рамках данной системы (локально). Раскомментируем строку и изменяем ее значение на «yes»:
26930
Настройку авторизации по ключу проведем в следующей части при непосредственной работе с написанием нашей программы на Python.

4. FIREWALL
«Работать без фаервола - это как заниматься незащищенным сексем с вьетнамкой»
Спорить о полезности брандмауэра - бессмысленно. Сервер будет находится постоянно в сети и нужно защитить все его запущенные процессы и службы от внешних атак и воздействий. Это, пожалуй, один из самых важнейших пунктов настройки. И если раньше все занимало колоссально много времени, то сегодня настройка межсетевого экрана «раз-два и готово».
В Linux используется встроенный фаервол под названием , мы же воспользуемся - оболочкой (утилитой) для простого и быстрого редактирования конфигураций. Проверим состояние его работы командой # systemctk status ufw. Если он не включен то это необходимо исправить через # systemctl enable ufw:
26931
По-умолчанию firewall закрывает внешний доступ ко всем службам. Мы будем работать с SSH протоколом, поэтому нужно разрешить входящее и исходящее подключение к этой службе. Но не ко всей, а именно к нашему порту, который мы изменили в пункте №2. Вводим следующую команду # ufw allow 4545 (используете значение своего порта). Проверяем результат через # ufw status:
26932


Поздравляю, мои дорогие! Мы настроили все необходимое на нашем (мб первом) сервере и теперь можем приступить к следующей задаче - установка и настройка Apache 2 + приблуды!



Рассмотрим как установить на нашу Ubuntu 18.04 веб-сервер Apache 2 с PHP приблудами и базой данных MySQL.
- является одним из популярнейших HTTP-серверов имеющий свободную форму распространения. Не такой производительный как , но гораздо проще и удобнее в настройке конфигураций. Не будем усложнять себе жизнь и установим его с использованием - стека (сборки) серверного программного обеспечения, куда, по-мимо Apache, будут входить и PHP и MySQL. В этом нам поможет встроенная линукс утилита tasksel (если она не установлена то вводим # apt-get install tasksel). Для этого используем следующую команду # tasksel install lamp-server, мы увидим загрузку пакетов из репозитория Linux:

26933

Далее нам нужно разрешить в фаерволе внешний доступ к порту 80 на котором и находится наш «сайт»: # ufw allow in 80, иначе будет пустая страница с ошибкой загрузки.
Проверим работоспособность нашего детища: заходим на , переходим в раздел и вбиваем IP-адрес своего сервера. В графе «хост» будет ссылка на ваш сайт. Перейдя по ней мы должны увидеть стандартную страницу приветствия от Apache2:
26934
Теперь займемся веб-интерфейсом phpMyAdmin для работы с базой данных MySQL воспользовавшись командой # apt-get install phpmyadmin.
В появившемся окне выбираем для автоматической перенастройки веб-сервер Apache2:

26935

Далее установщик спросит про настройки базы данных для phpMyAdmin с помощью дефолтного пакета dbconfig-common, не заморачиваемся и жмакаем «YES»:

26936

После будет предложено ввести пароль для базы phpMyAdmin, можно вводить, а можно и не вводить нажав просто «OK» и веб-интерфейс будет все равно установлен. Но чтобы он стал полностью доступен необходимо сделать «ссылку» на корневой файл, но это повлечет ряд выскакивающих ошибок в консоли трубящих об плохой совместимости с языком PHP. Это связанно с тем что в репозитории Linux находится несколько устаревшая версия phpMyAdmin (всегда), что и вызывает этот конфликт. Работе это не мешает (если вас не раздражают постоянно всплывающие красные хрени), но лучше сделать все красиво. Для этого переходим на официальный сайт и скачиваем последнюю версию на свою машину, разархивируйте содержимое в удобную для себя директорию. Советую так же заранее переименовать полученную папку в phpmyadmin.
Далее открываем терминал на своей машине с файлом. Проверяем на «свежесть» SSH клиент командой # apt-get upgrade ssh. Если он у вас не установлен в системе (обычно он есть уже по-умолчанию в Linux), то вводим следующее: # apt-get install ssh и повторяем предыдущую команду по обновлению (на всякий пожарный).
Теперь загрузим файл на наш сервер:

# scp -P 4545 -r /home/phpmyadmin root@127.0.0.1:/etc/www/html/

Давайте детальнее разберем эти иероглифы:
  • SCP (Secure CoPy command) - утилита позволяющая обмениваться файлами и папками в зашифрованном виде с удаленным сервером по средством SSH туннелирования;
  • -P 4545 - номер вашего порта SSH на сервере;
  • -r - параметр рекурсивного копирования указанной папки (включая подкаталоги);
  • /home/phpmyadmin - полный путь к нашей папке на рабочей машине;
  • root@127.0.0.1 - username и IP-адрес сервера с которым осуществляется передача данных;
  • : - обязательное двоеточие!
  • /etc/www/html/ - полный путь к директории куда мы копируем нашу папку (таким он и должен быть, если вы все правильно сделали);
После ввода данной команды у вас запросят пароль пользователя через которого вы осуществляете подключение.
Как только все закончится и скопируется полностью на сервер, то можно проверить работу нашего веб-интерфейса в действии. К ссылке на сайт, которую мы получили через Whoer, добавляем через слеш phpmyadmin (название загруженной ранее папки). В итоге вы должны увидеть сам веб-интерфейс с полями авторизации:
26940
Поздравляю! Мы сделали наши первые маленькие шажки!
Но пока мы не можем полноценно авторизоваться. Для этого установим пароль root-пользователю MySQL. В терминале сервера вводим следующую команду: mysql. Таким образом вы попадете в саму консоль MySQL и начало строки терминала изменится на mysql>:
26941
Далее вводим use mysql;. Обязательно каждую команду завершайте точкой с запятой!
Теперь установим пароль на нашего root-пользователя: update user set authentication_string=password('xxx'), plugin='mysql_native_password' where user='root'; (где 'xxx' - ваш пароль)
Завершаем все обновлением пользовательского списка: flush privileges;
26943
В результате мы установили пароль и можем его использовать для аутентификации в нашем веб-интерфейсе phpMyAdmin! Чтобы выйти из консоли MySQL просто введите команду exit и вы вернетесь в терминал сервера.
26944
Вы можете столкнутся при первом входе с выводом некоторых ошибок в нижней части веб-интерфейса (они приведены ниже). Тогда нам нужно скопировать конфигурационный файл из корневой папки командой # cp /etc/phpmyadmin/config.inc.php /var/www/html/phpmyadmin/:
  • cp - команда для копирования файла (в случае с папками используется опция -r перед копируемой директорией);
  • /etc/phpmyadmin/config.inc.php - путь к конфигу в корневой папке phpMyAdmin;
  • /var/www/html/phpmyadmin/ - полный путь к папке нашего сайта;
26949

  • Отсутствие директории /tmp/, из-за чего phpMyAdmin не может кэшировать шаблоны и работает медленнее. Заходим в # cd /var/www/html/phpmyadmin (вы могли изменить название этой папки на другое) и находим файл config.inc.php, открываем через редактор # nano config.inc.php и в конце на свободной строчке пишем: $cfg['TempDir'] = './tmp/';. Закрываем и сохраняем. В той же директории создаем папку командой # mkdir tmp и присваиваем ей нужные права # chmod 777 tmp. Готово!
В папке будет похожий файл с именем config.sample.inc.php - это его дефолтная копия для восстановления. Открываем его через # nano config.sample.inc.php и дописываем в конец строчку что была выше. Нажимаем ctr + X, соглашаемся на сохранение, но далее нам дадут возможность изменить имя - меняем его убирая sample из название и подтверждаем. Создаем папку.
26948
Просто создаем пустую папку tmp с нужными правами 777


Сделаем еще пару штрихов по безопасности раздав необходимые нам права доступа к файлам и папкам в директории /var/www/html/:
  1. Закроем доступ к приветственной странице Apache для всех кроме нас (владельцев) командой # chmod 700 index.html;
  2. Во вторых создадим папку # mkdir test - она нам понадобиться в следующей статье и выдадим ей те же права доступа # chmod 700 test;
Теперь мы имеем «на руках» рабочий веб-сервер, который мы используем для разработки нашего будущего web-сниффера на PHP.
На этом , пожалуй, мы сегодня закончим.



P.S.
Мне важно совершенствоваться в знаниях и написание статей, и без вашей помощи тут не обойтись.
Это мой первый опыт в подобных вещах, хотелось бы услышать мнение ветеранов-кодеров, которые могли бы научить меня уму разуму!



 

Вложения

Последнее редактирование:
valerian38

valerian38

Grey Team
20.07.2016
656
745
Это мой первый опыт в подобных вещах, хотелось бы услышать мнение ветеранов-кодеров, которые могли бы научить меня уму разуму!
Для первого раза - статья просто шикарная. Всё изложено последовательно и грамотным, доступным языком. Так держать!
 
V

Valkiria

Несмотря на то, что тема установки web-сервера на VPS многократно разжевана и пережёвана, статья просто отличная.
Эта писанина по праву может называться "отличной статьёй".
Прекрасное владение словом, умение составлять из слов красивые предложения (в отличие от сухих и нечитаемых статей ветеранов-кодеров) заметно выделяют статью на фоне аналогичных. Вместе с этим, заметно, что автор владеет темой, излагает осознанные мысли.
Владение темой помноженное на владение словом выдали адски-красивую смесь )
Примечателен тот факт, что автор не использовал в написании непонятных новичкам аббревиатур типа LAMP и аналогичных, не пытался напустить пыль в глаза читателю, не старался казаться умнее ))

Я в восторге от прочтения. Это одна из статей, которую можно назвать эталоном написания на 05 марта 2019 года.

26985


Если не секрет, сколько времени ушло у тебя на написание статьи ? Спрашиваю это из любопытства ))
 
Последнее редактирование модератором:
deadroot

deadroot

Well-known member
06.01.2019
60
136
Коллеги,

Я все понимаю, но на окном 2k19 и вся инфратструктура (даже 1 или два сервера) должна быть описана IaC (Infrastructure as code) инструментами, аналогичными Ansible, Salt. Тут же идут и кастомные конфиги, которые нужны для того, чтобы не быть уязвимым к дефолтным настройкам. Это правда не сложно и увеличивает уровень информационной безопасности как минимум через контроль того, что установлено на сервере и как сконфигурировано.
Да даже для настройки окружения уже описывать как код стало просто и доступно через .

P.S. Скрипты установки (aka install.sh) уже прошлый век. Чего уже говорить про команды ручные.
 
wizard76

wizard76

Well-known member
15.06.2018
92
75
Так студням на лекциях обЪяснять надо, а твою статью , как методичку оформить можно. Хорошо написано, добавить и нечего, хотя метода и устарела на лет десять.
 
  • Нравится
Реакции: MyrMyrBl9 и Valkiria
V

Valkiria

Хорошо написано, добавить и нечего, хотя метода и устарела на лет десять.
Что-то поменялось в установке web-сервера ?
Вы имеете ввиду, что намного проще пользоваться скриптами, чем вручную устанавливать ?
Вот я сколько ни использовала эти скрипты, всегда что-то идёт не так )
В результате, приходится настраивать всё вручную.

Или вы имеете ввиду, что сейчас ngnix предпочтительнее apache ?
 
  • Нравится
Реакции: ALF
deadroot

deadroot

Well-known member
06.01.2019
60
136
Так студням на лекциях обЪяснять надо, а твою статью , как методичку оформить можно. Хорошо написано, добавить и нечего, хотя метода и устарела на лет десять.
Я периодически провожу лекции и там точно не скажу как устанавливать и конфигурировать с нуля весь этот зоопарк. Потому что там будут человеческие ошибки во время настройки.
Поэтому я там рассказываю как
  1. Конфигурировать и как с ним работать. Так же зачем это и почему нужно "перетирать изменения тех, кто вносит измнение не через salt", а они пусть разбираются. И конфиг консистентен в данном случае, если что.
  2. Зачем был сделан и почему всякую лабуду лучше в нем запускать. Также есть пара знакомых которые в Kubernetes заводят целые системы, делая "падающие" контейнеры отказоустойчивыми.
Так что я не могу посоветовать руками настраивать сервера. Это не правильно и вносит кучу проблем в эксплуатацию в будущем, подумайте над этим. А так же над тем, что каждый настраивает сервер как хочет (сколько вариантов вы видели home директории для проекта?) А как поддерживать и настраивать инфраструктуру компании, где серверов 50 и больше. Или как вносить CI/CD процессы, если все настроено разрозненно?
 
Последнее редактирование:
  • Нравится
Реакции: ALF и Valkiria
V

Valkiria

Я периодически провожу лекции и там точно не скажу как устанавливать и конфигурировать с нуля весь этот зоопарк. Потому что там будут человеческие ошибки во время настройки.
В этом и содержится беда (нет, БЕДА) нашего образования ))
 
deadroot

deadroot

Well-known member
06.01.2019
60
136
В этом и содержится беда (нет, БЕДА) нашего образования ))
Я в отличии от дефолтного преподавателя не преподаю с нуля, а в компании я руковожу отделом эксплуатации и отделом кастомной разработки. И те, кто приходят, не являются студентами, которым нужно с нуля рассказывать прописные истины. Как я написал в своем сообщении выше
...
Так что я не могу посоветовать руками настраивать сервера. Это не правильно и вносит кучу проблем в эксплуатацию в будущем, подумайте над этим. А так же над тем, что каждый настраивает сервер как хочет (сколько вариантов вы видели home директории для проекта?) А как поддерживать и настраивать инфраструктуру компании, где серверов 50 и больше. Или как вносить CI/CD процессы, если все настроено разрозненно?
Реалии сейчас другие, и по таким статьям нельзя сделать сисему безопасной :/

P.S. Проблема образования (скорее всего вы думаете сейчас про универсистетское) сейчас в том, что никто не учит реалиям, с которыми придется столкнуться при работе.
 
  • Нравится
Реакции: Valkiria
V

Valkiria

Реалии сейчас другие, и по таким статьям нельзя сделать сисему безопасной :/
Автор статьи не ставил перед собою цель настройки безопасности сервера )) Причём тут безопасность ?
А какие сейчас реалии ? Может быть я что-то не вижу, что-то не понимаю ? Растолкуйте, будьте добры, тупой блондинке современные реалии ))

Что касается бед образования, то я возможно ошибаюсь в Вашем конкретном случае.
Я вовсе не желала обидеть Вас лично. Ведь мне неизвестна ни Ваша аудитория, ничего...
Но я осознанно зацепила Вас за "живое" ))

P.S. Проблема образования (скорее всего вы думаете сейчас про универсистетское) сейчас в том, что никто не учит реалиям, с которыми придется столкнуться при работе.
Вы правильно прочитали мои мысли.
 
Последнее редактирование модератором:
  • Нравится
Реакции: deadroot
deadroot

deadroot

Well-known member
06.01.2019
60
136
...
Но я осознанно зацепила Вас за "живое" ))
Да, для этого форумы то и есть :) Сам обожаю вступать в конфронтации ;)

А если отвечать на ваш вопрос про реалии это выльется больше, чем в сообщение. Мир катится сейчас в автоматизацию, с какой стороны не посмотри. Попробуем разбить на основные части:
Конечно, все зависит от размера требуемой инфраструкруты и решаемой задачи, но если смотреть в разрезе текущей темы, то
  1. Настройка окружения текущего сервера, а именно веб-сервер (Apache 2), сервер базы данных (MySQL), сервер приложения (PHP). Все это нужно настраивать централизованно и автоматически. А это решается силами saltstack, напрмиер. Исключая ошибки как людей, так и контроль выполнения на стороне системы (если что-то не установится и не сконфигурируется, то об этом будет оповещено).
А ±реальный кейс я бы описал так:
  1. Настраивать сети и изначальную установку сервера (не его конфигурацию изнутри) можно через Terraform. Хорошо, что этот инструмент поддерживает кучу провайдеров . А не тыкать руками в панели, например, AWS.
  2. Настроить сервера (пункт, который я описал выше "Настройка окружения текущего сервера") автоматически, исключив ошибки или отловив их заранее, зная свою инфраструктуру.
  3. Дальше нужно будет доставлять код, который должен быть версионирован (git/svn). Эту задачу может решить связка c GitLab CI/Jenkins, например. Но это уже часть процессов CI/CD ( , в которой есть и автотесты и прочие прелести технологий), о которых можно рассказывать отдельно и очень много. И опять таки, это как часть DevOps методологии автотизировано и поставлено на поток.
Обязательно попробую рассказать о инфрастукрурах и процессах после PHDays, или если кто-то расскажет раньше, то присоединюсь к обсуждению :)
 
  • Нравится
Реакции: darklight и Valkiria
V

Valkiria

git/svn , CI/CD , DevOps ...Terraform ...

Хм, граница моих личных интересов намного скромнее, чем описанные Вами выше.
Обязательно попробую рассказать о инфрастукрурах и процессах после PHDays, или если кто-то расскажет раньше, то присоединюсь к обсуждению :)
Ну-у-у- )) Теперь Вы просто обязаны это сделать ))
 
Х

Хлебушек

Well-known member
19.11.2018
53
52
@deadroot, а можно узнать, вы про какие реалии говорите? Давайте взглянем правде в глаза, статья для новичков, если уж в ней даже описывается, что такое Apache. И вы предлагаете этим новичкам не понимая, как и что настраивается руками, пойти и погрузиться в глубины DevOps? Браво!

А если мне нужно просто развернуть какое-то небольшое веб приложения для теста? Тоже скажите, что мне нужно энсибл использовать, запихнуть это все в контейнер, потом кубер настроить, нужно ведь отказоустойчивость настроить!?

Вы когда пишите небольшой скрипт, строчек так на 200, вы тоже к таким "проектам" например прикручиваете связку типо ELK? Мне просто интересно))
 
  • Нравится
Реакции: Calibre
deadroot

deadroot

Well-known member
06.01.2019
60
136
А если мне нужно просто развернуть какое-то небольшое веб приложения для теста?
А моем изначальном сообщении #post-338560 я написал что нужно, чтобы изначальный LAMP поднять и установить туда PMA двумя ссылками на репозитории, у которых есть README.md, в которых описано как это запустить :)

Вы когда пишите небольшой скрипт, строчек так на 200, вы тоже к таким "проектам" например прикручиваете связку типо ELK? Мне просто интересно))
Я скажу даже больше. Туда прикручивать еще и Zabbix надо, так как добавление в систему еще одной точки отказа будет не оч ;)
 
deadroot

deadroot

Well-known member
06.01.2019
60
136
Ну-у-у- )) Теперь Вы просто обязаны это сделать ))
Мы на одной встрече DC20e6 отчасти затронули автоматизацию подготовки сервера и его конфигурации [YouTube] Встреча 0x03 сообщества DC20e6 и заопенсурсили решения, которые были сделаны в рамках докладов :)

После пхд подготовлю статью с примерами и конфигурацией «дефолтного» сервера.
 
Iskus

Iskus

Well-known member
13.11.2017
287
453
А теперь забываем, что вы здесь прочитали, забываем о существовании apache, вспоминаем, что есть лучший в мире сервер по имени nginx, есть php-fpm, есть postgre, ну ладно, последняя версия mariadb тоже пойдет. Устанавливаем virtualbox, vagrant, это все есть в репозиториях большинства linux дистрибутивов, устанавливаем laravel homestead последней версии, поднимаем, стучится туда по ssh и наслаждаемся, не насилуя свою любимую ОС всяким софтом с кучей зависимостей, приближая ее раннюю кончину, идеально настроенной ubuntu 18.04 с отлично работающим, без плясок с бубном, костылей, гемороев, самым свежим софтом полностью удовлетворяющим нужды веб разработки. А теперь тоже что я только что написал, только языком bash:
Bash:
sudo apt update && sudo apt full-upgrade
sudo apt install git virtualbox vagrant
vagrant box add laravel/homestead
git clone https://github.com/laravel/homestead.git ~/Homestead
cd ~/Homestead
git checkout v9_version #смотрим на гитхабе последний релиз, или с помощью tab, смотрим самую последнюю ветку
./init.sh
#Все готово
Поздравляю вы получили идеально собранный дистрибутив Ubuntu 18.04, с уже настроенными самыми свежими версиями софта, который используется в веб разработке.
Included Software
  • Ubuntu 18.04
  • Git
  • PHP 7.3
  • PHP 7.2
  • PHP 7.1
  • Nginx
  • MySQL
  • lmm for MySQL or MariaDB database snapshots
  • Sqlite3
  • PostgreSQL
  • Composer
  • Node (With Yarn, Bower, Grunt, and Gulp)
  • Redis
  • Memcached
  • Beanstalkd
  • Mailhog
  • avahi
  • ngrok
  • Xdebug
  • XHProf / Tideways / XHGui
  • wp-cli
  • Minio
Optional Software
  • Apache
  • Crystal & Lucky Framework
  • Dot Net Core
  • Elasticsearch
  • Go
  • MariaDB
  • MongoDB
  • Neo4j
  • Oh My Zsh
  • Ruby & Rails
  • Webdriver & Laravel Dusk Utilities
  • Zend Z-Ray
Управляется все это файлом настроек в корне ~/Homestead/Homestead.yaml
В принципе по умолчанию уже все настроено и готово к работе, о настройках можно посмотреть , там же можно подробно изучить процесс установки. Единственное, для того чтобы легко подключаться к вашему новому рабочему окружению, необходимо добавить в вашу, оставшуюся девственно чистой, систему, ключи ssh, как это сделать информации более чем достаточно, ладно ssh-keygen , со всем соглашаемся и все, ключи готовы, в папке ~/.ssh. Теперь в папке ~/Homestead вводим vagrant up, ждём пока среда соберётся, затем vagrant ssh и попадаем внутрь этого чуда, sudo не запрашивает пароль, а вообще ваш юзер сейчас vagrant, пароль тоже vagrant, mariadb юзер homestead, пароль secret, за более подробной информацией обращаемся к официальной документации, благо она имеется, и она вполне понятная и доступная.
 
Мы в соцсетях: