V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
irainy
V2EX  ›  程序员

Mongodb & Go 项目部署

  •  
  •   irainy · 2015-06-22 14:03:09 +08:00 · 2677 次点击
    这是一个创建于 3224 天前的主题,其中的信息可能已经有所发展或是发生改变。

    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

    MongoDB 安全设置

    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
    

    Go 项目部署

    主要是对依赖的包进行管理,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:[email protected]:27017/your-db-name"
    sess, err := mgo.Dial(MOGODB_URI)
    

    参考:

    1. MongoDB安全配置
    2. MongoDB Docs
    4 条回复    2015-06-23 00:07:29 +08:00
    holmesabc
        1
    holmesabc  
       2015-06-22 14:10:05 +08:00 via Android
    为啥不直接编好二进制丢上去?
    irainy
        2
    irainy  
    OP
       2015-06-22 14:16:30 +08:00
    @holmesabc 开发环境不一样
    mengzhuo
        3
    mengzhuo  
       2015-06-22 23:56:54 +08:00 via iPhone
    @irainy 不应该是ci跑版本么…
    irainy
        4
    irainy  
    OP
       2015-06-23 00:07:29 +08:00
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   863 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 21:40 · PVG 05:40 · LAX 14:40 · JFK 17:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.