Java前后端分离项目部署完整流程(阿里云服务器 + Ubuntu22.04系统)

张开发
2026/4/6 5:46:00 15 分钟阅读

分享文章

Java前后端分离项目部署完整流程(阿里云服务器 + Ubuntu22.04系统)
Java前后端分离项目部署完整流程阿里云服务器 Ubuntu22.04系统本项目部署基于阿里云服务器 Ubuntu22.04系统实现部署本教程使用Docker、Docker compose进行项目部署教程其他环境部署基本一致不做赘述。一、项目环境及中间件简介后端环境jdk1.8、MySQL8.0、Redis、Minio2025-04-22T22-12-26Z前端环境Node22.19 npm11.11二、服务器配置演示只使用了2g2核服务器具体项目请选择合适的服务器放开端口​ 在服务器安全组中放开需要用到的端口三、连接服务器​ 我使用的是FinalShell大家使用Xshell等等工具都可以。后面部署按照我的指令敲即可。1、 系统初始化与目录创建# 1. 更新软件源centos 使用yum sudo apt update sudo apt upgrade -y # 2. 安装基础工具 sudo apt install -y vim wget curl git ufw # 3. 防火墙配置 (UFW) # 查看状态我的是关闭的Status: inactive如果是关闭的只需要配置服务器安全组如果是打开的自行配置端口放行 sudo ufw status 4 # 创建文件夹存储我们的项目我的项目及中间件我全部放在/usr/local/mall下可自由配置 sudo mkdir -p /usr/local/mall/{mysql/conf,mysql/data,minio/data,redis/data,backend,frontend/dist} 使用tree -L 2 /usr/local/mall指令可以查看项目结构 /usr/local/mall ├── backend │ ├── Dockerfile │ └── mall-server.jar ├── docker-compose.yml ├── frontend │ ├── dist │ ├── Dockerfile │ └── nginx.conf ├── minio │ └── data ├── mysql │ ├── conf │ ├── data │ └── init └── redis └── data # 4. 开放权限 (避免容器写入报错) sudo chmod -R 777 /usr/local/mall/mysql/data sudo chmod -R 777 /usr/local/mall/minio/data sudo chmod -R 777 /usr/local/mall/redis/data2、 Docker 与 Docker Compose 安装# # 1. 彻底清理旧版本完整版 # cd /tmp sudo systemctl stop docker docker.socket 2/dev/null sudo systemctl disable docker docker.socket 2/dev/null sudo rm -rf /usr/local/bin/docker* /etc/systemd/system/docker.service /var/lib/docker /usr/local/docker # # 2. 下载 Docker 29.3.1 # wget https://download.docker.com/linux/static/stable/x86_64/docker-29.3.1.tgz tar xzvf docker-29.3.1.tgz sudo cp docker/* /usr/local/bin/ # # 3. 修复Systemd 服务文件 # sudo bash -c cat /etc/systemd/system/docker.service EOF [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/local/bin/dockerd ExecReload/bin/kill -s HUP \$MAINPID LimitNOFILEinfinity LimitNPROCinfinity LimitCOREinfinity TimeoutStartSec0 Delegateyes KillModeprocess Restarton-failure [Install] WantedBymulti-user.target EOF # # 4. 配置镜像加速我专用的加速地址 # sudo mkdir -p /etc/docker sudo tee /etc/docker/daemon.json -EOF { registry-mirrors: [ https://docker.registry.cyou/, https://docker-cf.registry.cyou/, https://dockercf.jsdelivr.fyi/, https://docker.jsdelivr.fyi/, https://dockertest.jsdelivr.fyi/, https://mirror.aliyuncs.com/, https://dockerproxy.com/, https://mirror.baidubce.com/, https://docker.m.daocloud.io/, https://docker.nju.edu.cn/, https://docker.mirrors.sjtug.sjtu.edu.cn/, https://docker.mirrors.ustc.edu.cn/, https://mirror.iscas.ac.cn/, https://docker.rainbond.cc/, https://jq794zz5.mirror.aliyuncs.com ] } EOF # # 5. 启动 Docker 并开机自启 # sudo systemctl daemon-reload sudo systemctl start docker sudo systemctl enable docker docker --v # 显示如下则是安装成功 # Docker version 29.3.1, build c2be9cc # 安装docker compose # 到https://github.com/docker/compose/releases/tag/v5.1.1下载docker-compose-linux-x86_64这个版本的docker compose上传到服务器 #使用 mv 命令将二进制文件移动到 /usr/local/bin/系统默认识别的可执行程序目录并简化名称为 docker-compose sudo mv docker-compose-linux-x86_64 /usr/local/bin/docker-compose #新移动的文件默认没有执行权限通过 chmod 命令赋予可执行权限 sudo chmod x /usr/local/bin/docker-compose #执行以下命令检查版本确认安装成功 docker-compose --version # 显示如下则是安装成功 # Docker Compose version v5.1.1三、 生成配置文件1、MySQL配置新建修改/usr/local/mall/mysql/conf/my.cnf数据库配置文件[mysqld] # 基础配置 port3306 datadir/var/lib/mysql socket/var/run/mysqld/mysqld.sock # 字符集配置 character-set-serverutf8mb4 collation-serverutf8mb4_unicode_ci init_connectSET NAMES utf8mb4 # 时区配置 default-time-zone08:00 # 连接配置 max_connections1000 max_connect_errors1000 wait_timeout28800 interactive_timeout28800 # 缓冲区配置 key_buffer_size256M max_allowed_packet64M table_open_cache2000 sort_buffer_size1M net_buffer_length16K read_buffer_size1M read_rnd_buffer_size4M myisam_sort_buffer_size64M thread_cache_size8 # 查询缓存 query_cache_type1 query_cache_size64M query_cache_limit2M # 日志配置 general_log0 general_log_file/var/log/mysql/general.log log_error/var/log/mysql/error.log slow_query_log1 slow_query_log_file/var/log/mysql/slow.log long_query_time2 log_queries_not_using_indexes1 # InnoDB配置 innodb_buffer_pool_size512M innodb_log_file_size128M innodb_log_buffer_size16M innodb_flush_log_at_trx_commit1 innodb_lock_wait_timeout50 innodb_file_per_table1 innodb_flush_methodO_DIRECT # 复制配置主从 server-id1 log-binmysql-bin binlog_formatrow expire_logs_days7 max_binlog_size100M sync_binlog1 binlog_cache_size4M # SQL模式 sql_modeSTRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION [client] default-character-setutf8mb4 [mysql] default-character-setutf8mb4 prompt\\u\\h [\\d]\\_ [mysqldump] quick max_allowed_packet64M2、新建或修改Nginx 配置/usr/local/mall/frontend/nginx.confserver { listen 80; server_name localhost; root /usr/share/nginx/html; index index.html; # 前端路由 location / { try_files $uri $uri/ /index.html; } location /api/ { proxy_pass http://mall-backend:8080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }3. 新建后端 Dockerfilejar 包 mall-server.jar/usr/local/mall/backend/DockerfileFROM eclipse-temurin:8-jre-jammy WORKDIR /app COPY mall-server.jar /app/app.jar ENV TZAsia/Shanghai RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime echo $TZ /etc/timezone ENTRYPOINT [sh, -c, java $JAVA_OPTS -jar app.jar]4. 核心 docker-compose.yml/usr/local/mall/docker-compose.ymlservices: mysql: image: mysql:8.0 container_name: mall-mysql restart: always environment: MYSQL_ROOT_PASSWORD: 自己的数据库密码 MYSQL_DATABASE: mall TZ: Asia/Shanghai ports: - 3306:3306 volumes: - ./mysql/data:/var/lib/mysql - ./mysql/init:/docker-entrypoint-initdb.d - ./mysql/conf:/etc/mysql/conf.d command: --default-authentication-pluginmysql_native_password networks: - mall-network healthcheck: test: [CMD, mysqladmin, ping, -h, localhost] interval: 15s timeout: 5s retries: 10 start_period: 60s redis: image: redis:6-alpine container_name: mall-redis restart: always ports: - 6379:6379 command: redis-server --appendonly yes volumes: - ./redis/data:/data networks: - mall-network healthcheck: test: [CMD, redis-cli, ping] interval: 10s timeout: 5s retries: 3 minio: image: quay.io/minio/minio:RELEASE.2024-04-06T05-26-02Z container_name: mall-minio restart: always ports: - 9000:9000 - 9001:9001 environment: MINIO_ROOT_USER: minioadmin MINIO_ROOT_PASSWORD: minioadmin volumes: - ./minio/data:/data command: server /data --console-address :9001 networks: - mall-network healthcheck: test: [CMD, curl, -f, http://localhost:9000/minio/health/live] interval: 30s timeout: 20s retries: 3 backend: build: context: ./backend dockerfile: Dockerfile container_name: mall-backend restart: always depends_on: mysql: condition: service_healthy redis: condition: service_healthy minio: condition: service_healthy environment: # 数据库配置 SPRING_DATASOURCE_URL: jdbc:mysql://mysql:3306/mall?useUnicodetruecharacterEncodingutf8serverTimezoneAsia/ShanghaiuseSSLfalseallowPublicKeyRetrievaltrue SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: surprise1213 SPRING_DATASOURCE_DRIVER_CLASS_NAME: com.mysql.cj.jdbc.Driver # Redis配置 SPRING_REDIS_HOST: redis SPRING_REDIS_PORT: 6379 SPRING_REDIS_DATABASE: 0 SPRING_REDIS_TIMEOUT: 3000 # MinIO配置 MINIO_ENDPOINT: http://minio:9000 MINIO_ACCESS_KEY: minioadmin MINIO_SECRET_KEY: minioadmin MINIO_BUCKET_NAME: mall # 应用配置 SERVER_PORT: 8080 SPRING_APPLICATION_NAME: mall-server SPRING_PROFILES_ACTIVE: prod # JVM参数 JAVA_OPTS: -Xmx512m -Xms256m -XX:UseG1GC -Duser.timezoneAsia/Shanghai ports: - 8080:8080 volumes: - ./backend/logs:/app/logs - ./backend/upload:/app/upload - ./backend/config:/app/config networks: - mall-network healthcheck: disable: true frontend: build: context: ./frontend dockerfile: Dockerfile container_name: mall-frontend restart: always depends_on: - backend ports: - 8081:80 volumes: - ./frontend/nginx.conf:/etc/nginx/conf.d/default.conf:ro networks: - mall-network healthcheck: disable: true networks: mall-network: driver: bridge四、部署启动命令前置必须操作1、打包后端 JAR 包​ 进入到idea点击package会在target文件夹下生成一个jar包重命名为 mall-server.jar上传到 /usr/local/mall/backend/2、打包前端 dist打包后的文件上传到 /usr/local/mall/frontend/3、创建数据库docker-compose.yml文件会在构建镜像时自动创建mall数据库MYSQL_DATABASE: mall只需要将自己的数据库初始化sql脚本mall.sql放在usr/local/mall/mysql/init文件夹下,构建时会自动执行五、构建及验证1.构建、启动# 进入项目根目录 cd /usr/local/mall # 构建启动所有服务后台运行 docker compose up -d --build2. 验证部署检查是否成功# 查看容器状态 docker compose ps✅ 所有容器状态为Up则启动成功最后访问项目完美打开项目完成部署运行3. 访问服务前端http://服务器IP:8081后端接口http://服务器IP:8080MinIO 控制台http://服务器IP:9001账号minioadmin/minioadmin登录创建bucketmall并设置权限为publicMySQL服务器IP:3306Redis服务器IP:63794. 查看日志排查错误# 查看后端日志最常用 docker compose logs -f backend # 查看前端日志 docker compose logs -f frontend # 查看MySQL日志 docker compose logs -f mysql5.常见问题极速排查后端启动失败检查 jar 包名称必须是mall-server.jar检查密码是否配置正确与docker-compose.yml一致执行日志命令查看报错前端访问 404检查dist目录是否有打包后的文件检查nginx.conf路径是否正确容器权限报错重新执行前置权限命令sudo chmod -R 777 /usr/local/mall端口占用Redis服务器IP:63794. 查看日志排查错误# 查看后端日志最常用 docker compose logs -f backend # 查看前端日志 docker compose logs -f frontend # 查看MySQL日志 docker compose logs -f mysql5.常见问题极速排查后端启动失败检查 jar 包名称必须是mall-server.jar检查密码是否配置正确与docker-compose.yml一致执行日志命令查看报错前端访问 404检查dist目录是否有打包后的文件检查nginx.conf路径是否正确容器权限报错重新执行前置权限命令sudo chmod -R 777 /usr/local/mall端口占用停止占用端口的进程或修改docker-compose.yml端口映射

更多文章