项目背景
准备制作一个个人博客的服务,初期先开发后端服务并部署,后期等熟悉前端后再开发前端项目,最终整合前后端实现一个个人博客服务。
项目参数
- 后端编程语言: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/
操作步骤
- 使用spring initializr创建spring boot项目初始框架,初始选择了几个常用的package,比如spring-web, spring-actuator, spring-jdbc, spring-security。项目框架生成完成后下载至本地
- 修改文件配置中的maven仓库配置和gradle wapper properties的镜像配置,优先使用国内镜像,便于本地编译、打包和调试,注意gradle项目版本和全局版本不一致的问题
- 本地启动应用测试
- 将项目生成的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 .
- 在项目根目录下运行以下命令构建 Docker 镜像:
- 创建 Dockerfile
- 安装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、区域和输出格式。
- 更新你的包索引
- 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 仓库(如果还没有创建)
- 你可以通过以下命令创建一个新的 ECR 仓库:
aws ecr create-repository --repository-name your-repo-name --region us-east-1
- 你可以通过以下命令创建一个新的 ECR 仓库:
- 确保你的 AWS CLI 已正确配置,使用以下命令查看配置:
aws configure
- 确保你所使用的 AWS IAM 用户或角色具有推送镜像到 ECR 的权限。需要至少以下权限:
ecr:PutImage
ecr:InitiateLayerUpload
ecr:UploadLayerPart
ecr:CompleteLayerUpload
ecr:DescribeRepositories
- 登录 AWS ECR
- 将镜像推送到 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
- 首先标记你的镜像:
- 登录EC2,如果不是Amazon Linux,同样需要安装aws cli并授权
- 给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
- 更新你的包索引
- 拉取并运行镜像
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
- 访问应用
- 使用浏览器或postman或命令行测试actuator的health接口是否正常
curl -i http://localhost:8080/actuator/health
- 使用浏览器或postman或命令行测试actuator的health接口是否正常