侧边栏壁纸
博主头像
SeaDream乄造梦

Dream,Don't stop a day of hard and don't give up a little hope。 ——不停止一日努力&&不放弃一点希望。

  • 累计撰写 39 篇文章
  • 累计创建 20 个标签
  • 累计收到 13 条评论

目 录CONTENT

文章目录

基于docker项目部署.md

SeaDream乄造梦
2022-05-26 / 0 评论 / 0 点赞 / 919 阅读 / 7,857 字
温馨提示:
亲爱的,如果觉得博主很有趣就留下你的足迹,并收藏下链接在走叭

linux前后端分离项目环境搭建、项目部署完整过程_热爱代码的猿猿的博客-CSDN博客

linux前后端分离项目部署完整过程

  1. 参考此博文需要的知识储备:linux基础命令

  2. 用到的环境及知识:linux、docker、nginx、mysql、redis、java、jdk1.8

  3. 具体容器信息

    image-20220506215313597

查看docker日志

tailf /var/log/messages

docker logs -f 容器名

一.前期准备:服务器上环境搭建

环境搭建分为两种方式,一种直接在linux系统上安装相应的环境,一种直接用docker镜像部署

1. docker准备

1.1 安装docker

1.1.卸载(可选)

如果之前安装过旧版本的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

1.2.安装docker

首先需要大家虚拟机联网,安装yum工具

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

然后更新本地镜像源:

# 设置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

然后输入命令:

yum install -y docker-ce

docker-ce为社区免费版本。 -y 安装的时候不要问,问就是往下安

1.3.启动docker

Docker应用需要用到各种端口,逐一去修改防火墙设置。非常麻烦,因此建议大家直接关闭防火墙!

启动docker前,一定要关闭防火墙后!!

# 关闭
systemctl stop firewalld
# 禁止开机启动防火墙   永久关闭防火墙
systemctl disable firewalld
# 查看防火墙状态
firewall-cmd --state

通过命令启动docker:

systemctl start docker  # 启动docker服务

systemctl stop docker  # 停止docker服务

systemctl restart docker  # 重启docker服务

查看是否启动成功

systemctl status docker 
# 或   如果能查到版本 证明安装和启动是没问题的
docker -v

然后输入命令,可以查看docker版本:

docker -v

如图:

image-20210418154704436

1.4.配置镜像加速

docker官方镜像仓库网速较差,我们需要设置国内镜像服务:

参考阿里云的镜像加速文档:https://cr.console.aliyun.com/cn-hangzhou/instances/mirrors

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器

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

2. mysql准备

详细信息,进入docker官网查看。由于是外网,打开比较慢,必要时可翻墙试试。我用的是下面这个版本:

https://hub.docker.com/_/mysql?tab=tags

image-20220509230011617

依次执行以下命令

# 1.docker镜像拉取mysql8.0.29 镜像
docker pull mysql:8.0.29-oracle
# 2.使用镜像安装mysql容器,并完成容器内目录映射到宿主机上(服务器上)
docker run --name mysql_zhinengpeihu --restart=always -v /home/zhinengpeihu/mysql/conf:/etc/mysql/my.conf -v /home/zhinengpeihu/mysql/data:/var/lib/mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypassword -e TZ=Asia/Shanghai  -e LANG="C.UTF-8"   -d mysql:8.0.29-oracle
# 3. 初始化配置mysql——一般项目mysql端口是不开放的,这时候我们就需要使用mysql命令来初始化数据库啦
数据库创建
## 3.1进入容器,mysql_zhinengpeihu是容器名称
docker exec -it  mysql_zhinengpeihu bash
## 3.2登录数据库
mysql -uroot -pmypassword
## 3.3创建数据库
CREATE DATABASE `escortdb_zhxin` CHARACTER SET 'utf8mb4' COLLATE 'utf8mb4_general_ci';
## 3.4在宿主机映射的data目录上传初始化数据库脚本
## 3.5在docker容器中查看文件
cd   /var/lib/mysql/zhxinsql/
ls
## 3.5初始化数据库
use  escortdb_zhxin ;
source  /var/lib/mysql/zhxinsql/escortdb_zhxin_prod.sql;

