当你想转战服务端开发,你搜了下如何开始,就会得到一大堆要学习的东西:开发语言、后端框架、操作系统、数据库、负载均衡,安全策略、xss、Dos攻击、Nginx、Apache、docker、k8s、redis等各种新技术、新名词和抽象概念。
好多!好难!好麻烦!!
你做了一个深呼吸,耐下心来吭哧吭哧学了好几周,却发现一个Hello world都没有上线,学了一堆东西也不知道怎么用,感觉还没有入门,太难了,你不禁得出结论,服务端开发还是得有人带,自己搞不定,放弃吧~
当然你是一个爱学习的好同学,没有真正放弃,一有空闲就咬牙坚持学习,在两三个月后上线了一个API,终于入门了,那天样阳光灿烂,你仰天大笑出门去,我辈不是蓬蒿人~
又学了很久很久,你终于搞明白一开始学得那一堆东西到底有什么用了,但又好像没有什么用~
在学习这几个月过程中,有一个疑问一直在脑海中萦绕,服务端学习有这么难么?入门成本这么高,是不是路错了?
恭喜你,猜对了!你走错路了!服务端从零入门只需要3~7天!
AI加持下,没有什么技术在一周还入不了门的,如果没有做到,就一定能找到更优的路径~
首先,要思考服务端是什么?如何算是入门了?
服务端是一个一直运行的程序,它不断的接收客户端传来的网络请求,加以处理后返回结果。
在客户端看来服务端就是一个网络API集合,当我们能够上线一个API(http://<域名Ip>:端口/方法名)就算入门了。
围绕上线一个API,我们需要了解服务端数据从接收到返回的基本流程和相关概念,可以看这篇 科普|服务端数据流程和基本概念
了解基本概念后我们进入实操三部曲:
编写代码:选择编程语言和开发框架,编写并运行服务端应用代码;
打包和部署;把程序打包成可执行文件、传输到生产服务器上并运行起来;
申请公网IP,打通访问链路:打通客户端到服务端App的访问链路,申请公网Ip、申请域名、开放端口,防火墙设置等。
接下来我们具体展开
一、编写代码
在大模型出现后,编写代码已经成为入门阶段最简单的部分了。
我们可以根据大模型、百度、技术大佬推荐去选择一个开发语言、一个开发工具和开发框架、就可以开始了。
想做什么功能,让大模型给你写就是了,以后看多了、 写多了、 自然熟练了。
我选择的是go语言,GoLand开发工具,gin网络框架,因为目标是写一个客户端可以访问的网络API,直接让GPT/文心一言大模型写好,我修改了下如下:
package main
import (
"fmt"
"github.com/gin-gonic/gin"
"math/rand/v2"
"net/http"
"strconv"
)
func main() {
fmt.Println("Hello first Go")
r := gin.Default()
r.GET("/", func(c *gin.Context) {
c.String(200, "Hello this is my first go server")
})
r.GET("/ping", getRandomNumberString)
r.GET("/bing", func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
"message": "这是json返回",
})
})
err := r.Run()
if err != nil {
return
} // gin 默认listen and serve on 0.0.0.0:8080
}
/**
* gin.Context是默认传递参数
*/
func getRandomNumberString(c *gin.Context) {
randomNumber := rand.IntN(100)
c.String(200, "今天你的幸运数字是 "+strconv.Itoa(randomNumber))
}
代码中有不懂的就问大模型,整体流程不清楚的首先看下 科普|服务端开发基本概念。点击run,它在本地电脑上运行起来后,就是一个服务端了,在浏览器上输入
http://localhost:8080/ping
http://localhost:8080
http://localhost:8080/bing
能正常返回,就证明这个API和代码你已经开发OK了,但是
- 一呢,我们开发服务端的目的,不是给本机用,而是给遥远的客户端用;
- 二呢,我们的开发机,一般来说也不会当作一个生产服务器(或者叫正式服)使用(虽然可以,原因大家可以猜测下,很容易猜到),开发机上开发的程序,需要安装到生产服务器运行;
所以接下来重点就是如何把程序运行在正式服务器上-打包和部署,以及如何让用户能够通过网络访问到我们正式服务器并和运行在它上面的进程通信-访问链路打通,目标是在任意地方浏览器输入
http://<生产服务器Ip>:8080/ping
// 可以正确返回
二、打包和部署
应用部署指将软件产物从开发环境复制到生产环境,并进行安装、配置和启用的过程,它包括了应用从打包制作完毕,到可使用状态(ready态)的所有工作内容。
打包是为部署服务的,目的是制作出生产环境能够正确运行的软件产物。
具体打包部署请看科普|服务端应用部署(流程、概念解释、原理探讨)
三、申请公网IP,打通访问链路
只有服务器(就是一台电脑)有了公网IP,客户端才能在任何地方访问到它,获取公网IP一般就三种路子:
1. 向宽带提供商申请静态IP后,绑定个人电脑;
2. 直接购买云服务器;
3. 公司提供有外网的服务器;
方案1价格又贵又麻烦;方案2等于说是买了一个云主机赠送的一个公网IP,那个人开发/小公司毫不犹豫选择2;方案3属于内部使用,这里不介绍。
目前国内使用比较多的云服务器有阿里云、腾讯云、京东云、华为云、百度智能云,随便挑一个,有时间有免费使用的羊毛也可以撸,我是花了99块买了一个阿里云服务器ECS—Elastic Compute Service(弹性计算服务)。
买了之后,就在控制台看到了我的公网IP
眼尖的你是不发现还有一个私有IP,它类似于局域网Ip主要用于多个阿里云服务器之间通信减少公网流量,加快通信速度,咱入门后再玩多个服务器,现在不用管。
紧接上一步,我们看到操作那边有一个 远程连接,故名思意就是远程连接到我们购买的阿里云服务器上,走 去连接看看
哎呀,如此简单,连个好用的桌面都没有,不过想一下啊,这成本意识真好,能省则省!!
这些桌面系统不过是方便操作,但是会占用很多资源的,增加安全隐患,服务器志不在此,都用命令行吧!
这会也瞬间明白了为啥很多服务端入门要你先学Linux操作系统命令,因为服务器系统为了节省就不会重视人机交互的。
统统用命令行,安装程序—命令行,配置环境—命令行,创建文件—命令行,运行程序—命令行 ,用的熟了,你就是服务端运维大师了(未来不一定)。
扯远了,知道了云服务器这个鸟样子,我们就参照科普|服务端应用部署(流程、概念解释、原理探讨)做两点:
- 配置服务器运行环境;
- 打包好适合服务器系统和架构的软件产物,并传输过来后运行;
前面程序我是用的go语言写的,所以需要配置go环境,哎~简单查了下,阿里云还挺给力的
直接安装go,自动给咱环境配置好了,命令行打go version生效,环境配置OK,搞定!!
接下来就是通过命令行确定下,这个阿里云服务器系统和CPU架构了——Linux/x86(一般盲猜就这个)
确定了系统和架构,就要在开发机上打包出来适合这个服务器go程序
GOOS=linux GOARCH=amd64 go build -o myapp-linux-amd64
打包后把产物发送到阿里云服务器
命令行添加运行权限
chmod +x first-go-server-app
通过命令行" 路径/文件名",启动程序
搞定,在有公网IP的服务端运行起来,我的第一个go服务端了 激动,在电脑浏览器上输入
http://<生产服务器Ip>:8080/ping
啊——怎么什么也没有返回,吓得我赶紧打开命令行
ping 生产服务器Ip
// 回复Ok
curl http://<生产服务器Ip>:8080/ping
// 访问超时
额,IP能通,端口不通,那就是我的阿里云服务器访问权限问题,找GPT聊一聊,明白了,阿里云和Linux防火墙都有对端口进行限制,我们要一个个打开
首先是阿里云
这样阿里云的端口限制就打开了,接下来是Linux防火墙开放端口,GPT也给出了详细命令,一一执行
sudo iptables -A INPUT -p tcp --dport 8080 -j ACCEPT
sudo firewall-cmd --permanent --add-port=8080/tcp
sudo firewall-cmd --reload
// 永久保存,下次重启电脑还有用
sudo yum install iptables-services
sudo service iptables save
sudo systemctl enable iptables
再次尝试
搞定!我的第一个服务端API上线了!哈哈哈!云端学习入门结束!
接下来就是实践Docker部署、k8s了,可以直接开发一个项目了,什么操作系统命令学习、数据库学习、网络安全,负载均衡都是在这个流程上再加的额外东西,不懂就问GPT/文心一言/Kimi/通义千问等大模型,熟练就是早晚的事~
最后的最后,说下我的一点感想,有了AI大模型后,提升学习工作效率的关键是————把自己学习流程和工作流程AI化!!! 欢迎评论区交流~