Meteor部署和优化

Meteor部署和优化

这几天用Meteor + React写了一个电子商务网站, 整个过程非常迅速. 反倒是上线和上线之后的优化用了一些时间. 在这里记录一下.

上线

上线用的meteor-up, 只有简单几步:

meteor up配置了我阿里云的服务器ip和密码
godaddy上配置了DNS的IP指向阿里云IP
阿里云的安全策略, 配置开启80端口
mup deploy打包docker发布一气呵成

优化

因为这个网站一共只有200多个商品, 所以我没有做分页, 只是在header加了filter. 这样当产品加载完毕后, 整个网站的使用会非常流畅. 但是就是这个加载过程, 耗时太长. 所以继续优化

本地缓存

用localforage缓存所有的商品信息, 这样当用户主动刷新页面或进入网站时, 先从本地缓存读取, 然后当商品信息从服务端加载完毕后, 再使用服务端数据重新渲染同时更新本地缓存.

长列表优化

200多个产品, 虽然每个都只有一个40多k的小图片, 但是全部加载下来也比较慢, 而且长列表也比较消耗资源. 首先尝试了React Lazyload的库, 效果还可以. 然后尝试了react-list库, 首次加载20个item, 边沿还有400px时触发下一个20个item的加载, 这样即使快速滑动也感觉不到卡顿.

CDN加速

经过以上优化后, 第一次加载后, 整个网站使用非常流畅快速, 但是首次加载依然缓慢. 通过chrome network查看, meteor的js文件加载解析的速度非常慢(后来才知道一个主要原因是我之前的VPS带宽只有1M), 所以尝试了CDN加速. 尝试了七牛, 阿里云和360云加速, 都需要备案. 最后尝试了CloudFlare, 是国外的CDN但是号称和百度有合作, 可以加速国内的访问. 要去域名服务提供商(我的是godaddy), 把nameservers改成CloudFare的.

npm包CDN加速

将react和antd之类的静态js, 从npm引入的方式, 改成cdn引入, 因为我的目标用户主要是国内, 所以用了bootcdn. 引入这些包需要多调试几次, 因为他们还可能依赖其他的包

以下是我的main.html中引入的js

<script src="https://cdn.bootcss.com/lodash.js/4.17.5/lodash.min.js"></script>
<script src="https://cdn.bootcss.com/react/16.3.1/umd/react.production.min.js"></script>
<script src="https://cdn.bootcss.com/react-dom/16.3.1/umd/react-dom.production.min.js"></script>
<script src="https://cdn.bootcss.com/babel-standalone/6.26.0/babel.min.js"></script>
<script src="https://cdn.bootcss.com/react-router/4.2.0/react-router.min.js"></script>
<script src="https://cdn.bootcss.com/moment.js/2.22.0/moment.min.js"></script>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.bootcss.com/bootstrap/4.0.0/js/bootstrap.min.js"></script>
<script src="https://cdn.bootcss.com/antd/3.4.0/antd.min.js"></script>

注意, 比如antd改成这种方式后, 就需要改变引入方式了. 其他momentjs, lodash之类的, 直接使用即可. 其实我觉得这种方式非常方便, 省着总是import.
import { Button } from 'antd' 改成 const { Button } = antd;

HTTPS

用Meteor up不要太简单, 只需要配置proxy block即可.用let's encrypt服务, 直接给个email地址, 就可以使用它们的ssl证书了.

只是需要注意阿里云的安全策略需要增加对https端口443的支持

proxy: {
    domains: 'xx.com',
ssl: {
    letsEncryptEmail: 'xxx@gmail.com',
  }
}

服务器选择

之前使用阿里云的海外服务器, 不需要备案, 但是后来才发现带宽只有1M, 根本不够用, 加带宽又很贵. 现在改成了DigitalOcean在san francisco的VPS, 据说在国内访问比较快. 结果速度提升很多, 一个月只要5美元. 看到的朋友想试试可以点我的推荐链接http://www.digitalocean.com/?refcode=fbc139ecc02f
, 能够得到10美元的优惠券

使用自己的MongoDB服务器

因为Meteor up打包的docker, 不支持从远程访问. 这样对于运维来说就很不方便. 所以我决定在相同的服务器上搭建一个MongoDB服务器.
第一步 将 MongoDB Repository 地址加入到yum配置中
sudo vi /etc/yum.repos.d/mongodb-org.repo添加

[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

第二步 安装
sudo yum install mongodb-org
然后启动
sudo systemctl start mongod
常用命令

sudo systemctl start mongod
sudo systemctl reload mongod
sudo systemctl stop mongod
sudo systemctl status mongod
sudo tail /var/log/mongodb/mongod.log 查看日志
`sudo systemctl enable mongod` 启动运行

安全设置

mongo
use admin

db.createUser(
  {
    user: "AdminSammy",
    pwd: "AdminSammy'sSecurePassword",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
  }
)

然后vi /etc/mongod.conf如下修改

security:
  authorization: "enabled"

重启数据库后生效
现在开始登录数据库就需要用户名密码了
mongo -u "AdminSammy" -p "AdminSammy'sSecurePassword" --authenticationDatabase admin
注意现在AdminSammy虽然有admin数据库的完全访问权限, 但是并不能用于其他数据库, 还需要
use meteor

db.createUser(
  {
    user: "username",
    pwd: "password",
    roles: ["dbOwner"]
  }
)

这样就能用username登录数据库了

允许远程登录

vi /etc/mongod.conf,

net:
  port: 27017
  bindIp: 0.0.0.0

结果

经过以上优化, 我的电商网站打开速度提升不少, 并且得益于Meteor的特性和本地缓存, 在使用过程中也是速度飞快.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,658评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,482评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,213评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,395评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,487评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,523评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,525评论 3 414
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,300评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,753评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,048评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,223评论 1 343
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,905评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,541评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,168评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,417评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,094评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,088评论 2 352

推荐阅读更多精彩内容