eladmin使用docker部署_not_a_id的博客-爱代码爱编程
这里仅讨论部署,不涉及开发
这里仅讨论部署,不涉及开发
这里仅讨论部署,不涉及开发
-
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
、前端和后端的配置都是很好理解的。