使用Linux搭建web服务器

对于一个网站开发者而言,在经历了艰难的开发过程后,要将网站推向给用户,必须要做的一步便是部署我们的web应用,这样广大的用户才能成功访问我们的网站。目前主流的部署平台都是基于Linux的。本文将详细讲解使用Linux搭建web服务器的过程。搭建成功之后,可以通过网址:www.zhougb3.cn访问我的个人博客主页。

1.准备工作

为了让用户都可以访问我们的网站,我们需要有一台可以通过外网访问的服务器,这里选用的是腾讯云的服务器,安装的是Ubuntu16.04的系统。这里我们同时注册了域名,这样子用户就可以直接通过域名访问服务器,而不用输入一串生涩难记,毫无规则的IP地址。

2.使用ssh连接远程服务器

SSH 为建立在应用层基础上的安全协议。SSH 是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。利用 SSH 协议可以有效防止远程管理过程中的信息泄露问题。我们使用ssh连接我们的远端腾讯云服务器,并在远端服务器上进行我们的web应用部署。在这里我们进行连接的本地机器也是Ubuntu16.04系统。ssh分为客户端和服务端,Ubuntu内置了ssh的客户端,通过在远端机器运行ssh服务端,本地就可以通过ssh客户端进行连接了。以下介绍ssh配置的具体操作。首先我们需要在远端服务器上通过命令“sudo apt-get install openssh-server”安装ssh服务端。那么问题来啦,现在我们不是还没有办法连接远端服务器,那又怎么在上面进行操作?其实,我们仍然是可以连接远端服务器的,只是不能通过ssh的方法,虽然不足够安全但是也可以进行操作的。如果购买的是腾讯云服务器,我们可以在腾讯云服务器的控制台登录上服务器,使用我们购买时设置的账号密码即可成功登录。成功在远端服务器上安装ssh后,我们回到我们本地的机器,通过命令“su - user”切换为我们以后想要用来连接远端服务器的本地用户,如果现在本地机器的用户是你想要连接远端机器的用户则不用执行该命令。接着输入命令“ssh-keygen -t rsa”生成密钥文件,在生成的过程中会提示你输入密码,此时我们按Enter键即可。这里设置的密码是用来读取密钥文件的密码,如果设定了之后每次进行ssh连接都需要输入密码才能读取密钥文件,这样就比较麻烦了。命令执行完之后会生成一个公钥文件和一个私钥文件,我们需要将生成的公钥文件拷贝到远端服务器,使用如下命令完成“scp.ssh/[email protected]:/home/user/”。这里“.ssh/id_rsa.pub”是公钥文件的路径,“[email protected]”是远端服务器的ip地址和用户名。这里我们又回到了远程机器上,可以发现已经有了公钥文件,这时候我们在远端服务器以下命令“mv/home/user/id_rsa.pub/home/user/.ssh/authorized_keys”,如果没有相应的文件夹则要提前建立。这样子,一切配置就算完成了,我们在远端服务器执行以下命令来开启ssh服务“service sshd start”
然后我们回到本地机器,通过执行命令“ssh [email protected]”我们就可以成功连接上远端服务器了。这时候我们就可以在本地使用ssh安全地对远程服务器进行操作了,我们首先要做的就是将我们的项目源码拷贝到远端服务器上。
这里要注意远端服务器上的文件夹和文件的权限问题。可以通过以下命令正确设置权限“#chmod700 .ssh”“#chmod 600 authorized_keys”

3.使用Nginx服务

Nginx是一个高性能的HTTP和反向代理服务器,使用Nginx能更好地帮我们处理静态资源文件。使用命令“$ sudo apt-get install nginx”安装Nginx。安装完成之后,需要我们手动编写配置文件并置于“/etc/nginx/sites-available/”文件夹下,然后在/etc/nginx/sites-enabled/目录下创建软链接,使用如下命令链接到我们的配置文件$sudo ln -s /etc/nginx/sites-available/cffilename .。每次修改完配置文件后,使用命令$ sudo /etc/init.d/nginx reload即可重新开启Nginx服务。Nginx配置文件的编写这里就不赘述了,可以查看相关文档学习。主要是编写一个处理静态资源文件还有一个处理动态请求转发的。在设定文件路径时,请使用绝对路径,否则会无法找到文件。Nginx有一个默认的配置文件default,需要把default文件下的root路径注释掉。
使用Nginx同样要注意文件和文件夹的权限问题,否则Nginx可能没有办法读取所需要的静态资源文件。需要读取的文件夹需要有可执行的权限,否则无法进入文件夹进行读文件的操作,对于文件则要有对应的读取权限。

4.使用supervisor管理进程

