从0到1写一个网站(3)搭建环境

本文涉及的产品
云服务器 ECS,每月免费额度200元 3个月
云服务器ECS,u1 2核4GB 1个月
简介: 这是《从0到1写一个网站》系列第3篇文章。这篇文章主要介绍基于云服务器的生产环境的搭建,以及CI/CD等其它工具的搭建。

这是《从0到1写一个网站》系列第3篇文章。

这篇文章主要介绍基于云服务器的生产环境的搭建,以及CI/CD等其它工具的搭建。


云服务器

要想做一个网站,首先你得有一台服务器。感谢我们来到了云时代,现在在云平台上搭建一台云服务器非常方便,不用自己去折腾硬件搭建一台服务器了。

我自己是用的阿里云。用什么平台取决于你自己喜好,以及去哪能薅到羊毛。AWS和GCP好像都是用信用卡可以薅,而国内的云平台一般是可以用学生身份比较便宜地薅到。偶尔也会搞双十一之类的活动,价格也比较便宜,一年就一两百块左右。

网络异常,图片无法展示
|

买云服务器要注意的主机所在的机房。国外或者香港地区所在的机房的服务器一般会贵一点,但是可以顺便搭个梯子自己用。国内的机房,尽量选自己的目标用户更近的机房,这样网络访问延迟能够稍微低一些。

个人网站的话,一般最低配置就行了。我的个人网站现在就是用的阿里云的1核2G,1M带宽的最低配版服务器。但低配的话,需要在性能上和开发过程中多下一些功夫。因为带宽低,前端资源需要尽量放在CDN加速;CPU和内存低,尽量使用本地机器来做CI/CD的runner机器。这些小技巧会在后面的文章慢慢介绍。


域名

云服务器给我们的是一个固定的公网IP。有了公网IP,别人就能够访问到我们的服务了。但是ip不太容易记,而且有些场景是需要域名的(比如做微信公众号的时候、使用HTTPS等),所以申请一个域名还是很有必要的。

域名申请比较简单,在很多云平台上也可以直接购买域名和配置ip到域名的映射关系。域名后缀无所谓,看自己喜欢。.com是用得最广泛、最多的。国内也有一些.com.cn,自己的个人网站的话,也可以使用.me.site等。一年大概几十块钱,首次购买一般有优惠。

但域名备案比较耗时,如果是国内申请的域名或者用了国内的服务器,就需要备案(在阿里云上买域名可以在上面直接上传资料备案),建议尽早申请。


安装docker

操作系统只要是Linux就行,具体哪个发行版影响不大。

服务器搞定后,先把自己本地ssh生成的公钥放到服务器的authorized_keys里面,方便以后可以不需要密码直接登录服务器

然后下载安装docker,推荐自带的yum/apt安装就行了,安装docker完成后,可以用启动一个nginx实例,在本地用浏览器,看能不能访问到。这里如果有域名的就可以配置一下域名了,看是否能正常解析。

sudo apt-get install docker

可以启动一个portainer,它是一个管理docker的web界面工具,轻量级。特别适合对docker命令不太熟悉或者不喜欢使用docker命令的同学。使用下面这个命令可以轻松创建一个portainer容器:

docker run -d -p 9000:9000 \
--privileged --restart=always \
-v /var/run/docker.sock:/var/run/docker.sock \
--name portainer portainer/portainer

网络异常,图片无法展示
|


安装gogs

gogs是一个代码托管平台,类似于Github、Gitlab等。但是Github网速较慢,而Gitlab比较耗资源,如果服务器资源很少的话,就不适合了。

gogs非常轻量,而且可以使用docker快速部署。

sudo docker run -d \
--name=gogs --restart=always \
-p 10022:22 -p 10080:3000 \
gogs/gogs

启动后,在浏览器访问服务器的10080端口,就可以打开gogs了,第一次打开需要进行初始化设置,这里注意端口和url的设置

网络异常,图片无法展示
|

安装完成后,去个人信息里面配置一下ssh的公钥,然后创建自己的项目,这个就不详细介绍了。


安装drone

drone是一个轻量级的CI/CD工具。使用docker可以快速部署一个drone服务,并自动与gogs连接:

