『亚马逊云科技产品测评』活动征文|EC2 实例安装 docker 与配套软件部署前后端分离的医疗管理后台系统

**授权声明:**本篇文章授权活动官方亚马逊云科技文章转发、改写权,包括不限于在 Developer Centre, 知乎,自媒体平台,第三方开发者媒体等亚马逊云科技官方渠道

目录

[一、AWS 产品类别选择](#一、AWS 产品类别选择)

(1)应用服务器选择

(2)数据服务器选择

(3)存储云盘选择

二、前置准备

[(1)域名准备、证书申请、网站备案、AWS 启动新实例、端口开放](#(1)域名准备、证书申请、网站备案、AWS 启动新实例、端口开放)

[(2)AWS 连接实例](#(2)AWS 连接实例)

(3)查看操作系统信息

[三、EC2 实例安装 docker](#三、EC2 实例安装 docker)

(1)更新系统软件包

[(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 容器)

(4)查看容器的状态

[(5)启动容器并进入其交互式 shell 查看 jdk 版本](#(5)启动容器并进入其交互式 shell 查看 jdk 版本)

[五、docker 安装 nginx、nacos、redis、sentinel](#五、docker 安装 nginx、nacos、redis、sentinel)

(1)安装:nginx

(2)安装:nacos

(3)安装:redis

(4)安装:sentinel

[六、docker 启动 nginx、nacos、redis、sentinel](#六、docker 启动 nginx、nacos、redis、sentinel)

(1)启动:nginx

(2)启动:nacos

(3)启动:redis

(4)启动:sentinel

[七、部署证书到 EC2 实例](#七、部署证书到 EC2 实例)

(1)证书申请

(2)上传证书到服务器

[八、EC2 实例部署前后端代码](#八、EC2 实例部署前后端代码)

(1)服务器创建存放前端代码的目录

(2)服务器创建存放后端代码的目录

[九、设置 nginx 配置文件](#九、设置 nginx 配置文件)

(1)文件路径

(2)设置配置文件

[① xxx.conf](#① xxx.conf)

[② xxx443.conf](#② xxx443.conf)

[(3)EC2 实例重启 nginx 服务](#(3)EC2 实例重启 nginx 服务)

十、浏览器访问网站

(1)访问:nacos

[(2)访问:Sentinel Dashboard](#(2)访问:Sentinel Dashboard)

(3)访问:医疗管理后台系统



一、AWS 产品类别选择

(1)应用服务器选择

用于部署网站应用前后端代码的服务器:开发/测试/预发布/正式环境 Linux 服务器

  • 少部分用到的 Redis 缓存数据库,比如只适用于缓存 token、短信验收码接收次数这种,则无需单独设置 Redis 服务器,可以直接在应用服务器上!

『亚马逊云科技产品测评』活动征文|AWS 云服务器 EC2 实例类型及其适用场景详细说明https://gusanshang.blog.csdn.net/article/details/134263726


(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 启动新实例、端口开放

  1. **注册域名:**由于 AWS 不提供网站备案操作,为了方便,本人使用阿里云注册域名。
  2. **申请证书:**在阿里云注册域名之后,进行申请证书。
  3. **解析域名:**在阿里云域名证书申请之后,使用阿里云解析域名
  4. **个人网站 ICP 备案:**要在中国境内访问域名网站,必须完成网站备案,无需使用域名的,则可以不准备域名,直接使用应用服务器的公网 IP 加端口号访问即可。
  5. **AWS 启动新实例:**选择并购买合适的应用服务器、数据服务器、挂载存储云盘后,进入控制台启动新实例。
  6. **AWS 端口开放:**端口开放可以在启动新实例步骤中完成,后续也可以修改 "安全组" 添加新端口完成开放端口。

『亚马逊云科技产品测评』活动征文|AWS 域名注册、启动与连接 EC2 新实例、端口开放详细教程https://gusanshang.blog.csdn.net/article/details/134580241

【Linux】Centos 8 服务器部署:阿里云域名注册、域名解析、个人网站 ICP 备案详细教程https://gusanshang.blog.csdn.net/article/details/134033592

【Linux】Centos 8 服务器部署:阿里云域名申请免费 SSL 证书详细教程https://gusanshang.blog.csdn.net/article/details/134037311

  • **AWS 域名:**如果无需中国境内访问网站,可以直接使用 AWS 完成域名注册、申请证书、域名解析,之后直接使用 AWS 域名,无需进行网站备案
  • **阿里云域名:**网站备案是中国境内要求的,所以如果中国境内需要访问域名网站,就需要完成备案,看个人需要选择,如果是国内访问,建议使用阿里云域名,阿里云域名能完成域名注册、申请证书、网站备案、域名解析全部操作,统一快捷方便,操作简单

(2)AWS 连接实例

AWS 启动新实例后,即可连接实例


(3)查看操作系统信息

  1. 操作系统发行版详细信息:

    bash 复制代码
    cat /etc/os-release
  2. 当前操作系统发行版信息:

    bash 复制代码
    cat /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
  1. Docker 的默认安装路径可以根据不同的操作系统而有所不同,通常情况下,在大多数 Linux 系统上,Docker 的可执行文件和相关文件位于 /usr/bin/docker 路径下。
  2. Docker 的数据目录(例如镜像、容器等数据)通常位于默认的 /var/lib/docker 路径下,如果想了解 Docker 数据的存储路径,可以检查 Docker 服务的配置文件,通常在 /etc/docker/daemon.json 文件中。
  3. 如果在安装 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)证书申请

  1. 由于 AWS 不提供网站备案操作,为了方便,本人使用阿里云注册域名,因此域名申请证书也在阿里云域名控制台完成。
  2. 在阿里云域名平台下载证书文件,上传 EC2 服务器即可生效。

【Linux】Centos 8 服务器部署:阿里云域名申请免费 SSL 证书详细教程https://gusanshang.blog.csdn.net/article/details/134037311


(2)上传证书到服务器



八、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


(3)访问:医疗管理后台系统

相关推荐
九河云1 小时前
AWS账号注册费用详解:新用户是否需要付费?
服务器·云计算·aws
Lary_Rock1 小时前
RK3576 LINUX RKNN SDK 测试
linux·运维·服务器
神一样的老师1 小时前
利用亚马逊AWS IoT核心和MQTT进行数据采集的综合指南
云计算·aws
云飞云共享云桌面3 小时前
8位机械工程师如何共享一台图形工作站算力?
linux·服务器·网络
Peter_chq4 小时前
【操作系统】基于环形队列的生产消费模型
linux·c语言·开发语言·c++·后端
一坨阿亮5 小时前
Linux 使用中的问题
linux·运维
dsywws6 小时前
Linux学习笔记之vim入门
linux·笔记·学习
幺零九零零6 小时前
【C++】socket套接字编程
linux·服务器·网络·c++
小林熬夜学编程8 小时前
【Linux系统编程】第四十一弹---线程深度解析:从地址空间到多线程实践
linux·c语言·开发语言·c++·算法
程思扬8 小时前
为什么Uptime+Kuma本地部署与远程使用是网站监控新选择?
linux·服务器·网络·经验分享·后端·网络协议·1024程序员节