본 포스팅은 Ubuntu16.04 LTS 버전에 mongodb 3.6.5 버전을 설치하는 것입니다. 차이가 있을 수 있으니 참고해주시기 바랍니다.
mongodb란?
mongodb는 NoSQL의 일종으로, 컬렉션 단위로 데이터를 묶는 데이터베이스입니다. 컬렉션은 기존 SQL 데이터베이스의 테이블처럼 사용된다고 생각하시면 됩니다. 재밌는 점은 mongodb의 레코드들이 BSON으로 저장되며 BSON은 이진 JSON이라 JavaScript 객체의 프로퍼티/값 쌍과 일치한다는 부분입니다. 그래서 Nodejs와 짝이 잘 맞습니다.
mongodb 설치
먼저 패키지 관리 시스템에 설치를 위한 공용키를 가져옵니다.
ㅣ커맨드라인
$sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 2930ADAE8CAF5059EE73BB4B58712A2291FA4AD5
다음으로 설치를 위한 list 파일을 만들어야 합니다.
ㅣ커맨드라인
$echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.6 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-3.6.list
로컬 패키지 시스템에 공용키와 list 데이터를 리뉴얼합니다.
ㅣ커맨드라인
$sudo apt-get update
드디어 mongodb를 설치합니다.
ㅣ커맨드라인
$sudo apt-get install -y mongodb-org
설치를 완료했습니다.
mongodb 실행
mongodb 서비스는 따로 실행을 해주어야 합니다.
ㅣ커맨드라인
$sudo service mongod start
잘 실행이 되셨다면 설치가 완료된 것입니다. 축하합니다! 만약 문제가 있다면 아래 내용을 참고해주세요.
mongod: unrecognized service
간혹 이 부분의 제목처럼 오류가 날 때가 있습니다. 이 현상의 원인은 서비스 실행을 위한 파일이 만들어지지 않아서이기 때문입니다. 그 파일을 직접 만들어주어야 합니다.
대상 폴더는 두 곳입니다. /etc/init와 /etc/init.d에 각각 파일을 하나씩 만들어야 합니다. 먼저 /etc/init부터 작업해보지요.
ㅣ커맨드라인
$sudo vi /etc/init/mongod.conf
mongod.conf 파일에는 다음 내용을 복사 붙여넣기 합시다.
ㅣ/etc/init/mongod.conf
# vim: set ft=upstart ts=4 et: description "MongoDB" start on runlevel [2345] stop on runlevel [!2345] # Recommended ulimit values for mongod or mongos # See http://docs.mongodb.org/manual/reference/ulimit/#recommended-settings # limit fsize unlimited unlimited limit cpu unlimited unlimited limit as unlimited unlimited limit nofile 64000 64000 limit rss unlimited unlimited limit nproc 32000 32000 kill timeout 300 # wait 300s between SIGTERM and SIGKILL. pre-start script mkdir -p /var/lib/mongodb/ mkdir -p /var/log/mongodb/ end script script ENABLE_MONGODB="yes" CONF=/etc/mongodb.conf DAEMON=/usr/bin/mongod DAEMONUSER=${DAEMONUSER:-mongodb} if [ -f /etc/default/mongodb ]; then . /etc/default/mongodb fi # Handle NUMA access to CPUs (SERVER-3574) # This verifies the existence of numactl as well as testing that the command works NUMACTL_ARGS="--interleave=all" if which numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null 2>/dev/null then NUMACTL="$(which numactl) -- $NUMACTL_ARGS" DAEMON_OPTS=${DAEMON_OPTS:-"--config $CONF"} else NUMACTL="" DAEMON_OPTS="-- "${DAEMON_OPTS:-"--config $CONF"} fi if [ "x$ENABLE_MONGODB" = "xyes" ]; then exec start-stop-daemon --start --chuid $DAEMONUSER --exec $NUMACTL $DAEMON $DAEMON_OPTS fi end script
이번엔 /etc/init.d에 작업해보겠습니다.
ㅣ커맨드라인
$sudo vi /etc/init.d/mongod
mongod 파일에는 다음 내용을 복사 붙여넣기 합시다.
ㅣ/etc/init/mongod.conf
#!/bin/sh # # init.d script with LSB support. # # Copyright (c) 2007 Javier Fernandez-Sanguino# # This is free software; you may redistribute it and/or modify # it under the terms of the GNU General Public License as # published by the Free Software Foundation; either version 2, # or (at your option) any later version. # # This is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License with # the Debian operating system, in /usr/share/common-licenses/GPL; if # not, write to the Free Software Foundation, Inc., 59 Temple Place, # Suite 330, Boston, MA 02111-1307 USA # ### BEGIN INIT INFO # Provides: mongodb # Required-Start: $network $local_fs $remote_fs # Required-Stop: $network $local_fs $remote_fs # Should-Start: $named # Should-Stop: # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: An object/document-oriented database # Description: MongoDB is a high-performance, open source, schema-free # document-oriented data store that's easy to deploy, manage # and use. It's network accessible, written in C++ and offers # the following features: # . # * Collection oriented storage - easy storage of object- # style data # * Full index support, including on inner objects # * Query profiling # * Replication and fail-over support # * Efficient storage of binary data including large # objects (e.g. videos) # * Auto-sharding for cloud-level scalability (Q209) # . # This package is build with V8 JavaScript engine. # . # High performance, scalability, and reasonable depth of # functionality are the goals for the project. ### END INIT INFO PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin DAEMON=/usr/bin/mongod DESC=database # Default defaults. Can be overridden by the /etc/default/$NAME NAME=mongodb CONF=/etc/mongodb.conf RUNDIR=/var/run/mongodb PIDFILE=$RUNDIR/$NAME.pid ENABLE_MONGODB=yes # Include mongodb defaults if available if [ -f /etc/default/$NAME ] ; then . /etc/default/$NAME fi # Handle NUMA access to CPUs (SERVER-3574) # This verifies the existence of numactl as well as testing that the command works NUMACTL_ARGS="--interleave=all" if which numactl >/dev/null 2>/dev/null && numactl $NUMACTL_ARGS ls / >/dev/null 2>/dev/null then NUMACTL="`which numactl` -- $NUMACTL_ARGS" DAEMON_OPTS=${DAEMON_OPTS:-"--config $CONF"} else NUMACTL="" DAEMON_OPTS="-- "${DAEMON_OPTS:-"--config $CONF"} fi if test ! -x $DAEMON; then echo "Could not find $DAEMON" exit 0 fi if test "x$ENABLE_MONGODB" != "xyes"; then exit 0 fi . /lib/lsb/init-functions STARTTIME=1 DIETIME=10 # Time to wait for the server to die, in seconds # If this value is set too low you might not # let some servers to die gracefully and # 'restart' will not work DAEMONUSER=${DAEMONUSER:-mongodb} DAEMON_OPTS=${DAEMON_OPTS:-"--unixSocketPrefix=$RUNDIR --config $CONF run"} set -e running_pid() { # Check if a given process pid's cmdline matches a given name pid=$1 name=$2 [ -z "$pid" ] && return 1 [ ! -d /proc/$pid ] && return 1 cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1` # Is this the expected server [ "$cmd" != "$name" ] && return 1 return 0 } running() { # Check if the process is running looking at /proc # (works for all users) # No pidfile, probably no daemon present [ ! -f "$PIDFILE" ] && return 1 pid=`cat $PIDFILE` running_pid $pid $DAEMON || return 1 return 0 } start_server() { test -e "$RUNDIR" || install -m 755 -o mongodb -g mongodb -d "$RUNDIR" # Start the process using the wrapper start-stop-daemon --background --start --quiet --pidfile $PIDFILE \ --make-pidfile --chuid $DAEMONUSER \ --exec $NUMACTL $DAEMON $DAEMON_OPTS errcode=$? return $errcode } stop_server() { # Stop the process using the wrapper start-stop-daemon --stop --quiet --pidfile $PIDFILE \ --retry 300 \ --user $DAEMONUSER \ --exec $DAEMON errcode=$? return $errcode } force_stop() { # Force the process to die killing it manually [ ! -e "$PIDFILE" ] && return if running ; then kill -15 $pid # Is it really dead? sleep "$DIETIME"s if running ; then kill -9 $pid sleep "$DIETIME"s if running ; then echo "Cannot kill $NAME (pid=$pid)!" exit 1 fi fi fi rm -f $PIDFILE } case "$1" in start) log_daemon_msg "Starting $DESC" "$NAME" # Check if it's running first if running ; then log_progress_msg "apparently already running" log_end_msg 0 exit 0 fi if start_server ; then # NOTE: Some servers might die some time after they start, # this code will detect this issue if STARTTIME is set # to a reasonable value [ -n "$STARTTIME" ] && sleep $STARTTIME # Wait some time if running ; then # It's ok, the server started and is running log_end_msg 0 else # It is not running after we did start log_end_msg 1 fi else # Either we could not start it log_end_msg 1 fi ;; stop) log_daemon_msg "Stopping $DESC" "$NAME" if running ; then # Only stop the server if we see it running errcode=0 stop_server || errcode=$? log_end_msg $errcode else # If it's not running don't do anything log_progress_msg "apparently not running" log_end_msg 0 exit 0 fi ;; force-stop) # First try to stop gracefully the program $0 stop if running; then # If it's still running try to kill it more forcefully log_daemon_msg "Stopping (force) $DESC" "$NAME" errcode=0 force_stop || errcode=$? log_end_msg $errcode fi ;; restart|force-reload) log_daemon_msg "Restarting $DESC" "$NAME" errcode=0 stop_server || errcode=$? # Wait some sensible amount, some server need this [ -n "$DIETIME" ] && sleep $DIETIME start_server || errcode=$? [ -n "$STARTTIME" ] && sleep $STARTTIME running || errcode=$? log_end_msg $errcode ;; status) log_daemon_msg "Checking status of $DESC" "$NAME" if running ; then log_progress_msg "running" log_end_msg 0 else log_progress_msg "apparently not running" log_end_msg 1 exit 1 fi ;; # MongoDB can't reload its configuration. reload) log_warning_msg "Reloading $NAME daemon: not implemented, as the daemon" log_warning_msg "cannot re-read the config file (use restart)." ;; *) N=/etc/init.d/$NAME echo "Usage: $N {start|stop|force-stop|restart|force-reload|status}" >&2 exit 1 ;; esac exit 0
이후 다시 실행 과정을 밟으면 작동할 겁니다. 수고하셨습니다.
'취미 > 프로그래밍' 카테고리의 다른 글
[Linux]포트 사용에 에러가 났을때 (0) | 2018.08.28 |
---|---|
[gitHub] gitHub commit 텍스트 고치기 (0) | 2018.06.30 |
[gitHub] 처음 설정하기 (0) | 2018.05.17 |
[django] 첫 django 앱 만들기 part 2 (0) | 2018.05.15 |
[django] 첫 django 앱 만들기 part 1 (0) | 2018.05.15 |