服务端开发实践三部曲|从零开始上线一个API

    当你想转战服务端开发,你搜了下如何开始,就会得到一大堆要学习的东西:开发语言、后端框架、操作系统、数据库、负载均衡,安全策略、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,它类似于局域网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

再次尝试

访问OK

搞定!我的第一个服务端API上线了!哈哈哈!云端学习入门结束!

接下来就是实践Docker部署、k8s了,可以直接开发一个项目了,什么操作系统命令学习、数据库学习、网络安全,负载均衡都是在这个流程上再加的额外东西,不懂就问GPT/文心一言/Kimi/通义千问等大模型,熟练就是早晚的事~

最后的最后,说下我的一点感想,有了AI大模型后,提升学习工作效率的关键是————把自己学习流程和工作流程AI化!!! 欢迎评论区交流~

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,088评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,715评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,361评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,099评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,987评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,063评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,486评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,175评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,440评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,518评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,305评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,190评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,550评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,152评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,451评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,637评论 2 335

推荐阅读更多精彩内容