Original: https://github.com/rainyear/lolita/issues/6
用Mongo作DB,基于Go语言的Gin框架的API,部署时需要添加MongoDB用户权限,同时部署Go项目用到godep,下面简单记录一些操作步骤。
MongoDB version 3.0.4
go version go1.4.2
Mongo采用基于角色的访问控制(Role-Based Access Control),不同的用户角色拥有不同的权限。启动MongoDB服务默认是不需要权限的:
# start mongod
mongod --dbpath=/path/to/data
# login mongo shell
mongo
登入之后先创建用户管理账号,切换至系统管理员数据库,创建管理员账号admin
,其角色为管理所有数据库用户
:
> use admin
> db.createUser(
{
user: "admin",
pwd: "password",
roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
}
)
之后可以退出 Mongo shell,重新启动 mongod
,加上访问权限的相关设定:
mongod --dbpath=/path/to/data --auth --nohttpinterface --bind_ip 127.0.0.1
重新登入 Mongo shell,并添加可操作数据库权限(readWrite
)的用户角色:
mongo -u admin -p password --authenticationDatabase admin
> use your-db-name
> db.createUser(
{
user: "rainy",
pwd: "year",
roles: [ { role: "readWrite", db: "your-db-name" } ]
)
添加读写操作用户权限之后,再次访问数据库内容,会被拒绝,需要先通过db.auth("rainy", "year")
完成验证:
> show collections
> Error: listCollections failed: {
"ok" : 0,
"errmsg" : "not authorized on coodict to execute command { listCollections: 1.0 }",
"code" : 13
}
> db.auth("rainy", "year")
1
主要是对依赖的包进行管理,godep
可以对当前项目所依赖的包统计整理,部署时在新的环境中自动获取依赖的包:
go get github.com/tools/godep
cd path/to/your/golang/project
godep save #这一步需要你的项目放在`GOPATH/src`中,否则会出错,也可以在`GOPATH/src`创建软链
godep save
在当前目录下的./Godeps/Godeps.json
包含所有依赖关系:
{
"ImportPath": "github.com/rainyear/coodict",
"GoVersion": "go1.4.2",
"Deps": [
{
"ImportPath": "github.com/dgrijalva/jwt-go",
"Comment": "v2.2.0-28-g2e53eb6",
"Rev": "2e53eb673c4450614e3bca6f345197f9527dce71"
},
{
"ImportPath": "github.com/gin-gonic/gin",
"Comment": "v1.0rc1-104-g1a7ab6e",
"Rev": "1a7ab6e4d5fdc72d6df30ef562102ae6e0d18518"
},
{
"ImportPath": "github.com/manucorporat/sse",
"Rev": "c142f0f1baea5cef7f98a8a6c222f6134368c1f5"
},
{
"ImportPath": "github.com/mattn/go-colorable",
"Rev": "d67e0b7d1797975196499f79bcc322c08b9f218b"
},
{
"ImportPath": "golang.org/x/net/context",
"Rev": "d375fa34084fb5703fbe4ee98e64108f3d2235ca"
},
{
"ImportPath": "gopkg.in/bluesuncorp/validator.v5",
"Comment": "v5.8",
"Rev": "c06d47f593d786142436a43334f724d819093c04"
},
{
"ImportPath": "gopkg.in/mgo.v2",
"Comment": "r2015.01.24",
"Rev": "c6a7dce14133ccac2dcac3793f1d6e2ef048503a"
}
]
}
在线上环境clone
项目之后,执行godep restore
自动下载依赖包,执行go build
即可重新编译Go项目。
此外,采用gopkg.in/mgo.v2
作为MongoDB驱动,通过如下方法连接:
var MOGODB_URI = "mongodb://rainy:year@127.0.0.1:27017/your-db-name"
sess, err := mgo.Dial(MOGODB_URI)
参考:
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.