1、简介
2、中间件部署
2.1 mysql部署
2.1.1 下载mysql8.0二进制部署包
#耐心等待即可
wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz

#解压mysql
mkdir /data
tar xf mysql-8.0.43-linux-glibc2.28-x86_64.tar.xz -C /data
cd /data && mv mysql-8.0.43-linux-glibc2.28-x86_64 mysql
2.1.2 配置mysql
创建日志、配置目录
cd /data/mysql
mkdir -p {logs,conf,data}
创建简单启动的配置文件,路径/data/mysql/conf/my.cnf
[mysqld]
datadir=/data/mysql/data
socket=/tmp/mysql.sock
log-error=/data/mysql/logs/mysqld.log
pid-file=/data/mysql/logs/mysqld.pid
# 性能优化参数(根据需求调整)
innodb_buffer_pool_size=1G
max_allowed_packet=64M
lower_case_table_names=1
[client]
socket=/tmp/mysql.sock
创建mysql用户和用户组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
chown -R mysql:mysql /data/mysql
设置环境变量
echo "export PATH=/data/mysql/bin:$PATH" >> /etc/profile
source /etc/profile
初始化数据库
mysqld --defaults-file=/data/mysql/conf/my.cnf --initialize --user=mysql

2.1.3 启动mysql
配置守护进程
cat > /usr/lib/systemd/system/mysqld.service << EOF
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
Type=simple
TimeoutSec=0
PermissionsStartOnly=true
ExecStart=/data/mysql/bin/mysqld_safe \
--defaults-file=/data/mysql/conf/my.cnf \
--datadir=/data/mysql/data \
--user=mysql
LimitNOFILE = 65565
Restart=on-failure
Restart=always
RestartSec=5
RestartPreventExitStatus=1
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false
EOF
载入守护进程
systemctl daemon-reload
启动mysql
#加入开机自启并快速启动
systemctl enable mysql --now
检查启动情况
netstat -tunlp|grep 3306

2.1.4 数据库环境配置
获取初始密码
grep 'temporary password' /data/mysql/logs/mysqld.log
修改root密码
mysql -uroot -p'你的临时密码'
#改密码sql
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';
#刷新权限sql
FLUSH PRIVILEGES;
#退出
exit
创建后端数据库备用
#创建yamidb
CREATE DATABASE yami_shops CHARACTER SET utf8 COLLATE utf8_general_ci;
#创建yami账号并授权远程访问
CREATE USER 'yami'@'%' IDENTIFIED WITH mysql_native_password BY '你的yami账号密码';
#授权yami库
GRANT ALL PRIVILEGES ON yami_shops.* TO 'yami'@'%';
#刷新权限
FLUSH PRIVILEGES;
导入数据
#切换到数据sql目录
cd /data/mall4j-master/db
mysql -uroot -p'你的密码'
#导入sql
source yami_shop.sql
2.2 redis部署
2.2.1 下载redis-6.2.19源码包
#耐心等待即可
wget https://download.redis.io/releases/redis-6.2.19.tar.gz

#解压redis
tar xf redis-6.2.19.tar.gz -C /data
2.2.2 配置redis
准备编译环境
yum -y install gcc gcc-c++ make
编译
cd /data/redis-6.2.19
#速度取决于CPU,出现一下字眼即可
make

编译安装,会在redis目标目录生成bin目录
mkdir -p /data/redis/{conf,logs,data}
cd /data/redis-6.2.19
make PREFIX=/data/redis install

复制配置文件
cp /data/redis-6.2.19/redis.conf /data/redis/conf/
修改配置文件,vim /data/redis/conf/redis.conf
#守护进程模式
daemonize yes
#远程访问
bind 0.0.0.0
#监听端口
port 6379
#pid存储路径
pidfile /data/redis/logs/redis.pid
#日志存储路径
logfile /data/redis/logs/redis.log
#数据存储路径
dir /data/redis/data
#关闭保护模式
protected-mode no
#设置密码
requirepass $your_password
创建redis用户和用户组
groupadd redis
useradd -r -g redis -s /bin/false redis
chown -R redis:redis /data/redis
2.2.3 启动redis
配置守护进程
cat > /usr/lib/systemd/system/redis.service << EOF
[Unit]
Description=Redis
After=network.target
[Service]
User=redis
Group=redis
Type=forking
TimeoutSec=0
PIDFile=/data/redis/logs/redis.pid
ExecStart=/data/redis/bin/redis-server /data/redis/conf/redis.conf
Restart=on-failure
PrivateTmp=true
[Install]
WantedBy=multi-user.target
EOF
载入守护进程
systemctl daemon-reload
启动mysql
#加入开机自启并快速启动
systemctl enable mysql --now
检查启动情况
netstat -tunlp|grep 6379

