Ubuntu使用docker部署ruoyi系统

使用服务器环境Ubuntu22.04

lsb_release -a

image.png

一、安装docker

# 更新镜像源
sudo apt-get update
#关闭服务器防火墙
systemctl stop firewalld

# 安装gcc环境
sudo apt install build-essential

#添加docker源、
sudo echo "deb https://download.docker.com/linux/ubuntu zesty edge" > /etc/apt/sources.list.d/docker.list
 
#支持解析https
apt-get install -y apt-transport-https ca-certificates curl software-properties-common

# 从阿里云的镜像站获取Docker CE的GPG密钥,并将其添加到APT的密钥环中,以便在后续安装Docker CE软件包时能够验证其完整性和来源。这是确保软件包来自可信来源的重要步骤,尤其是在安装第三方软件时。
#添加GPG密钥
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
 
#设置存储库位置
add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
 
#执行安装命令
apt-get install -y docker-ce

配置阿里云镜像加速,修改daemon配置文件/etc/docker/daemon.json来使用加速器

# 如果没有daemon.json就自己用vim建一个
$ sudo mkdir -p /etc/docker
$ sudo tee /etc/docker/daemon.json <<-'EOF'

在daemon.json中加入

# 登录阿里云平台,找到容器镜像服务 ACR既然管理控制台,在镜像加速器中获取加速器地址
{
  "registry-mirrors": ["https://hweeg666.mirror.aliyuncs.com"]
}

image.png
重启配置

sudo systemctl daemon-reload
sudo systemctl restart docker

测试docker是否安装成功

sudo docker --version
sudo docker version
sudo docker info

image.png
测试简单docker安装,通过运行简单的Docker Image来进行安装测试:

sudo docker run hello-world

image.png
列出所有的镜像image和容器container:

sudo docker images
sudo docker container ls -all

image.png

二、拉取镜像

2.1 拉取镜像(jdk1.8)

docker pull java:8

2.2 拉取镜像(MySQL)

docker pull mysql:8.0.19

2.3 拉取镜像(Redis)

docker pull redis:6.0.8

2.4 拉取镜像(Nginx)

docker pull nginx:1.18.0

可通过docker images命令查看拉取镜像内容
image.png

三、后端部署

命令参数说明:
-d:后台运行容器
-p:端口映射,格式为主机端口:容器端口
-e:设置环境变量,这里设置的是root密码
–name:设置容器别名
-v 挂载文件,格式为:宿主机绝对路径目录 : 容器内目录,
比如我们使用:-v /usr/local/mysql/logs:/var/log/mysql
意思就是将mysql容器存放日志文件的目录:/var/log/mysql挂载在宿主机的/usr/local/mysql/logs下

3.1 启动MySQL容器

docker run --name mysql -v /myapp/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.19
# MYSQL_ROOT_PASSWORD=123456设置密码为‘123456’,可根据具体需求自行修改
# /myapp/mysql:/var/lib/mysql mysql路径容器挂载,可根据具体需求自行修改

3.2 启动Redis容器

docker run -d --name redis -p 6379:6379 redis:6.0.8 --requirepass "123456"
# requirepass "123456"设置密码为‘123456’,可根据具体需求自行修改

可通过docker ps -a命令查看镜像启动状态
image.png

3.3 将数据导入容器MySQL

3.3.1 通过命令将数据导入MySQL(方法1)

上面我们启动MySQL容器时将容器内MySQL路径挂载在/myapp/mysql路径下,所以我们将数据文件上传到该目录下
image.png
进入MySQL容器实例,导入数据

# 1、查看容器id
docker ps -a 
# 2、进入容器
docker exec -it [容器ID/容器名] /bin/bash
# 3、进入容器后登录MySQL
mysql -u root -p
# 4、新建数据库,进入数据库
create databases online_repair
use online_repair
show databases
# 5、导入数据
source /var/lib/mysql/cat.sql;

image.png
image.png

3.3.2 使用可视化工具导入数据(方法2)

通过可视化工具连接服务器数据库,新建数据库,运行sql文件导入数据
image.png
注:如出现MySQL无法连接问题,可参考异常处理进行解决

3.4 修改配置文件,打包上传服务器

在application.yml中,修改redis的信息,分别为host地址(服务器ip),port端口号(redis开放的端口号,一般为6379),password密码(前面配置redis时设置的密码)。
image.png
在application-druid.yml中可进行MySQL数据库配置信息的修改
image.png
在本地ruoyi项目下bin目录下找到package.bat脚本,可一件打包jar包,打包后的jar包在…/RuoYi-Vue-master\ruoyi-admin\target路径下,将jar包上传至服务器中
注:也可使用maven进行package打包操作