它也可以支持Github、Gitlab、Gitea、Bitbucket等平台,需要在创建时传入不同的环境变量。具体用法可以参考官方文档:docs.drone.io/

docker run \
-e DRONE_AGENTS_ENABLED=true \
-e DRONE_GOGS_SERVER=http://yasinshaw.com:10080 \
-e DRONE_RPC_SECRET=your_drone_secret \
-e DRONE_SERVER_HOST=yasinshaw.com:20080 \
-e DRONE_SERVER_PROTO=http \
-e DRONE_USER_CREATE=username:yasin,admin:true \
-p 20080:80 \
-p 20443:443 \
--restart=always \
--detach=true \
--name=drone \
drone/drone:1

用浏览器打开服务器的20080端口,会出现一个登录界面。需要使用gogs的管理员账号密码登录

这里需要加上DRONE_USER_CREATE配置,username的值为你的管理员用户名,这样才能开启项目的Trusted Mode,才能在构建项目过程中挂主机的volume。具体参考:docs.drone.io/quickstart/…

登录以后,会自动同步gogs的项目,并且会在gogs那边自动创建一个webhook。

在我们的项目根目录创建一个.drone.yml文件,即可配置drone的CI/CD流程,然后提交代码就可以自动触发CI/CD了,是不是非常简单?

但是这个时候我们只有drone server,没有drone runner,所以触发后没有runner去执行任务,会一直卡在那。drone支持多种类型的runner,包括docker、ssh等。我们可以创建一个docker runner用来执行build等任务,创建一个ssh runner用来远程登录到我们的服务器重启部署服务。

我们可以在服务器或者我们本机创建runner。个人更推荐用本机的,因为服务器比较垃圾,本机资源更多。

网络异常,图片无法展示
|

docker run -d \
 -e DRONE_RPC_PROTO=http \
 -e DRONE_RPC_HOST=yasinshaw.com:20080 \
 -e DRONE_RPC_SECRET=your_drone_secret \
 -e DRONE_RUNNER_CAPACITY=2 \
 -e DRONE_RUNNER_NAME=runner-docker \
 -e DOCKER_API_VERSION=1.38 \
 -v /var/run/docker.sock:/var/run/docker.sock \
 -p 21300:3000 \
 --restart always \
 --name runner \
 drone/drone-runner-docker
 docker run -d \
-e DRONE_RPC_PROTO=http \
-e DRONE_RPC_HOST=yasinshaw.com:20080 \
-e DRONE_RPC_SECRET=your_drone_secret \
-e DOCKER_API_VERSION=1.38 \
-p 22300:3000 \
--restart always \
--name runner-ssh \
drone/drone-runner-ssh

这里需要设置一下DOCKER_API_VERSION,即使用的docker API的版本。默认是使用的drone支持的最高的版本,但如果机器的docker版本更低,drone会提示,docker api不能高于xx版本,这里启动runner的时候设置一下DOCKER_API_VERSION就好。


配置drone

具体的配置后面可以在开源的项目代码中找到。这里可以先给大家看一下之前配置的一个前端项目。大概的流程就是在本地build,build完成后打包镜像,然后上传到阿里云镜像仓库。然后上服务器拉取最新的镜像,再重启docker。仅供参考:

kind: pipeline
name: build
steps:
  - name: npm install
    image: node:12-buster-slim
    commands:
      - npm install -g cnpm --registry=https://registry.npm.taobao.org
      - cnpm install
      - cnpm i @nuxtjs/axios
      - cnpm i @nuxtjs/toast
      - cnpm i @nuxtjs/proxy
  - name: npm build
    image: node:12-buster-slim
    commands:
      - npm run build
  - name: docker
    image: plugins/docker
    settings:
      username: yasinshaw
      password:
        from_secret: docker_password
      repo: registry.cn-hangzhou.aliyuncs.com/yasinshaw/yasinshaw-portal
      registry: registry.cn-hangzhou.aliyuncs.com
      mirror: https://mzayqkhl.mirror.aliyuncs.com
      tags: latest
---
kind: pipeline
type: ssh
name: deploy
server:
  host: yasinshaw.com
  user: root
  ssh_key:
    from_secret: ssh_key
