「AI开发小程序教程」九、部署小程序后端服务
在一篇内容中,我们已经购买了一个云服务器和一个域名,如果你忘记或者不知道这两个的用处,你可以查看第五篇文章
在上一篇中,我笼统地讲了要购买服务器和域名,希望你顺利地完成了这两件事。由于我已经有了服务器和域名,所以没有带大家一步步完成购买。如果你遇到问题,可以私信我获取帮助。这篇文章中,我也尽量补充一些截图。
这篇文章,我们要做的事情是,把小程序的后端程序部署运行在服务器上,并自定义一个三级域名,并将此域名解析到这个服务器上,最终的效果是,假设三级域名为 「app.你的域名.com」, 当你在浏览器中访问这个网址时,你的后端程序为此服务,并返回数据。
二级域名与三级域名
你所购买的域名,假设是「你的域名.com」,实际上被称为二级域名。「baidu.com」也是。
而一个域名下,可能会提供多项服务,比如 百度地图的网址是「map.baidu.com」,百度网盘的网址是「pan.baidu.com」,而这些被称为三级域名。
你拥有「你的域名.com」这个域名的完全控制权,你可以随意规定任何三级域名,比如「app.你的域名.com」,「map.你的域名.com」,这里的app、map都是可以自选的。你可以按照你的小程序名字自己定义一个三级域名。这里最终会体现在域名解析部分。
购买服务器的详细教程
上一篇中,在购买服务器时,就已经选择宝塔linux面板了。如果你当时没有选择,你也可以通过上的提示来安装。
为什么要用宝塔面板?主要是为了省事,如果不用的话,需要自己配置程序运行环境、自己安装数据库等。为了教程的简洁性,也为了能满足「有手就行」的目标,用这个是非常合适的。人生苦短,没必要麻烦自己。
这篇文章我用阿里云服务器作为从0到1的教学,其他厂商的服务器应该是大差不差的。
首先,我先创建一台全新的服务器。在阿里云的后台页面上搜索ECS,进入云服务器首页,点击创建。
我会在写完教程后,销毁此服务器,所以我这里选择按量付费。长期使用的话,包年包月更好。如果你购买的是轻量服务器或者是99计划的服务器等,一般都是包年包月的。

这里我选中宝塔面板让他直接安装好。

网络和安全组这边,我保持默认配置就行,可以看到,服务器将会分配一个公网IP地址,我们后续在域名解析的时候要用到公网IP地址


服务器的详情页面,可以看到公网IP为8.152.212.254

由于服务器是开机的,即使不用域名,我们也可以在浏览器访问这个地址,或者是与这个地址建立连接。
当然,由于我并没有开放网页端口,以及没有准备好后端服务,所以直接访问还不行。

这个时候,需要在安全组里开放80、443端口。80端口用于http服务,443端口用于https服务。

登录到宝塔linux面板
我在购买服务器时选择了宝塔面板,但是并没有看到宝塔面板的入口地址和其他信息。所以我先登录到服务器命令行,查看一下信息。如果其他平台或购买方式给了这个信息的话,可以直接使用。

在新打开的页面上我直接免密登录进去。

然后输入命令,bt

可以看到宝塔的服务应该是在的,再输入14,查看信息

可以看到宝塔服务的外网地址和初始的用户名密码,后续如果密码忘记了,可以通过bt 5修改密码
直接复制这个地址,在浏览器中访问,可以看到这里使用的是8888端口,需要在安全组中开放次端口的访问

开放之后,在浏览器打开宝塔面板的入口地址

在页面上输入用户名和密码,登录

初次登陆需要同意宝塔面板用户协议

首次进入是这个样子,我暂时先不理会这个绑定操作,直接点击左侧的首页

首页是这个样子,会弹出来一些初始化的建议,也先不管他

在宝塔面板中安装nginx
nginx,网页服务相关


安装需要一段时间,安装完nginx后,在浏览器访问外网IP应该就有反应了。

在宝塔面板中安装java环境
因为我这个教程里是Java程序,在第六篇文章中,我们打包得到了一个jar文件,这就是后端程序,需要用java运行起来这个软件,如果你用的是其他语言如python,需要对应的环境设置。Go语言不需要环境,软件可以直接运行。

任意选择JDK17及以上版本,点击安装。在当前,通常可以用jdk17或jdk21,最好用高版本的21
等待自动安装完即可。
在宝塔面板中安装mysql数据库

按需选择mysql版本即可,5.7版本与8以上的的版本应该有差异,如果没啥要求,尽量用高版本
mariadb是mysql的一个分支,不过是开源免费的。mysql也可免费用。
这里我安装mysql 8版本。

