3步教你在云服务器上做Github DevOps部署

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
云服务器ECS,u1 2核4GB 1个月
简介: 本文指导您使用阿里云DevOps工具云效,将Github中托管的代码部署在云服务器ECS中,使得用户能够在互联网公网中访问个人应用服务。文章来自云服务器ECS开发实践征文活动用户投稿,已获得作者(昵称秋天)授权发布。

本文指导您使用阿里云DevOps工具云效,将Github中托管的代码部署在云服务器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、准备阿里云提供的镜像仓库

11

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

3、镜像加速

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

# 配置镜像加速服务
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 的案例来展示。15

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 工程集成

新建流水线16

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

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

#   input your command here
yarn   config set registry http://registry.npmmirror.com/
yarn   install
yarn   build

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

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

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 的构建模板即可。2122

在随后的 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 功能让云效自己触发执行的时机。23

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

相关实践学习
一小时快速掌握 SQL 语法
本实验带您学习SQL的基础语法,快速入门SQL。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情:&nbsp;https://www.aliyun.com/product/ecs
相关文章
|
3月前
|
弹性计算 持续交付 开发工具
【阿里云幻兽帕鲁全攻略】一分钟自动化部署教程,大咖视频讲解,游戏FAQ持续更新中
帕鲁攻略全集:从云服务器选购,到完成自动化部署,还有视频教程手把手教学,各类游戏FAQ持续更新中
|
17天前
|
弹性计算 运维 数据可视化
开源!阿里云开源帕鲁一键部署服务模板
阿里云响应《幻兽帕鲁》游戏火爆,迅速推出游戏联机专属服务,实现3分钟内自动化部署服务器,简化玩家上手难度。借助阿里云计算巢,服务在1个月内迭代70多个版本,提供丰富功能。现在,阿里云宣布将帕鲁快速部署服务模板全面开源,任何人都能获取。这一服务利用IaC技术,实现软件SaaS化,提供一键开服功能,并支持灵活配置和全球化部署。此外,通过计算巢的可视化操作和快速变配功能,满足玩家个性化需求。阿里云计算巢作为免费产品,旨在促进更多软件云端发展。
26 0
|
3月前
|
弹性计算 jenkins 持续交付
ECS热门应用 | 搭建个人版持续集成服务
基于ECS云服务器搭建Jenkins,快速实现灵活、可扩展的持续集成服务。
94345 7
|
11月前
|
新零售 运维 Cloud Native
云效BizDevOps上手亲测
讲述云效BizDevOps及项目协作操作
|
存储 弹性计算 安全
使用ECS部署Github开源项目以及架设应用程序服务器的体验报告
使用ECS部署Github开源项目Mcsmanager以及架设Minecraft服务器(作业用)的体验以及经验分享
使用ECS部署Github开源项目以及架设应用程序服务器的体验报告
|
存储 弹性计算 运维
极狐GitLab入驻阿里云计算巢,共同提升云上开发体验
阿里云计算巢平台首家一体化DevSecOps解决方案合作伙伴
极狐GitLab入驻阿里云计算巢,共同提升云上开发体验
|
弹性计算 Kubernetes Docker
|
开发框架 安全 .NET
使用官方教程+镜像市场搭建阿里云服务器环境教程
本文讲述了使用官方教程+镜像市场搭建阿里云服务器环境的教程,可供新手用户参考。
922 0
使用官方教程+镜像市场搭建阿里云服务器环境教程
|
域名解析 Cloud Native Devops
有手就行——利用云效傻瓜化搭建todos
一个云效新人利用云效工作台傻瓜化搭建todos,有手就行,云效yyds!!
5180 5
有手就行——利用云效傻瓜化搭建todos
|
弹性计算 持续交付 开发者