Сколько Linux я должен изучить, чтобы развернуть веб-сайты, используя LAMP?

Будучи разработчиком Windows, я сейчас работаю над своим собственным проектом, используя LAMP. Я понимаю, что мне нужно знать о PHP и MySQL, но Linux выглядит огромным, и неясно, с чего начать и чего достаточно, учитывая мои цели.
И мои цели - понять общие концепции, возможность развертывания проекта у хостинг-провайдера и возможность отслеживать производительность сайта для выявления проблем, проблем с загрузкой и т. Д.
Я знаю, что лучшее решение - это заставить администратора Linux сделать это, но прежде чем я смогу это сделать, мне нужно сделать это самому.

Скажи мне как!

Было бы замечательно, если бы люди расширили свои ответы о том, чему учиться, как научиться этому (следует ли мне купить конкретную книгу, или есть хороший онлайн-учебник или...?).

12 ответов

Решение

80% ваших проблем будут разрешения. Windows делает их по-другому; если вы войдете в систему как root (или с правами root), вы можете обойти разрешения. Апач не может и не будет.

  • Узнайте, как правильно установить владельца файлов и каталогов. Любая книга по Unix покроет это: обязательно поймите это на самом деле - это не безопасность Windows по-разному написано - это другая модель безопасности.

Из оставшихся проблем, 80% будут проблемы ПУТИ. У PHP нет такой большой проблемы с PATH, как у Java и Python, но все они используют настройку PATH для поиска компонентов и библиотек. Вы регулярно ошибаетесь. У Windows есть PATH, но есть и реестр, что делает ее либо супер-простой, либо супер-секретный. Unix не хранит никаких секретов.

  • Узнайте, какие переменные окружения используют PHP и MySQL. Убедитесь, что вы знаете, где и как они установлены. Apache работает в своей специфической среде и имеет команды для предоставления настроек среды выполнения через mod_php, Написать коротко echo $PATH сценарии оболочки, чтобы показать, что происходит.

Из оставшихся проблем 80% будут связаны с базой данных. После сортировки разрешений базы данных вам все равно придется подключиться, и "именованный канал" против "локального хоста" будет неправильным в неясных, запутанных путях. MySQL очень простителен, но здесь вы допустите некоторые ошибки.

  • Попробуйте каждое альтернативное соединение, узнайте, как они работают. Не выбирайте один, потому что он похож на Windows, или "проще". На самом деле упражнение каждого. Также важно, как вы передаете имена пользователей и пароли из веб-приложения на сервер базы данных. Apache работает как "никто" - и вы не хотите предоставлять им доступ по умолчанию ни к чему. Ваше приложение должно установить преднамеренное соединение с базой данных без использования настроек по умолчанию.

Из оставшихся проблем 80% будут конфигами Apache. Apache действительно прост, но имеет миллион вариантов. Есть четыре способа сделать все, и вы всегда попробуете два, которые вообще не работают, и согласитесь на третий, который будет неприличным. Четвертый, который намного проще, никогда не придет вам в голову.

  • Прочитайте много о конфигурации Apache. Сайт http://httpd.apache.org/ содержит много информации. Стремитесь к простоте. Скопируйте существующие примеры и используйте их. Не устанавливайте требования или желаемые реализации на основе опыта IIS или опыта рабочего стола Windows. Скопируйте то, что работает.

Из оставшихся проблем 80% будет связано с использованием файловой системы приложениями. Если вы попытаетесь открыть, прочитать или записать локальные файлы, вы обнаружите, что (a) неправильные разрешения для каталога, который вы пытаетесь использовать [см. Выше], и (b) пути файлов Unix отличаются. Не сильно отличается, но достаточно отличается, чтобы что-то сломалось неясным образом.

  • Каждая книга по программированию в Unix/Linux книга охватывает это. Это не сильно отличается от Windows, просто достаточно отличается, чтобы сбить вас с толку в первый раз. Напишите PHP-страницы, похожие на "hello world", чтобы ускорить простейшую версию загрузок или загрузок, просто чтобы убедиться, что у вас есть все части и части на месте. Затем исправьте свое полное приложение, чтобы сделать это правильно.