安装完成后,可以在数据库页面进行管理,你可以为你的程序创建一个数据库,并设置用户名和密码。

部署后端程序
有了这些软件后,就可以开始部署和运行程序了。
首先,找到软件的jar文件,如果你忘记了,请你去看第六篇内容的打包部分。
对于数据库用户名和密码部分的配置,你可以让宝塔中新建的数据库与本地保持一致,或者在代码中重新更改为宝塔面板中的用户名和密码。或者你也可以在上传jar文件到服务器时,把代码中的application.yml 配置文件也放在一起,然后修改这个配置文件。
首先上传jar文件到服务器

在www下新建一个文件夹来存放jar软件,如app,并点击进入此文件夹,点击上传


你也可以把项目中的application.yml也上传到这里,然后通过这个文件来更改数据库用户名密码

接下来,创建一个java项目来启动这个软件

可以查看日志看是否启动成功

这里启动失败了,是因为开发的java版本与宝塔里的版本不一致导致的,我重新换个JDK版本再启动

这样就启动成功了。如果服务器安全组开放了8080端口,可以通过http://公网IP:8080 来访问到。但是这里就不做此验证了,因为我会用nginx来代理此服务来为外部请求来服务。
接下来还有两件事:1、为此服务绑定一个自定义的域名;2、为服务添加https,因为微信小程序必须通过https访问这个服务
域名解析
对于域名,你需要先进行工信部备案才能解析到服务器上,否则,即使你解析了,阿里云等厂商也会自动拦截并提示你需要备案。因为国家规定域名解析到境内服务器时,需要完成备案。
关于备案,篇幅问题,放在后续的文章中说明。当然,你可以直接探索,再阿里云搜索备案按照提示操作,这些云服务厂商对备案支持地都比较好。

备案完成后,可以正常进行域名解析。
在阿里云后台找到域名服务。

在域名页面上,点击域名管理-域名列表,并点击解析

在解析页面上,新增一个解析记录

这样就完成了解析,域名解析全球生效需要一定的时间,一旦生效,你就可以通过访问这个「todo.你的域名.后缀」来达到直接访问公网IP一样的效果了。再也不需要记住公网IP了。
让后端程序使用这个域名
光解析了还不行,因为现在的效果是跟访问公网IP一样,也就是 IP:80端口一样,而程序运行在8080端口,所以需要进一步处理才行。你要记住http开头的地址,就算不写端口,也是80,https开头的地址,就算不写端口,也是443
所以当你访问域名时,自动是80端口和443端口,而不是后端程序的8080端口,除非你自己在后面添加:8080
你要记住,域名的作用实际上是等同于IP地址,管不了端口
所以我们要通过nginx来代理和转发到真正的后端程序上。

添加完成后,打开外网访问

配置映射

配置完成,并且域名解析生效后,就可以通过域名进行访问

这样就是成功了。页面上的内容,实际上与 IP:8080来访问是一样的,都是后端程序返回的。
配置HTTPS
因为小程序需要通过https来访问服务,所以需要为后端程序启用https
申请免费证书就行


免费证书有效时间是90天,到期前记得来这里点续签,否则过期了之后,浏览器访问会显示不安全,更大的问题是,会影响小程序,因为小程序也访问不了服务了。所以记得续签。
最后打开强制HTTPS、并点击保存。

保存后,用「https://todo.你的域名.后缀」在浏览器中访问就可以了,可以看到不安全的标识已经没有了。

这样就完成了HTTPS。
修改小程序代码及配置域名白名单
到这里后端程序就部署完成了,但是别忘了两件事。
1、小程序中用这个https的域名来替换原来代码中的127.0.0.1或者是localhost,如果你忘记的话,可以看看第四篇文章。因为原来AI进行开发时,访问的是自己电脑上的后端程序,现在要访问服务器上的程序了。
你可以让AI帮你改,告诉他用新的地址替换原来的本地开发环境的地址就可以。
2、在后台中添加域名白名单。


配置完成后,开发者工具中就可以不受这个限制了,取消勾选3的位置,也可以正常访问。因为后端服务已经是HTTPS了。

好了,你只需要在AI改完后,先在本地测试一下,你可以关掉你本地运行的后端程序,如果功能都正常,你可以上传后再手机上再试试,一切OK后,你就可以准备提交小程序审核了。对了,别忘了在上线前早点完成工信部的备案,这里不是域名备案,而是小程序备案。
到这里,主线任务基本完结了,恭喜你掌握了怎么开发一个小程序,怎么把用户数据存储到服务器,以及如何真正上线一个小程序。当然本系列文章还没完结,后续的文章将会补充其他支线任务,不过都是可选的。下一篇,我们先来集中说一下备案的问题。