3.5 后端镜像构建

新建一个文件夹将打包好的jar包上传至文件夹中,并创建一个Dockerfile文件
image.png
Dockerfile文件中写入:

#基础镜像使用jdk1.8
FROM java:8
 
#作者
MAINTAINER pan
 
# VOLUME 指定临时文件目录为/tmp,在主机/var/lib/docker目录下创建了一个临时文件并链接到容器的/tmp
VOLUME /tmp
 
# 将jar包添加到容器中并更名
ADD ruoyi-admin.jar app.jar
 
# 运行jar包
RUN bash -c 'touch /app.jar'
 
# 为了缩短 Tomcat 启动时间,添加一个系统属性指向 “/dev/./urandom” 作为 Entropy Source
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
 
#ENTRYPOINT ["nohup","java","-jar","/data/cat/ruoyi-admin.jar","&"]
 
#暴露8080端口,后端系统启动端口
EXPOSE 8080
# 构建镜像(需在Dockerfile同级目录下构建)
cd /root/network
docker build -t network:1.0 .
# 镜像名称可根据自己的项目名称定义

image.png

3.6 启动后端镜像

# 启动后端镜像
docker  run -d --name cat -p 8085:8085 network:1.0
# 查看后端镜像启动
docker ps -a
# 如启动失败可进入日志查看失败原因、
docker logs -f -t --tail 1000 [容器ID]

image.png
可在浏览器访问http://121.37.213.145:8080/端口查看后端是否启动成功
dd4abb0064a839bfce5d6a10f88c855.png
注:若后端项目启动成功了,但是地址无法进行访问,可查看服务器防火墙是否以进行放行,详见异常处理

四、前端部署

因为需要nginx的初始化配置文件,为了保证不出错,
所以我们直接启动一个nginx容器,把配置文件拉取下来,然后删除容器

4.1 创建nginx工作目录

#需要一个conf文件存放目录,和html文件目录,及日志存放目录
mkdir -p /data/applications/nginx/conf
mkdir -p /data/applications/nginx/html
mkdir -p /data/logs

4.2 启动nginx,并迁移文件

# 1、启动nginx
docker run --name nginx -p 80:80 -d nginx:1.18.0

# 2、迁移配置文件
# 复制配置
docker cp nginx:/etc/nginx/nginx.conf /data/applications/nginx/conf/nginx.conf
docker cp nginx:/etc/nginx/conf.d /data/applications/nginx/conf/conf.d
docker cp nginx:/usr/share/nginx/html /data/applications/nginx/
 
#先用 [docker ps – a] 命令 找到对应容器ID
#才可以删除容器
docker rm -f [容器ID]

4.3 重新启动nginx

docker run -d \
-p 80:80 \
-p 443:443 \
--name nginx \
--restart=always \
-e TZ="Asia/Shanghai" \
-v /data/applications/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /data/applications/nginx/conf/conf.d:/etc/nginx/conf.d \
-v /data/logs/nginx:/var/log/nginx \
-v /data/applications/nginx/html:/usr/share/nginx/html \
-v /data/applications/nginx/cert:/etc/nginx/cert \
nginx:1.18.0

# 如不需要绑定域名可以不用配置-v /data/applications/nginx/cert:/etc/nginx/cert \

命令说明:
–privileged=true # 容器内被赋予root权限
-v /data/applications/nginx/html:/usr/share/nginx/html # 挂载的静态文件目录
-v /data/applications/nginx/nginx.conf:/etc/nginx/nginx.conf # 挂载的nginx配置文件目录
-v /data/applications/nginx/logs:/var/log/nginx #挂载nginx日志文件
-v /data/applications/nginx/cert: /etc/nginx/cert # ssl证书挂载目录

# 查看nginx容器是否启动成功
docker ps -a

访问地址看见nginx首页表示nginx配置成功

4.4 前端项目打包,上传

将文件上传服务器,进入ruoyi-ui文件夹,并对前端代码进行打包,生成一个dist文件夹,也可在本机使用node进行前端打包

