CentOS 利用Docker部署NodeJS+Mongodb 【小白教程】

一、配置CentOS虚拟机

         主机开设一台CentOS7的虚拟机,作为运行环境,网络配置为NAT。

1.CentOS官网The CentOS Project     下载CentOS7的镜像

2.VMWare装载CentOS:CentOS 记得装GNOME桌面,然后要把网络连接打开

 3. Root密码:

因为没学习过Linux, 在用户设置上踩了坑。因为搞不清root和user,每次ssh登录反复输密码...

这里的账户是root账户,ssh远程连接的就是输这个密码

这里的账户是用户,第二次重做的时候发现居然可以把这个用户直接作为管理员。不然每次vim的时候都要输密码。。。。

二、安装基本软件

         虚拟机中要安装docker和git还有vim

1.先安装git,先当前查看版本 

git --version

如果未找到,就装一下最新的。我默认登录的用户虽然是管理员,但是还是要用sudo。

sudo yum -y install git

2.安装Docker准备_yum 

先安装yum 工具

sudo yum install -y yum-utils \
           device-mapper-persistent-data \
           lvm2 --skip-broken

然后更新本地镜像源

# 设置docker镜像源
sudo yum-config-manager \
    --add-repo \
    https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
    
sudo sed -i 's/download.docker.com/mirrors.aliyun.com\/docker-ce/g' /etc/yum.repos.d/docker-ce.repo

sudo yum makecache fast

3.安装docker-ce

3.1 安装docker(社区版-免费的)

sudo yum install docker-ce docker-ce-cli containerd.io

3.2 启动docker前,一定要关闭防火墙后?这个不一定

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld

3.2 启动docker

sudo systemctl start docker

3.3 查看版本 判断是否成功安装docker

docker version

但是,运行docker ps会显示权限不够,需要加sudo ,每次加太麻烦的话,

3.4 可以改一下用户组,添加docker group

sudo groupadd docker

如果docker组已经存在,可能会出现如下提示:

groupadd:“docker”组已存在

3.5 将用户’username’加到docker group中

sudo usermod -aG docker username

3.6 注销,再次登录之后,就可以不用sudo来执行docker相关的命令了

4.Vim

4.1确认Vim安装完成,直接输入即可

vim

记录一下后端Docker部署的过程。

环境

三、部署mongodb

1.拉取指定版本的mongodb镜像

因为我开发用的mongodb 5.0.14,所以选择特定版本的。

并且--auth 需要授权的,这里第一次配置的时候,没学过数据库花了好几个小时找问题。。

docker run -dit --name mongo -p 27017:27017 mongo:5.0.14 --auth

上面这个指令会直接把镜像放入容器跑起来,利用docker 指令看一下

2.进入容器内部配置

2.1 进入容器内部

docker exec -it mongo /bin/mongo

成功进入,不过好像看到6.0版本以上推荐用mongosh 

这里简单贴一下,以后用得到 docker exec -it mongo /bin/mongosh

2.1 切换数据库

一定要先切到admin数据库!!!

use admin

2.3 创建一个超级管理员

账户admin 密码123456

db.createUser({user:"admin",pwd:"123456",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

2.4 登录

然后用这个账号登录,成功的话会返回1

db.auth('admin','123456')

2.5 检查数据库服务

可以在虚拟机或者本机在浏览器输入虚拟机nat ip:27017查看数据库服务是否正常

2.6 用mongo的指令可以查看数据库

【基本指令】查看数据库

show dbs

【基本指令】查看集合

show collections

【基本指令】查看当前数据库下的所有用户

show users

 【基本指令】创建集合

db.createCollection('集合名称')

操作如下:

2.7 使用数据库(创建)

use 数据库名字

2.8 查看当前使用的数据库,并查看当前数据库的用户

db
show users

发现啥也没有。第一次做的时候不懂,后面一通查资料整回来的。

其实数据库中没有对应用户,肯定也没法创建集合,创建就报错,没有权限。

2.9 创建一个用户sup区访问bilibili数据库

db.createUser({user:"sup",pwd:"123456",roles:[{role:"readWrite",db:"bilibili"}]})

通过show users可以看到admin下有了

但是切到bilibili里还没有用户。。这就是坑,新增一个sup用户

2.10 在所需要的数据库中创建用户(这里我也没特别搞明白,但是这样肯定是可以的。。)

use bilibili //这里选择你要的数据库
//再加入一个用户
db.createUser({user:"sup",pwd:"123456",roles:[{role:"readWrite",db:"bilibili"}]})

2.11 用navicat验证一下,验证通过就行,这时候看不到数据库的。

2.12 可以用navicat来创建,也可以用指令

使用基本指令 db.createCollection('test')

这里注意,因为之前已经用admin登录了,所以一定要退出

【退出指令】

exit

然后再用sup用户登录一下,

一定要切到你的工作数据库!!!!!!!  use bilibili

再用基本指令创建集合!

然后在navicat检查一下,能看到

3.检验数据库授权

在部署nodejs之前,先在自己主机上用node跑一下,看能不能连上!!

3.1 先exit退出容器,然后用docker ps看一下mongo还有没有在运行

3.2 用npm跑了一下,没授权!当时就是反复这个报错!坑

这里要加一个字段,验证用户名的源

sup是我的用户名,密码123456。?authSource=admin必须加上。

mongoose.connect("mongodb://sup:123456@192.168.241.129:27017/bilibili?authSource=admin");

4.ssh访问

在centos里控制docker很麻烦,用ssh登录,输入yes,再输入密码就行

ssh root@192.168.241.129

5.docker操作

【docker 基础指令】

docker ps 查看运行的容器

docker ps -a 查看所有容器

docker stop mongo(容器名)

docker start mongo(容器名)

docker rm 容器id      移除容器

docker images 查看所有镜像

docker rmi 镜像id     移除镜像

这里第二次做还是卡了一下...本机nodejs要连的ip地址是centos的nat地址

账户:密码@不光这里要加,程序中用到的都加一下

因为是测试,没有用config文件

四、部署nodejs

1.在部署nodejs之前,创建文件夹

在/var/www/node下用git init,然后拉取程序

mkdir www
git init
git clone "地址"

2.安装必要的包

先确认一下nodejs和npm还在不在

node -v
npm -v

3.要写一个Dockerfile

创建Dockerfile文件

touch Dockerfile

用vim写一下

vim Dockerfile
FROM node
WORKDIR /root/wwwroot/
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD npm run server
         

4. 直接在这个文件夹目录生成docker镜像

docker build -t docker.io/mynode:v1 . 

导出完成后就可以在docker images中看到

5. 运行docker nodejs镜像

docker run -it -d --name myweb -p 80:3000 容器id

这里补充一下,有一个坑踩了好久。。在主机能用node和navicat访问mongodb,但是在docker里用node跑的app一直访问不了。原因在于数据库的IP。因为我nodejs还是设置的127.0.0.1,就死活上不去,然后端口号也要改一下最好。npm跑的端口是3000,映射到主机上的80端口。

最后网页访问,大功告成!

补充:

1.中间很奇怪的一点是,装了nodejs,但是没有npm,重新装了一下。

2.docker没有自启动,开机都要启动一下,问题不大,可以设置一下。也可以手动起一下。

docker 重启 systemctl restart docker 

网络重启systemctl restart network

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值