2.2.4 测试连接redis
./redis-cli -a 你的密码

2.3 nginx部署
2.3.1 下载nginx源码
wget https://nginx.org/download/nginx-1.28.0.tar.gz
2.3.2 编译nginx
解压nginx源码
tar xf https://nginx.org/download/nginx-1.28.0.tar.gz
编译
cd nginx-1.28.0
#确保有openssl和pcre库,若不通外网,需要源码编译
yum install -y openssl openssl-devel pcre pcre-devel
#加入一些常用模块
./configure --prefix=/data/nginx --sbin-path=/data/nginx/sbin/nginx --modules-path=/data/nginx/modules --conf-path=/data/nginx/conf/nginx.conf --error-log-path=/data/nginx/log/error.log --http-log-path=/data/nginx/log/access.log --pid-path=/data/nginx/log/nginx.pid --lock-path=/data/nginx/log/nginx.lock --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module
#编译
make && make install
2.3.3 配置nginx
/data/nginx/nginx.conf文件核心内容
server {
listen 80;
server_name 127.0.0.1;
#前端目录
root /data/nginx/mall;
location / {
}
# 跨域配置
location /apis {
rewrite ^/apis/(.*)$ /$1 break;
proxy_pass http://127.0.0.1:8111;
}
}
创建前端目录备用
mkdir -p /data/nginx/mall
2.3.4 启动nginx
/data/nginx/sbin/nginx
#此时访问会404,为正常,因为前端还没有就绪
3、编译后端
3.1 准备jdk环境
下载openjdk
解压openjdk
tar xf OpenJDK17U-jdk_x64_linux_hotspot_17.0.15_6.tar.gz -C /data
cd /data
mv jdk-17.0.15+6 jdk
设置环境变量
export JAVA_HOME=/data/jdk
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar:$CLASSPATH
验证java
java -version

3.2 准备maven环境
下载maven二进制包
wget https://dlcdn.apache.org/maven/maven-3/3.9.11/binaries/apache-maven-3.9.11-bin.tar.gz
解压maven
tar xf apache-maven-3.9.11-bin.tar.gz -C /data
cd /data
mv apache-maven-3.9.11 mvn
设置环境变量
echo "export MAVEN_HOME=/data/mvn" >> /etc/profile
echo "export PATH=$PATH:$MAVEN_HOME/bin" >> /etc/profile
source /etc/profile
验证maven

3.3 上传商城后端源码包
上传源码包到/data/mall4j-master
3.4 编译jar包
修改配置,数据库账号密码,端口号
vim yami-shop-admin/src/main/resources/application-prod.yml

修改配置,项目地址
vim yami-shop-admin/src/main/resources/logback/logback-prod.xml

修改配置,数据库账号密码,端口号
vim yami-shop-api/src/main/resources/application-prod.yml

修改配置,项目地址
vim yami-shop-api/src/main/resources/logback/logback-prod.xml

编译jar
mvn clean package -DskipTests

3.5 复制jar到目标目录
mkdir -p /data/mall
#商城后台接口
cp yami-shop-admin/target/yami-shop-admin-0.0.1-SNAPSHOT.jar /data/mall/
#商城前端接口
cp yami-shop-api/target/yami-shop-api-0.0.1-SNAPSHOT.jar /data/mall

3.6 测试启动jar
/data/jdk/bin/java -jar -Dspring.profiles.active=prod yami-shop-admin-0.0.1-SNAPSHOT.jar

/data/jdk/bin/java -jar -Dspring.profiles.active=prod yami-shop-api-0.0.1-SNAPSHOT.jar

4、编译前端
4.1 部署node.js
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
\. "$HOME/.nvm/nvm.sh"
nvm install 18
corepack enable pnpm
node -v
npm -v
pnpm -v
4.2 修改npm镜像源
#npm的镜像源更改为淘宝的镜像源
npm config set registry https://registry.npmmirror.com
4.3 安装依赖
cd front-end/mall4v
pnpm install


4.4 打包前端
cd /data/mall4j-master/front-end/mall4v
npm run build

