若依前后端部署
目录
云服务器
工具下载
前端部署
1.创建nginx工作目录:
2.将打包后生成dist文件夹上传至刚刚创建的 /docker/nginx/data/html目录下 :
3.在/docker/nginx/data/conf 创建 nginx.conf 文件:
4.创建nginx容器并添加到网络:
后端部署
1.mysql启动:
2.redis启动:
3.Dockerfile文件:
4.启动后端服务:
云服务器
工具下载
通过下面链接地址下载最新版的XShell与Xftp:https://www.xshell.com/zh/free-for-home-school/https://www.xshell.com/zh/free-for-home-school/XShell可方便通过SSH连接服务器,而Xftp可通过网络给服务器上传文件。
其他的SSH连接工具: MobaXterm,Termius,FinalShell等。
前端部署
1.创建nginx工作目录:
# 创建存放前端代码的目录
mkdir -p /docker/nginx/data/html
# 创建存放nginx.conf的目录
mkdir -p /docker/nginx/data/conf
# 创建存放log日志文件的目录
mkdir -p /docker/nginx/logs
2.将打包后生成dist文件夹上传至刚刚创建的 /docker/nginx/data/html目录下 :
3.在/docker/nginx/data/conf 创建 nginx.conf 文件:
将下面ip更改成自己购买服务器的ip地址。
worker_processes auto;events {worker_connections 1024;
}http {include mime.types;default_type application/octet-stream;sendfile on;keepalive_timeout 65;server {listen 80;server_name 0.0.0.0; #改成服务器的ip root /usr/share/nginx/html;index index.html;# 静态文件服务及前端路由支持(history 模式)location / {try_files $uri $uri/ /index.html;}# API代理:将 /prod-api 前缀的请求转发到后端服务器location /prod-api/ {# 如果需要移除前缀,使用 rewrite 去除前缀后再转发至后端根路径rewrite ^/prod-api/(.*)$ /$1 break;proxy_pass http://ruoyi.vip:8080; #配置后端服务的容器名proxy_set_header Host $host;proxy_set_header X-Real-IP $remote_addr;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}}
}
4.创建nginx容器并添加到网络:
这里我创建了一个ruoyi网络:
docker network create ruoyi
随后运行下面命令启动容器:
docker run -d --name nginx\-p 80:80 \--restart=always \-v /docker/nginx/data/conf/nginx.conf:/etc/nginx/nginx.conf \-v /docker/nginx/data/html/dist:/usr/share/nginx/html \-v /docker/nginx/logs/nginx:/var/log/nginx \--network ruoyi\-e TZ="Asia/Shanghai" \nginx:latest
参数详解:
-d:
以“守护进程模式”(后台运行)启动容器。
--name nginx:
将容器命名为nginx
,方便后续管理。
-p 80:80:
- 端口映射,将宿主机的
80
端口映射到容器的80
端口。- 访问
http://宿主机IP
即可访问 Nginx 服务。
--restart=always:
容器意外退出时自动重启,确保服务高可用(适合生产环境)。数据卷挂载(
-v
):
-v /docker/nginx/data/conf/nginx.conf:/etc/nginx/nginx.conf
将宿主机的 Nginx 配置文件挂载到容器内,覆盖默认配置。
- 宿主机路径:
/docker/nginx/data/conf/nginx.conf
- 容器路径:
/etc/nginx/nginx.conf
(Nginx 主配置文件)- 用途:直接修改宿主机文件即可生效(需重启或重载 Nginx)。
-v /docker/nginx/data/html/dist:/usr/share/nginx/html
将宿主机的静态文件目录挂载到容器的 Nginx 默认网站根目录。
- 宿主机路径:
/docker/nginx/data/html/dist
(存放前端构建产物如index.html
)- 容器路径:
/usr/share/nginx/html
- 用途:更新前端文件时只需替换宿主机目录内容。
-v /docker/nginx/logs/nginx:/var/log/nginx
将容器的 Nginx 日志目录挂载到宿主机
--network ruoyi:
- 将容器连接到名为
ruoyi
的 Docker 网络。- 用途:如果 RuoYi 的其他服务(如后端 API)也在该网络中,Nginx 可通过容器名(如
ruoyi-app
)直接访问它们,无需依赖 IP。
-e TZ="Asia/Shanghai":
- 设置容器的时区为上海(东八区)。
- 用途:确保容器内的时间戳与宿主机一致(影响日志时间等)。
使用docker ps 查看容器运行状态,使用docker logs -f nginx查看容器运行日志:
docker ps
docker logs -f nginx
后端部署
首先 ruoyi-boot 后端部署需要jar包,Dockerfile,配置文件,mysql,redis 等。
我在 /usr/ruoyi 目录下存放部署所需文件:
我已经在上面创建了名为 ruoyi 的 network,后端与前端需在同一 network。
1.mysql启动:
首先创建mysql的工作目录:
mkdir -p /docker/mysql/log
mkdir -p /docker/mysql/data
mkdir -p /docker/mysql/conf
启动mysql容器:
docker run \--name mysql \-d \-p 3306:3306 \--restart=always \--network ruoyi \-v /docker/mysql/log:/var/log/mysql \-v /docker/mysql/data:/var/lib/mysql \-v /docker/mysql/conf:/etc/mysql/conf.d \-v /etc/localtime:/etc/localtime:ro \-e MYSQL_ROOT_PASSWORD=1234 \mysql:latest
-d 后台运行
–name 容器名
-v 数据卷
-p 端口映射
–network 网络指定
-e 环境配置,这里指定了root用户的密码
MYSQL_ROOT_PASSWORD=1234,是设置mysql的密码,请修改成复杂度高的密码。
--restart=always,当容器因任何原因停止时,Docker 会自动重新启动该容器。
2.redis启动:
首先创建redis的工作目录:
mkdir -p /docker/redis/conf
mkdir -p /docker/redis/data
mkdir -p /docker/redis/logs
然后配置redis配置文件:
在/docker/redis/conf目录下创建redis.conf:
#端口号
port 6379#配置密码,不要可以删掉
requirepass 1234#这个配置不要会和docker -d 命令 冲突
# 服务器运行模式,Redis以守护进程方式运行,默认为no,改为yes意为以守护进程方式启动,可后台运行,除非kill进程,改为yes会使配置文件方式启动redis失败,如果后面redis启动失败,就将这个注释掉
daemonize no#当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定(自定义)
#pidfile /docker/redis/run/redis6379.pid#默认为no,redis持久化,可以改为yes
appendonly yes#当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 60
# 服务器系统默认配置参数影响 Redis 的应用
maxclients 10000
tcp-keepalive 300#指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合(分别表示900秒(15分钟)内有1个更改,300秒(5分钟)内有10个更改以及60秒内有10000个更改)
save 900 1
save 300 10
save 60 10000# 按需求调整 Redis 线程数
tcp-backlog 511# 设置数据库数量,这里设置为16个数据库
databases 16# 启用 AOF, AOF常规配置
appendonly yes
appendfsync everysec
no-appendfsync-on-rewrite no
auto-aof-rewrite-percentage 100
auto-aof-rewrite-min-size 64mb# 慢查询阈值
slowlog-log-slower-than 10000
slowlog-max-len 128# 是否记录系统日志,默认为yes
syslog-enabled yes#指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
loglevel notice# 日志输出文件,默认为stdout,也可以指定文件路径
logfile stdout# 日志文件
#logfile /logs/redis.log
启动redis容器:
docker run --name redis \
-p 6379:6379 \
-v /docker/redis/conf/redis.conf:/etc/redis/redis.conf \
-v /docker/redis/data:/data \
-v /docker/redis/logs:/logs \
--network ruoyi \
-d --restart=always redis:latest redis-server /etc/redis/redis.conf
如果需要远程连接阿里云服务器的mysql、redis。需要去阿里云的防火墙把3306,6379放出来才能访问。不使用就禁用否则不安全。
3.Dockerfile文件:
# 基础镜像
FROM eclipse-temurin:8
# 作者
MAINTAINER eleven
# 工作目录
WORKDIR /usr/ruoyi
# 同步docker内部的时间
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 设置时区
ENV TZ=Asia/Shanghai
EXPOSE 8080
# 复制jar包到/user/ruoyi下
ARG JAR_FILE
ADD ${JAR_FILE} ./ruoyi-admin.jarENTRYPOINT ["nohup","java","-Dspring.profiles.active=druid","-Dspring.config.location=/usr/ruoyi/application.yml,/usr/ruoyi/application-druid.yml","-jar","/usr/ruoyi/ruoyi-admin.jar",">","/usr/ruoyi/ruoyi-admin.log","&>","&"]
这么配置是为了一但我需要更改配置文件,仅需更改上传的这两个配置文件而无需重新打包。
4.启动后端服务:
在/usr/ruoyi下使用命令将jar包构建成镜像:
docker build -t ruoyi-boot:1 .
随后运行容器:
docker run -d \--name ruoyi \--network ruoyi \-v /usr/ruoyi:/usr/ruoyi \-v /var/log/ruoyi:/var/log/ruoyi \-p 8080:8080 \-e JAVA_OPTS="-Xms1g -Xmx2g" \--restart=unless-stopped \ruoyi-boot:1 \java -jar /usr/ruoyi/ruoyi-admin.jar
查看日志:
docker logs -f --tail 100 ruoyi
注意!!!前后端需在同一network中。