Mongodb 騰訊雲部署
原來一直使用的團隊部署的mongodb或者雲服務商的,今天嘗試部署學習一下。
MongoDB 是一個基於分散式檔案儲存的資料庫。由 C++ 語言編寫。旨在為 WEB 應用提供可擴充套件的高效能資料儲存解決方案。MongoDB 是一個介於關係資料庫和非關係資料庫之間的產品,是非關係資料庫當中功能最豐富,最像關係資料庫的。
本文在騰訊雲上嘗試部署mongodb。
環境:Linux(ubuntu 16.04)
1 解壓進入mongodb目錄下
tar -vxf mongodb-linux-x86_64-ubuntu1604-3.6.5.tgz
cd mongodb-linux-x86_64-ubuntu1604-3.6.5
2建立資料夾存放資料和log
mkdir -p data/db
touch mongodb.log
3 執行mongodb
3.1 直接執行
cd bin
./mongod -dbpath=./../data/db -logpath=./../mongodb.log -logappend -port=27017 -fork
- –dbpath:指定儲存資料的資料夾
- –logpath:指定日誌儲存檔案(將不會輸出到控制檯)
- –port指定埠,如果不寫的話,預設是27017
- –fork代表後臺執行
出現這個log 說明啟動成功了。
2018-05-24T09:31:40.549 +0800 I NETWORK [initandlisten] waiting for connections on port 27017
3.2 通過配置檔案啟動
./mongod -f mongodb.conf
mongodb.conf:
port = 27017
dbpath = ./../data/db
logpath = log/mongod.log
logappend=true
4 連線
4.1 本地訪問
在bin資料夾下執行
./mongo localhost:27000
即可連線到mongodb
Mongod 控制檯出現這個log 說明連結成功
2018-05-24T09 :35:09.415+0800 I NETWORK [listener] connection accepted from 127.0.0.1:36834 #1 (1 connection now open)
2018-05-24T09:35:09.416+0800 I NETWORK [conn1] received client metadata from 127.0.0.1:36834 conn1: { application: { name: "MongoDB Shell" }, driver: { name: "MongoDB Internal Client", version: "3.6.5" }, os: { type: "Linux", name: "Ubuntu", architecture: "x86_64", version: "16.04" } }
敲擊回車進入到mongodb shell模式
4.2 公網訪問
預設情況下mongodb 是無法通過外網連結訪問。
我們可以通過在建立mongodb.conf檔案並配置bind_ip 支援外網訪問。當值得注意的是我們開啟外網訪問後,很容易受到攻擊。
1 修改mongodb預設埠
2 設定 mongodb訪問許可權
mongodb.conf
port = 27017
dbpath = ./../data/db
logpath = ./../mongodb.log
logappend=true
bind_ip = 雲主機內網ip
fork=true
在騰訊雲上不能直接繫結到公網ip,我們繫結到內網ip,即可實現公網的訪問。個人猜測公網ip是對映過來的,所以對於雲主機而言公網ip是不可見的。
執行:
./mongod -f mongodb.conf
./mongo xxx.xx.xx.xxx:27017
在本地linux開發機上即可連線到雲伺服器上的mongodb
5 修改mongodb預設配置
5.1 修改mongodb預設埠
我們可以修改 -port= 引數 或更改conf中port 配置mongodb預設埠
5.2 繫結mongodb例項
bind_ip = 127.0.0.1 將mongodb例項繫結到本地server
bind_ip = 127.0.0.1, 172.28.31.255 將本地server繫結的內網ip
PS: 可以使用該命令檢視linux 外網ip :curl icanhazip.com
5.3 開啟認證
因為mongodb 預設執行環境為安全,即執行在內網環境中外網無法訪問,所以安全模式是預設沒有開啟的。
5.3.1 新增管理員賬戶
這裡我們為資料庫新增管理員賬戶
use admin
db.createUser(
{
user: "appAdmin",
pwd: "password",
roles:
[
{ role: "readWriteAnyDatabase", db: "admin" },
]
}
)
這裡我們就建立了一個管理員賬戶,現在嘗試開啟驗證
PS:role 這裡是使用者身份,mongodb提供了非常豐富的使用者身份,readWriteAnyDatabase我們在admin建立了一個具有所有資料庫讀寫許可權的賬戶,具體可參閱第8.1節
5.3.2重啟server
在命令啟動新增–auth 引數 或在配置中新增auth=true
重新啟動伺服器。
5.3.3 普通方式連線
./mongo xxx.xx.xx.xxx:27017
連線接mongodb
測試許可權是否啟動:
use test
switched to db test
> show collections
2018-05-29T10:11:38.833+0800 E QUERY [thread1] Error: listCollections failed: {
"ok" : 0,
"errmsg" : "not authorized on test to execute command { listCollections: 1.0, filter: {}, $db: \"test\" }",
"code" : 13,
"codeName" : "Unauthorized"
} :
報錯說明安全模式已經啟用了
5.3.4 以賬戶密碼方式連線
使用者只能在使用者所在資料庫登入,包括管理員賬號。
./mongo xxx.xx.xx.xxx:27017
use admin
db.auth("admin","helloworld")//管理賬戶必須要在admin中才能驗證
>1 出現1說明驗證成功
use test
show collections
沒有報錯說明驗證通過
6 測試
use admin
db.auth("admin","helloworld")
use test2 //建立一個數據庫
db.test2.insert({"hello":"world"})//插入一條資料
db.createUser(
{
user: "test2user",
pwd: "password",
roles:
[
{ role: "readWrite", db: "test2" },
]
}
)
//建立新資料庫普通賬戶(如果沒有建立使用者管理員許可權,需要將auth關掉建立)
use test2
db.auth("test2user", "password")
show collections
7 執行
Mongodb 可在linux 配置後臺執行。
此測試採用supervisor 軟體後臺執行
配置:
[program:mongodb]
directory=/home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5
command= /home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/bin/mongod -f /home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/bin/mongodb.conf
autostart=true
startsecs=3
autorestart=true
startretries=3
user=root
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups=20
stdout_logfile =/home/xxxx/mongodb/mongodb-linux-x86_64-ubuntu1604-3.6.5/logs/mongodb.log
8 參考資料
8.1 role 身份
roles:指定使用者的角色,可以用一個空陣列給新使用者設定空角色;在roles欄位,可以指定內建角色和使用者定義的角色。role裡的角色可以選:
1. 資料庫使用者角色:read、readWrite;
2. 資料庫管理角色:dbAdmin、dbOwner、userAdmin;
3. 叢集管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
4. 備份恢復角色:backup、restore;
5. 所有資料庫角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
6. 超級使用者角色:root
8.2 mongodb 常用命令
1 建立資料庫 use yourDB
2 查詢所有資料庫 show dbs
3 建立使用者 createUser
4 刪除使用者 show collections
5 插入資料 db.test2.insert