从0到1创建一个Java后端应用并部署到AWS

2024-10-05

项目背景

准备制作一个个人博客的服务,初期先开发后端服务并部署,后期等熟悉前端后再开发前端项目,最终整合前后端实现一个个人博客服务。

项目参数

  • 后端编程语言:Java
  • 后端框架:Springboot
  • Web服务器:Tomcat
  • 云服务:AWS
  • 容器:Docker
  • 代码管理:Github
  • 包管理:Gradle

环境配置

  • 安装java jdk,选择17版本并配置环境变量https://www.oracle.com/java/technologies/downloads/#java17
  • 安装git
  • 安装gradle包管理工具https://gradle.org/releases/
  • 安装docker desktop https://www.docker.com/products/docker-desktop/ https://juejin.cn/post/7382484880288399397
  • 安装aws cli https://aws.amazon.com/cn/cli/

操作步骤

  1. 使用spring initializr创建spring boot项目初始框架,初始选择了几个常用的package,比如spring-web, spring-actuator, spring-jdbc, spring-security。项目框架生成完成后下载至本地
  2. 修改文件配置中的maven仓库配置和gradle wapper properties的镜像配置,优先使用国内镜像,便于本地编译、打包和调试,注意gradle项目版本和全局版本不一致的问题
  3. 本地启动应用测试
  4. 将项目生成的jar包打包成docker镜像,主要操作步骤如下
    • 创建 Dockerfile
      • 在你的项目根目录下创建一个名为 Dockerfile 的文件,内容大致如下(假设你的项目是一个 Spring Boot 应用):
      • 使用基础镜像
        FROM openjdk:17-jdk-slim
        设置工作目录 WORKDIR /app
        将项目的 jar 文件复制到镜像中
        COPY build/libs/your-project-name.jar app.jar
        暴露应用运行的端口
        EXPOSE 8080
        指定容器启动时运行的命令
        CMD ["java", "-jar", "app.jar"]
    • 构建 Docker 镜像
      • 在项目根目录下运行以下命令构建 Docker 镜像:
        docker build -t your-image-name .
  5. 安装AWS CLI,对于Debian操作系统,步骤如下:
    • 更新你的包索引
      sudo apt-get update
    • 安装 curl 和 unzip(如果还未安装)
      sudo apt-get install curl unzip -y
    • 使用 curl 下载 AWS CLI 的最新版本安装包
      curl "https://awscli.amazonaws.com/awscli-exe-linux-x86_64.zip" -o "awscliv2.zip"
    • 解压下载的 zip 文件
      unzip awscliv2.zip
    • 运行安装脚本
      sudo ./aws/install
    • 安装完成后,可以通过以下命令验证 AWS CLI 是否成功安装
      aws --version
    • 最后,你可以使用以下命令配置 AWS CLI
      aws configure
      根据提示输入你的 AWS Access Key、Secret Key、区域和输出格式。
  6. AWS CLI初始化配置
    • 登录 AWS ECR
      • 确保你已经登录到 ECR:
        aws ecr get-login-password --region us-west-1 | docker login --username AWS --password-stdin 767397856910.dkr.ecr.us-west-1.amazonaws.com
    • 创建 ECR 仓库(如果还没有创建)
      • 你可以通过以下命令创建一个新的 ECR 仓库:
        aws ecr create-repository --repository-name your-repo-name --region us-east-1
    • 确保你的 AWS CLI 已正确配置,使用以下命令查看配置:
      aws configure
    • 确保你所使用的 AWS IAM 用户或角色具有推送镜像到 ECR 的权限。需要至少以下权限: ecr:PutImage
      ecr:InitiateLayerUpload
      ecr:UploadLayerPart
      ecr:CompleteLayerUpload
      ecr:DescribeRepositories
  7. 将镜像推送到 ECR
    • 首先标记你的镜像:
      docker tag your-image-name:latest <account-id>.dkr.ecr.us-west-1.amazonaws.com/your-repo-name:latest
    • 然后推送镜像到 ECR:
      docker push <account-id>.dkr.ecr.us-east-1.amazonaws.com/your-repo-name:latest
  8. 登录EC2,如果不是Amazon Linux,同样需要安装aws cli并授权
  9. 给EC2安装docker,对于Debian操作系统,步骤如下
    • 更新你的包索引
      sudo apt-get update
    • 安装一些必要的依赖包,这些包允许 apt 使用 HTTPS
      sudo apt-get install apt-transport-https ca-certificates curl software-properties-common -y
    • 使用以下命令添加 Docker 的 GPG 密钥
      curl -fsSL https://download.docker.com/linux/debian/gpg | sudo apt-key add -
    • 添加 Docker 的官方 APT 源
      sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
    • 再一次更新包索引,以便包含 Docker 的新源
      sudo apt-get update
    • 使用以下命令安装 Docker
      sudo apt-get install docker-ce -y
    • 启动 Docker 服务,并设置其在系统启动时自动启动
      sudo systemctl start docker
      sudo systemctl enable docker
    • 使用以下命令验证 Docker 是否安装成功 docker --version
  10. 拉取并运行镜像
    docker pull <account-id>.dkr.ecr.us-east-1.amazonaws.com/your-repo-name:latest
    docker run -d -p 8080:8080 -e PARAM_KEY=123 -e PARAM_KEY=456 <account-id>.dkr.ecr.us-east-1.amazonaws.com/your-repo-name:latest
  11. 访问应用
    • 使用浏览器或postman或命令行测试actuator的health接口是否正常 curl -i http://localhost:8080/actuator/health