对于一个网站开发者而言,在经历了艰难的开发过程后,要将网站推向给用户,必须要做的一步便是部署我们的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/id_rsa.pubuser@192.168.1.100:/home/user/”。这里“.ssh/id_rsa.pub”是公钥文件的路径,“user@192.168.1.100”是远端服务器的ip地址和用户名。这里我们又回到了远程机器上,可以发现已经有了公钥文件,这时候我们在远端服务器以下命令“mv/home/user/id_rsa.pub/home/user/.ssh/authorized_keys”,如果没有相应的文件夹则要提前建立。这样子,一切配置就算完成了,我们在远端服务器执行以下命令来开启ssh服务“service sshd start”
然后我们回到本地机器,通过执行命令“ssh user@192.168.1.100”我们就可以成功连接上远端服务器了。这时候我们就可以在本地使用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 "youremail@example.com创建密钥文件。然后在网页上登录我们的github账号,添加SSH Key,将生成的公钥文件复制进去,这样一来就可以实现本机和远程github服务器间的连接了。在我们的github账号上创建一个仓库,然后在本机的仓库目录下执行命令“$ git remote add origin git@github.com: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搭建web服务器相关推荐

  1. Linux搭建web服务器---静态网站

    搭建web服务器 三种实例: 1.多ip多网站搭建 2.多端口多网站搭建 3.多域名多网站搭建 实例1.多ip多网站搭建 前提配置: 添加多ip #nmcli connection modify en ...

  2. linux搭建web服务器原理,【LINUX】linux搭建web服务器

    linux httpd 假设服务器地址为192.168.80.20/241.将准备安装的httpd软件包共享给everyone, (1)在linux上mount.cifs  //真机IP地址/共享文件 ...

  3. linux搭建web服务器论文答辩开场白,基于ARM9嵌入式Linux系统Web Server服务器计算机设计与科学专业毕业答辩.ppt...

    基于ARM9嵌入式Linux系统Web Server服务器计算机设计与科学专业毕业答辩 2009-5-31 计算机科学与技术专业 2009届本科生毕业论文答辩 基于ARM9的嵌入式Linux系统的We ...

  4. linux搭建乐网服务器,教你linux搭建web服务器

    在我本机配置时间不长,不过花了好长的时间写了份配置文档,和大家分享一下,希望对大家有用 LINUX发行版本:Fedora 14 , Apache .2.2 安装就不说了!依然采用rpm包安装方式 ,下 ...

  5. Linux Java Web 服务器搭建之tomcat安装

    Linux Java Web 服务器搭建之tomcat安装 一 Tomcat 简介 Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是 ...

  6. arm Linux 低成本方案,参赛作品《低成本基于ARM+Linux平台搭建web服务器的物联网学习板》...

    [报名阶段需要填写的内容] 1. 参赛者姓名(必填项): 王徕泽 2. 单位或学校名称(选填项): 徕泽电子工作室 3. 当前职务或职称(选填项): 室长 4. 参赛作品的名字(必填项): 低成本基于 ...

  7. Linux - nginx 搭建 Web服务器

    前言 在之前,已经对 nginx 有过基本的介绍. 现在尝试利用 nginx 来 搭建一个 web服务器. 正文 1.什么是 Web 服务器? Web服务器也称为WWW (WORLD WIDE WEB ...

  8. [Linux CentOS7] Web服务器搭建和设置

    [Linux CentOS7] Web服务器搭建和设置 题目 基本网络配置 问题1 问题2 问题3 问题4 问题5 环境: VMware workstation14 CentOS 7 题目 请完成以下 ...

  9. Linux之搭建web服务器

    文章目录 题目1 题目2 题目1 1.要求搭建web服务器通过端口8909能够访问到网页内容为"小胖,你咋这么胖呢!" [root@localhost html]# vim /et ...

最新文章

  1. intellij idea中去除@Autowired注入对象的红色波浪线提示
  2. Codeforces 675C Money Transfers (思维题)
  3. 对于一个IT宅男先脱光再说
  4. ThinkPHP5.0中Redis的使用和封装
  5. 解读MD07中可供货天数的计算
  6. datax mysql replace_DataX-MySQL(读写)
  7. JS动态添加span等标签
  8. 听说你开发.NET还在用VS,小哥哥给你推荐全平台的Rider
  9. 火狐浏览器所有的快捷键
  10. 如何理解const char*, char const*, char*const等
  11. php核心语法,PHP核心语法总结
  12. python下载numpy库_安装numpy库
  13. Linux终端显示图像
  14. 转载:向 XPath 中添加自定义函数
  15. easyui combobox自动搜索提示功能
  16. Navicat Premium 注册机 激活报错
  17. 网页游戏开发基础——网页基础知识
  18. c语言机器人跑三角形图形,一种三角形物件运输机器人的制作方法
  19. WEB测试工具---死链接检测工具xenu
  20. html中图片左右切换,超简单的图片左右切换滑动

热门文章

  1. Python中输出不换行的方法
  2. 计算机毕业设计Java仓库管理系统(源码+系统+mysql数据库+lw文档
  3. echarts legend 排列问题
  4. SpringBoot事务注解@Transactional
  5. Zabbix实现钉钉群告警
  6. 交叉熵函数cross_entropy与归一化指数函数softmax
  7. 《js中原型和原型链的深入理解》的笔记
  8. python3.4判断闰年,Python 判断闰年
  9. 【求职】拼多多 C++方向面经
  10. ctfshow愚人节欢乐赛wp(部分)