🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

服务(草稿)

准备

在 《工具》(http://ninghao.net/blog/3502)这个手册里介绍了工作中常用的一些工具,推荐先看一下,然后练习使用这些工具。

虚拟机

在本地电脑上可以使用 Vagrant + Virtualbox 去创建一台 Linux 系统的虚拟机,我会用 CentOS 系统作演示。下面我们会在这台虚拟机上去学一下命令行的基础,了解文件与目录的权限,然后在上面搭建一个可以运行一般的 PHP 网站应用的 LEMP 环境。

命令行

熟悉使用命令行工具是必备的技能,以后你一定会遇到一些情况必须要在命令行界面下完成。推荐在本地创建一台 Linux 虚拟机,然后练习一下常用的命令,目的是熟悉在命令行界面下工作。

  1. pwd:知道自己在哪儿。
  2. ls:知道在哪里都有什么。
  3. cd:改变自己的位置。
  4. mkdir:创建需要的目录(文件夹)。
  5. mv:移动文件与目录。
  6. cp:复制文件与目录。
  7. rm:删除文件与目录。

权限

理解 Linux 系统的文件与目录的权限太重要了,在搭建服务的时候遇到的很多问题都跟这个权限有关。文件与目录会属于一个用户跟用户组。比如 wanghao 这个用户创建了一个目录叫 secert,那这个目录的拥有者与用户组都应该是 wanghao ,我们可以设置文件与目录的三个级别的权限,分别是拥有者,用户组,还有其它人。一般目录的拥有者都可以往这个目录里写入一些东西,比如创建新的文件。

xiaoxue 这个用户对于 wanghao 创建的 secert 目录来说,属于其它人,一般目录对于其它人来说是没有写入权限的。所以 xiaoxue 不能往 secert 这个目录里存储或者创建文件。现在 wanghao 想让 xiaoxue 可以往 secert 目录里写入文件,可以使用管理员的权限,把 xiaoxue 加入到 wanghao 这个用户组里,然后设置 secert 目录的用户组的权限,允许用户组里的用户可以写入。

创建用户,设置用户的密码,设置文件与目录的权限,修改文件与目录的拥有者与用户组,只需要了解几个命令,理解权限的意思,就会减轻很多痛苦。

LEMP

LEMP 是运行 PHP 应用的一套环境。

  • L = Linux,是操作系统,Linux 有很多发行版本,比如 CentOS,Ubuntu ,随便选择自己喜欢的一个,我暂时会使用 CentOS。不要因为不了解 Linux 而去选择 Windows 作为服务器的操作系统。
  • E = NGINX,E 取的是 NGINX(Engine x) 的读音。它是一款 Web 服务器,用户在浏览器上打开一个地址,接待这个用户的就是 Web 服务器,它会为用户的浏览器提供需要的资源。
  • M = MariaDB / MySQL,数据库管理系统。网站应用的文章,用户这些内容都是在数据库里统一管理的。你创建了一篇文章,网站应用就会把文章的不同部分的内容放到数据库的不同的表里面存储起来。用户在请求查看文章的时候,网站应用会从数据库里查询出文章上要显示的内容。
  • P = PHP ,解释 PHP 语言用的工具。如果你的网站应用使用的是 PHP 这种语言写的,那在服务器上就需要安装 PHP ,这样才能正确的处理对 PHP 文件的请求。

NGINX 并不懂 PHP 语言,所以它需要一个中间人,我们会用到 PHP-FPM。也就是如果 NGINX 发现有用户要请求的是 PHP ,它就会把请求交给 PHP-FPM,PHP-FPM 处理好请求的意思,会把解释之后的结果返回给 NGINX ,NGINX 最终会把处理好的结果返回给用户的浏览器。

任务

  1. 在本地电脑上使用 Vagrant + Virtualbox 的方式搭建一套 LEMP 环境,平时的设计与开发工作可以在本地进行。
  2. 购买一台云服务器,在上面搭建一套一模一样的 LEMP 环境。

参考:《LEMP 网站应用运行环境》(http://ninghao.net/course/2522

搭建本地开发环境

无论如何你都需要在本地搭建一套开发环境,这样可以方便的实践你的想法。放弃 WAMP,MAMP,XAMPP,我们的开发环境要尽量接近应用真正运行的生产环境,比如使用一样的操作系统,一样版本的软件,一样的配置。这样你才能尽量保证自己在本地开发的东西放到生产环境上运行的时候少出意外。

我推荐使用 Vagrant + Virtualbox 的方式搭建本地的开发环境,Virutalbox 是虚拟机软件,你可以在本地创建任何操作系统的虚拟机,我们的环境需要的是 Linux ,比如 CentOS 。Vagrant 是一个管理虚拟机的软件,使用它可以方便的为项目创建虚拟机。为一个项目创建一台虚拟机只需要几个步骤:

# 1. 为项目创建目录
mkdir lemp-stack
cd lemp-stack

# 2. 为项目创建一种虚拟机
vagrant init chef/centos-7.0

# 3. 编辑 vagrantfile,配置虚拟机的网络

# 4. 启动虚拟机
vagrant up

# 5. 登录
vagrant ssh

注意事项:权限

ssh 到 Linux 系统的虚拟机以后,系统的 /vagrant  这个目录与我们本地电脑上的项目所在的目录是同步的,也就是你可以直接使用本地电脑上的编辑器打开项目的目录,然后去编辑里面的文件,这些文件在虚拟机上的位置是 /vagrant 。注意这个目录的拥有者与用户组都是 vagrant ,而且是不能修改的。

配置 LEMP 环境的时候,需要修改一些文件与目录的权限,一般你需要保证 PHP-FPM 这个服务对某些目录来说拥有可以写入的权限,这样你才能保证网站应用可以正常运行,或者有权限上传文件。默认运行 PHP-FPM 的用户是 php-fpm,但是我们无法修改 /vagrant 目录或者它里面的文件与目录的权限,所以一般我们会去修改运行 PHP-FPM 这个服务的用户,可以把它改成 vagrant 。

注意事项:虚拟主机名

修改本地电脑上的 hosts 文件,我们可以虚拟一些主机名,这样在配置 NGINX 服务的时候,可以为网站应用去绑定这些虚拟的主机名,比如 dev.ninghao.org,local.ninghao.org,wp.ninghao.org 等等。

hosts 文件的位置:

  • Windows :Windows\System32\drivers\etc\hosts
  • OSX:/etc/hosts

比如我要虚拟的主机名是 dev.ninghao.org,让它指向在本地的虚拟机的 IP 地址,假设 IP 地址是 192.168.33.151,可以在 hosts 文件里添加下面这条记录:

192.168.33.151 dev.ninghao.org

现在我们就可以在 IP 地址是 192.168.33.151 的这台虚拟机上运行的 NGINX 的配置文件里,使用 dev.ninghao.org 这个主机名了,也就是你可以让这个主机名指向一个在虚拟机上运行的网站,然后你在本地的浏览器上打开这个主机名的时候,就会访问你虚拟机上的某个网站了。

搭建生产环境

生产环境就是网站应用正式运行的环境,你的网站应用在本地已经做的差不多了,在正式上线之前需要去给它搭建一个生产环境。你至少需要购买一台云服务器,然后在上面搭建好运行应用需要的环境。国内有很多地方提供云服务,宁皓网一直运行在阿里云上,这也是我使用过的唯一的云服务,所以只能推荐它了,我还是非常满意阿里云的产品。

阿里云

阿里云有很多产品,我们可以根据自己的需求去搭建使用这些产品。下面介绍几个常用的产品。

ECS

弹性云计算服务,也叫云服务器。把它想成是在互联网上的一台服务器。你可以购买服务器的配置还有带宽,在上面可以搭建 LEMP 环境去运行我们的网站。

参考:《阿里云 ECS:Linux 服务器》(http://ninghao.net/course/1584

RDS

关系数据库服务。把它想是一台安装了 MariaDB / MySQL 数据库管理系统的服务器。你可以为网站应用购买一个 RDS ,在上面创建一个数据库,然后让网站应用使用这个在 RDS 上的数据库。

参考:《阿里云 RDS:关系数据库》(http://ninghao.net/course/3594

SLB

负载均衡服务。它可以把用户的请求分发给后端的云服务器去处理,也就是有了 SLB ,你的网站应用可以由多台服务器为用户提供服务。如果其中有一台服务器挂了,SLB 会把用户带到其它的健康的云服务器上。

参考:《阿里云 SLB:负载均衡》(http://ninghao.net/course/3604

单一服务器

需求:一台 1 核 CPU,2G 内存,2M 带宽的 ECS 云服务器,价格:1310 / 年

费用:1310 / 年

网站应用的生产环境,最最简单的就是使用一台服务器提供所有的服务,比如 Web 服务,数据库服务等等。就像我们在本地创建的虚拟机上搭建的 LEMP 环境一样。

Web 服务与数据服务分开

需求:

  1. 一台 1 核 CPU,1G 内存,2M 带宽的 ECS 云服务器,价格:1080 / 年
  2. 一台 240M 内存的 RDS,价格:430 / 年

费用:1510 / 年

我们可以把 Web 服务与数据服务分开,也就是你在一台 ECS 服务器上只安装 Web 服务,还有 PHP 。然后网站应用需要的数据服务单独放在一台 RDS 实例上。

负载均衡

需求:

  1. 两台 1 核 CPU,1G 内存,1M 带宽的 ECS 云服务器,价格:1360 / 年
  2. 一台 240M 内存的 RDS,价格:430 / 年
  3. 一台 2M 带宽的 SLB ,价格:876 / 年

费用:2666 / 年

用一台负载均衡,把请求均衡的分发给后端的两台云服务器,这两台云服务器上的网站应用使用同一个 RDS 数据库。

评论

开发环境的新功能如何发布到生产环境?怎样做到同步功能时不覆盖生产环境用户访问产生的数据?

好问题啊。如果您是想转移代码的话,比较容易,在本地做版本控制,推送到远程仓库,再从远程仓库到生产环境上。如果新功能需要修改数据库,比较难做,Laravel 与 Drupal 8 都可以把数据库的修改转移成代码,这样就容易了。但是 Drupal 7 与 WordPress 比较难做。

数据库同步确实是比较麻烦的问题。

对于Drupal 7和Drupal 8,如果用drush sql-sync来全面同步不同环境的数据库(比如把生产环境的内容同步到开发环境),操作起来很方便吗?

某些情况下,应该是可行的,比较数据不大的网站。使用 Drupal 8 的配置管理应该是更好的方法,它可以把在数据库里的配置保存成代码,然后在别的地方可以导入这些配置。

嗯,同步配置的时候,还是应该利用Drupal 8的特长,把配置转换为代码,然后再同步代码。
很多内容类的网站会在生产中产生很多内容,需要同步到开发环境测试。这个需求,我听说过drush sql-sync;用feeds也许是另一个方法,不知道best practice的流程是怎样的。

我用的Drupal7
我现在真的很痛苦,生产环境一直在使用 每天都有数据增加,但是我又想更改或添加功能,无从下手啊
难道要开维护模式 停用 然后更改后再上传吗?

drupal 7使用feature模块上传新的设置的,当然操作起来没有drupal 8方便。

皓哥不介绍一下Meteor ?

嘿嘿,暂时还没有打算 :)

看大神聊天毫无头绪啊,哈哈哈哈

哈,这是必备技能,给自己一点理解的时间,很快就会了。

微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点