cd ruoyi-ui
npm install --unsafe-perm --registry=https://registry.npm.taobao.org
chmod -R 755 ./*
npm run build:prod

image.png
将打包的dist下文件移动至/data/applications/nginx/html/目录下,前面我们在启动nginx时将该目录作为挂载的静态文件目录
image.png

4.5 配置nginx

进入/data/applications/nginx/conf/conf.d/目录下配置default.conf文件

server{
                listen 80;  #前端启动端口
                server_name [服务器IP];

                location / {
                        root /usr/share/nginx/html;   #指向前端项目
                        try_files $uri $uri/ @router; #解决404问题的关键行
                        index index.html index.htm;
                }

                 location @router {
                        rewrite ^.*$ /index.html last;
                }


                location /prod-api/ {
                        proxy_set_header Host $http_host;
                        proxy_set_header X-Real-IP &remote_addr;
                        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                        proxy_set_header REMOTE-HOST $remote_addr;
                        proxy_pass http://[服务器内网IP]:[端口号]/;  #服务器内网IP+后端启动端口号
                }
        }

修改后保存并退出,重新启动nginx容器

#先用 [docker ps – a] 命令 找到对应容器ID
#才可以删除容器
 
docker restart [容器ID]

# 查看容器是否启动成功
docker ps -a

image.png
部署完毕,可通过浏览器查看是否部署成功
image.png

异常处理

1、MySQL远程配置

MySQL无法远程访问,navicat进行连接时提示下面问题
image.png
解决方案:

# 运行mysql, -d 守护线程保持后台运行
# -p 端口映射,如果你用的阿里云服务器,需要开放安全组(即端口号,自行设置,我的是33066) 
# -e 环境配置,此处设置登录密码 
# --name 为镜像重命名,不然系统会随机生成,重命名在你重启关闭删除直接使用名字会方便很多
# -v 挂载目录,主要挂载MySQL配置文件以及数据
docker run -d --restart=unless-stopped -p 33066:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql -v /home/mysql/conf:/etc/mysql/conf.d -v /home/mysql/data:/var/lib/mysql mysql
# 进入容器
docker exec -it mysql /bin/bash

# 1、登录MySQL
mysql -h localhost -u root -p 

# 2、修改MySQL密码策略
# 修改本地登陆
# 修改密码过期规则----》永不过期
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 
# 更新用户的密码修改加密规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456'; 
# 刷新权限
FLUSH PRIVILEGES;
# 重置密码(==非必须==)
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

# 修改远程登陆
# 修改密码过期规则----》永不过期
ALTER USER 'root'@'%' IDENTIFIED BY '123456' PASSWORD EXPIRE NEVER; 
# 更新用户的密码修改加密规则
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 刷新权限
FLUSH PRIVILEGES;
# 重置密码(==非必须==)
ALTER USER 'root'@'%' IDENTIFIED BY '123456';

参考文章:
https://blog.csdn.net/qq_41538097/article/details/106905416
https://blog.csdn.net/qq_41538097/article/details/107045349

2、服务器端口放行配置

后端项目启动成功,但是无法访问
解决方案:
这里我用的是华为云的服务器,登录服务器管理台,检查是否有对后端应用端口进行放行,如没有,添加入栈规则,源地址0.0.0.0/0表示放行所有IP进行访问。
image.png

docker常用命令

# 查看docker版本
docker version

# docker查看镜像
docker images

# 启动容器
#  命令参数说明:
# -d:后台运行容器
# -p:端口映射,格式为主机端口:容器端口
# -e:设置环境变量,这里设置的是root密码
# --name:设置容器别名
# -v 挂载文件,格式为:宿主机绝对路径目录:容器内目录,
# 比如我们使用:-v /usr/local/mysql/logs:/var/log/mysql
# 将mysql容器存放日志文件的目录:/var/log/mysql挂载在宿主机的/usr/local/mysql/logs下
docker run --name mysql -v /myapp/mysql:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=123456 -d mysql:8.0.19

#查询所有容器信息
docker ps -a
# 查询正在运行容器信息
docker ps
# 查看全部容器的id和信息
docker ps -a -q
# 查看全部容器占用的空间
docker ps -as
# 查看一个正在运行容器进程,支持 ps 命令参数
docker top

# 进入容器
docker exec -it [容器ID] /bin/bash

# 删除镜像
docker rmi [镜像id/镜像名称]
# 例:要删除ID为c3f279d17e0a的镜像,可以执行:docker rmi c3f279d17e0a;要删除标签为my_image的镜像,可以执行:docker rmi my_image
# 如镜像正在使用,要强制删除镜像
docker rmi -f [镜像id/镜像名称]

# 查看容器日志
docker logs -f [容器ID/容器名]
docker logs -f -t --tail 1000 [容器ID/容器名]

# 查看root容器密码
docker logs [容器ID/容器名] 2>&1 | grep '^User: ' | tail -n1

参考文章:
https://blog.csdn.net/Pan_peter/article/details/128807946?spm=1001.2014.3001.5506

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值