1.开发自己的第一个项目
这里我引用的是在线聊天室,参考源码是https://github.com/beego/samples/tree/master/WebIM
在源码的基础上重新开发,整理项目发布到了liu289747235/WebIM
推荐下载源码:https://gitee.com/myselfyou/web-im
在线聊天室应用:
- 使用长轮询模式。
- 使用 WebSocket 模式。
以上两种模式均默认将数据存储在内存中,因此每次启动都会被重置。但您也可以通过修改 conf/app.conf
中的设置来启用数据库。
以下为项目组织大纲:
WebIM/
WebIM.go # main 包的文件
conf
app.conf # 配置文件
controllers
app.go # 供用户选择技术和用户名的欢迎页面
chatroom.go # 数据管理相关的函数
longpolling.go # 长轮询模式的控制器和方法
websocket.go # WebSocket 模式的控制器和方法
models
archive.go # 操作数据相关的函数
views
... # 模板文件
static
... # JavaScript 和 CSS 文件
2.beego项目部署
一般服务器都是linux,这里主要介绍linux系统的项目部署。
2.1.项目打包
之前介绍过beego的安装及bee工具的使用-CSDN博客, 在项目根目录执行下面命令完成项目打包。
C:\Users\leell\go\src\WebIM>set GOOS=linux
C:\Users\leell\go\src\WebIM>bee pack
______
| ___ \
| |_/ / ___ ___
| ___ \ / _ \ / _ \
| |_/ /| __/| __/
\____/ \___| \___| v2.1.0
2024/01/20 15:25:07 INFO ▶ 0001 Packaging application on 'C:\Users\leell\go\src\WebIM'...
2024/01/20 15:25:07 INFO ▶ 0002 Building application (WebIM)...
2024/01/20 15:25:07 INFO ▶ 0003 Using: GOOS=linux GOARCH=amd64
2024/01/20 15:25:12 SUCCESS ▶ 0004 Build Successful!
2024/01/20 15:25:12 INFO ▶ 0005 Writing to output: C:\Users\leell\go\src\WebIM\WebIM.tar.gz
2024/01/20 15:25:12 INFO ▶ 0006 Excluding relpath prefix: .
2024/01/20 15:25:12 INFO ▶ 0007 Excluding relpath suffix: .go:.DS_Store:.tmp:go.mod:go.sum
2024/01/20 15:25:13 SUCCESS ▶ 0008 Application packed!
打包完成后当前目录得到一个tar.gz后缀的压缩包。
2.2.独立部署
独立部署就是直接将上面得到的压缩包,上传到服务器,解压缩后直接运行go程序。
[root@k8s-master01 ~]# tar -zxf WebIM.tar.gz -C WebIM
# 先进入项目目录
[root@k8s-master01 ~]# cd WebIM
# 添加执行权限
[root@k8s-master01 WebIM]# chmod +x WebIM
# 在后台执行beego程序
[root@k8s-master01 WebIM]# nohup ./WebIM &
[1] 32604
2.3 查看服务部署情况
我的服务器是本地192.168.10.10 centos7
root用户登录聊天室:
leellun用户登录聊天室:
3.beego热更新
热更新指的是在不中断服务的情况下,完成程序升级。beego项目默认已经实现了热更新。
下面介绍beego如何实现热更新。
首先在app.conf配置文件中打开热更新配置。
graceful = true
假设目前老版本的程序正在运行,进程ID是32604。
现在将新版本的beego程序压缩包上传到服务器,解压缩,直接覆盖老的文件。
下面是触发beego程序热更新的命令:
[root@k8s-master01 WebIM]# ps -ef|grep WebIM
root 3733 22656 0 15:32 pts/0 00:00:00 grep --color=auto WebIM
root 32604 22656 0 15:30 pts/0 00:00:00 ./WebIM
[root@k8s-master01 WebIM]# kill -HUP 32604
[root@k8s-master01 WebIM]# ps -ef|grep WebIM
root 4124 32604 0 15:33 pts/0 00:00:00 [WebIM] <defunct>
root 4206 22656 0 15:33 pts/0 00:00:00 grep --color=auto WebIM
root 32604 22656 0 15:30 pts/0 00:00:00 ./WebIM
上面这个命令的意思就是给指定进程发送一个HUB信号,beego程序接收到这个信号后就开始处理热更新操作。defunct表示失灵的服务
因为我们老版本的进程ID是32604, 因此命令是:
kill -HUP 32604
执行命令就可以完成热更新操作。
参考文章:beego项目部署与热更新 - 范斯猫