3步教你把个人应用服务部署到云服务器ECS上

简介: 搭配「云效」工具,体验更佳。

本文来自云服务器ECS开发实践征文活动用户投稿,已获得作者(昵称秋天)授权发布。


每一个程序员都应该很熟悉Github,可能也遇到过由它托管的代码部署的应用无法正常访问的情况,亦或辛辛苦苦准备的博客、设计的网页无法被用户看到,心态难免受到影响。


如果你默默地点了点头,那么恭喜你来对了,赚到了。本篇文章将教会你如何把 Github 中托管的代码部署在云服务器ECS中,从而使得用户能够在互联网公网中访问、使用部署的应用。


这里选用了阿里云的云服务器ECS,新客 180 元可以购买 3年,性价比较高,尤其是可以搭配免费的 DevOps镜像服务以及价格低廉的 OSS、域名等服务一起使用,简直就是“上云全家桶”。可以说是一个非常低成本的开源小项目/个人博客的部署方案。


为了快速开发与部署,使用阿里云 DevOps 工具「云效」,实现上传的代码能够自动地构建与使用 Docker 部署。整个实践的过程分为3步。


01 基础环境配置


为了后续部署与集成 DevOps 环境更为方便,可以安装 nginx、docker、mysql 等基环境。


1、nginx 安装

默认服务中会自带 nginx 服务,可以使用 `rpm -ql nginx` 命令来查看 nginx 的配置。


# 启停
/usr/sbin/nginx
# 配置文件
/etc/nginx/nginx.conf


2、准备阿里云提供的镜像仓库

image001.png


创建镜像仓库,配置访问凭证,方便后续可以登录仓库,推送镜像:

image003.pngimage005.png


3、镜像加速

可以在阿里云的容器镜像服务配置自己的镜像加速服务:

image007.png


# 配置镜像加速服务
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json   <<-'EOF'
{   
  "registry-mirrors": ["https://xxx.mirror.aliyuncs.com"] 
}  
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker


4、Docker 安装


yum -y install docker-ce
systemctl start docker


5、创建 Docker 网络

新建网络是为了实现同主机的多个容器间网络互通,走内网,类似于软件交换。


docker network create -d bridge --subnet   172.27.0.0/16 cloud-net


- d 参数指定 Docker 网络类型,有 bridge overlay。其中 overlay 网络类型用于 Swarm mode。

- subnet 参数表示新建了 172.27.0.0/255.255.0.0 的网络,名称为 cloud-net。


6、mysql 安装


# 搜索 mysql
docker search mysql
# 拉取镜像
docker pull mysql:latest
# 运行, 注意 mysql 需要配置一下持久化
# mysql 也需要加入到 network 中,这样在其他的 Docker 容器内可以直接通过 hostname 访问到
docker container run --name   mysql -p 3306:3306 --network=cloud-net --hostname=mysql -v   
/home/mysql/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=xxx mysql


02 部署架构


日常管理托管在 github 等开放平台中的代码,如果想自动构建与部署,则可以利用阿里云的云效与 ECS 云服务器联动实现快速的接入 DevOps。分别以 vue 工程和 java 工程,部署在 Docker 的案例来展示。

image009.png


vue 工程和 java 工程分别都部署在 Docker 之中,Vue 通过挂载的配置文件,设置访问的 http 请求中增加 base_url prefix。云服务器中的 nginx 匹配到 base_url 并转发至 java docker 处。


部署结构已经梳理完毕,下面来梳理一下配置项。


1、Vue 工程

vue 工程会添加一个 base_url(plans),可以通过挂载配置的方式,选择 base_url 的内容。


工程配置文件


{
  "base_url":   "http://ip:8000/plans/"
}


Dockfile 配置


FROM nginx:latest
# 复制到指定目录
COPY dist   /usr/share/nginx/dist/


内置 nginx 配置


# nginx.conf 
http {
        gzip on;
    gzip_min_length 1k;
    gzip_buffers 4 16k;
    gzip_comp_level 8;
    gzip_types text/plain application/x-javascript text/css application/xml application/javascript text/javascript image/jpeg image/gif image/x-icon image/png application/json application/octet-stream application/vnd.sun.wadl+xml;
    gzip_vary on;
    gzip_disable "MSIE [1-6]\.";
    server {
        # 监听 80 端口,并通过 docker port 对外暴露 80 端口
        listen       80;
        server_name  localhost;
        location / {
            # 工程部署位置, 即 docker 镜像构建时 copy 的目标地址
            root   /usr/share/nginx/dist;
                        # 针对 history router 的配置
            try_files $uri $uri/ /;
            expires 7d;
        }
    }
}


运行 Docker 容器


