使用 RestHeart 给 Mongo Atlas 数据库加上 REST API 接口

  • fennng 

MongoDB 本身是不支持 RESTFul 的接口的, 但是有很多第三方的工具可以把它转成RESTful的接口.

MongoDB 官方就有一个网页介绍了几个常用的工具
https://docs.mongodb.com/ecosystem/tools/http-interfaces/

Eve (Python)
RESTHeart (Java)
DrowsyDromedary (Ruby)
Crest (Node.jS)
AMID
Kule
DreamFactory

MongoDb Atlas 是 mongo db 官方提供的一个 mongo db 的数据库服务. 注册后, 可以在他们的后台创建mongo db 数据库, 你的客户端就可以直接使用了. Mongo db atlas 也提供了自已的 RESTFul API.

https://docs.atlas.mongodb.com/api/

有一个好消息是 Mongo DB atlas 提供一个免费的 Free Tier, 有 512M 的容量. 而且是3个 nodes 的 cluster.

更好的消息是, 用这Free Tier 不收取传说中巨坑的 Data Transfer Fee, 所以可以真正的免费使用.

所以我就考虑把一些数据量不大的应用转到这个服务上来. 看上去还蛮安全的. 因为我大部分的应用都是使用的 RestHeart 这个API. 所以我今天就来教教大家怎么样运行一个 RestHeart 的 Docker 容器, 并把它连接到 Mongo DB Atlas 的 Cluster

首先你要注册并创建一个 Mongo DB Atlas 的 Cluster, 直接去官方注册并跟着提示走就可以了

https://cloud.mongodb.com

你会在这个过程中添加IP白名单和创建数据库用户名密码.

然后, 我们需要连接这个数据库的字串


按上图操作复制你的数据库连接字串, 记得把其中的 改成你真正的密码

以下命令需要你已经安装 docker

Windows 下 docker 的安装可以看这个视频教程

linux 下直接运行 docker, 如果没有安装, 一般都会提示你用什么命令一键安装

然后, 在你的服务器中运行


sudo docker run \
    --name restheart \
    --rm \
    -p '8082:8080' \
    --env MONGO_URI='mongodb+srv://fennng:somepassword@cluster0-xxx.azure.mongodb.net/test?retryWrites=true&w=majority' \
    softinstigate/restheart:3.6.0

这样, 你的Restheart 服务器就好了, 它会运行在 8082 这个端口, 当然你可以把它改成其它端口.

要删除它直接 Control+D, 如果你用了 -d 参数后台运行, 使用以下命令删除 (也可删除前台运行的容器)

sudo docker rm -f restheart

注意: 这样创建的Restheart 服务器就算有密码也是不安全的, 因为是跑在 HTTP下, 而不是HTTPS. 所以还要加一个反向代理.

restheart 的 docker 容器本身也支持 4443的 HTTPS端口, 但是因为我用反向代理, 所以我没有用过, 就不详述了.

关于Restheart 的用户名和密码设置可以参考这篇文章

本机自建Mongo DB RestHeart 服务器

如果你的应用和 Restheart 在同一台服务器上, 你的restheart 端口只向本机开放, 这种情况你可能不需要用户名和密码, 你可以直接把 softinstigate/restheart:3.6.0 改成 softinstigate/restheart:latest

因为最新版的 restheart 已经把用户模块单独分离出来, 用最新版的restheart默认是不需要用户名和密码的.

发表评论

您的电子邮箱地址不会被公开。