linux前后端分离项目环境搭建、项目部署完整过程_热爱代码的猿猿的博客-CSDN博客
linux前后端分离项目部署完整过程
-
参考此博文需要的知识储备:linux基础命令
-
用到的环境及知识:linux、docker、nginx、mysql、redis、java、jdk1.8
-
具体容器信息
查看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
如图:
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
依次执行以下命令
# 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
2.3 参数解释
解决不能输入中文
-e LANG="C.UTF-8"
--restart=always
always 容器退出时总是重启
-e MYSQL_ROOT_PASSWORD
设置myslq容器登录密码
-e TZ=
设置时区
-d
后台运行
-e LANG="C.UTF-8"
容器内部不能输入中文解决
上传初始化脚本,上传写好的配置文件
创建配置文件mysqld.cnf
并上传到docker容器中
宿主机目录对应容器目录 /etc/mysql/my.conf
[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
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
查看日志
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配置的路径里面,我们以瑞吉项目为例。
2. 访问页面
回顾上面的nginx准备,注意代理端口号
访问:ip+端口号====》回车
访问成功
3. F12 查看请求路径
4.启动后端项目
nohup java -jar reggie_take_out-1.0-SNAPSHOT.jar &> start.log &
nohup:后台运行
start.log: 打印日志
动态打开日志文件,登录项目
登录成功
指定端口号指定路径启动项目方法
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 &
搭建rabbitmq
docker run -d -p 15673:15672 -p 5674:5672 \
--restart=always \
-e RABBITMQ_DEFAULT_VHOST=my_vhost \
-e RABBITMQ_DEFAULT_USER=xxx \
-e RABBITMQ_DEFAULT_PASS=xxxxxx \
--hostname myRabbit \
--name rabbitmq-new\
rabbitmq:latest
启动web客户端
方法一:进入容器开启
#进入rabbitmq容器
docker exec -it 容器名/容器id /bin/bash
#开启web客户端
rabbitmq-plugins enable rabbitmq_management
方法二:不进入容器开启
docker exec -it 容器名/容器id rabbitmq-plugins enable rabbitmq_management
连接
amqp://xxx:xxxx@ip:5674/my_vhost
解决报错
(1)进入到启动的rabbitmq的容器中
docker exec -it 容器名称/容器id /bin/bash
(2)切换到rabbitmq的配置文件目录
cd /etc/rabbitmq/conf.d/
(3)修改配置文件- management_agent.disable_metrics_collector.conf
echo management_agent.disable_metrics_collector = false > management_agent.disable_metrics_collector.conf
(4)查看配置文件-
cat management_agent.disable_metrics_collector.conf
(5)退出容器
exit
(6)重启容器
docker restart 容器名称/容器id
再次进入rabbitmq的web客户端页面,点击各个页面就不会出现那个提示,并且出现了统计图表以及可以添加一下展示的信息字段。
管理后台参数介绍
参考
评论区