docker container run --name   plan-app --network=cloud-net --hostname=plan-app -p 80:80 -d -v   
/home/config/nginx.conf:/etc/nginx/nginx.conf -v   
/home/config/config.json:/usr/share/nginx/dist/config.json   
registry.cn-shanghai.aliyuncs.com/jkhhuse-plan/plan:plan-ap


相关参数说明

--network:设置加入的网络

--hostname:其中容器中可以通过 hostname 访问到服务

-p:设置端口映射

-v:挂载的配置文件

registry:指定镜像来源


2、Java 工程


Dockfile 配置:


# 环境
FROM adoptopenjdk/openjdk11
# 创建目录存放 jar 包与配置文件
RUN mkdir -p /home/server
# 拷贝jar
ADD target/plan-server-1.0.jar   /home/server/plan-server.jar
# 设置暴露的端口号
EXPOSE 8080
# 设置工作目录 
WORKDIR /home/server
# 执行命令
ENTRYPOINT   ["java","-jar","/home/server/plan-server.jar"]


运行 Docker 容器命令:

这里需要注意时区的配置,否则在进行 sql 查询时间的时候会有偏差。


docker   container run --name plan-server -e TZ="Asia/Shanghai"   --network=cloud-net --hostname=plan-server -v   
/home/config:/home/server/config -p 8080:8080 -d   
registry.cn-shanghai.aliyuncs.com/xxx/plan:plan-server


3、Nginx 转发配置


# /etc/nginx/nginx.conf
# 代理服务器目的地址
upstream proxy_server {
   ip_hash;
   server ip:8080;
}
server {
    listen       8000;
    listen       [::]:8000;
    server_name  plan;
    # 对 /plans base_url 的请求做转发
    location ^~/plans/ {
       proxy_set_header Host $host;
       # 移除 /plans => / 后再转发
       rewrite ^/plans/(.*)$ /$1 break;
       # 反向代理服务器配置
       proxy_pass http://proxy_server;
    }
}


03 云效 DevOps 集成


1、Vue 工程集成


新建流水线

image011.png


为了让 github 上的项目可以加速,可以在网站后面添加 cnpmjs.org ,避免云效的 git clone 操作会超时。下面是代码仓库的配置项:

image013.png


接下来是配置构建步骤,首先配置 Node 的基础环境


#   input your command here
yarn   config set registry http://registry.npm.taobao.org/
yarn   install
yarn   build


随后把构建产出物的 dist 包进行 Docker 镜像的构建

image016.png


这个步骤结束后,会把构建的镜像发送到之前配置的阿里云镜像仓库中,随后可以进行 Docker 镜像的部署工作。选定好部署的主机与执行用户,填入执行的部署脚本完成。

image018.png


docker login --username=xxx --password=xxx registry.cn-shanghai.aliyuncs.com
docker pull registry.cn-shanghai.aliyuncs.com/jkhhuse-plan/plan:plan-app
docker images
docker container stop plan-app
docker container rm plan-app
docker container run --name plan-app  --network=cloud-net --hostname=plan-app -p 80:80 -d  -v /home/config/nginx.conf:/etc/nginx/nginx.conf -v /home/config/config.json:/usr/share/nginx/dist/config.json  registry.cn-shanghai.aliyuncs.com/xxx/plan:plan-app
docker container ls | grep plan-app


2、Java工程集成

Java 工程与 Vue 的工程类似,选用 Java 的构建模板即可。

image020.png

image022.png


在随后的 Docker 镜像的部署中,填入部署脚本:

docker login --username=xxx --password=xxx registry.cn-shanghai.aliyuncs.com
docker pull registry.cn-shanghai.aliyuncs.com/jkhhuse-plan/plan:plan-server
docker images
echo `docker images`
docker container stop plan-server
docker container rm plan-server
docker container run --name plan-server -e TZ="Asia/Shanghai" --network=cloud-net --hostname=plan-server -v /home/config:/home/server/config -p 8080:8080 -d registry.cn-shanghai.aliyuncs.com/jkhhuse-plan/plan:plan-server
docker container ls -a | grep plan-server


保存流水线配置后,可以选择手动执行,也可以利用 webhook 功能让云效自己触发执行的时机。

image024.png


以上就是通过云服务器ECS 做 Github DevOps部署的完整过程。使用云服务器ECS进行代码、应用服务部署还是非常方便的,并且用户访问十分通畅、便捷,体验更佳。


官方推广时间:如果你还没有属于自己的云服务器,机会来了,一年一度的阿里云采购季马上开启,就在3月,开年好云,钜惠升级。


