Ubuntu16.04安装MongoDB并设置开机自启

目的:在Ubuntu16.04安装MongoDB,并且设置普通用户开机启动(mongodb不推荐root启动)。

我当前的普通用户为star,将由这个用户执行mongodb服务

从官网下载MongoDB安装包,解压,移动到存放目录

tar zxf mongodb-linux-x86_64-ubuntu1604-4.0.1.tgz
sudo mv mongodb-linux-x86_64-ubuntu1604-4.0.1 /usr/local/mongodb

添加环境变量

sudo vim /etc/profile
# 在文件末尾添加一行export PATH=/usr/local/mongodb/bin:$PATH
source /etc/profile

 添加配置文件

sudo vim /etc/mongod.conf

mongod.conf的内容

#详细记录输出
verbose = true
#绑定IP
bind_ip = 0.0.0.0
#指定服务端口号
port = 27017
#指定日志文件,注意是指定文件不是目录
logpath = /var/log/mongodb/logs/mongodb.log
#使用追加方式写日志
logappend = true
#指定数据库路径
dbpath = /var/lib/mongodb/db
#设置每个数据库将被保存在一个单独的目录
directoryperdb = true
#启用验证
auth = false
#以守护进程的方式运行MongoDB,创建服务器进程
fork = true
#安静退出
quiet = true

官方似乎推荐数据库文件存放在/var/lib/mongodb,日志文件存放在/var/log/mongodb,创建相应目录和文件,并把文件所有者修改成普通用户

sudo mkdir /var/lib/mongodb/db -p
sudo mkdir /var/log/mongodb/logs -p
sudo touch /var/log/mongodb/logs/mongodb.log

sudo chown star:star /var/lib/mongodb/db
sudo chown star:star /var/log/mongodb/logs/mongodb.log

到这一步算是安装完成,尝试用普通用户身份启动mongod

star@for-vm:/usr/local/mongodb$ mongod -f /etc/mongod.conf 
2018-08-18T13:18:42.748+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
about to fork child process, waiting until server is ready for connections.
forked process: 6005
child process started successfully, parent exiting

 启动成功,接下来设置开机启动。


添加文件mongodb.service

cd /etc/systemd/system
sudo vim mongodb.service

mongodb.service的内容

[Unit]
Description=High-performance, schema-free document-oriented database
After=network.target

[Service]
# 注意这个地方是个坑,如果你的mongodb配置文件中设置的作为守护线程运行,下面这一行一定要加上
Type=forking
User=star
ExecStart=/usr/local/mongodb/bin/mongod -f /etc/mongod.conf

[Install]
WantedBy=multi-user.target

注意中间要写对

然后加上执行权限

sudo chmod +x mongodb.service

到这里,可以尝试用service启动服务

# 启动
star@for-vm:~$ sudo service mongodb start
# 查看状态,看到active(running)表示成功启动
star@for-vm:~$ sudo service mongodb status
● mongodb.service - High-performance, schema-free document-oriented database
   Loaded: loaded (/etc/systemd/system/mongodb.service; disabled; vendor preset: enabled)
   Active: active (running) since 六 2018-08-18 14:00:44 CST; 6s ago
  Process: 7727 ExecStart=/usr/local/mongodb/bin/mongod -f /etc/mongod.conf (code=exited, status=0/SUCCESS)
 Main PID: 7729 (mongod)
   CGroup: /system.slice/mongodb.service
           └─7729 /usr/local/mongodb/bin/mongod -f /etc/mongod.conf

8月 18 14:00:43 for-vm systemd[1]: Starting High-performance, schema-free document-oriented database...
8月 18 14:00:43 for-vm mongod[7727]: 2018-08-18T14:00:43.861+0800 I CONTROL  [main] Automatically disabling TLS 1.0, to force-enable TLS 1.0 specify --sslDisabledProtocols 'none'
8月 18 14:00:43 for-vm mongod[7727]: about to fork child process, waiting until server is ready for connections.
8月 18 14:00:43 for-vm mongod[7727]: forked process: 7729
8月 18 14:00:44 for-vm systemd[1]: Started High-performance, schema-free document-oriented database.

用service启动停止mongod都没问题

下面设置开机启动

sudo systemctl enable mongodb

尝试重启系统

# 系统启动后查看服务,成功自启
star@for-vm:~$ ps -ef | grep mongod | grep -v grep
star       1256      1  1 14:08 ?        00:00:01 /usr/local/mongodb/bin/mongod -f /etc/mongod.conf

 最后,说点注意事项

配置文件和.service文件的拥有者依然是root,不需要变更

star@for-vm:~$ ll /etc/mongod.conf 
-rw-r--r-- 1 root root 508 8月  18 11:16 /etc/mongod.conf
star@for-vm:~$ ll /etc/systemd/system/mongodb.service 
-rwxr-xr-x 1 root root 233 8月  18 13:54 /etc/systemd/system/mongodb.service*

另外,数据库文件目录下文件的拥有者应该是普通用户,因为是用普通用户身份第一次运行mongod服务

你可能感兴趣的:(Ubuntu16.04安装MongoDB并设置开机自启)