Из оставшихся проблем 80% будут создавать подпроцесс. Windows делает это по-другому. Одна из самых важных вещей в Unix - помнить, что ваш подпроцесс - это ваш ребенок, и вы должны ждать его завершения, чтобы ОС могла очиститься. Если вы думаете о подпроцессе как о параллельном элементе "запускай и забывай", у вас будут зомби-процессы, и вы будете вынуждены делать периодические перезагрузки.

  • Напишите очень простые страницы PHP, чтобы ускорить управление подпроцессами. Золотое правило - управлять своими детьми и убирать за ними. Затем исправьте свое полное приложение, чтобы сделать это правильно.

Остальные проблемы будут тривиальной логикой приложения, но из-за различий в платформах вы будете обвинять Unix, прежде чем обнаружите ошибку в приложении PHP.

С макушки головы вам понадобится:

  1. Научитесь обходить файловую систему.
  2. Узнайте, как запустить / остановить процессы (услуги), которые вы используете.
  3. Найти или выучить базовый текстовый редактор (vim, joe, pico)
  4. Научитесь проверять процессы, чтобы увидеть, работают ли они (ps, top)
  5. Если вы обслуживаете сервер, вам нужно научиться устанавливать пакеты.

Это только основы, следующий шаг - понять, когда у вас есть проблема, и знать, куда можно обратиться, чтобы узнать больше информации о ней. Даже при всем этом это только царапает поверхность, и многие вещи могут не иметь смысла, хотя это хорошее начало.

Я делал PHP/MySQL для Windows и Mac в течение нескольких лет, когда меня попросили перенести довольно сложный сайт интрасети с IIS/Windows на Apache/Linux. У меня не было опыта работы с Linux и пустым сервером без какой-либо ОС. Примерно через два дня я и еще один администратор Windows, у которого практически нет опыта работы с Linux, получили копию CentOS с PHP/MySQL/Apache и внутренней сетью.

Уроки, которые я усвоил: "yum" - ваш лучший друг при установке ваших служб, "sudo" - ваш лучший друг при настройке ваших служб (разрешения могут быть хлопотными), и почти любая другая проблема была результатом чувствительности к регистру или косой черты проблемы с обратной косой чертой. Оказывается, мы немного испортили безопасность на FTP-доступе, но это было за брандмауэром (dmz), поэтому не было никакого ущерба, пока они не провели реальный аудит безопасности и не усилили его.

Окончательный ответ: если вы готовы засучить рукава и испачкать командную строку, настроить базовый веб-сайт и запустить его на Linux-машине - это не большая задача, пока вы не добьетесь безопасности, которую (IMO) лучше оставить кому-то, кто эксперт в этой области.

Я бы выучил vi и bash. vi легкий и имеет тенденцию быть установленным везде. Это может быть большой болью, пока вы не привыкнете к нему, но если вы хотите знать Linux, он всегда будет доступен, и вам понадобится текстовый редактор. Я также изучил бы bash, потому что он обычно является оболочкой по умолчанию.

Предложения vfilby хороши.

Обязательно изучите менеджер пакетов для любого Linux, который вы выберете. Я бы потратил некоторое время на Apache, потому что это немного чудовище только потому, что у него МНОГО опций конфигурации.

Я стараюсь держать свой тестовый стенд linux вне общедоступного Интернета, потому что я знаю, что я недостаточно хороший системный администратор, чтобы поддерживать его в безопасности. По крайней мере, положите его за брандмауэр. Довольно легко найти сценарии iptables, чтобы блокировать все, что поступает, поэтому вы можете проверить iptables на предмет хорошей межсетевой защиты / манипулирования адресом / портом.

Удачи!

Сначала вы должны решить, собираетесь ли вы управлять системой с помощью инструментов с графическим интерфейсом (gnome или KDE) или вы будете получать доступ в основном из SSH с помощью командной строки. (Обычно это решение, основанное на том, где находится сервер). Изучение немного GUI и CLI проходит долгий путь. CLI очень мощный, гораздо больше, чем командная строка в Windows (я знаю о PowerShell...)

С точки зрения графического интерфейса у меня обычно работает терминал (CLI) в любом случае, с точки зрения Debian/Ubuntu:

  1. Запуск / остановка процессов: sudo /etc/init.d/apache stop или же sudo /etc/init.d/apache start
  2. Текстовые редакторы: gedit (GUI - гном), kate (GUI - KDE), vim (CLI) или nano (CLI),
  3. Запущенные процессы: ps -aux
  4. Завершить процесс sudo kill -s TERM <process_id>
  5. Добавить пакет: sudo apt-get install php5-cli
  6. Обновление / исправление системы: sudo apt-get update && sudo apt-get upgrade

