这里仅讨论部署,不涉及开发
这里仅讨论部署,不涉及开发
这里仅讨论部署,不涉及开发
mysql
# 拉取 mysql 镜像,随便选择即可
docker pull mysql:8.0
# 运行
docker run -d --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=mypasswd -v /data/mysql/data:/var/lib/mysql mysql:8.0
# 确保将 eladmin 提供的 eladmin.sql 复制到当前文件夹后执行
docker cp eladmin.sql mysql:/root/
# 进入容器
docker exec -it mysql sh
cd /root/
# mysql 新建数据库导入 eladmin
mysql -uroot -p
create database eladmin;
use eladmin;
source eladmin.sql;
redis
# 拉取 redis 镜像,随便选择即可
docker pull redis:6.2
docker run -d --name redis -p 6379:6379 \
-v /usr/docker/tlmall-redis/data:/data \
-v /usr/docker/tlmall-redis/conf/redis.conf:/etc/redis.conf \
redis:6.2
前端
nginx.conf
user nginx;
worker_processes 1;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
events {
worker_connections 1024;
}
http {
include /etc/nginx/mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
keepalive_timeout 65;
server
{
listen 80;
server_name 192.168.0.1;
index index.html;
root /app; #dist上传的路径
# 避免访问出现 404 错误
location / {
try_files $uri $uri/ @router;
index index.html;
}
location @router {
rewrite ^.*$ /index.html last;
}
# 接口
location /api {
proxy_pass http://172.17.0.1:8000;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# 授权接口
location /auth {
proxy_pass http://172.17.0.1:8000;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
# WebSocket 服务
location /webSocket {
proxy_redirect off;
proxy_pass http://172.17.0.1:8000/webSocket;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
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_connect_timeout 60s;
proxy_read_timeout 86400s;
proxy_send_timeout 60s;
}
# 头像
location /avatar {
proxy_pass http://172.17.0.1:8000;
}
# 文件
location /file {
proxy_pass http://172.17.0.1:8000;
}
}
}
server_name 192.168.0.1
此处改为本地地址
dockerfile
FROM alpine:3.16.2
WORKDIR /tmp
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
&& apk add --no-cache nodejs npm bash git \
&& npm config set registry https://registry.npm.taobao.org \
&& echo 'sass_binary_site=https://npm.taobao.org/mirrors/node-sass/' >> ~/.npmrc \
&& git clone --progress https://ghproxy.com/https://github.com/elunez/eladmin-web.git eladmin-web \
&& cd eladmin-web \
&& sed -e 's|https://eladmin.vip|http://192.168.0.1:8000|g' \
-e 's|wss://eladmin.vip|ws://192.168.0.1:8000|g' -i .env.production \
&& npm install \
&& cd /tmp/eladmin-web/ \
&& npm run build:prod
FROM alpine:3.16.2
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.tuna.tsinghua.edu.cn/g' /etc/apk/repositories \
&& mkdir -p /app && apk add nginx bash
COPY --from=0 /tmp/eladmin-web/dist /app
COPY nginx.conf /etc/nginx/nginx.conf
ENTRYPOINT ["nginx","-g","daemon off;"]
其中192.168.0.1
为实际部署的机器的ip
,根据实际情况修改
构建
docker build -t vue:1.0 .
# 当文件名不为 dockerfile 时,使用 -f 选项指定
# 在构建阶段无法联网时,使用 --network host
运行
docker run --name vue -d -p 8080:80 vue:1.0
后端
dockerfile
注意!构建时需要编译打包好后端的jar包放在当前目录,也可以在dockerfile
中拉取代码后编译,然后分阶段构建,这里不展开
FROM openjdk:18
ARG JAR_FILE=./*.jar
COPY ${JAR_FILE} app.jar
ENV TZ=Asia/Shanghai
ENTRYPOINT ["java","-jar","/app.jar"]
构建
docker build -t app:1.0 .
# 当文件名不为 dockerfile 时,使用 -f 选项指定
# 在构建阶段无法联网时,可以直接先拉取基础镜像 docker pull openjdk:18
运行
docker run -d \
--name app --restart always \
-p 8000:8000 \
-e "TZ=Asia/Shanghai" \
-e DB_HOST=172.17.0.1 \
-e DB_PWD=mypasswd \
-e REDIS_HOST=172.17.0.1 \
-v /home/data/:/home/eladmin/ \
app:1.0
# DB_HOST 和 REDIS_HOST 使用的是容器网桥地址,指向宿主机
# DB_PWD 根据自己 mysql 的密码修改
# redis如果设置了密码,则要增加 REDIS_PWD 字段指定
说明
构建部署完成后可以考虑清除一下构建过程产生的缓存
docker container prune
docker image prune
按照上述的流程,用到了3306
、6379
、8080
、8000
,其中8080
、8000
根据自己需要修改,然后记得防火墙要放通这些端口,因为终端访问这些服务时,请求都是从终端发起!最开始脑子抽了以为前后端部署在同一机器,前后端通信时都使用本地地址即可,实际上这样没有考虑到终端访问,即:所有的请求都是从终端发起,无论是请求前端或者是后端!没有前端服务直接到后端服务方向的请求!根据这个思路,nginx
、前端和后端的配置都是很好理解的。