说明:

==# 2.使用镜像安装mysql容器,并完成容器内目录映射到宿主机上(服务器上)==

2.1 配置文件目录映射路径:

mysql容器内部: /etc/mysql/my.conf ;

映射到宿主机(服务器)上: /home/zhinengpeihu/mysql/conf (注意要提前在宿主机上建好要映射的路径)

2.2 数据目录映射路径

mysql容器内部: /data

映射到宿主机上: /home/zhinengpeihu/mysql/data

image-20220509230024941

2.3 参数解释
解决不能输入中文
-e LANG="C.UTF-8"
--restart=always
always 容器退出时总是重启
-e MYSQL_ROOT_PASSWORD
设置myslq容器登录密码
-e TZ=
设置时区
-d
后台运行
-e LANG="C.UTF-8"
容器内部不能输入中文解决
上传初始化脚本,上传写好的配置文件

image-20220510201228031

image-20220510201556145

创建配置文件mysqld.cnf并上传到docker容器中

宿主机目录对应容器目录 /etc/mysql/my.conf

image-20220510202520906

[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
#log-error      = /var/log/mysql/error.log
# By default we only accept connections from localhost
#bind-address   = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character_set_server=utf8
init_connect='SET NAMES utf8'
max_allowed_packet = 20M

[mysql]
default-character-set = utf8

[mysql.server]
default-character-set = utf8

[mysqld_safe]
default-character-set = utf8

[client]
default-character-set = utf8
出现的问题解决

解决mysql不能输入中文

docker 的 mysql 容器 sql 不能输入中文解决方法_树下水月的博客-CSDN博客_docker mysql无法输入中文

解决mysql中文乱码

中文乱码参考博客
https://blog.csdn.net/weixin_42168191/article/details/103159920
https://blog.csdn.net/weixin_44038167/article/details/106854584
SET NAMES 'utf8';

3.redis准备

清理缓存

dbsize
flushall
拉取redis6.2.7镜像
docker pull redis:6.2.7
1.创建映射目录
mkdir -p /home/zhinengpeihu/redis6/redis-conf
mkdir -p /home/zhinengpeihu/redis6/data
2.进入配置目录下载配置文件
wget http://download.redis.io/redis-stable/redis.conf

image-20220510210627764

3.创建容器
docker run --name redis6 -p 6379:6379  -v /home/zhinengpeihu/redis6/data:/data    -v /home/zhinengpeihu/redis6/redis-conf:/usr/local/etc/redis    -d --restart=always  redis:6.2.7   redis-server   --appendonly yes  --requirepass "mypassword"
docker run -p 6379:6379 \
-v /home/zhinengpeihu/redis6/data:/data  \
-v /home/zhinengpeihu/redis6/redis-conf:/usr/local/etc/redis \
--name redis6 \
-d --restart=always redis:6.2.7 redis-server \
--appendonly yes --requirepass "mypassword"
 
 
-p   	 			表示端口映射
-v    				表示宿主机和容器之间的文件映射
--name 				表示docker容器的名字
-d    				表示在后台运行,并且打印容易id
--restart=always    表示可以自启动
redis:latest    	启动容器的镜像
--appendonly yes    表示redis持久化
--requirepass    	表示设置的密码

查看是否安装成功

docker ps -a

image-20220510212622172

查看日志

docker logs -f

redis.conf · Gitee 极速下载/redis - Gitee.com

4.nginx准备

拉取nginx镜像,不带版本默认是最新版本latest

docker pull nginx

创建宿主机映射目录

我得个人博客

upstream halo {
  server 172.17.0.1:1314;
}
server {
  listen 80;
  listen [::]:80;
  server_name www.yahuihui.cn;
  client_max_body_size 1024m;
  location / {
    proxy_pass http://halo;
    proxy_set_header HOST $host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
}

docker 拉取

docker run --name nginx_myhalo -p 80:80 -p 443:443 -v /projects/halo:/projects/halo -v /projects/halo/nginx/nginx_conf/conf.d:/etc/nginx/conf.d -v /projects/halo/nginx/log/nginx:/var/log/nginx:rw -d nginx:latest
docker run -it -d --name halo  -p 1314:8090 -v /projects/halo/haloData:/root/.halo  --restart=always halohub/halo

瑞吉项目

docker run --name nginx_reggie -p 8001:80 -v /projects/reggie/reggie_web:/projects/reggie/reggie_web  -v /projects/reggie/nginx/conf.d:/etc/nginx/conf.d -v /projects/reggie/nginx/log/nginx:/var/log/nginx:rw -d nginx:latest

陪护项目

docker run --name nginx_peihu -p 8000:80 -v /data/project/peihu:/data/project/peihu -v /home/zhinengpeihu/nginx/nginx_conf/conf.d:/etc/nginx/conf.d -v /home/zhinengpeihu/log/nginx:/var/log/nginx:rw -d nginx:latest

/data/project/peihu    //项目存放路径
/etc/nginx/conf.d      //配置文件路径
/var/log/nginx        //日志文件目录
:rw  读写权限

配置文件name.conf

瑞吉项目

upstream myserver3{
    server 172.17.0.1:8080;
}

server{
    listen 80;
    #域名,根据实际情况修改
    server_name localhost;
    client_max_body_size 20m;
    #后台,根据实际情况修改
    access_log /var/log/nginx/host.access.log main;

    location / {
        root  /projects/reggie/reggie_web/dist/;
        try_files $uri $uri/ /index.html?s=$uri&$args;
        index index.html;
    }


        #反向代理配置
     location ^~ /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 X-Forwarded-Proto $scheme;
   		 rewrite ^/api/(.*)$ /$1 break;
   		 proxy_pass http://myserver3;
   		 index  index.html index.htm;
	}

}

陪护项目

#参考博客:https://blog.csdn.net/qq_42937522/article/details/108179441

#peihu-server
upstream myserver3{
    server 172.17.0.1:8004;
}


server{
    listen 80;
    #域名,根据实际情况修改
    server_name localhost;
    client_max_body_size 20m;

    access_log /var/log/nginx/host.access.log main;

    #后台,根据实际情况修改
    
    location  ^~ /h5/ {
        alias  /data/project/peihu/peihu_h5/dist/;
        try_files $uri $uri/ /h5/index.html?s=$uri&$args;
        index index.html index.htm index.php;
    }

    location / {
        root  /data/project/peihu/peihu_web/dist/;
        try_files $uri $uri/ /index.html?s=$uri&$args;
        index index.html index.htm index.php;
    }


    #后端
    location /h5/undefined/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 X-Forwarded-Proto $scheme;
       proxy_pass http://myserver3/api;
       index  index.html index.htm;
       rewrite "^/h5/undefined/(.*)$" /$1 break;
    }
    location  /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 X-Forwarded-Proto $scheme;
	 proxy_pass http://myserver3;
	 index  index.html index.htm;
    }  

}

二、项目启动

1. 上传项目

前面我们已经配置过了nginx,现在nginx已经能代理我们的前端项目了。

将前端项目上传至nginx配置的路径里面,我们以瑞吉项目为例。

image-20220519103430283

image-20220519103626474

2. 访问页面

回顾上面的nginx准备,注意代理端口号

image-20220519103815776

访问:ip+端口号====》回车

image-20220519103847641

image-20220519103928888

访问成功

3. F12 查看请求路径

image-20220519104249129

4.启动后端项目

nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> start.log &

nohup:后台运行

start.log: 打印日志

image-20220519104708734

动态打开日志文件,登录项目

登录成功

image-20220519105225119

image-20220519105209576

指定端口号指定路径启动项目方法

nohup java -server  -XX:-DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -jar 
/data/project/peihu/peihu_server/zhinengpeihu-system-1.0.0-RELEASE.jar 
--spring.profiles.active=dev --server.port=8004 > start.log 2>&1 &
0

评论区