beego项目部署与热更新

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项目部署与热更新 - 范斯猫

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/335674.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kafka参数配置参考和优化建议 —— 筑梦之路

对于Kafka的优化&#xff0c;可以从以下几个方面进行思考和优化&#xff1a; 硬件优化&#xff1a;使用高性能的硬件设备&#xff0c;包括高速磁盘、大内存和高性能网络设备&#xff0c;以提高Kafka集群的整体性能。 配置优化&#xff1a;调整Kafka的配置参数&#xff0c;包括…

go语言(七)----slice的声明方式

1、声明方式一 //声明一个slice1是一个切片&#xff0c;但是并没有给slice分配空间var slice1 []intslice1 make([]int,3)2、声明方式二 声明一个slice切片&#xff0c;同时给slice分配空间&#xff0c;3个空间&#xff0c;初始化值是0var slice1 []int make([]int,3)3、声…

Docker:6种网络配置详解浅介

在Docker中&#xff0c;网络配置是一个重要的主题&#xff0c;因为容器需要与其他容器或外部网络进行通信。Docker提供了多种网络模式和配置选项&#xff0c;以便在不同的场景下满足用户的需求。 本文介绍这些网络模式的区别以及配置&#xff0c;相信看完以后你能够掌握Docker网…

基于springboot+vue养老院管理系统

摘要 这是一个基于Spring Boot 和 Vue.js 的养老院管理系统的项目。该系统旨在提供一套全面的解决方案&#xff0c;以简化养老院的日常管理任务&#xff0c;包括居民信息管理、员工调度、医疗服务追踪、财务管理等。通过结合后端的Spring Boot框架和前端的Vue.js框架&#xff0…

【LeetCode】每日一题 2024_1_20 按分隔符拆分字符串(模拟/库函数)

文章目录 随便聊聊时间题目&#xff1a;按分隔符拆分字符串题目描述代码与解题思路 随便聊聊时间 LeetCode&#xff1f;启动&#xff01;&#xff01;&#xff01; 时隔半个月&#xff0c;LeetCode 每日一题重新开张&#xff0c;寒假学习&#xff0c;正式开始 题目&#xff1…

算法笔记(动态规划入门题)

