授权声明:本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道
目录
(1)域名准备、证书申请、网站备案、AWS 启动新实例、端口开放
(1)查找 Docker Hub 上的 Dragonwell JDK 镜像
(5)启动容器并进入其交互式 shell 查看 jdk 版本
五、docker 安装 nginx、nacos、redis、sentinel
六、docker 启动 nginx、nacos、redis、sentinel
一、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)查看操作系统信息
- 操作系统发行版详细信息:
cat /etc/os-release
- 当前操作系统发行版信息:
cat /etc/system-release
CPU & 内存 | 1 核 (vCPU) 2 GiB |
---|---|
操作系统 | Amazon Linux release 2023 (Amazon Linux) |
详细信息 |
|
Linux 命令的系统版本为:Amazon Linux release 2023 (Amazon Linux)
这个和 Centos 用到的命令不同,全部命令会有专属的一套命令,所以启动新实例时,所选的 AMI 版本十分重要,每个版本都有其对应的 Linux 命令!
三、EC2 实例安装 docker
(1)更新系统软件包
sudo yum update -y
(2)安装 docker 所需的依赖项
sudo amazon-linux-extras install docker
(3)启动 docker 服务并设置开机自启动
sudo systemctl enable docker.service
sudo systemctl start docker.service
(4)验证 docker 是否安装成功
sudo docker run hello-world
(5)查看已安装的 docker 版本号
sudo docker version
(6)查找 docker 可执行文件的实际路径
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 镜像
sudo docker pull adoptopenjdk/dragonwell:8u292_10-jdk
需要拉取的镜像为:falconia/dragonwell11
(2)拉取 Dragonwell JDK 镜像
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” 目录中。
sudo docker run --name dragonwell-jdk -v /home/user/myapp:/myapp -d falconia/dragonwell11:latest
(4)查看容器的状态
sudo docker ps -a
列出所有容器的状态:如果 “dragonwell-jdk” 容器的状态不是 “Up”,则表示容器没有运行。
(5)启动容器并进入其交互式 shell 查看 jdk 版本
sudo docker start -i dragonwell-jdk
可以查看到 jdk 版本号,并进入 shell 则代表安装 jdk 成功,版本号为:11.0.7.2
五、docker 安装 nginx、nacos、redis、sentinel
(1)安装:nginx
sudo docker search nginx
需要拉取的镜像为:nginx
sudo docker pull nginx
注意此处创建的容器名称为:nginx
(2)安装:nacos
sudo docker pull nacos/nacos-server
注意此处创建的容器名称为:nacos/nacos-server
(3)安装:redis
sudo docker pull redis
注意此处创建的容器名称为:redis
(4)安装:sentinel
sudo docker pull bladex/sentinel-dashboard
注意此处创建的容器名称为:bladex/sentinel-dashboard
六、docker 启动 nginx、nacos、redis、sentinel
注意:在这之前必须先开放自定义端口,前置准备步骤中的 “端口开放” 的端口会在此步骤中应用!!!
(1)启动:nginx
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
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
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
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 服务
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