编了个程 潜水
  • 2发帖数
  • 2主题数
  • 0关注数
  • 0粉丝
开启左侧

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

[复制链接]
编了个程 发表于 2021-1-26 22:17:58 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题
这是《从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等平台,需要在创建时传入不同的环境变量。具体用法可以参考官方文档:https://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。具体参考:https://docs.drone.io/quickstart/cli/#trusted-mode
登录以后,会自动同步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: pipelinename: buildsteps:  - 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: pipelinetype: sshname: deployserver:  host: yasinshaw.com  user: root  ssh_key:    from_secret: ssh_keysteps:  - 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:latestdepends_on:  - build
这里的secret需要去drone的界面上配置。secret的具体用法可以参考官方文档:https://docs.drone.io/secret/

                               
登录/注册后可看大图

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

我是Yasin,一个爱写博客的技术人
微信公众号:编了个程
个人网站:https://yasinshaw.com
公众号排版最佳,第一时间发布,阅读体验Max,欢迎关注。
还有学习资源、技术交换群和大厂内推哦

精彩评论9

碧阁 发表于 2021-1-28 20:21:09 | 显示全部楼层
转发了
春天2025 发表于 2021-1-28 07:21:15 | 显示全部楼层
转发了
Henry159362076 发表于 2021-1-28 08:38:33 | 显示全部楼层
转发了
唐少秋 发表于 2021-1-28 01:36:10 | 显示全部楼层
转发了
物联引擎 发表于 2021-1-28 00:44:32 | 显示全部楼层
转发了
IT游民 发表于 2021-1-28 11:42:17 | 显示全部楼层
转发了
寒江夜盗 发表于 2021-1-27 10:11:38 | 显示全部楼层
转发了
RedMerry 发表于 2021-1-27 08:46:55 | 显示全部楼层
转发了
羁绊130331736 发表于 2021-1-27 11:50:49 | 显示全部楼层
1
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

猜你喜欢
在线客服邮箱
wxcy#wkgb.net

邮箱地址#换为@

Powered by 创意电子 ©2018-现在 专注资源实战分享源码下载站联盟商城