Здесь много информации и множество вариантов на выбор. Я бы порекомендовал использовать дистрибутив Linux с дружелюбным сообществом (например, Ubuntu, CentOS (debranded/free RHEL) или RHEL (вы платите им за помощь).

Вам определенно будет полезно поиграть с дистрибутивом на выходных на виртуальной машине или на запасной машине дома / на работе. Сообщество Linux огромно, и вы найдете отличную поддержку, если будете искать его.

С макушки головы вам понадобится:

  1. Узнайте, как читать справочные страницы / использовать справочную систему.
  2. Научитесь ориентироваться в файловой системе.
  3. Узнайте, как запустить / остановить процессы (услуги), которые вы используете.
  4. Узнайте, куда входит ваш сервер и как подключать файлы журналов.
  5. Научитесь проверять процессы, чтобы увидеть, работают ли они (ps, top).
  6. Найти или выучить базовый текстовый редактор (vim, joe, pico)
  7. Если вы обслуживаете сервер, вам нужно научиться устанавливать пакеты.

Это только основы, следующий шаг - понять, когда у вас есть проблема, и знать, куда можно обратиться, чтобы узнать больше информации о ней. Даже при всем этом это только царапает поверхность, и многие вещи могут не иметь смысла, хотя это хорошее начало.

  • Добавьте в закладки или скачайте руководство по GNU coreutils и регулярно читайте его

  • Учить vim, Хорошее начало vimtutor на оболочке.

  • Узнайте, как использовать механизмы безопасности, а не просто отключить их. У Windows слабая безопасность, потому что доступные приложения ожидают этого (и в противном случае сломаются). В Unix-подобной среде приложения всегда вынуждены себя вести, и по умолчанию безопасность может быть жесткой.

В основном, вы должны знать, как использовать Linux(как в повседневном использовании). Затем вы также должны знать, как работать с командной строкой.

Наконец, вы должны изучить материал, специфичный для LAMP. Вы должны знать и применять некоторые базовые (или не очень) рекомендации по безопасности.

На основании вашего представления вы можете рассмотреть вариант WAMP (Windows Apache MySQL Python/Perl/PHP).

Изучение Linux не сложно, но, конечно, это не короткая задача. Существует множество задач системного администратора, которые переносятся с платформы на платформу, но реальный ответ на ваш вопрос состоит в том, чтобы стать хотя бы увлеченным администратором Linux, а затем идти оттуда.

Вам следует

  • Изучите оболочку Bash (особенно $PATH, history)
  • Основные коммандос (cd, ls, rm, tail, kill, ps, top)
  • Зная о /proc и его основное использование
  • Выучить редактор (vi всегда установлен. Если хочешь, можешь учиться emacs тоже)
  • Базовая замена сед (sed s,orig,repl,g), немного awk
  • Как работать с iptables, netstat а также traceroute
  • Как получить информацию (man, info а также --help)
  • Как установить пакет (pacman -S <name> для archlinux, apt-get install <name> для Debian) удалите и обновите вашу систему.
  • Знать, как запускать / останавливать службы в вашем дистрибутиве (/etc/init.d, /etc/rc.d)
  • Как вообще работает файловая система unix (inodes, что такое quota?). Понимание к примеру /etc/fstab, Зная о df,
  • Понимание того, как управлять пользователями и группами (useradd, groupadd). Зная формат /etc/passwd а также /etc/group
  • Где вы ищите лог-файлы для apache и syslog демон.
  • Зная о некоторых вещах низкого уровня, таких как dmesg а также hdparm

Честно говоря, очень мало, если сайты, над которыми вы собираетесь работать, либо очень маленькие, либо очень большие. Очень маленький означает общий хостинг, и вам не нужно его использовать, очень большой означает, что у вас, вероятно, будет системный администратор, чтобы справиться с ним.

Найдите старый ящик в Craigslist и установите на него Gentoo Linux. Этот... опыт... должен дать вам представление о Linux и о том, как он мыслит.

Кроме того, в случае vi против emacs я управляю emacs. (Хотя вы захотите начать с pico/nano, потому что нет смысла изучать полнофункциональный редактор при изучении новой ОС).

Другие вопросы по тегам