在阿里云 ECS CentOS7 上部署基于 MongoDB+Node.js 的博客 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
frogo
V2EX    Node.js

在阿里云 ECS CentOS7 上部署基于 MongoDB+Node.js 的博客

  •  
  •   frogo 2018-07-30 17:25:33 +08:00 5710 次点击
    这是一个创建于 2687 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言:这是一篇教你如何在阿里云的 ECS CentOS 7 服务器上搭建一个个人博客的教程,教程比较基础,笔者尽可能比较详细的把每一步都罗列下来,包括所需软件的下载安装和域名的绑定,笔者在此之前对 Linux 系统也是了解甚少,通过这个过程,自感学到很多东西,我喜欢用文字整理并且分享,也希望因此交到更多的朋友,可能以下教程存在很多描述不清或者措辞不当的地方,还请资深人士给予指出。即使你是小白,也没关系,一步一步按照教程来,可能会遇到一些困难,多百度一下,或者跟我交流,都 OK 的。在教程之前,你需要对整个流程有一个初步全面的了解,主要是安装的软件列表和之间的关系。虽然这个教程是基于我自己开发的一个博客程序(前端工程师最好的全栈开发实践-设计开发属于自己的 nodejs 博客)来部署的,应该说除了 step5 以外,其他步骤都是通用的。当你用优惠券在阿里云购买了一个 ECS 服务器后,你需要选择一个镜像作为系统平台,支持你的程序运行,我这里用阿里自带提供的 Cent OS 7,教程也是以 CentOS 7 为根本。接着你需要在 CentOS 平台上安装一些软件去支撑你的博客,这些软件有以下:

    • WEB 服务器(Nginx or Apache)用来做域名绑定和指向,这里是 Nginx
    • Node.js(支撑你的程序运行)
    • MongoDB(数据库,支撑你的博客数据存储)

    另外你还需要在你的 windows 系统安装一个连接 CentOS 上 MongoDB 数据库的工具 Robomongo 用于测试连接数据库和查看数据库信息,还有一个连接远程 ECS 服务器的工具,我推荐用 MobaXterm。

    Step1. 使用 MobaXterm 终端在 windows 上连接阿里云 CentOS 服务器

    这个终端左侧有一个目录树,你可以用它像 ftp 一样方便的上传,编辑,下载文件,也支持从 windows 拖动到目录下,当然你可以在右侧一直使用命令行,对于敲命令行生疏的朋友是一个帮助。

    alt

    连接很简单,依次点击左上角 Session,弹窗左上角点击 SSH,填写 IP 地址和用户名,点击保存即可,请看下图:

    alt

    Step2. 在 CentOS7 上安装 Node.js

    安装有不同方式,这里用个人觉得比较简单的直接部署方式:

    进入相应目录,下载 bin 包

    打开 MobaXterm 终端,一般是进入到 /usr/local/src/下

    cd /usr/local/src/ 

    https://nodejs.org/en/download/页面找到 Linux Binaries (x86/x64) ,一般是 64bit,右键复制链接地址( https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz)

    wget https://nodejs.org/dist/v8.11.3/node-v8.11.3-linux-x64.tar.xz 

    解压包

    等待下载完成之后,在命令行输入 ls,或者点击 MobaXterm 终端左侧目录树到当前目录下,你会看到 node-v8.11.3-linux-x64.tar.xz 文件,接着用下面的两行命令将 xz 文件先解压成 tar 文件,再解压成文件夹。

    xz -d node-v8.11.3-linux-x64.tar.xz 

    此时在命令行输入 ls,或者点击 MobaXterm 终端左侧目录树到当前目录下可以看到 node-v8.11.3-linux-x64.tar 文件,下面解压 tar 文件。

    tar -xf node-v8.11.3-linux-x64.tar 

    此时在命令行输入 ls,或者点击 MobaXterm 终端左侧目录树到当前目录下可以看到 node-v8.11.3-linux-x64 文件夹

    部署 bin 文件

    确认 node.js 的路径,进入 node-v8.11.3-linux-x64 文件夹下的 bin 目录,cd node-v8.11.3-linux-x64/bin,输入pwd获取当前 node.js 路径,我的是 /usr/local/src/node-v8.11.3-linux-x64/bin,然后分别执行下面两行命令,给 node 和 npm 创建软链接,ln 指令用于创建关联(类似 Windows 的快捷方式)。

    ln -s /usr/local/src/node-v8.11.3-linux-x64/bin /usr/bin/node ln -s /usr/local/src/node-v8.11.3-linux-x64/bin /usr/bin/npm 

    测试

    node -v npm -v 

    如果软链接关联成功,输入以上命令,会输出响应的版本号,至此,nodejs 安装完毕。

    Step3. 在 CentOS7 上安装 MongoDB

    这里仍然用相对最简单的安装方式。

    下载和解压

    打开https://www.mongodb.com/download-center,点击 Community Server 选项卡,切换到 Linux 部分,这里的 version 有很多种版本,我也很困惑该如何选择,因为我是 CentOS 7,后来查了相关资料,选择了 RHEL 7 Linux 64-bit x64,下面是从网上摘抄为什么选择这个版本的依据资料:

    CentOS 和 rhel 最重要的区别是版权问题,redhat 的红帽图标是有版权的,CentOS 被称为 redhat 的社区版,即大家把 redhat 系统里的所有图标都换了就成了 centos 了。再就是 redhat 是有相应的服务的,也是有些收费的服务,centos 没有。其他都一样:使用,性能,稳定性。。。。都一样。 

    复制下载链接https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.0.tgz,然后进入相应目录下载:

    cd /usr/local/src wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.0.tgz 

    之后输入ls,会看到 mongodb-linux-x86_64-rhel70-4.0.0.tgz 已经下载完毕,然后解压文件

    tar -zxvf mongodb-linux-x86_64-rhel70-4.0.0.tgz 

    之后输入ls,会看到 mongodb-linux-x86_64-rhel70-4.0.0 文件夹表示解压完毕

    部署

    我们把 mongodb 直接部署在/usr/local/src/下面,由于文件夹文字太长,我们修改一下文件夹名称为mongodb

    mv mongodb-linux-x86_64-rhel70-4.0.0 mongodb 

    上面命令做的事情是在/usr/local/src下创建一个mongodb文件夹,然后把/usr/local/src下面的mongodb-linux-x86_64-rhel70-4.0.0文件夹下的内容全部移动到mongodb下,并删除mongodb-linux-x86_64-rhel70-4.0.0文件夹。

    创建日志目录和数据文件目录

    cd /usr/local/src/mongodb/ mkdir -p data/logs mkdir -p data/db 

    启动 MongoDB 有 2 种方式,一是直接指定配置参数,二是指定配置文件。这里先介绍创建配置文件,如果你熟悉 linux 的 vim 命令,可以在命令行编辑,如果不熟悉,可以按照如下的方式,先在你的 windows 系统桌面上准备一个文件 mongodb.conf,填写下列项:

    port=27899 #端口号(默认的端口号是 27017,这里修改也是为了安全性) dbpath=/usr/local/src/mongodb/data/db #数据目录(指向刚才创建的数据文件目录) logpath=/usr/local/src/mongodb/logs/mongodb.log #日志目录(指向刚才创建的日志目录,并指定 mongodb.log 文件名,系统会自动创建) fork=true #设置后台运行 logappend=true #日志输出方式(写日志的模式:设置为 true 为追加。默认是覆盖。如果未指定此设置,启动时 MongoDB 的将覆盖现有的日志文件。) auth=true #开启认证(默认是 flase,不需要认证的,这里开启认证是为了安全性) 

    然后通过 MobaXterm 直接拖到/usr/local/src/mongodb/目录下。

    启动和终止

    进入/usr/local/src/mongodb/bin/目录下,启动 MongoDB

    cd /usr/local/src/mongodb/bin/ ./mongod --config ../mongodb.conf 

    如果启动成功,你会看到以下内容:

    2018-07-11T17:45:05.312+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none' about to fork child process, waiting until server is ready for connections. forke process: 12674 child process started successfully, parent exiting 

    你可以通过ps aux |grep mongodb命令查看 mongodb 进程是否开启

    root 12674 1.6 3.6 1084292 69128 ? Sl 17:45 0:01 ./mongod --config ../mongodb.conf root 12705 0.0 0.0 112660 964 pts/0 R+ 17:46 0:00 grep --color=auto mongodb 

    第一个就是刚刚启动的进程,12674 是进程 ID,如果你想终止进程,可以用kill -9 12674来终止。

    进入终端操作数据库

    cd /usr/local/src/mongodb/bin/ ./mongo --port=27899 

    这里说明一下,因为你的 conf 配置文件的端口改成了 27899,所以这里启动终端要指定端口号,如果是 27017 默认端口号,则不需要指定,直接./mongo就可以进入交互控制台,接着你输入show dbs,就会看到以下默认集合:

    > show dbs admin 0.000GB config 0.000GB local 0.000GB 

    假如你在本地的 windows 环境安装 MongoDB,通常我们测试是否开启 MongoDB 的办法是直接在浏览器输入http://127.0.0.1:27017去查看,但是 linux 系统并不方便,我们还可以用一个命令去查看是否开启:

    netstat -anpt|grep 27899 27899 是 MongoDB 的进程端口号 

    如果正常开启,你会看下以下的信息,注意这里的 ip 地址是 0.0.0.0,而不是 127.0.0.1,这是因为我在 mongodb.conf 文件里面加了bind_ip = 0.0.0.0,代表外网也可以连接这个阿里云的 Mongodb,这里牵扯很多内容,具体在下面讲。

    tcp 0 0 0.0.0.0:27899 0.0.0.0:* LISTEN 12674/./mongod 

    从外网访问阿里云的 MongoDB

    通常情况下,你的 MongoDB 成功启动后,你在浏览器端输入你的 ECS 服务器的公网 IP 再加上你自己的 MongoDB 的端口号(例如: http://47.98.xxx.152:27899 ),可以看到It looks like you are trying to access MongoDB over HTTP on the native driver port.信息,如果访问不到,可能有以下三种情况:

    你的阿里云 ECS 服务器的安全组没有设置对外网开放

    阿里云的服务器为了安全,默认的禁止外网访问,早期的 ECS 服务器是可以访问的,最新的 centos7+版本没有开启安全组,你需要在阿里云后台的安全组设置规则,具体操作请在阿里云后台提交工单咨询,下面是我的咨询结果,供大家参考。

     ****** : 服务器 IP:47.98.xxx.152:27899 问题描述 : 我已经安装了 mongodb,并且启动了,但是我在外网访问不了 47.98.xxx.152:27899,请帮忙排查 2018-07-10 15:20:34 工程师 62134 号 : 您好,我们已经收到您提交的问题,正在为您查看,请稍等 2018-07-10 15:22:29 工程师 62134 号 : 尊敬的客户您好,根据您的反馈,我们将问题定义如下: [问题总结] 实例名 ID:i-bp1ixbos2x1xxxxxxx 客户端 IP 地址 :47.98.xxx.152 出现问题时间段 : 2018-07-10 15:20:34 问题描述 :我已经安装了 mongodb,并且启动了,但是我在外网访问不了 47.98.xxx.152:27899 接下来,我们将对上述问题进行分析排查,如果针对上述问题定义及范围有任何疑问,欢迎随时联系我们。 [处理意见] 您好: 请您在安全组添加一条允许 27017 端口的策略。 添加安全组规则请您参考: https://help.aliyun.com/document_detail/25471.html?spm=5176.11065259.1996646101.searchclickresult.5bc177d5XwTU1y 
    防火墙没有关闭
    systemctl status firewalld 查看防火墙状态 systemctl start firewalld 开启防火墙 systemctl stop firewalld 关闭防火墙 

    以上是 CentOS 的防火墙命令,你可以输入systemctl status firewalld查看防火墙状态,如果防火墙是关闭的,你会看到下列信息:

    ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled) Active: inactive (dead) 这里表示防火墙是关闭的状态 Docs: man:firewalld(1) 

    如果是开启状态,Active 一栏是Active: active (running) since Thu 2018-07-12 11:18:45 CST; 2s ago

    如果你并不希望关闭防火墙,但是希望仍然能打开 MongoDB 的端口,你可以单独开启 MongoDB 端口,比如你的 MG 端口是 27899,你可以使用下列命令永久打开这个端口:

    firewall-cmd --zOne=public --permanent --add-port=27899/tcp; firewall-cmd --reload 

    成功后会显示两个 success

    [root@frogo2 bin]# firewall-cmd --zOne=public --permanent --add-port=27899/tcp; firewall-cmd --reload success success 

    地方法针对端口,适用所有端口的开启。如果你想知道你永久打开了哪些端口,你可以通过以下命令:

    firewall-cmd --list-ports 
    MongoDB.conf 文件bind_ip参数应该设置为0.0.0.0

    在终端输入命令行netstat -anpt|grep 27899,如果显示的 IP 地址是 127.0.0.1,说明 MongoDB 端口只对本地开放,需要将 MongoDB.conf 文件增加bind_ip=0.0.0.0,表示外网可以访问本地的 MongoDB

    port=27899 #端口号(默认的端口号是 27017,这里修改也是为了安全性) dbpath=/usr/local/src/mongodb/data/db #数据目录(指向刚才创建的数据文件目录) logpath=/usr/local/src/mongodb/logs/mongodb.log #日志目录(指向刚才创建的日志目录,并指定 mongodb.log 文件名,系统会自动创建) fork=true #设置后台运行 logappend=true #日志输出方式(写日志的模式:设置为 true 为追加。默认是覆盖。如果未指定此设置,启动时 MongoDB 的将覆盖现有的日志文件。) auth=true #开启认证(默认是 flase,不需要认证的,这里开启认证是为了安全性) bind_ip=0.0.0.0 #对外开放端口(默认是 127.0.0.1 ) 

    修改完 mongodb.conf,先 kill -9 掉原先的 mongodb 进程,然后进入 bin 目录,重启 mongodb。

    cd /usr/local/src/mongodb/bin/ ./mongod --config ../mongodb.conf 

    此时在netstat -anpt|grep 27899 会看到 IP 地址改成了 0.0.0.0,然后在浏览器端输入你的 ECS 服务器的公网 IP 再加上你自己的 MongoDB 的端口号去测试是否成功。

    Step4.给 MongoDB 开启密码访问

    MongoDB 默认是没有开启安全认证的,对于部署在云上就显得及其不安全,下面我们为 mongodb 的 admin 数据库创建用户。

    MongoDB 数据库有以下特点:

    1,没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。2,切换到 admin 数据库,添加的账号才是管理员账号。3,用户只能在用户所在数据库登录,包括管理员账号。4,管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在 admin 数据库认证后才可以。这一点比较特别。

    首先 cd 到 bin 目录:

    cd /usr/local/src/mongodb/bin/ ./mongo --port=27899 进入 MongoDB 交互台,如果是默认是 27017,则不需要加上后面的--port 参数 在控制台输入 show dbs 你会看到以下数据库,blog 是你刚才创建的 > show dbs admin 0.000GB blog 0.000GB config 0.000GB local 0.000GB 使用 use admin 切换到 admin 数据库 > use admin switched to db admin 使用 db.createUser()函数在 admin 数据库下创建用户,老版本的 MongodDB 是 db.addUser()函数,这里注意一下,因为网上很多没有指明版本 > db.createUser({user:"root",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]}) Successfully added user: { "user" : "root", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] } 我们看到已经成功在 admin 下创建了一个用户名为 root,密码为 123456 的用户 userAdminAnyDatabase:授予在所有数据库上管理 User 的权限-意思是可以在所有的数据库管理 User,但是没有操作权利,只有你在那个数据库验证了 User,然后才能去操作数据库的读写。(如果不能白,可以百度 MongoDB 的 role 方面知识) 

    现在我们成功的创建了用户和密码,下面请将 mongodb.conf 文件中的开启安全认证项修改为 true

    cd /usr/local/src/mongodb 

    用 vim 命令或者通过 MobaXterm 终端直接修改文件,文件最后呈现以下样子

    # idae - MongoDB config start # 设置数据文件的存放目录(根据实际的 db 文件夹的路径填写) dbpath = /usr/local/src/mongodb/data/db # 设置日志文件的存放目录及其日志文件名(根据实际的 logs 文件夹的路径填写) logpath = /usr/local/src/mongodb/data/logs/mongodb.log # 设置端口号(默认的端口号是 27017 ) port = 27899 # 设置为以守护进程的方式运行,即在后台运行 fork = true # 日志 logappend=true # 开启认证 auth = true # 开启远程访问 bind_ip = 0.0.0.0 

    然后找到 MongoDB 进程,先 kill 掉,再重启

    [root@frogo2 mongodb]# ps aux |grep mongodb root 22083 0.2 4.5 1078336 85724 ? SLl Jul19 2:38 ./mongod --config ../mongodb.conf root 23111 0.0 0.0 112660 964 pts/1 R+ 11:07 0:00 grep --color=auto mongodb [root@frogo2 mongodb]# kill -9 22083 [root@frogo2 mongodb]# cd bin [root@frogo2 bin]# ./mongod --config ../mongodb.conf 2018-07-20T11:08:32.841+0800 I CONTROL [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none' about to fork child process, waiting until server is ready for connections. forked process: 23115 child process started successfully, parent exiting 

    然后再次打开 MongoDB 交互台,使用 show dbs 命令会报出未验证的提示:

    ./mongo --port=27899 进入 MongoDB 交互台 > show dbs 2018-07-20T11:09:51.770+0800 E QUERY [js] Error: listDatabases failed:{ "ok" : 0, "errmsg" : "command listDatabases requires authentication", "code" : 13, "codeName" : "Unauthorized" } : _getErrorWithCode@src/mongo/shell/utils.js:25:13 Mongo.prototype.getDBs@src/mongo/shell/mongo.js:65:1 shellHelper.show@src/mongo/shell/utils.js:865:19 shellHelper@src/mongo/shell/utils.js:755:15 @(shellhelp2):1:1 

    我们可以看到结果显示失败未验证,说明我们刚才开启 MongoDB 密码登录成功,下面我们需要验证,首先切换到 admin 数据库下,也就是说,验证步骤必须在 admin 数据库下面进行

    > use admin switched to db admin > show collections Warning: unable to run listCollections, attempting to approximate collection names parsing connectionStatus > db.auth("root","123456") 1 > show dbs admin 0.000GB blog 0.000GB config 0.000GB local 0.000GB 

    db.auth()函数是验证方法,可以看到显示结果 1 表示成功验证,这个时候我们再 show dbs,就成功显示了。 这个时候我们就可以对数据库任意操作了。

    现在我们尝试用 Robomongo 工具在外部连接 MongoDB 数据,你需要在 Authentication 一栏填写数据库名和用户名密码

    alt

    Step5.在 CentOS7 上部署 node.js BLOG 程序

    1.我们把 blog 文件放在 home 目录下,cd 到 home 下面,clone 你的 blog 代码到目录下(或者打开 MobaXterm 终端左侧的目录树,把 blog 拖到 home 目录下)

    安装 node 依赖包

    npm install 

    修改 config.js 文件中的数据库连接

     //mongodb 配置信息 mongodb: { uri: 'mongodb://root:123456@localhost:27899/blog', options: {} }, 

    运行node app.js,如果成功,会提示服务已经启动,端口号:7000

    安装 forever 守护进程,以保证 node 可以持续工作。

    npm install forever -g 全局安装 

    输入forever如果报错bash: forever: command not found,则需要建立一个软连接:

    找到 forever 安装路径npm list -g --depth 0

    [root@frogo2 ~]# npm list -g --depth 0 /usr/local/src/node-v8.11.3-linux-x64/lib ├── [email protected] └── [email protected] 

    /usr/local/src/node-v8.11.3-linux-x64/lib/node_modules/forever就是安装路径,你也可以打开 MobaXterm 终端去查看它的位置,然后使用ln -s建立软连接

    ln -s /usr/local/src/node-v8.11.3-linux-x64/lib/node_modules/forever/bin/forever /usr/bin/forever 

    再次输入forever 就不会报错command not found 了,下面是 forever 的命令

    //用 forever 启动 forever start xxx.js

    //重启 forever restart xxx.js

    //查看进程 forever list

    //停止 forever stop xxx.js

    我们可以用以下命令启动 app.js

    cd /home/blog/ forever start app.js 

    出现以下信息表示成功启动,这个时候,你关掉了 MobaXterm 终端也没关系。

    warn: --minUptime not set. Defaulting to: 1000ms warn: --spinSleepTime not set. Your script will exit if it does not stay up for at least 1000ms info: Forever processing file: app.js 

    然后用阿里云服务器公网的 IP+7000 端口号,就可以访问到该 blog 的页面了。

    Step6.在 CentOS7 上安装 Nginx 服务器并绑定域名到博客

    阿里云的 CentOS7 默认是没有安装 WEB 服务器的,基本主流的 WEB 服务器就是 apache 和 nginx,如果安装了 WEB 服务器,80 端口默认是打开的,你可以用 netstat -an|grep :80 查看是否安装了 WEB 服务器。

    在这里,我推荐用 nginx,因为轻量级,比较简单,具体安装教程也相对容易,请参考教程 https://www.cnblogs.com/jerrypro/p/7062101.html。

    安装完 nginx 以后进入/usr/local/nginx/sbin/下执行./nginx启动 WEB 服务,这个时候你输入阿里云 ECS 的公网 IP 看到粗体 Welcome to nginx!字样信息表示安装和启动 nginx 成功。由于博客的程序端口是 7000,而默认 web 服务器是 80,在这里你需要在 ngnix 的 conf 文件设置一下代理 ,首先进入到/usr/local/nginx/conf/目录下,打开目录下的 ngnix.conf 文件,找到 server{}代码块,在 location /{}里面增加 proxy_pass http://127.0.0.1:7000;,这个地址是指向 blog 程序的,另外把你需要绑定的域名写在 server_name 后面,其他的项被注释的你可以自由配置。

    server { listen 80; #server_name localhost; server_name www.frogo.me;(需要绑定的域名) #root /home/frogo; #charset koi8-r; #access_log logs/host.access.log main; location / { proxy_pass http://127.0.0.1:7000;(指向 7000,就是你 node.js 博客程序的端口) #root /home/frogo; #index index.html index.htm; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } # proxy the PHP scripts to Apache listening on 127.0.0.1:80 # #location ~ \.php$ { # proxy_pass http://127.0.0.1; #} # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 # #location ~ \.php$ { # root html; # fastcgi_pass 127.0.0.1:9000; # fastcgi_index index.php; # fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name; # include fastcgi_params; #} # deny access to .htaccess files, if Apache's document root # concurs with nginx's one # #location ~ /\.ht { # deny all; #} } 

    然后 cd 到/usr/local/nginx/sbin/下面,执行 nginx -s reload,即可成效,这个时候剩下最后一件事,就是将你的域名的 A 记录绑定到你的 ECS 服务器的公网 IP 上面。不久以后,当你访问域名,即可看到你的 blog 程序。

    2 条回复    2018-07-30 22:10:54 +08:00
    yuanfnadi
        1
    yuanfnadi  
       2018-07-30 19:05:45 +08:00 via iPhone
    docker-compose 了解一下
    poorcai
        2
    poorcai  
       2018-07-30 22:10:54 +08:00
    收藏一下,多谢
    关于     帮助文档     自助推广系统/a>     博客     API     FAQ     Solana     5715 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 27ms UTC 02:48 PVG 10:48 LAX 18:48 JFK 21:48
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86