**授权声明:**本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道
目录
[一、AWS 产品类别选择](#一、AWS 产品类别选择)
[(1)域名准备、证书申请、网站备案、AWS 启动新实例、端口开放](#(1)域名准备、证书申请、网站备案、AWS 启动新实例、端口开放)
[(2)AWS 连接实例](#(2)AWS 连接实例)
[三、EC2 实例安装 docker](#三、EC2 实例安装 docker)
[(2)安装 docker 所需的依赖项](#(2)安装 docker 所需的依赖项)
[(3)启动 docker 服务并设置开机自启动](#(3)启动 docker 服务并设置开机自启动)
[(4)验证 docker 是否安装成功](#(4)验证 docker 是否安装成功)
[(5)查看已安装的 docker 版本号](#(5)查看已安装的 docker 版本号)
[(6)查找 docker 可执行文件的实际路径](#(6)查找 docker 可执行文件的实际路径)
[四、EC2 实例使用 docker 安装 jdk](#四、EC2 实例使用 docker 安装 jdk)
[(1)查找 Docker Hub 上的 Dragonwell JDK 镜像](#(1)查找 Docker Hub 上的 Dragonwell JDK 镜像)
[(2)拉取 Dragonwell JDK 镜像](#(2)拉取 Dragonwell JDK 镜像)
[(3)运行 Dragonwell JDK 容器](#(3)运行 Dragonwell JDK 容器)
[(5)启动容器并进入其交互式 shell 查看 jdk 版本](#(5)启动容器并进入其交互式 shell 查看 jdk 版本)
[五、docker 安装 nginx、nacos、redis、sentinel](#五、docker 安装 nginx、nacos、redis、sentinel)
[六、docker 启动 nginx、nacos、redis、sentinel](#六、docker 启动 nginx、nacos、redis、sentinel)
[七、部署证书到 EC2 实例](#七、部署证书到 EC2 实例)
[八、EC2 实例部署前后端代码](#八、EC2 实例部署前后端代码)
[九、设置 nginx 配置文件](#九、设置 nginx 配置文件)
[① xxx.conf](#① xxx.conf)
[② xxx443.conf](#② xxx443.conf)
[(3)EC2 实例重启 nginx 服务](#(3)EC2 实例重启 nginx 服务)
[(2)访问:Sentinel Dashboard](#(2)访问:Sentinel Dashboard)
一、AWS 产品类别选择
(1)应用服务器选择
用于部署网站应用前后端代码的服务器:开发/测试/预发布/正式环境 Linux 服务器
- 少部分用到的 Redis 缓存数据库,比如只适用于缓存 token、短信验收码接收次数这种,则无需单独设置 Redis 服务器,可以直接在应用服务器上!
(2)数据服务器选择
用于部署数据库的服务器:MySQL、Redis ...
- Redis 如果是大数据的缓存需要,则需要独立服务器
- 而少部分用到的比如只适用于缓存 token、短信验收码接收次数这种,则无需单独设置 Redis 服务器,直接在上面的应用服务器部署即
『亚马逊云科技产品测评』活动征文|AWS 数据库产品类别及其适用场景详细说明https://gusanshang.blog.csdn.net/article/details/134554322
(3)存储云盘选择
用于扩展应用存储空间,挂载在应用服务器上的存储云盘,数据盘。
『亚马逊云科技产品测评』活动征文|AWS 存储产品类别及其适用场景详细说明https://gusanshang.blog.csdn.net/article/details/134558112
二、前置准备
(1)域名准备、证书申请、网站备案、AWS 启动新实例、端口开放
- **注册域名:**由于 AWS 不提供网站备案操作,为了方便,本人使用阿里云注册域名。
- **申请证书:**在阿里云注册域名之后,进行申请证书。
- **解析域名:**在阿里云域名证书申请之后,使用阿里云解析域名
- **个人网站 ICP 备案:**要在中国境内访问域名网站,必须完成网站备案,无需使用域名的,则可以不准备域名,直接使用应用服务器的公网 IP 加端口号访问即可。
- **AWS 启动新实例:**选择并购买合适的应用服务器、数据服务器、挂载存储云盘后,进入控制台启动新实例。
- **AWS 端口开放:**端口开放可以在启动新实例步骤中完成,后续也可以修改 "安全组" 添加新端口完成开放端口。
【Linux】Centos 8 服务器部署:阿里云域名申请免费 SSL 证书详细教程https://gusanshang.blog.csdn.net/article/details/134037311
- **AWS 域名:**如果无需中国境内访问网站,可以直接使用 AWS 完成域名注册、申请证书、域名解析,之后直接使用 AWS 域名,无需进行网站备案
- **阿里云域名:**网站备案是中国境内要求的,所以如果中国境内需要访问域名网站,就需要完成备案,看个人需要选择,如果是国内访问,建议使用阿里云域名,阿里云域名能完成域名注册、申请证书、网站备案、域名解析全部操作,统一快捷方便,操作简单
(2)AWS 连接实例
AWS 启动新实例后,即可连接实例
(3)查看操作系统信息
操作系统发行版详细信息:
bashcat /etc/os-release
当前操作系统发行版信息:
bashcat /etc/system-release
| CPU & 内存 | 1 核 (vCPU) 2 GiB |
| 操作系统 | Amazon Linux release 2023 (Amazon Linux) |
详细信息 | * 名称 (NAME): Amazon Linux * 版本 (VERSION): 2023 * ID: amzn * ID 类似 (ID_LIKE): fedora * 版本 ID (VERSION_ID): 2023 * 平台 ID (PLATFORM_ID): platform:al2023 * 可读名称 (PRETTY_NAME): Amazon Linux 2023 * ANSI 色彩 (ANSI_COLOR): 0;33 * CPE 名称 (CPE_NAME): cpe:2.3:o:amazon:amazon_linux:2023 * 主页网址 (HOME_URL): https://aws.amazon.com/linux/ * 错误报告网址 (BUG_REPORT_URL): https://github.com/amazonlinux/amazon-linux-2023 * 支持截止日期 (SUPPORT_END): 2028-03-15 |
---|
Linux 命令的系统版本为:Amazon Linux release 2023 (Amazon Linux)
这个和 Centos 用到的命令不同,全部命令会有专属的一套命令,所以启动新实例时,所选的 AMI 版本十分重要,每个版本都有其对应的 Linux 命令!
三、EC2 实例安装 docker
(1)更新系统软件包
bash
sudo yum update -y
(2)安装 docker 所需的依赖项
bash
sudo amazon-linux-extras install docker
(3)启动 docker 服务并设置开机自启动
bash
sudo systemctl enable docker.service
sudo systemctl start docker.service
(4)验证 docker 是否安装成功
bash
sudo docker run hello-world
(5)查看已安装的 docker 版本号
bash
sudo docker version
(6)查找 docker 可执行文件的实际路径
bash
which docker
- Docker 的默认安装路径可以根据不同的操作系统而有所不同,通常情况下,在大多数 Linux 系统上,Docker 的可执行文件和相关文件位于
/usr/bin/docker
路径下。- Docker 的数据目录(例如镜像、容器等数据)通常位于默认的
/var/lib/docker
路径下,如果想了解 Docker 数据的存储路径,可以检查 Docker 服务的配置文件,通常在/etc/docker/daemon.json
文件中。- 如果在安装 Docker 时选择了非默认路径或使用了其他定制方法,则 Docker 的安装路径可能会有所不同。
四、EC2 实例使用 docker 安装 jdk
根据需求安装指定版本,示例需要指定安装的 jdk 版本为:Dragonwell 11
(1)查找 Docker Hub 上的 Dragonwell JDK 镜像
bash
sudo docker pull adoptopenjdk/dragonwell:8u292_10-jdk
需要拉取的镜像为:falconia/dragonwell11
(2)拉取 Dragonwell JDK 镜像
bash
sudo docker pull falconia/dragonwell11
**注意此处创建的容器名称为:**falconia/dragonwell11
(3)运行 Dragonwell JDK 容器
**容器名称为:**falconia/dragonwell11
**容器名称重命名为:**dragonwell-jdk
【命令的详细解释】
- --name 参数指定容器的名称重命名为 dragonwell-jdk
- -v 参数将主机文件系统上的目录挂载到容器中,以便通过容器访问本地文件系统中的文件,例如,将 /home/user/myapp 目录挂载到容器的 /myapp 目录中:
- -d 参数指定容器在后台运行
这样,就可以使用 "/dragonwell-jdk" 作为容器名称运行 Dragonwell JDK 11 容器,并将本地目录 "/home/user/myapp" 挂载到容器的 "/myapp" 目录中。
bash
sudo docker run --name dragonwell-jdk -v /home/user/myapp:/myapp -d falconia/dragonwell11:latest
(4)查看容器的状态
bash
sudo docker ps -a
列出所有容器的状态:如果 "dragonwell-jdk" 容器的状态不是 "Up",则表示容器没有运行。
(5)启动容器并进入其交互式 shell 查看 jdk 版本
bash
sudo docker start -i dragonwell-jdk
可以查看到 jdk 版本号,并进入 shell 则代表安装 jdk 成功,版本号为:11.0.7.2
五、docker 安装 nginx、nacos、redis、sentinel
(1)安装:nginx
bash
sudo docker search nginx
需要拉取的镜像为:nginx
bash
sudo docker pull nginx
**注意此处创建的容器名称为:**nginx
(2)安装:nacos
bash
sudo docker pull nacos/nacos-server
**注意此处创建的容器名称为:**nacos/nacos-server
(3)安装:redis
bash
sudo docker pull redis
**注意此处创建的容器名称为:**redis
(4)安装:sentinel
bash
sudo docker pull bladex/sentinel-dashboard
**注意此处创建的容器名称为:**bladex/sentinel-dashboard
六、docker 启动 nginx、nacos、redis、sentinel
注意:在这之前必须先开放自定义端口,前置准备步骤中的 "端口开放" 的端口会在此步骤中应用!!!
(1)启动:nginx
bash
sudo docker run -p 80:80 -p 443:443 --name nginx \
-v /mydata/nginx/html:/usr/share/nginx/html \
-v /mydata/nginx/logs:/var/log/nginx \
-v /mydata/nginx/conf:/etc/nginx/conf \
-d nginx
**容器名称为:**nginx
运行该命令将启动一个名为 "nginx" 的容器
并将容器的 HTTP 端口映射到主机的端口 80,HTTPS 端口映射到主机的端口 443
在运行命令之后,能够通过主机的相应端口访问 Nginx 服务;同时,可以在宿主机上编辑网页内容、查看日志和编辑配置文件
【命令的详细解释】-p 80:80 -p 443:443:将容器的端口 80 和 443 映射到主机的相应端口,可以根据需要进行端口映射的修改。
--name nginx:指定容器名称为 "nginx",可根据自己的需要自定义修改名称。
-v /mydata/nginx/html:/usr/share/nginx/html:将宿主机上 "/mydata/nginx/html" 目录映射到容器中 Nginx 的 HTML 根目录 "/usr/share/nginx/html",这样就可以在宿主机上编辑网页内容。
-v /mydata/nginx/logs:/var/log/nginx:将宿主机上 "/mydata/nginx/logs" 目录映射到容器中 Nginx 的日志目录 "/var/log/nginx",这样就可以在宿主机上查看 Nginx 的日志。
-v /mydata/nginx/conf:/etc/nginx:将宿主机上 "/mydata/nginx/conf" 目录映射到容器中 Nginx 的配置目录 "/etc/nginx",这样就可以在宿主机上编辑 Nginx 的配置文件。
-d nginx:使用 nginx 镜像在后台模式下运行容器。
(2)启动:nacos
bash
sudo docker run --name nacos -d -p 8848:8848 -p 9848:9848 -p 9849:9849 --privileged=true --restart=always -e MODE=standalone -e PREFER_HOST_MODE=hostname nacos/nacos-server
**容器名称为:**nacos/nacos-server
运行该命令将启动 nacos/nacos-server 容器,并将容器命名为 "nacos"
并将容器的端口 8848、9848 和 9849 映射到主机的相应端口
在运行命令之后,能够在主机的相应端口上访问 Nacos 服务
【命令的详细解释】--name nacos:指定容器名称为 "nacos",可根据自己的需要自定义修改名称
-d:在后台模式下运行容器
-p 8848:8848 -p 9848:9848 -p 9849:9849:将容器的端口 8848、9848 和 9849 映射到主机的相应端口,可以根据需要进行端口映射的修改。
--privileged=true:给容器赋予特权模式,以便容器内的进程可以访问主机的部分资源。
--restart=always:设置容器总是在退出后自动重启。
-e MODE=standalone:设置 Nacos 启动模式为单机模式。
-e PREFER_HOST_MODE=hostname:设置容器主机名作为 Nacos 的拓扑节点名称。
nacos/nacos-server:基于 nacos/nacos-server 镜像的启动容器。
(3)启动:redis
bash
sudo docker run -d -p 6379:6379 --name redis -v /mydata/redis/data:/data redis redis-server --appendonly yes --requirepass GuSanShangMiMa
sudo docker run -d -p 6379:6379 --name redis -v /mydata/redis/data:/data redis redis-server --appendonly yes --requirepass 8888
**容器名称为:**redis
运行该命令将启动一个名为 "redis" 的容器
并将容器的端口 6379 映射到主机的端口 6379
注意:GuSanShangMiMa 需要替换成自己的 redis 服务器密码
执行命令后,能够通过主机的端口 6379 访问 Redis 服务,并且 Redis 数据会持久化到主机上指定的目录
【命令的详细解释】-d:在后台模式下运行容器。
-p 6379:6379:将容器的 6379 端口映射到主机的 6379 端口。
--name redis:指定容器名称为 "redis",可以根据自己的需求修改名称。
-v /mydata/redis/data:/data:将主机上的 "/mydata/redis/data" 目录映射到容器中的 "/data" 目录,这样可以在主机上持久化 Redis 的数据。
redis:使用 redis 镜像来运行容器。
redis-server --appendonly yes --requirepass GuSanShangMiMa:在容器中运行 Redis 服务器,并开启持久化功能(AOF 方式);此外,还设置了 Redis 的密码为 "GuSanShangMiMa",可以根据需要修改密码。
(4)启动:sentinel
bash
sudo docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard
**容器名称为:**bladex/sentinel-dashboard
运行该命令将启动一个名为 "sentinel" 的容器
并将容器的端口 8858 映射到主机的端口 8858
执行命令后,能够通过主机的端口 8858 访问 Sentinel Dashboard,并监控 Sentinel 集群
【命令的详细解释】--name sentinel:指定容器名称为 "sentinel",可以根据自己的需要修改名称。
-d:在后台模式下运行容器,使其在后台持续运行。
-p 8858:8858:将容器的端口 8858 映射到主机的端口 8858,可以根据需要进行端口映射的修改。
bladex/sentinel-dashboard:使用 bladex/sentinel-dashboard 镜像的最新版本来运行容器,如果想使用特定的版本,可以修改为相应的镜像标签。
七、部署证书到 EC2 实例
(1)证书申请
- 由于 AWS 不提供网站备案操作,为了方便,本人使用阿里云注册域名,因此域名申请证书也在阿里云域名控制台完成。
- 在阿里云域名平台下载证书文件,上传 EC2 服务器即可生效。
【Linux】Centos 8 服务器部署:阿里云域名申请免费 SSL 证书详细教程https://gusanshang.blog.csdn.net/article/details/134037311
(2)上传证书到服务器
- 为了方便操作,这里使用远程连接工具 FinalShell 进行操作:【FinalShell】win 10 / win 11:FinalShell 远程连接 Linux 服务器https://gusanshang.blog.csdn.net/article/details/121360151
- 将证书上传到 linux 服务器的 Nginx 路径下:/mydata/nginx/conf/cert
八、EC2 实例部署前后端代码
为了方便操作,这里使用远程连接工具 FinalShell 进行操作:
【FinalShell】win 10 / win 11:FinalShell 远程连接 Linux 服务器https://gusanshang.blog.csdn.net/article/details/121360151
(1)服务器创建存放前端代码的目录
(2)服务器创建存放后端代码的目录
九、设置 nginx 配置文件
(1)文件路径
nginx 配置文件路径:/mydata/nginx/conf
(2)设置配置文件
修改 2 个证书内容,并将上传的域名证书的路径配置上:
- xxx.conf
- xxx443.conf
① xxx.conf
② xxx443.conf
(3)EC2 实例重启 nginx 服务
bash
docker restart nginx
十、浏览器访问网站
配置完成后,成功访问网站则代表前后端代码分离的网站已成功完成设置。
(1)访问:nacos
启用完成后,可以用 ESC 应用服务器 ip 加上 nacos 端口看是否支持访问:
http://服务器 ip:8848/nacos/#/login
【默认账号】**用户:**nacos
**密码:**nacos
(2)访问:Sentinel Dashboard
启用完成后,可以用 ESC 应用服务器 ip 加上 sentinel 端口看是否支持访问:
http://服务器 ip:8858/#/login
【默认账号】**用户:**sentinel
**密码:**sentinel