linux前后端分离项目环境搭建、项目部署完整过程

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

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

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

  3. 具体容器信息

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JqA7RROl-1652929975959)(https://gitee.com/huizai-175/images-typora/raw/master/img1/image-20220506215313597.png)]

查看docker日志

tailf /var/log/messages

docker logs -f 容器名

文章目录

  • 一.前期准备:服务器上环境搭建
    • 1. docker准备
          • 1.1 安装docker
      • 1.1.卸载(可选)
      • 1.2.安装docker
      • 1.3.启动docker
      • 1.4.配置镜像加速
    • 2. mysql准备
        • 说明:
          • 2.1 配置文件目录映射路径:
          • 2.2 数据目录映射路径
          • 2.3 参数解释
          • 上传初始化脚本,上传写好的配置文件
          • 出现的问题解决
    • 3.redis准备
          • 拉取redis6.2.7镜像
          • 1.创建映射目录
          • 2.进入配置目录下载配置文件
          • 3.创建容器
    • 4.nginx准备
  • 二、项目启动
      • 1. 上传项目
      • 2. 访问页面
      • 3. F12 查看请求路径
      • 4.启动后端项目

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

环境搭建分为两种方式,一种直接在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

如图:

在这里插入图片描述

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

linux前后端分离项目环境搭建、项目部署完整过程_第1张图片

依次执行以下命令

# 1.docker镜像拉取mysql8.0.29 镜像
docker pull mysql:8.0.29-oracle
# 2.使用镜像安装mysql容器,并完成容器内目录映射到宿主机上(服务器上)
docker run --name mysql_xxxxxxx --restart=always -v /home/xxxxxxx/mysql/conf:/etc/mysql/my.conf -v /home/xxxxxxx/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_xxxxxxx是容器名称
docker exec -it  mysql_xxxxxxx 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/xxxxxxx/mysql/conf (注意要提前在宿主机上建好要映射的路径)

2.2 数据目录映射路径

mysql容器内部: /data

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

linux前后端分离项目环境搭建、项目部署完整过程_第2张图片

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

linux前后端分离项目环境搭建、项目部署完整过程_第3张图片

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

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

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qfgUDWJr-1652929975962)(https://gitee.com/huizai-175/images-typora/raw/master/img1/image-20220510201228031.png)]

[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/xxxxxxx/redis6/redis-conf
mkdir -p /home/xxxxxxx/redis6/data
2.进入配置目录下载配置文件
wget http://download.redis.io/redis-stable/redis.conf

linux前后端分离项目环境搭建、项目部署完整过程_第4张图片

3.创建容器
docker run --name redis6 -p 6379:6379  -v /home/xxxxxxx/redis6/data:/data    -v /home/xxxxx/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/xxxxxxx/redis6/data:/data  \
-v /home/xxxxxxx/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

在这里插入图片描述

查看日志

docker logs -f

redis配置文件下载
redis.conf · Gitee 极速下载/redis - Gitee.com

4.nginx准备

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

docker pull nginx

创建宿主机映射目录

瑞吉项目

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

xxxxxx项目

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

/data/project/xxxxxxx    //项目存放路径
/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;
	}

}

xxxxx项目

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

#xxxxxxx-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/xxxxxxx/xxxxxxx_h5/dist/;
        try_files $uri $uri/ /h5/index.html?s=$uri&$args;
        index index.html index.htm index.php;
    }

    location / {
        root  /data/project/xxxxxxx/xxxxxxx_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配置的路径里面,我们以瑞吉项目为例。

linux前后端分离项目环境搭建、项目部署完整过程_第5张图片

2. 访问页面

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

linux前后端分离项目环境搭建、项目部署完整过程_第6张图片

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

linux前后端分离项目环境搭建、项目部署完整过程_第7张图片

访问成功

3. F12 查看请求路径

linux前后端分离项目环境搭建、项目部署完整过程_第8张图片

4.启动后端项目

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

nohup:后台运行

start.log: 打印日志

linux前后端分离项目环境搭建、项目部署完整过程_第9张图片

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

登录成功

linux前后端分离项目环境搭建、项目部署完整过程_第10张图片

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

nohup java -server  -XX:-DisableExplicitGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -jar 
/data/project/xxxxxxx/xxxxxxx_server/xxxxxxx-system-1.0.0-RELEASE.jar 
--spring.profiles.active=dev --server.port=8005 > start.log 2>&1 &

你可能感兴趣的:(后端冲鸭,计算机各大技术栈学习笔记,linux,docker,容器)