supervisor是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,而不需要我们自己写脚本控制。对于一个长期运行的web服务器,我们的服务端代码应该一直处于正常运行的状态,使用supervisor来管理我们的服务端代码,能够很好地做到这一点。Supervisor是一个Python工具,通过执行命令“pip install supervisor”来安装,不过在此之前我们的服务器上应该安装有Python和pip包管理工具。安装完成后,我们可以使用命令“supervisord -c /etc/supervisord.conf”来启动服务。
Supervisor安装完成后每次服务器开机时都会自动启动的,不需要我们重复开启,如果重复开启多个运行时会出错,而且报错的信息也多种多样,可能提示端口被占用。supervisor会把配置文件中的进程全部运行。我们可以通过使用命令“ps aux|grep superviosrd”或“ps -ef|grep superviosrd”查看当前运行的服务,如果有重复则使用kill命令杀掉该进程。每次修改完配置文件后要通过命令“sudo supervisorctl reload ”来重新加载服务。正确配置完成后,可以通过命令“netstat -lpnt”来查看监听端口。Supervisor配置文件的编写如果需要路径也要注意采用绝对路径。

5.使用Fabric实现自动化部署

通过ssh连接远程服务器进行操作,使用Nginx和supervisor部署应用,这样子一个能够稳定运行的web服务器就搭建起来了。但是,我们的web应用在运行过程中可能会遇到各种各样的问题,程序员需要对代码进行不断地完善。如果每次修改代码后都要重新手动拷贝一份文件到服务器,然后再重新部署,那这过程一定是相当低效繁琐的,并且大大增加了出错的可能性。聪明的程序员是不会把时间花在重复的机械性操作上的。因此,自动化部署工具应运而生,Fabric则是其中的一个典型代表,Fabric目前只支持Python2,使用命令“pip install fabric”进行安装,Fabric使用了ssh直接登录服务器进行操作。Fabric脚本的编写可以查看相关文档学习,主体的思想便是将在部署时在本地执行的和远程执行的命令写进不同的函数中,每次重新部署时只需要在本地运行函数即可。本地运行的指令和服务器运行的指令对应着不同的命令格式,以此作为区分。

6.使用Git服务器

在使用Fabric进行自动化部署时,我们可能经常会用到Git服务器,将本地代码上传到Git服务器,再在远端服务器拉下代码。很多大公司都会有自己的Git服务器,用于公司内部项目的共同开发。在这里,我们使用github提供给我们的免费平台。使用“sudo apt-get install git”安装git。请注意,git只能跟踪文本文件的改动,对于二进制文件没办法跟踪具体信息。然后我们就可以使用“git init”在本地初始化一个git仓库。至于git仓库下文件的增删改动,版本回退等具体操作这里就不赘述了。这里要讲一下如何连接到远程库。首先需要看看我们本机上是否有SSH Key。如果没有则需要运行命令$ ssh-keygen -t rsa -C "[email protected]创建密钥文件。然后在网页上登录我们的github账号,添加SSH Key,将生成的公钥文件复制进去,这样一来就可以实现本机和远程github服务器间的连接了。在我们的github账号上创建一个仓库,然后在本机的仓库目录下执行命令“$ git remote add origin [email protected]:zhougb3/learngit.git”,这里需要替换为你自己的用户名。这样子之后就可以使用push命令上传你的代码到远程github服务器上了。然后在我们的web服务器上,我们就可以通过clone命令从远程库克隆代码了。

7. Linux下用户和权限管理

Linux最优秀的地方便在于它的多人多工环境,而为了让各个使用者拥有较为保密的文件资料,因此文件的权限管理就显得异常重要了。在我们使用Linux的过程中,如果不懂得Linux的基本用户和权限管理,很多时候在执行命令时都会出现问题。特别是在我们搭建web服务器时,没有正确使用好权限配置会导致某些重要文件不可读,从而导致配置失败。Linux一般将用户可存取的身份分为三个类别,分别是owner/group/others,并且三种身份各有read/write/execute等权限。改变文件的权限可以通过使用chmod命令来实现,而改变文件所属的用户信息可以通过chgrp/chown/chown命令来实现。对于目录的读写执行权限需要额外的注意。目录的读权限表明可以对这个目录使用ls目录查看其内容,但只能得到文件名,不能得到详细的信息。write权限表示允许用户改变目录中的内容,即可以在命令中创建、删除、重命名文件,即使用户不是文件的属主。但是不一定有权限能读取文件具体内容。目录的execute权限表示可以使用cd目录进入这个目录(当然前提是能够进入这个目录的上一级目录),进入后可以进行的操作,决定于这个目录中各项内容(即目录中的子目录或文件)的权限设置。此时不能看见文件名,但可以根据文件权限操作文件。请注意,Linux下文件可不可以执行是由权限决定的,我们经常会给文件添加副文件名,但这只是便于我们了解文件的属性。

8. 总结

以上就是在Linux平台上部署web服务器的基本流程,正确高效地部署对于日后网站的长期维护有着极为重要的作用。而对于一个网站开发者而言,熟悉基本的网站部署知识也是很有必要的,有利于开发者写出更为实用高效的代码。正确完成以上部署后,便可以通过网址:www.zhougb3.cn访问我的个人博客。个人博客源码可参考github链接:https://github.com/zhougb3/python_blog。

你可能感兴趣的:(Linux)