相关实践学习
借助OSS搭建在线教育视频课程分享网站
本教程介绍如何基于云服务器ECS和对象存储OSS,搭建一个在线教育视频课程分享网站。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
12天前
|
存储 编解码 缓存
阿里云服务器实例规格选择参考:根据业务场景选择云服务器实例规格
在阿里云服务器的购买过程中,云服务器实例规格是很多用户最难选择的一个选项,因为阿里云有着多达几十种不同的实例规格,为此,阿里云官方在云服务器购买页面新推出了一个场景化选型推荐,用户可通过自己的上云场景结合场景化选型里面的业务场景和细分场景来选择适合自己的阿里云服务器实例规格,在很大程度上解决了新手用户在选择阿里云服务器实例规格上的困局。
阿里云服务器实例规格选择参考:根据业务场景选择云服务器实例规格
|
18天前
|
网络协议 网络安全
基于bind软件部署DNS服务器
关于如何使用bind软件部署DNS服务器的教程,包括DNS服务器的类型、基于bind软件的部署步骤、验证DNS服务器可用性的指导,以及如何进行DNS正向解析的实现。
18 2
基于bind软件部署DNS服务器
|
1天前
|
监控 JavaScript Java
部署应用程序到服务器
部署应用程序到服务器
9 3
|
18天前
|
存储 关系型数据库 MySQL
使用Docker快速部署Mysql服务器
本文介绍了如何使用Docker快速部署MySQL服务器,包括下载官方MySQL镜像、启动容器、设置密码、连接MySQL服务器以及注意事项。
105 18
|
1天前
|
Ubuntu 开发工具 git
在Ubuntu上部署BOA服务器的步骤
部署BOA服务器是一个涉及多个步骤的过程,包括系统更新、安装依赖、下载和编译源代码、配置服务器以及启动和验证。遵循上述步骤,可以在Ubuntu系统上成功部署BOA服务器,为开发和测试提供一个轻量级的Web服务器环境。
9 0
|
20天前
|
UED
JSF文件下载:解锁终极文件传输秘籍,让你的Web应用瞬间高大上!
【8月更文挑战第31天】掌握JSF文件下载功能对构建全面的Web应用至关重要。本文通过具体代码示例,详细介绍如何在JSF中实现文件下载。关键在于后端Bean中的文件读取与响应设置。示例展示了从创建实体类到使用`&lt;h:commandLink&gt;`触发下载的全过程,并通过正确设置响应头和处理文件流,确保文件能被顺利下载。这将显著提升Web应用的实用性与用户体验。
36 0
|
20天前
|
Java 数据库 API
JSF与JPA的史诗级联盟:如何编织数据持久化的华丽织锦,重塑Web应用的荣耀
【8月更文挑战第31天】JavaServer Faces (JSF) 和 Java Persistence API (JPA) 分别是构建Java Web应用的用户界面组件框架和持久化标准。结合使用JSF与JPA,能够打造强大的数据驱动Web应用。首先,通过定义实体类(如`User`)和配置`persistence.xml`来设置JPA环境。然后,在JSF中利用Managed Bean(如`UserBean`)管理业务逻辑,通过`EntityManager`执行数据持久化操作。
32 0
|
21天前
|
JavaScript 搜索推荐 前端开发
从零搭建到部署:Angular与Angular Universal手把手教你实现服务器端渲染(SSR),全面解析及实战指南助你提升Web应用性能与SEO优化效果
【8月更文挑战第31天】服务器端渲染(SSR)是现代Web开发的关键技术,能显著提升SEO效果及首屏加载速度,改善用户体验。Angular Universal作为官方SSR解决方案,允许在服务器端生成静态HTML文件。本文通过具体示例详细介绍如何使用Angular Universal实现SSR,并分享最佳实践。首先需安装Node.js和npm。
20 0
|
11天前
|
Cloud Native Java 编译器
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
随着云计算技术的不断发展,云服务商们不断推出高性能、高可用的云服务器实例,以满足企业日益增长的计算需求。阿里云推出的倚天实例,凭借其基于ARM架构的倚天710处理器,提供了卓越的计算能力和能效比,特别适用于云原生、高性能计算等场景。然而,有的用户需要将传统基于x86平台的应用迁移到倚天实例上,本文将介绍如何将基于x86架构平台的应用迁移到阿里云倚天实例的服务器上,帮助开发者和企业用户顺利完成迁移工作,享受更高效、更经济的云服务。
将基于x86架构平台的应用迁移到阿里云倚天实例云服务器参考
|
9天前
|
编解码 前端开发 安全
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘
在我们选购阿里云服务器的过程中,不管是新用户还是老用户通常都是通过阿里云的活动去买了,一是价格更加实惠,二是活动中的云服务器配置比较丰富,足可以满足大部分用户的需求,但是面对琳琅满目的云服务器实例、带宽和云盘选项,如何选择更适合自己,成为许多用户比较关注的问题。本文将介绍如何在阿里云的活动中选择合适的云服务器实例、带宽和云盘,以供参考和选择。
通过阿里云的活动购买云服务器时如何选择实例、带宽、云盘

相关产品

  • 云服务器 ECS