编译完成后,会在当前项目目录mall4v下生成dist目录,把dist目录的内容迁到nginx下
mv dist/* /data/nginx/mall
5、访问商城系统
部署就绪后,验收成果,浏览器访问http://172.16.10.128



6、构建docker镜像
由上可见,纯linux物理部署已经成功运行了商城系统,接着要进行容器化,k8s化
6.1 准备docker环境
yum install -y yum-utils
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
systemctl start docker
6.2 Dockerfile构建
创建dockerfile目录和拷贝jar包
mkdir -p /data/dockerfile/{admin,api}
cp /data/mall/yami-shop-admin-0.0.1-SNAPSHOT.jar /data/dockerfile/admin/
cp /data/mall/yami-shop-api-0.0.1-SNAPSHOT.jar /data/dockerfile/api/
6.2.1 admin镜像
admin的Dockerfile
cd /data/dockerfile/admin
vim Dockerfile
#内容如下
#拉取基础openjdk镜像
FROM eclipse-temurin:17-jre-alpine-3.21
#构建时admin服务变量
ARG SVC_NAME=yami-shop-admin-0.0.1-SNAPSHOT.jar
#声明暴露
EXPOSE 8111
#创建工作目录
RUN mkdir -p /data/mall-admin
#容器工作目录
WORKDIR /data/mall-admin
#拷贝本地服务到镜像内
COPY ${SVC_NAME} ./app.jar
#启动时运行命令
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod","app.jar"]
执行构建
docker build -t mall-admin:v1 .

6.2.2 api镜像
api的Dockerfile
cd /data/dockerfile/api
vim Dockerfile
#内容如下
#拉取基础openjdk镜像
FROM eclipse-temurin:17-jre-alpine-3.21
#构建时admin服务变量
ARG SVC_NAME=yami-shop-api-0.0.1-SNAPSHOT.jar
#声明暴露
EXPOSE 8112
#创建工作目录
RUN mkdir -p /data/mall-api
#容器工作目录
WORKDIR /data/mall-api
#拷贝本地服务到镜像内
COPY ${SVC_NAME} ./app.jar
#启动时运行命令
ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod","app.jar"]
执行构建
docker build -t mall-api:v1 .

6.3 docker运行后端镜像
6.3.1 试运行admin镜像
docker run -itd --name admin -p 8111:8111 mall-admin:v1
查看启动日志,结果运行成功
docker logs -f admin

6.3.2 试运行api镜像
docker run -itd --name api -p 8112:8112 mall-api:v1
查看启动日志,结果运行成功
docker logs -f api

6.4 推送至harbor仓库
7、基于k8s运行商城系统
前提在已经部署的k8s集群上运行,详情可参考k8s
7.1 创建部署yaml文件
7.1.1 admin
apiVersion: apps/v1
kind: Deployment
metadata:
name: mall-admin
namespace: mall
spec:
replicas: 1
selector:
matchLabels:
app: mall-admin
template:
metadata:
labels:
app: mall-admin
spec:
containers:
- name: mall-admin
image: mall-admin:v1
ports:
- containerPort: 8111
hostPort: 8111
volumeMounts: []
volumes: []
restartPolicy: Always
dnsPolicy: ClusterFirst
---
apiVersion: v1
kind: Service
metadata:
name: mall-admin
namespace: mall
spec:
selector:
app: mall-admin
ports:
- name: mall-admin-8111
protocol: TCP
port: 8111
targetPort: 8111
nodePort: 30081
type: NodePort
7.1.2 api
apiVersion: apps/v1
kind: Deployment
metadata:
name: mall-api
namespace: mall
spec:
replicas: 1
selector:
matchLabels:
app: mall-api
template:
metadata:
labels:
app: mall-api
spec:
containers:
- name: mall-api
image: mall-api:v1
ports:
- containerPort: 8112
hostPort: 8112
volumeMounts: []
volumes: []
restartPolicy: Always
dnsPolicy: ClusterFirst
---
apiVersion: v1
kind: Service
metadata:
name: mall-api
namespace: mall
spec:
selector:
app: mall-api
ports:
- name: mall-api-8111
protocol: TCP
port: 8112
targetPort: 8112
7.2 运行yaml文件
kubectl create ns mall
kubectl apply -f admin.yaml
kubectl apply -f api.yaml


7.3 修改nginx配置
修改映射的admin的后端nodePort端口

7.4 验收k8s化商城系统

至此,mall商城从0到1,从物理机部署到k8s容器部署已经实现。
评论区