linux前后端分离项目部署完整过程
查看docker日志
tailf /var/log/messages
docker logs -f 容器名
环境搭建分为两种方式,一种直接在linux系统上安装相应的环境,一种直接用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
然后更新本地镜像源:
# 设置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 安装的时候不要问,问就是往下安
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
如图:
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
详细信息,进入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_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容器,并完成容器内目录映射到宿主机上(服务器上)
mysql容器内部: /etc/mysql/my.conf ;
映射到宿主机(服务器)上: /home/xxxxxxx/mysql/conf (注意要提前在宿主机上建好要映射的路径)
mysql容器内部: /data
映射到宿主机上: /home/xxxxxxx/mysql/data
--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’;
清理缓存
dbsize
flushall
docker pull redis:6.2.7
mkdir -p /home/xxxxxxx/redis6/redis-conf
mkdir -p /home/xxxxxxx/redis6/data
wget http://download.redis.io/redis-stable/redis.conf
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
拉取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;
}
}
前面我们已经配置过了nginx,现在nginx已经能代理我们的前端项目了。
将前端项目上传至nginx配置的路径里面,我们以瑞吉项目为例。
回顾上面的nginx准备,注意代理端口号
访问:ip+端口号====》回车
访问成功
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/xxxxxxx/xxxxxxx_server/xxxxxxx-system-1.0.0-RELEASE.jar
--spring.profiles.active=dev --server.port=8005 > start.log 2>&1 &