使用LAMP部署网站需要学习多少Linux知识?

18

作为Windows开发人员,我目前正在使用LAMP开发自己的项目。我了解PHP和MySQL所需知的内容,但Linux看起来很庞大,不清楚从何入手以及在实现我的目标方面需要掌握多少知识。

我的目标是掌握一般概念,能够将项目部署到托管提供商,并能够监测网站的性能以便发现问题、负载问题等。

我知道,最好的解决方案是找一个Linux管理员来做这件事,但在我能够那样做之前,我需要首先自己做。

11个回答

27

80%的问题是权限问题。Windows和Unix的权限系统不同,如果你以root或类似的特权登录,则可以绕过权限;但Apache不能也不会这样。

  • 学习如何正确设置文件和目录的所有权。任何一本Unix书籍都会涵盖此内容:确保真正理解它-这不是不同拼写的Windows安全性-而是一种不同的安全模型。

在剩下的问题中,80%与路径相关。PHP的路径问题不像Java和Python那么大,但它们都使用PATH设置来查找组件和库。你经常会弄错这些。Windows有一个PATH,但它还有一个注册表,使事情变得非常容易或者超级隐密。Unix没有秘密可言。

  • 了解PHP和MySQL使用哪些环境变量。确保知道它们被设置在哪里以及如何设置。Apache在自己独特的环境中运行,并且具有通过mod_php提供运行时环境设置的命令。编写短的echo $PATH shell脚本以显示正在发生的情况。

在剩下的问题中,80%与数据库相关。在解决数据库权限之后,您仍然需要连接,而“命名管道”与“本地主机”等内容将以晦涩难懂的方式出错。MySQL非常宽容,但是您在这里会犯一些错误。

  • 尝试每种替代连接,并了解它们的工作方式。不要选择类似Windows或“更简单”的选项。实际上运用每个选项并测试。从Web应用程序传递用户名和密码到数据库服务器的方式也很重要。Apache作为“nobody”运行-您不希望给他们默认访问任何内容。您的应用程序应该在不使用默认值的情况下故意连接到数据库。

在剩下的问题中,80%与Apache配置相关。Apache确实很简单,但有数百万个选项。有四种方法来完成所有事情,而你总会尝试两种完全不起作用的方法,并接受第三种方法,即使它很困难。第四种方法(更简单)永远不会想到你。

  • 大量阅读Apache配置相关的内容。可以访问 httpd.apache.org 获取更多信息。要追求简单,可以参考已有的示例并使用它们。不要根据IIS或Windows桌面经验创造需求或期望实现方式。而是复制可工作的东西。

剩下的问题中,80%涉及应用程序对文件系统的使用。如果你尝试打开、读取或写入本地文件,会发现(a)你想要使用的目录权限不正确[参见上文],以及(b)Unix文件路径不同,不是完全不同,但足够不同,以致于某些事情将以晦涩难懂的方式出现故障。

  • 每一本Unix/Linux编程书都会涵盖这方面的知识,它与Windows没有太大不同,只是在第一次使用时可能会遇到一些困难。可以编写类似“hello world”的PHP页面来测试最简单的上传或下载版本,以确保所有的组件和部件都摆放好了。然后再修正你的完整应用程序,使其做正确的事情。

剩下的问题中,80%涉及子进程创建。Windows的处理方式与Unix不同。Unix中最重要的一点是要记住你的子进程是你的孩子,你必须等待它完成,以便操作系统可以清理它。如果你认为子进程就是一个并行的“fire-and-forget”东西,你将会遇到僵尸进程,并被迫定期重新启动。

  • 编写非常简单的PHP页面来测试子进程管理。黄金法则是要管理好你的子进程并在之后进行清理。然后再修正你的完整应用程序,使其做正确的事情。

剩下的问题都是微不足道的应用逻辑问题,但由于平台差异,你可能会把Unix归咎于PHP应用程序中的错误。


在以前的生活中,我建立了一些LAMP堆栈,没有任何先前的WAMP经验,这是非常准确的,特别是关于Apache。 - Rex Miller

5

