Linux环境下部署若依前后端分离框架

一、打包

  1. 前端

  • vue.config.js文件中,80是前端请求端口,8080是后端请求端口,如果担心端口占用,则将前端请求端口调整成70。

  • ruoyi-ui目录下,执行命令npm run build:prod,这是按照正式环境的配置打包。打包完成后的dist目录在ruoyi-ui目录下。

  1. 后端

  • 修改application.yml文件,其中redis的地址要从默认的localhost改成服务器地址,比如我这边的192.168.124.57。

  • 执行打包操作,先clean,之后执行package。打包成功之后会在ruoyi-admin/target目录下生成ruoyi-admin.jar文件。

二、部署

  1. 配置Docker

  • 为了避免Docker之间会存在冲突,可以将之前系统里面的Docker进行卸载。

yum remove docker \
    docker-client \
    docker-client-latest \
    docker-common \
    docker-latest \
    docker-latest-logrotate \
    docker-logrotate \
    docker-selinux \
    docker-engine-selinux \
    docker-engine \
    docker-ce
  • 安装yum工具

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

注:如果在安装中遇到错误:Invalid version flag: if,可以参考这篇文章:

linux虚拟IP/yum Invalid version flag: if 错误//configure:错误:HTTP重写模块需要PCRE库。_error: invalid version flag: if-CSDN博客

  • 更新本地镜像源

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

yum makecache fast
  • 安装docker-ce社区免费版

yum install -y docker-ce
  • 关闭防火墙,避免Docker启动失败

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙
systemctl disable firewalld
  • 通过命令启动Docker

# 启动docker服务
systemctl start docker  
# 停止docker服务
systemctl stop docker  
# 重启docker服务
systemctl restart docker  
  • docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台

sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
  "registry-mirrors": ["https://***.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
  1. 配置MySQL

  • 拉取mysql镜像,默认是最高版本,这里指定为8.0.26。

docker pull mysql:8.0.26
  • 在宿主机上创建对应的文件夹来对其进行挂载,易于管理Mysql配置文件,(当前操作是在根目录/home下),创建mysql目录并进入创建conf,data两个目录。

mkdir -p mysql && cd $_ && mkdir {conf,data}
  • 在conf目录下创建my.cnf文件。

 # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
 
[mysqld]
 
pid-file = /var/run/mysqld/mysqld.pid
 
socket = /var/run/mysqld/mysqld.sock
 
datadir = /var/lib/mysql
 
secure-file-priv= NULL
 
# Disabling symbolic-links is recommended to prevent assorted security risks
 
symbolic-links=0
 
# Custom config should go here
 
!includedir /etc/mysql/conf.d/
 
max_connections=1000
wait_timeout=120
interactive_timeout=300
 
lower_case_table_names=1
  • 创建MySQL容器。

docker run \
--restart=unless-stopped \
--name mysql \
-e MYSQL_ROOT_PASSWORD=root \
-p 3306:3306 \
-v /home/mysql/conf/my.cnf:/etc/mysql/conf.d/my.cnf \
-v /home/mysql/data:/var/lib/mysql \
-d mysql:8.0.26
  • 进入mysql容器修改加密规则防止远程访问报错。

# 进入mysql容器
docker exec -it mysql bash
# 登录mysql,输入密码root,前面 -e参数设置的就是密码
mysql -uroot -p

use mysql

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

FLUSH PRIVILEGES;

ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
  • 至此就可以进行远程连接了,使用navicat进行远程连接,导入对应的数据库。

  1. 配置Redis

# 拉取redis镜像
docker pull redis
# 创建并运行redis的持久化容器
docker run --name ruoyi-redis -p 6379:6379 -d redis redis-server --save 60 1 --loglevel warning
# 进入redis容器
docker exec -it mr redis-cli
#ping-->pong即为安装成功
  1. 配置Nginx

  • 拉取nginx镜像

# 拉取nginx镜像
docker pull nginx
  • 创建本地文件夹与nginx容器做挂载

mkdir -p /mydata/nginx

mkdir conf html log
  • conf文件夹下创建 nginx.conf文件,编辑内容如下:

worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

    server {
        listen       80; # 监听的端口
        server_name  172.16.7.102 # 你的IP地址
        charset utf-8;

    location / {
        root  /usr/share/nginx/html/dist;
        try_files $uri $uri/ /index.html last;
        index  index.html index.htm;
        }
        
    location /prod-api/ {
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header REMOTE-HOST $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_pass http://172.16.7.102:8080/; # 你的IP地址
        }

        error_page   500 502 503 504  /50x.html;
            location = /50x.html {
               root   html;
        }
    }
    include /etc/nginx/conf.d/*.conf;
}

注:上面的 listen 80; 对应的是前端配置暴露的端口号,proxy_pass http://172.16.7.102:8080/;对应的是后端的application.yml配置的端口号。

  • 将前端打包好的dist文件夹上传到 /mydata/nginx/html 目录下,对其进行挂载并且运行nginx容器:

docker run -d -p 80:80 --name ruoyi-nginx \
-v /mydata/nginx/conf/nginx.conf:/etc/nginx/nginx.conf \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/log:/var/log/nginx \
nginx
  1. 将后端项目打包成镜像在Docker中使用

  • 在 /mydata文件夹下创建一个文件夹docker,将后端打包好的jar包和Dockerfile文件拷贝到该目录下,Dockerfile的文件内容如下:

FROM java:8
VOLUME /tmp
ADD *.jar /app.jar
EXPOSE 8080

RUN sh -c 'touch /app.jar'
ENV JAVA_OPTS=""
ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
ENV TZ=Asia/Shanghai
ENV TimeZone=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TimeZone /etc/localtime && echo $TimeZone > /etc/timezone
  • 在 /mydata/docker 文件夹下构建镜像

# 注意后面有一个.
docker build -t ruoyi-admin .
  • 使用自己的镜像启动容器,需要指定文件地址,要不然容器关闭文件就没了。

docker run -d -p 8080:8080 --name ruoyi \
-v /home/ruoyi/uploadPath:/home/ruoyi/uploadPath \
--restart=always \
ruoyi-admin
  • 通过 ip地址:80访问,出行登录界面即为成功

三、补充一些命令

# 启动所有容器
docker start $(docker ps -a -q)

# 停止所有容器
docker stop $(docker ps -a -q)

# 删除所有容器
docker rm -f $(docker ps -a -q)

# 删除指定容器
docker rm -f <容器id> 1

# 查看容器
docker ps -a

# 查看镜像
dicker images

# 删除指定镜像
docker rmi <镜像id>

# 查看实时日志
docker logs -f -t --tail=100 ruoyi

# 设置docker自启动
systemctl enable docker.service

# 设置容器自启动
docker update --restart=always 容器ID/容器名
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值