1.找零钱 int coinChange(int* coins, int coinsSize, int amount) {int dp[amount 1];memset(dp,-1,sizeof(dp));dp[0] 0;for (int i 1; i < amount; i)for (int j 0; j < coinsSize; j)if (coins[j] < i && dp[i - coins[j]] ! -1)if (dp[i] -1 || dp[…

calloc与realloc和malloc的区别以及new

目录 calloc、realloc 和 malloc 三个函数的区别在于 更详细的示例代码 交叉使用 内存泄漏 悬空指针 内存重叠 new 的语法 使用 new 运算符在堆上创建学生对象的示例 new和malloc都可以用于在堆上分配内存 calloc、realloc 和 malloc 是 C/C 中用于动态内存分配的函…

链表的相交

链表的相交 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/intersection-of-tw…

【NVIDIA】Jetson Orin Nano系列:安装 Qt6、firefox、jtop、flameshot

1、使用命令安装 sudo apt install qtcreator sudo apt install qt6-* sudo apt install libqt6* sudo apt install qml-qt6 sudo apt install qmlscene-qt6 sudo apt install assistant-qt6 sudo apt install designer-qt62、启动 qtcreator 3、常用工具安装 sudo apt in…

ros2学习笔记-CLI工具,记录命令对应操作。

目录 环境变量turtlesim和rqt以初始状态打开rqt node启动节点查看节点列表查看节点更多信息命令行参数 --ros-args topic话题列表话题类型话题列表&#xff0c;附加话题类型根据类型查找话题名查看话题发布的数据查看话题的详细信息查看类型的详细信息给话题发布消息&#xff0…

线程状态转换

&#x1f4dd;个人主页&#xff1a;五敷有你 &#x1f525;系列专栏&#xff1a;并发编程⛺️稳中求进&#xff0c;晒太阳 程状态转换 假设有线程Thread t 情况1 new-->RUNNABLE 当调用t.start()方法时&#xff0c;由new ->RUNNABLE 情况2 RUNNABLE WAITING t…

无/自监督去噪(1)——一个变迁:N2N→N2V→HQ-SSL

目录 1. 前沿2. N2N3. N2V——盲点网络&#xff08;BSNs&#xff0c;Blind Spot Networks&#xff09;开创者3.1. N2V实际是如何训练的&#xff1f; 4. HQ-SSL——认为N2V效率不够高4.1. HQ-SSL的理论架构4.1.1. 对卷积的改进4.1.2. 对下采样的改进4.1.3. 比N2V好在哪&#xff…

c++基础2

一、c的引用 引用和指针的的区别&#xff1f; 引用是一种更安全的指针&#xff1a; 1. 引用必须初始化&#xff0c;指针可以不用初始化 int a 10; int *p; // 指针可能是野指针 int &b a;//引用赋值"&#xff0c;通常指的是直接修改引用所引用的对象的值&#xff0…

Three.JS教程1 环境搭建、场景与相机

Three.JS教程1 环境搭建、场景与相机 一、Three.JS简介二、环境搭建1. 开发准备2. 安装 three.js3. 新建文件index.htmlmain.js 4. 关于附加组件5. 启动 三、创建场景1. 场景的概念2. 相机的概念3. 相机的几个相关概念&#xff08;1&#xff09;视点&#xff08;Position&#…

信息登记小程序怎么做_重塑用户互动,开启全新营销篇章

信息登记小程序&#xff1a;重塑用户互动&#xff0c;开启全新营销篇章 在数字化浪潮中&#xff0c;小程序以其便捷、高效的特点&#xff0c;逐渐成为企业与用户之间沟通的桥梁。其中&#xff0c;信息登记小程序更是凭借其独特的定位&#xff0c;在众多小程序中脱颖而出。本文…

荣誉艾尔迪亚人的题解

目录 原题描述&#xff1a; 题目背景 题目描述 输入格式 输出格式 样例 Input 1 Output 1 Input 2 Output 2 数据范围&#xff1a; 样例解释 主要思路&#xff1a; 代码code&#xff1a; 原题描述&#xff1a; 时间限制: 1000ms 空间限制: 65536kb 题目背景 ​…

ros2 基础教程-使用ROS 2进行相机标定

ROS 2进行相机标定&#xff08;Camera Calibration&#xff09; 相机&#xff08;摄像头&#xff09;是一种非常精密的光学仪器&#xff0c;对外界环境的感知非常敏感。由于摄像头内部和外部的一些原因&#xff0c;摄像头采集的图像常常会发生一定的畸变。如果直接将采集到的图…

【分布式技术】ELK大型日志收集分析系统

目录 步骤一&#xff1a;完成JAVA环境部署 步骤二&#xff1a;部署ES节点&#xff08;三台主机&#xff09; 步骤三&#xff1a;内核参数修改 步骤四&#xff1a;web端查看验证 步骤五&#xff1a;yum安装nginx 步骤六&#xff1a;完成logstash部署 步骤七&#xff1a;部…

matlab抽取与插值

什么是抽取&#xff1f; 我们假设一个数字信号 x ( n ) , n 1 , 2 , . . . , N x(n),n1,2,...,N x(n),n1,2,...,N共有 N N N个点&#xff0c;抽取就是每个几个点抽1个点&#xff0c;比如2倍抽取&#xff0c;那么抽取后的信号为 y ( n ) , y ( 1 ) x ( 1 ) , y ( 2 ) x ( 3 …

stm32 FOC 电机介绍

今年开始学习foc控制无刷电机&#xff0c;这几天把所学整理一下&#xff0c;记录一下知识内容。 前言: 为什么要学习FOC? 1.电机控制是自动化控制领域重要一环。 2.目前直流无刷电机应用越来越广泛&#xff0c;如无人机、机械臂、云台、仿生机器人等等。 需要什么基础&…