steps:
  - name: pull image
    environment:
      DOCKER_PASSWORD:
        from_secret: docker_password
    commands:
      - docker login --username=yasinshaw --password=$DOCKER_PASSWORD registry.cn-hangzhou.aliyuncs.com
      - docker pull registry.cn-hangzhou.aliyuncs.com/yasinshaw/yasinshaw-portal:latest
  - name: remove old container
    failure: ignore
    commands:
      - docker rm -f -v portal
  - name: start container
    commands:
      - docker run -d --name=portal --restart=always -p 3000:3000 registry.cn-hangzhou.aliyuncs.com/yasinshaw/yasinshaw-portal:latest
depends_on:
  - build

这里的secret需要去drone的界面上配置。secret的具体用法可以参考官方文档:docs.drone.io/secret/

网络异常,图片无法展示
|

至此,一个基于docker的简单的CI/CD流程就搭建完成,下一步就可以创建项目开始开发啦~

相关实践学习
基于函数计算快速搭建Hexo博客系统
本场景介绍如何使用阿里云函数计算服务命令行工具快速搭建一个Hexo博客。
目录
相关文章
FastTunnel - 免费好用的内网穿透工具搭建教程
astTunnel是用.net core开发的一款跨平台内网穿透工具,它可以实现将内网服务暴露到公网供自己或任何人访问。 与其他穿透工具不同的是:FastTunnel项目致力于打造一个易于扩展、易于维护的内网穿透框架,任何人都可以基于该框架二次开发,你可以直接通过nuget安装依赖进行开发,当然它也是开箱即用的工具。
FastTunnel - 免费好用的内网穿透工具搭建教程
|
Java 关系型数据库 MySQL
|
2天前
|
NoSQL 关系型数据库 应用服务中间件
Linux服务器软件安装教程及项目部署【建议收藏】
Linux服务器软件安装教程及项目部署【建议收藏】
|
8月前
|
SQL 关系型数据库 MySQL
三步搭建个人网站并发布上线【内网穿透】
在这个个性飞扬的时代,每个人都希望拥有表现自我的平台,而互联网的包容性和广泛性正好契合了这些需求,也让个人博客网站如雨后春笋般涌现。以往搭建个人博客网站耗费颇多,不仅要租用网站服务器,还要有相当的计算机基础,让普通人难以企及。不过随着软件技术的发展,我们已经可以通过几个简单的步骤,在家用电脑上搭建起像样的个人博客网站,并通过cpolar搭建的数据隧道,将其发布到公共互联网上,实现以最低成本建立个人博客网站的目标。今天,我们就为大家介绍,如何用短短三步,建立起一个像样的个人独立网站
131 2
三步搭建个人网站并发布上线【内网穿透】
|
11月前
|
开发者 SEO
新手搭建WordPress网站需要做什么?
对于刚接触WordPress的新手来说,在建立网站之前先了解一些WordPress的基本概念非常重要,这样可以更加熟悉并高效地进行建站。
|
Java Linux 编译器
新手使用linux服务器学习的开发环境搭建的记录
新手使用linux服务器,用来学习java语言编程,记录一下使用过程的开发环境的搭建
|
Linux 网络安全
|
弹性计算 网络协议 关系型数据库
学习服务器快书搭建环境之一
LAMP ;ECS ;Apache; Terminal; MySQL; PHP 简单编程
322 1
学习服务器快书搭建环境之一
|
云安全 弹性计算 小程序
阿里云服务器部署开发环境(搭建博客网站/小程序)
大家好,今天为大家讲解如何搭建自己的阿里云服务环境,也是笔者踩坑一天所获,希望对大家有所帮助。
2700 0
阿里云服务器部署开发环境(搭建博客网站/小程序)
|
弹性计算 Linux Shell
小白使用阿里云linux服务器怎么快速搭建环境
我们是可以对拥有的阿里云服务器进行环境搭建的,毕竟想建立一个网站,就需要对服务器进行环境搭建,这样才能支持提供网站的各种功能的实现,那么我们今天就来讲讲[阿里云linux服务器lamp环境怎么快速搭建吧。
小白使用阿里云linux服务器怎么快速搭建环境