一、配置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
2530

被折叠的 条评论
为什么被折叠?



