Как много Linux я должен изучить для развертывания веб-сайтов с использованием LAMP? - PullRequest
18 голосов
/ 17 ноября 2008

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

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

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

Ответы [ 12 ]

27 голосов
/ 17 ноября 2008

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

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

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

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

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

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

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

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

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

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

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

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

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

5 голосов
/ 17 ноября 2008

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

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

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

2 голосов
/ 18 ноября 2008

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

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

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

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

  • Learn vim. Хорошее начало - vimtutor на оболочке.

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

1 голос
/ 17 ноября 2008

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

1 голос
/ 17 ноября 2008

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

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

1 голос
/ 17 ноября 2008

Вы должны

  • Изучите оболочку bash (особенно $PATH, history)
  • базовые коммандос (cd, ls, rm, tail, kill, ps, top)
  • Знание /proc и его основных целей
  • Изучите редактор (vi всегда установлен. Если хотите, вы также можете выучить emacs)
  • Базовая замена sed (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
1 голос
/ 17 ноября 2008

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

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

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

1 голос
/ 17 ноября 2008

Сначала вы должны решить, собираетесь ли вы управлять системой с помощью инструментов GUI (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 - gnome), 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 голос
/ 17 ноября 2008

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

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

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

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

Удачи!

...