18

作为一名 Windows 开发人员,我目前正在使用 LAMP 开发自己的项目。我了解我需要了解的有关 PHP 和 MySQL 的知识,但是 Linux 看起来很大,并且不清楚从哪里开始以及考虑到我的目标,什么就足够了。我的目标是掌握一般概念,能够将项目部署到托管服务提供商,并能够监控站点的性能,以便发现问题、加载问题等。

我知道,最好的解决方案是让 Linux 管理员来做这件事,但在我做这件事之前,我需要自己做。

4

11 回答 11

27

80% 的问题是权限问题。Windows 以不同的方式处理它们;如果您以 root 身份登录(或使用类似 root 的权限),您可以绕过权限。阿帕奇不能也不会。

  • 了解如何正确设置文件和目录的所有权。任何 Unix 书籍都会涉及到这一点:一定要真正理解它——这不是 Windows 安全拼写不同——这是一种不同的安全模型。

在剩下的问题中,80% 将是 PATH 问题。PHP 没有 Java 和 Python 那样大的 PATH 问题,但它们都使用 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 中最重要的事情之一是记住您的子进程是您的孩子,您必须真正等待它完成,以便操作系统可以清理。如果您将子进程视为并行的“即发即弃”的事情,那么您将拥有僵尸进程并被迫定期重新启动。

  • 编写非常简单的 PHP 页面来秒杀子进程管理。黄金法则是管理你的孩子并清理他们。然后修复您的完整应用程序以正确执行此操作。

剩下的问题将是微不足道的应用程序逻辑,但由于平台差异,在你追查 PHP 应用程序中的错误之前,你会责怪 Unix。

于 2008-11-17T16:28:52.947 回答
5

在我的脑海中,你需要:

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

这些只是基础。下一步是意识到何时遇到问题并知道可以去哪里找到有关它的更多信息。即使有了这一切,它也只是表面上的东西,很多事情可能没有意义。不过,这是一个好的开始。

于 2008-11-17T15:30:12.143 回答
2

当我被要求将一个相当复杂的 Intranet 站点从IIS /Windows 移植到Apache /Linux时,我已经在 Windows 和 Mac 上做 PHP/MySQL 几年了。我对 Linux 和没有任何操作系统的空白服务器的经验为零。大约两天后,我和另一位几乎没有 Linux 经验的 Windows 管理员安装了CentOS副本并运行 PHP/MySQL/Apache 以及 Intranet。

我学到的经验教训:安装服务时,YUM是你最好的朋友,配置服务时, sudo是你最好的朋友(权限可能很麻烦),几乎所有其他问题都是由区分大小写或斜杠反斜杠问题引起的。

事实证明,我们确实在 FTP 访问上稍微搞砸了安全性,但这是在防火墙 ( DMZ ) 后面,所以在他们进行真正的安全审计并加强安全之前,没有造成任何损害。

最终答案:如果你愿意卷起袖子弄脏你的命令行,那么在 Linux 机器上启动并运行一个基本的网站并不是一项艰巨的任务,直到你获得安全性(IMO)最好留给那些该领域的专家。

于 2008-11-17T21:12:27.680 回答
1

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

学习 Linux 并不,但它肯定也不是一项短期任务。有很多系统管理任务在平台之间进行,但您问题的真正答案是至少成为一名爱好者 Linux 管理员,然后从那里开始。

于 2008-11-17T15:29:31.397 回答
1

我会学习viBashvi是轻量级的,并且倾向于安装在任何地方。在您习惯之前可能会很痛苦,但如果您想了解 Linux,它几乎总是可用的,并且您将非常需要一个文本编辑器。我也会学习 Bash,因为它往往是默认的 shell。

vfilby 的建议很好。

绝对要为您选择的任何 Linux 学习包管理器。我会花一些时间在Apache上,因为它有点像怪物,因为它有很多配置选项。

我试图让我的 Linux 测试平台远离公共 Internet,因为我知道我不是一个足够好的系统管理员来保证它的安全。至少把它放在防火墙后面。很容易找到 iptables 脚本来阻止一切进入,因此您可能需要查看 iptables 以获得一些良好的防火墙/地址/端口操作。

祝你好运!

于 2008-11-17T15:36:54.440 回答
1

首先,您应该决定是使用 GUI 工具(GNOMEKDE)来管理系统,还是主要使用命令行从 SSH 访问。(这通常是基于服务器所在位置的决定)。学习一点 GUI 和 CLI 会有很长的路要走。CLI 超级强大,比 Windows 上的命令提示符要强大得多(我知道PowerShell ......)

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

  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 社区非常庞大,如果您寻找它,您会找到极好的支持。

于 2008-11-17T16:26:24.900 回答
1

你应该

于 2008-11-17T18:08:51.700 回答
1

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

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

于 2008-11-17T19:55:39.487 回答
1

坦率地说,如果您要处理的网站非常小或非常大,那么很少。

非常小意味着共享主机,您无需费力。非常大意味着您可能需要一名系统管理员来处理它。

于 2008-11-17T20:41:49.737 回答
1
  • 收藏或下载GNU coreutils 手册并定期阅读

  • 学习Vim。一个好的开始是vimtutor在外壳上。

  • 学习如何使用安全机制;不要只是禁用它们。Windows 的安全性松懈,因为它的可用应用程序期望它以这种方式(否则会中断)。在类 Unix 环境中,应用程序总是被迫运行,默认情况下安全性可能很严格。

于 2008-11-17T21:43:40.830 回答
-1

在Craigslist上找到一个旧盒子并在上面安装Gentoo Linux。那...经验...应该让您对 Linux 及其思考方式有很多感觉。

此外,在vi vs. Emacs的情况下,我统治Emacs。(尽管您会想从Pico / nano开始,因为在学习新操作系统的同时学习全功能编辑器是没有意义的)。

于 2008-11-17T16:36:07.907 回答