|
所有伟大的站点背后都有一个伟大的服务器。 在这篇指南里,我会告诉你如何搭建一个专用的服务器(包括Apache,MySql,和PHP), 使用那台在屋子里无所事事的旧电脑和一些免费的软件。
快速概览在这篇指南里, 我们的目标是要完成几件事:
- 我们将会安装Ubuntu Server版操作系统。我通常使用Ubuntu,因为它易于使用,管理简单。在其背后还有一个相当大且极其活跃的社区,使你轻松的得到支持。
- 我们将会安装一个 OpenSSH 服务。它允许你从远程计算机管理你的服务器。
- 会安装一个LAMP (Linux, Apache, MySQL, 和 PHP) 架构。这是运行你web站点的“骨架”支持。Apache是基于Unix操作系统web服务器的行业标准; 它是被大多数web主机使用的(NETTUTS现在就是用的它),并且现在我们也会去用它。
- 我们会安装一个防火墙来保护你的服务器,阻止那些未授权的访问。
为了跟随本教程,你需要以下一些东西: - 一个用作服务器的电脑。它不需要很强大, 也不需要太古老,可以工作就好。请不要在你的桌面PC上做这些;Ubuntu会彻底清除你的电脑。
- 一个CD刻录机和一张空白的CD。是为了便于你刻录一张Ubuntu的安装盘。
- 时间。 严重的说,这个过程是很费时的,尤其是你遇到问题的时候。尽力腾出一个下午的功夫来跟随这个教程去做。
你可能会问,为什么你想有你自己的web服务器。有多个原因,其中一些是:你可以为你自己的网站提供一个试验场;一个小的修改,你就可以host你自己的站点;并且,当你做这些的时候你会学到很多关于Linux/Unix的东西。下面让我们开始吧! 下载Ubuntu Server版
首先,我们需要一张有Ubuntu的CD。把你的浏览器指向 http://www.ubuntu.com/, 点击左边菜单里的 download 。现在你会看到有两标签的一个框 : "Desktop Edition" 和 "Server Edition"。点击"Server Edition" 标签, 选择 "Ubuntu 8.04 LTS"。 下一步,从下拉列表框里选一个下载地点。最好点击 "Begin Download" 按钮。
现在你需要刻录一个ISO到你准备的空白CD上。如果你不知道如何去做,这有个优秀的教程https://help.ubuntu.com/community/BurningIsoHowto
安装 Ubuntu Server现在你已经下载好了,并且刻好了ISO, 让我们把Ubuntu装在你的服务器上吧。 把这张盘放到磁盘驱动器里,然后从光盘启动。大多数现代的电脑,如果一张盘在磁盘驱动器里,当你打开它的时候都会默认从光盘启动。如果没有的话,在你启动电脑的时候,需要按一个键。例如我的笔记本,它是F12, 我的服务器是F2。这些取决于你的电脑了。你也可以在启动电脑BIOS期间出现在屏幕上的文字来找到它。你会看到一些像 "Press [KEY] to change boot order"这样的话。按这个键,选择CD drive。
Still with me? Good. Now that you've booted up Ubuntu, you should see the following screen:
选择你的语言,点击回车。现在你会看到下面这个屏幕:
选择 "Install Ubuntu Server", 我们出发吧!
安装程序会问你是否想要检测你的键盘布局。 就我个人而言, 我总是选no,因为从列表里选一个标准的美国键盘比安装程序选择它来得快。其他选项是好的,只需要按屏幕的指示来。
当你做完这些以后, 你会看到屏幕上一堆loading信息,像"Detecting CD-ROM drives" 诸如此类的。这些应该毫无问题的快速通过。 然而,就在这个期间,安装程序会尝试自动配置你的网络设置。大多数情况下,不会有问题。但是 ,如果它不为你工作了,只需要按照屏幕上的指示来让它工作。
完成这一切以后, 它会问你主机名称。你通常可以设置为任意值,我总是设置我的叫“web-server”。
系统现在会让你设置时区。对我来说,是Pacific. 选择一个适用于你的。
现在,系统会检测更多的硬件,并且你会被提示"partion the disk(s)(磁盘分区)". 选择 "Guided - use entire disk(引导 - 适用整个磁盘)".
你现在选择你需要分区的磁盘。对于大多数的安装,仅有一个磁盘可用,但是,对于大多数更专有的系统,这里有更多可用的选择。选择一个适用于你的。
它会问你是否你想把改变写入到磁盘。选择 "Yes" 然后回车。安装程序现在会格式化你的驱动器设立分区。
现在魔力爆发了。系统开始安装。当这一切发生的时候,去泡杯咖啡吧。这会花费一些时间,10分钟到一个小时不等, 这取决于你的系统。可能会有多次卡在那里,不要着急,没什么,只需要让它去做该做的。但是如果它在一件事上停留超过一小时,那么完了, 它死机了。
现在系统装好了,你需要设置一个用以登陆的帐号。首先,输入你的全名,并且点击 "Continue"。
现在输入用户名。它通常会设置为你的first name(按老外的名字),但是你可以改变它。一个名字你不要去用,"root"。
你现在会被要求提供一个密码。选择一个strong(译者注:复杂,长的,难以被破解的)密码是至关重要的,否则你的服务器根本不会安全。我建议至少是数字,小写字母和大写字母的混合。但是,对于我自己的服务器,我用符号,和上面的混合物一样好。不要用少于7个字符的密码。
然后,重新输入一遍你的密码来验证你输入的是否正确。
系统现在会试图配置 "Package Manager" (we'll get to what that is shortly). 提供你的代理信息,如果你不用代理就留空,然后选择"Continue"。
系统现在会扫描多个服务器寻找更新和配置。
完成这个以后,你会看到几个安装服务器软件的选项。现在,请仔细听。选择 Select OpenSSH server, 按 SPACE(空格), 不是回车。如果你按了回车,OpenSSH server就不会被安装。你也可以安装 "LAMP server" ,但是我没有这方面的经验,所以会用不同的命令去安装它们。
系统现在会安装你选择的软件,以及其他系统组件。
最后,安装完成。取出CD盘,点击回车。电脑会重启。如果一切正常,你会看到如下画面:
恭喜你,你已经完成了最难的部分。Ubuntu现在装好了,现在是把你的电脑变成web服务器的时候了。
更新你的新服务器在我们更进一步之前,我们需要确保你的服务器是最新的。要做到这一点,你需要登陆。首先,输入用户名(你之前选的那个),按回车,输入密码。当你输入密码的时候,你会注意到什么事情都没有发生。不要着急,这就是它的工作方式。在你输完你的密码之后,按回车,如果一切正常,你的屏幕会出现如下画面:
现在,输入:
sudo aptitude update && sudo aptitude dist-upgrade它会询问你密码,同样,你不会看到你输入的任何东西。完成这个以后,它会问你是否想继续。输入“y”,按回车。你的屏幕会如下显示:
你的系统现在开始下载并安装最新的更新。这一步花费的时间取决于你的互联网链接。完成这个以后,你的电脑需要重启。为了做到这一点,输入:
sudo shutdown -r now让它重启。你的服务器现在完全更新了。
关于"Sudo"直到现在,你可能已经注意到了,你输入的所有命令都以sudo开始。这是因为它们需要管理员权限,这就是sudo的作用。它以管理员身份运行命令(例如“shutdown”)使其能正常工作。这也是为什么它问你要密码的原因。然而,在你输入“sudo”一次并键入密码五分钟之内,不需要再次输入你的密码。不是所有的命令都需要sudo,只是那些修改系统的部分才需要。理解了吗? 很好。
安装 Apache, MySQL, 和 PHP现在是安装一些程序的时候了。为了从互联网访问你的站点,我们需要安装web服务器 (Apache). 除了web服务器,我们也需要安装数据库服务器 (MySQL) 和一个服务端语言 (PHP) ,以便于我们可以运行像WordPress这样的流行应用。所以,让我们来完成这些。
在Ubuntu上面安装程序不同于在Windows或OSX, 在Ubuntu上只需要一个简单命令就可以下载和安装这个程序。这是因为Ubuntu有个叫包管理(Package Manager)的东西, 它管理着你系统上所有的程序。所有我们能做的就是告诉这个包管理工具(叫做 "aptitude") 我们想让它安装 Apache, MySQL, 和 PHP。输入下面的命令来做到这一点:
sudo aptitude install apache2 php5-mysql libapache2-mod-php5 mysql-server按回车。 Aptitude 会下载和安装你指定的这些程序。它也会下载和安装任何依赖的包。
在安装期间,MySQL会问你root密码。你可以任意设置它,只要确保它是长的安全的就行。无论如何,你都不能把它留空。
所有的一切完成以后,你现在就有了一个全职的web服务器了。为了测试它,你需要输入下面命令来找到你的服务器的IP:
ifconfig | grep inet
它通常是返回的第一个IP。现在你知道了IP, 打开你的浏览器,输入你的IP地址。如果你看到 "It works!" 信息,那么恭喜你,它可以工作了。
然而,我们还没有做完。我们不想Apache或PHP透露任何关于它们本身的信息,因为这些信息对你的用户是无用的,并且可能会造成安全风险。首先,备份原来的Apache配置文件:
sudo cp /etc/apache2/apache2.conf /etc/apache2/apache2.conf.bak现在打开配置文件:
sudo nano /etc/apache2/apache2.conf向下滚动(下箭头) 到写着"ServerTokens Full"的地方,改变它为 "ServerTokens Prod"
现在,再稍微向下滚动一点,修改 "ServerSignature On" 为 "ServerSignature Off"
最后,按下Control-O ,其次是 Control-X.文件会被保存且会推出编辑器。
现在,我们会对PHP做相同的事情。首先,备份原始的PHP配置文件 :
sudo cp /etc/php5/apache2/php.ini /etc/php5/apache2/php.ini.bak打开配置文件:
sudo nano /etc/php5/apache2/php.ini修改 "expose_php = On" 为 "expose_php = Off"
再一次,按下 Control-O ,然后 Control-X。现在配置文件被更新,重启Apache:
sudo /etc/init.d/apache2 restart你已经设置完 Apache, MySQL, 和 PHP了。
安装一个防火墙现在我们要通过安装Shorewal锁定我们的服务器,一个命令行防火墙。安装它:
sudo aptitude install shorewall默认情况下,Shorewall的安装是没有规则的,允许完全访问。然而,着不是我们想要的方式。相反,我们想要屏蔽除了80端口(HTTP) 和22端口(SSH)之外的所有连接。首先,复制这个配置文件到Shorewall目录下:
sudo cp /usr/share/doc/shorewall-common/examples/one-interface/* /etc/shorewall/现在,打开 "rules" 文件:
sudo nano /etc/shorewall/rules把下面两行加到 "#LAST LINE"上面:
HTTP/ACCEPT net $FW
SSH/ACCEPT net $FW
然后按 Control-O 和 Control-X。你的防火墙现在配置好了,仅仅接受HTTP和SSH的通信。我们需要做的最后一件事是告诉 Shorewall在系统启动时开启。所以,打开Shorewall主配置文件:
sudo nano /etc/shorewall/shorewall.conf滚动到 "STARTUP_ENABLED=No" 修改为 "STARTUP_ENABLED=Yes"
按 Control-O 和 Control-X。现在,打开Shorewall 默认配置文件:
sudo nano /etc/default/shorewall修改"startup=0" 为 "startup=1"。按Control-O 和 Control-X。最后启动你的防火墙 :
sudo /etc/init.d/shorewall start恭喜你!你的防火墙现在开始保护你的服务器了。
把你的网站放到服务器上现在你已经设置好一切,你可能要添加一个网站了。默认情况下,Apache服务器映射到互联网的所有文件是位于 "/var/www/"下。然而,你不能写入这个文件夹。让我们这么做:
sudo usermod -g www-data [YOUR USERNAME]
sudo chown -R www-data:www-data /var/www
sudo chmod -R 775 /var/www你把你自己加到了"www-data" 组, 并且使网站的文件夹对于每个“www-data”组的成员来说都是可写的。
现在,你需要用SFTP来登陆你的服务器(不要和FTPS混淆)。支持SFTP的客户端有: WinSCP (Windows, 免费的), FileZilla (Windows, Linux, OS X, 免费的), Cyberduck (OS X, 免费的), 还有我个人的最爱, Transmit (OS X, $30)
使用你的用户名密码连接到你的服务器上,如果你的客户端支持它,默认路径是 "/var/www" (如果不支持,只需要登陆以后浏览 /var/www ):
你现在可以在这个文件夹 (/var/www) 下添加文件,并且,当你用你的web浏览器浏览它的时候,它会显示。
现在,你可能想知道,为什么我们要用SFTP来代替FTP。主要是因为SFTP是建立在OpenSSH(你之前装过的)基础上的。然而,它比FTP更安全,使恶意用户获取你的登陆凭证更加困难。
使你的服务器在互联网上可访问大多数的现代家庭网络都有一个路由器。由于这个原因,你的web服务器不经由一些小小的工作,将不会出现在互联网上。因为我不可能去测试每个路由器,所以我只能在这方面给你一个通用的方向。
这有两个方法,可以让你的服务器通向互联网: 一个DMZ 或者 Port 转发。你会去注意使用DMZ的主要不同是,你的服务器用我们之前安装的防火墙阻止了你自己。然而,用Port转发,你的服务器被你的路由防火墙阻止。
然而,在我们继续之前,你会想给你的服务器一个静态的LAN地址。为了做到这一点,你需要登陆路由,寻找的东西大致是 "Static IPs" 或 "Static Routing"。之后你的服务器拥有了以个静态的LAN地址,你可以做下一步了。记住,Googel是你的朋友。
做 port foward, 这有个优秀的站点, PortForward.com, 虽然难看了点,但是它可以帮你完成这项工作,几乎适用于任何路由。你想转发的端口是22 和 80.
去创建一个DMZ, 你需要登陆你的路由器,去寻找一个类似 "DMZ settings"的东西。 一旦你找到它,把你的服务器加到DMZ中,然后你设置它。 再重复一遍,Google对于解决类似问题很有用。
现在,找到你的公网IP, 瞧吧!你可以从任何地方访问你的服务器了,只要你的IP不变。
远程管理的你的服务器除了允许你上传文件外,只要你知道你的IP, OpenSSH允许你从任何地方登陆到你的服务器。对于Windows,你需要一个SSH客户端。我推荐 Putty 。对于OS X, SSH已经安装好了。只要打开终端 并且输入 "ssh you@yourip"就行。对于 Putty, 选择 SSH, 输入你的 IP, 用户名, 和密码(当你需要它的时候)。你会注意到,一旦你登陆,它看起来和服务器上的屏幕完全一样:
你可以这这里做任何事,想退出的话,输入”exit“,按回车就行了。 |
|