就我个人而言,您需要做到以下几点:

  1. 学习如何使用文件系统。
  2. 学习如何启动/停止您正在使用的进程(服务)。
  3. 找到或学习基本的文本编辑器(Vim, JOE, 或 Pico
  4. 学会检查进程以查看是否运行正常(ps, top
  5. 如果您正在维护服务器,则需要学习如何安装软件包。

这些仅是基础知识。下一步是意识到问题并知道可以在哪里获取更多信息。即使掌握了所有这些,也只是皮毛,许多事情可能不合理。但这是一个很好的开始。


2
我曾在Windows和Mac上使用PHP/MySQL数年,后来被要求将一个相当复杂的内部网站从IIS/Windows移植到Apache/Linux。我对Linux毫无经验,服务器上也没有任何操作系统。在大约两天时间里,我和另一位几乎没有Linux经验的Windows管理员成功安装了CentOS,并运行了PHP/MySQL/Apache以及内部网站。
我学到的教训是:在安装服务时,YUM是你最好的朋友;在配置服务时,sudo是你最好的朋友(权限可能会有些麻烦);几乎所有其他问题都是由于大小写敏感或斜杠反斜杠问题造成的。
原文大意:我们发现在FTP访问安全方面有些失误,但这是在防火墙(DMZ)后面的,所以在进行真正的安全审计并加强安全性之前没有造成任何损害。
最终答案:如果你愿意动手并且用命令行工具搭建一个基本的网站在Linux系统上并不是一项巨大的任务,直到你涉及到安全问题。在我看来,安全问题最好由专家来处理。

1

根据你的介绍,你可能会考虑使用WAMP选项(Windows Apache MySQL Python、Perl和PHP)。

学习Linux并不难,但也不是一个短期任务。有许多系统管理任务跨平台运行,但真正回答你的问题是成为至少业余Linux管理员,然后再从那里开始。


我正在使用WAMP进行开发,但是Windows托管对我来说不是一个选项。 - z-boss
有点遗憾 :-| 学习一个全新的操作系统和环境并不是一件愉快的事情。 - warren

1

我会学习viBashvi是轻量级的,通常被安装在任何地方。在你习惯它之前,它可能会很麻烦,但如果你想了解Linux,它几乎总是可用的,而且你需要一个文本编辑器。我也会学习Bash,因为它往往是默认的shell。

vfilby的建议很好。

无论你选择哪个Linux,一定要学习其软件包管理器。我会花些时间学习Apache,因为它有很多配置选项,有点像一个怪物。

我试图让我的Linux测试环境不连接公共互联网,因为我知道我不是一个足够好的系统管理员来保证它的安全性。至少要把它放在防火墙后面。很容易找到iptables脚本来阻止所有进入的流量,所以你可能想查看iptables以获取一些良好的防火墙/地址/端口操作。

祝你好运!


虽然了解vi很方便,但现在几乎每个Linux系统都配备了nano,对于日常使用来说,它更简单易用。 - JeeBee

1

首先,您应该决定是使用 GUI 工具(GNOMEKDE)管理系统,还是主要通过 SSH 使用命令行访问。(通常这是基于服务器位置的决策)。学习一些 GUI 和 CLI 的知识可以帮助您更好地管理系统。CLI 非常强大,比 Windows 上的命令提示符强大得多(我知道 PowerShell...)

从 GUI 的角度来看,我通常会运行终端(CLI),从 Debian/Ubuntu 的角度来看:

  1. 启动/停止进程:sudo /etc/init.d/apache stopsudo /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(去商标/免费Red Hat Linux(RHEL))或RHEL(您可以付款以获取帮助)。

在家或者工作中的虚拟机或闲置计算机上玩转发行版,肯定会给你带来很多价值。Linux社区是非常庞大的,如果你想找到卓越的支持,一定可以找到。


使用 aptitude 而不是 apt-get 更明智。 - aehlke

1

你应该

  • 学习Bash shell(特别是$PATHhistory
  • 基本命令(cdlsrmtailkillpstop
  • 了解/proc及其主要用途
  • 学习编辑器(vi始终安装。如果您想,也可以学习Emacs
  • 基本sed替换(sed s,orig,repl,g),以及一点AWK
  • 如何使用iptablesnetstattraceroute工作
  • 如何获取信息(maninfo--help
  • 如何安装软件包(Arch Linuxpacman -S <name>Debian-based的apt-get install <name>),删除和更新您的系统。
  • 了解如何在您的发行版中启动/停止服务(/etc/init.d/etc/rc.d
  • Unix文件系统的一般工作原理(inodes。什么是quota?)。例如,了解/etc/fstab。了解df
  • 了解如何管理用户和组(useraddgroupadd)。了解/etc/passwd/etc/group的格式
  • 查找Apachesyslog守护进程的日志文件位置。
  • 了解一些低级别的东西,如dmesghdparm

1

大多数情况下,您应该知道如何使用Linux(日常使用)。然后,您还应该知道如何处理命令行。

最后,您必须学习LAMP-特定的内容。您应该了解并应用一些基本(或不那么基本)的安全准则。


1
坦白地说,如果你要处理的网站非常小或者非常大,那么要做的工作其实非常少。
非常小的意思是共享主机,你不需要过度担心。非常大的话,你可能会有一个系统管理员来处理它。

1
  • 收藏或下载GNU coreutils手册并定期阅读

  • 学习Vim。一个好的开始是在shell中使用vimtutor

  • 学习如何使用安全机制,不要仅仅禁用它们。Windows的安全性较差,因为可用的应用程序期望它这样(否则会出现问题)。在类Unix环境中,应用程序一直被强制遵守规则,并且默认情况下可以实现严格的安全性。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接