image.png

最近使用Nightingale 需要实现对服务的监测,想要在Windows 系统中使用,看官方文档中并不直接提供执行程序,原文如下:
image.png

准备工作

本地环境

本地已经安装git

本地安装git 便于后续下载源码并进行自动编译。

Linux操作系统环境(Centos8

由于源码的执行脚本是使用sh,为了降低难度,直接使用Linux-amd64,不管是使用虚拟机还是Wsl 子系统都可以,笔者这里使用的Centos8 本地物理机 。

安装Go 并配置环境

下载Go 二进制部署包(国内可以使用阿里云等镜像源进行下载)。
官方下载:

wget https://golang.google.cn/dl/go1.25.0.linux-amd64.tar.gz

国内镜像:

wget https://mirrors.aliyun.com/golang/go1.25.0.linux-amd64.tar.gz

解压到/usr/local目录。

$sudo tar -C /usr/local -xzf go1.25.0.linux-amd64.tar.gz

执行命令输出结果如下:

$whereis go

配置环境变量,此处为了方便演示,直接配置/etc/profile,便于所有用户均生效。

$sudo vi /etc/profile

在尾部添加如下配置:

export PATH=$PATH:/usr/local/go/bin

国内可以添加环境加速变量:

export GOPROXY=https://goproxy.cn,direct 
export GOSUMDB=off

配置后保存并退出,使用source /etc/profile

$ source /etc/profile

验证是否生效:

$go version
go version go1.25.0 linux/amd64

查看环境:

$go env GOOS GOARCH
linux amd64
安装GoReleaser

参考官方链接
直接使用Go install

$go install github.com/goreleaser/goreleaser/v2@latest

安装完成后,实际执行程序在/home/当前账户/go/bin/goreleaser
由于默认未设置Go 的执行目录。
为了方便,同样在当前账户环境变量配置.bash_profile 配置文件的尾部添加上环境变量,保存后退出。

export PATH=$PATH:/home/<当前账户>/go/bin

执行source

source .bash_profile

查看版本。

$goreleaser -v____       ____      _/ ___| ___ |  _ \ ___| | ___  __ _ ___  ___ _ __
| |  _ / _ \| |_) / _ \ |/ _ \/ _` / __|/ _ \ '__|
| |_| | (_) |  _ <  __/ |  __/ (_| \__ \  __/ |\____|\___/|_| \_\___|_|\___|\__,_|___/\___|_|
goreleaser: Release engineering, simplified.
https://goreleaser.com
GitVersion:    v2.11.2
GitCommit:     unknown
GitTreeState:  unknown
BuildDate:     unknown
BuiltBy:       unknown
GoVersion:     go1.25.0
Compiler:      gc
ModuleSum:     h1:Od6dcPI5r8IWVPnJYz6wYe3rML1qf80fLzXB1Ix6ZnY=
Platform:      linux/amd64

至此,环境准备成功。

下载源码

把代码通过master分支克隆下来,对应tag版本为8.2.1

git clone https://github.com/ccfos/nightingale.git

由于是使用的Go 语言开发,同时注意到项目源码目录下中有一个.goreleaser.yml 配置文件。可以考虑直接通过GoReleaser进行程序构建。

修改配置

实际为了正常使用编译,需要修改两个配置文件,一个是fe.sh,一个是.goreleaser.yml

fe.sh

修改该文件主要是在执行自动化打包时,会需要从github中下载对应版本的源码包,由于是国内,所以,为了快速下载。所以需要添加一些国内的github 代理站点,这里笔者也是用AI修改的,完整配置如下:

#!/bin/bash# 复制初始化 SQL
cp -f ./docker/initsql/a-n9e.sql n9e.sql# 如果 pub 目录已存在,跳过下载
if [ ! -d "./pub" ]; then# 获取最新版本号TAG=$(curl -sX GET "https://api.github.com/repos/n9e/fe/releases/latest" | awk '/tag_name/{print $4;exit}' FS='[""]')FILENAME="n9e-fe-${TAG}.tar.gz"echo "?? 正在下载前端包: ${FILENAME}"# 定义多个下载源(支持代理)DOWNLOAD_URLS=("https://mirror.ghproxy.com/https://github.com/n9e/fe/releases/download/${TAG}/${FILENAME}""https://gh-proxy.com/https://github.com/n9e/fe/releases/download/${TAG}/${FILENAME}""https://download.fastgit.org/n9e/fe/releases/download/${TAG}/${FILENAME}""https://github.com/n9e/fe/releases/download/${TAG}/${FILENAME}")# 尝试每个地址,直到成功for url in "${DOWNLOAD_URLS[@]}"; doecho "?? 尝试下载: $url"if curl -# -f -o "$FILENAME" -L "$url"; thenecho "? 下载成功: $FILENAME"breakelseecho "? 下载失败: $url"fidone# 检查是否下载成功if [ ! -f "$FILENAME" ]; thenecho "? 所有下载源均失败,无法获取 ${FILENAME}"exit 1fi# 解压if ! tar zxf "$FILENAME"; thenecho "? 解压失败: $FILENAME"exit 2fi# 清理压缩包(可选)# rm -f "$FILENAME"
fi# 获取 GOPATH
GOPATH=$(go env GOPATH)
GOPATH=${GOPATH:-$HOME/go}# 确保 statik 已安装
if ! command -v statik &> /dev/null; thenecho "??  statik 未安装,正在安装..."go install github.com/rakyll/statik@latest
fi# 嵌入静态文件
if ! "$GOPATH/bin/statik" -src=./pub -dest=./front -f; thenecho "? 嵌入静态文件失败"exit 4
fiecho "?? 前端资源已成功嵌入"
.goreleaser.yml

这个是goreleaser进行自动化打包需要的配置文件。原有配置中并未包含windows 执行配置,同时还多了docker 镜像包的打包,但是并不是笔者需要的,所以在使用AI对配置进行了合理修改,完整内容如下:

version: 2before:hooks:- go mod tidy- go install github.com/rakyll/statikchangelog:disable: true# 
# 
# 
# # 
archives:# Linux amd64- id: linux-amd64name_template: >-{{- if eq .Os "linux" }}n9e-v{{ .Version }}-linux-amd64.tar.gz{{- end }}wrap_in_directory: falsefiles:- docker/**- etc/**- integrations/**- cli/**- n9e.sql# # Linux arm64- id: linux-arm64name_template: >-{{- if eq .Os "linux" }}n9e-v{{ .Version }}-linux-arm64.tar.gz{{- end }}wrap_in_directory: falsefiles:- docker/**- etc/**- integrations/**- cli/**- n9e.sql# Windows amd64- id: windows-amd64name_template: >-{{- if eq .Os "windows" }}n9e-v{{ .Version }}-windows-amd64.zip{{- end }}wrap_in_directory: falsefiles:- docker/**- etc/**- integrations/**- cli/**- n9e.sql# Windows arm64- id: windows-arm64name_template: >-{{- if eq .Os "windows" }}n9e-v{{ .Version }}-windows-arm64.zip{{- end }}wrap_in_directory: falsefiles:- docker/**- etc/**- integrations/**- cli/**- n9e.sql# macOS amd64- id: darwin-amd64name_template: >-{{- if eq .Os "darwin" }}n9e-v{{ .Version }}-darwin-amd64.tar.gz{{- end }}wrap_in_directory: falsefiles:- docker/**- etc/**- integrations/**- cli/**- n9e.sql# macOS arm64- id: darwin-arm64name_template: >-{{- if eq .Os "darwin" }}n9e-v{{ .Version }}-darwin-arm64.tar.gz{{- end }}wrap_in_directory: falsefiles:- docker/**- etc/**- integrations/**- cli/**- n9e.sql# 
# builds:- id: buildhooks:pre:- cmd: sh -x ./fe.shoutput: truemain: ./cmd/center/binary: n9eenv:- CGO_ENABLED=0goos:- linux- windows- darwingoarch:- amd64- arm64ldflags:- -s -w- -X github.com/ccfos/nightingale/v8/pkg/version.Version={{ .Tag }}-{{ .ShortCommit }}# skip: false# archives - id: build-climain: ./cmd/cli/binary: n9e-clienv:- CGO_ENABLED=0goos:- linux- windows- darwingoarch:- amd64- arm64ldflags:- -s -w- -X github.com/ccfos/nightingale/v8/pkg/version.Version={{ .Tag }}-{{ .ShortCommit }}- id: build-edgemain: ./cmd/edge/binary: n9e-edgeenv:- CGO_ENABLED=0goos:- linux- windows- darwingoarch:- amd64- arm64ldflags:- -s -w- -X github.com/ccfos/nightingale/v8/pkg/version.Version={{ .Tag }}-{{ .ShortCommit }}# 
release:github:owner: ccfosname: nightingalename_template: v{{ .Version }}# Docker 
#dockers:
#  - image_templates:
#      - flashcatcloud/nightingale:{{ .Version }}-amd64
#    goos: linux
#    goarch: amd64
#    ids:
#      - build
#    dockerfile: docker/Dockerfile.goreleaser
#    extra_files:
#      - etc
#      - integrations
#    use: buildx
#    build_flag_templates:
#      - "--platform=linux/amd64"#  - image_templates:
#      - flashcatcloud/nightingale:{{ .Version }}-arm64v8
#    goos: linux
#    goarch: arm64
#    ids:
#      - build
#    dockerfile: docker/Dockerfile.goreleaser.arm64
#    extra_files:
#      - etc
#      - integrations
#    use: buildx
#    build_flag_templates:
#      - "--platform=linux/arm64/v8"# Docker 
#docker_manifests:
#  - name_template: flashcatcloud/nightingale:{{ .Version }}
#    image_templates:
#      - flashcatcloud/nightingale:{{ .Version }}-amd64
#      - flashcatcloud/nightingale:{{ .Version }}-arm64v8#  - name_template: flashcatcloud/nightingale:latest
#    image_templates:
#      - flashcatcloud/nightingale:{{ .Version }}-amd64
#      - flashcatcloud/nightingale:{{ .Version }}-arm64v8

执行配置检测

为避免配置粘贴复制存在问题,建议在源码根目录中,执行配置检测命令goreleaser checkout,保证配置的正确性。

$goreleaser checkout• checking                                  path=.goreleaser.yaml• 1 configuration file(s) validated• thanks for using GoReleaser!

进行构建

通过如下指令goreleaser build --snapshot进行快照构建,构建过程中需要耐心等待,输出如下内容则表示构建成功build succeeded after

 $goreleaser build --snapshot/*省略内容*/• building                                       binary=dist/build-edge_darwin_arm64_v8.0/n9e-edge• writing artifacts metadata• build succeeded after 1m2s• thanks for using GoReleaser!

构建过程中会生成dist目录,目录中就是不同平台对应的执行程序,如果在构建过程中出现异常,可以删除dist 目录进行重新构建。

Windows上运行

作为独立运行程序,需要准备两个依赖服务,也可以直接使用默认sqliteminiredis

mysql
redis

数据库初始化脚本在源码docker/initsql/a-n9e.sql中,可以直接进行执行,会自动在数据库服务中创建数据库n9e_v6
配置文件模板在源码etc目录下的config.toml 中,将其连带etc文件夹一并拷贝到与执行程序平级。

.
n9e.exe
etc/config.toml

主要修改config.toml 配置文件中[DB][Redis]

[DB]
# mysql postgres sqlite
DBType = "mysql"
# postgres: host=%s port=%s user=%s dbname=%s password=%s sslmode=%s
# postgres: DSN="host=127.0.0.1 port=5432 user=root dbname=n9e_v6 password=1234 sslmode=disable"
DSN="root:ggcy@admin@tcp(localhost:3360)/n9e_v6?charset=utf8mb4&parseTime=True&loc=Local"
[Redis]
# address, ip:port or ip1:port,ip2:port for cluster and sentinel(SentinelAddrs)
Address = "127.0.0.1:6739"
RedisType = "standalone"

直接控制台运行命令。

>n9e.exe
runner.cwd: [workdir]/build_windows_amd64_v1
runner.hostname: [host]
runner.fd_limits: N/A
runner.vm_limits: N/A
rpc.listening: 0.0.0.0:20090
please view n9e at  http://172.21.11.6:17000
http server listening on: 0.0.0.0:17000

访问地址:http://localhost:17000
Pasted image 20250815232846.png

默认账户为root,密码为root.2020,进入系统。
Pasted image 20250815233024.png

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/93557.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/93557.shtml
英文地址,请注明出处:http://en.pswp.cn/web/93557.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抽丝剥茧丨PostgreSQL 系国产数据库%SYS CPU newfstatat() high 调优一例(二)

续接上回《PostgreSQL 系国产数据库%SYS CPU newfstatat() high 调优一例&#xff08;一&#xff09;》&#xff0c;这个问题还在持续&#xff0c;并且原因并不只是一个&#xff0c;从调了文件系统级atime&#xff0c;到调整wal size减少日志被动清理&#xff0c;还有在验证tem…

【新手入门】Android Studio 项目结构拆解,快速理解文件作用!

目 录 一、【Project】视图下项目结构&#xff08;真实目录&#xff09; 二、【Android】视图下项目结构 三、【app/】下重要文件解析 1、 build.gradle 2、AndroidManifest.xml 3、res/ 作为刚刚接触Android开发的小白&#xff0c;使用Android Studio创建项目后&…

Python实现点云Kmeans、欧式和DBSCAN聚类

本节我们分享点云处理中的三种常见聚类方法&#xff0c;分别是K-means、欧氏与 DBSCAN聚类。具体介绍如下&#xff1a;1. K-means 聚类定义&#xff1a;一种基于距离度量的无监督学习算法&#xff0c;将数据划分为 K 个紧凑的簇&#xff0c;使簇内数据相似度高、簇间差异大。算…

【Java后端】MyBatis-Plus 原理解析

MyBatis-Plus 原理解析 其实 MyBatis-Plus 的 Service 层设计就是为了让开发者不用重复写很多样板代码。我们来一点点剖析 UserServiceImpl、IService、UserService、ServiceImpl 之间的关系和调用链。1. 类/接口关系图IService<T>▲│UserService (接口) <-- 自定义…

Nacos 注册中心学习笔记

&#x1f389; Alibaba微服务组件 Nacos 注册中心超详细学习笔记 &#x1f389; &#x1f4cc; 写在前面&#xff1a;本文基于官方PDF文档与实战经验&#xff0c;整理了Nacos注册中心的核心知识点、部署流程与实战技巧&#xff0c;力求图文并茂、通俗易懂&#xff0c;适合收藏反…

java 策略模式 demo

策略模式介绍策略模式&#xff08;Strategy Pattern&#xff09;是一种行为型设计模式&#xff0c;它定义了一系列算法&#xff0c;将每个算法封装起来并使它们可相互替换。策略模式让算法的变化独立于使用算法的客户端&#xff0c;从而实现灵活的算法切换。核心角色&#xff1…

SAP Valuation Category在制造业成本核算中的使用场景与配置方案

Valuation Category在制造业成本核算中的使用场景与配置方案一、核心使用场景&#xff08;制造业特有&#xff09;1. 内制 vs 外购成本分离业务需求&#xff1a;同一物料可能通过内部生产&#xff08;成本含料工费&#xff09;或外部采购&#xff08;成本含采购价运费&#xff…

我的 LeetCode 日记:Day 36 - 动态规划,背包问题的千变万化

昨天&#xff0c;我初步掌握了 0/1 背包问题的理论基础和标准解法。今天&#xff0c;我将这种思想应用到了更广泛的场景中。今天的几道题&#xff0c;乍一看和背包没什么关系&#xff0c;但通过巧妙的数学转化&#xff0c;它们的核心都变成了 0/1 背包问题。 这让我深刻体会到…

本地处理不上传!隐私安全的PDF转换解决方案

PDF能锁定排版、字体、图片位置&#xff0c;无论在什么设备打开都保持一致。它是无广告、简洁高效的专业PDF处理工具。功能丰富&#xff0c;支持批量操作&#xff1a;只需将文件拖入界面&#xff0c;选择目标格式&#xff08;如Word、PPT、Excel、图片等&#xff09;&#xff0…

Docker build创建镜像命令入门教程

一、核心概念Dockerfile 定义镜像构建步骤的文本文件&#xff0c;包含一系列指令和配置&#xff0c;用于自动化创建镜像。镜像层&#xff08;Layer&#xff09; Docker 镜像由多层只读层叠加而成&#xff0c;每个指令&#xff08;如 RUN、COPY&#xff09;会生成一个新的层。层…

Redis 是单线程模型吗?

最近在面试中经常被问到这个问题&#xff1a;"Redis是单线程的吗&#xff1f;"很多同学都会脱口而出&#xff1a;"是的&#xff01;"但其实这个答案并不完全正确。今天我们就来聊聊Redis的线程模型&#xff0c;把这个问题彻底搞清楚。 先说结论 Redis的线程…

Hologres实战:路径分析函数

前言 Hologres提供了一套高效的路径分析函数&#xff0c;包括路径明细计算和结果解析功能&#xff0c;能够帮助用户深入理解用户行为路径&#xff0c;并通过桑基图实现数据可视化。 一、核心功能 路径明细计算&#xff1a;精确记录用户在产品或功能中的完整访问路径结果解析…

产品开发实践(常见的软硬结合方式)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】前面说过&#xff0c;传统的纯软件开发&#xff0c;在国内的大背景下面是很难存活的。但是如果是把软件&#xff0c;构建在硬件基础之上&#xff0c…

Linux | i.MX6ULL网络通信-套字节 UDP(第十八章)

01 Linux | i.MX6ULL网络通信-套字节 TCP(第十七章) 02 iTOP-IMX6ULL 实现基于 UDP 的 socket 编程。

学习嵌入式第三十天

文章目录进程和线程&#xff08;续&#xff09;线程1.线程传参2.线程属性3.线程间通信1.概念2.方式3.互斥锁4.死锁5.信号量习题 进程和线程&#xff08;续&#xff09; 线程 1.线程传参使用第四个参数实现对线程内部的传参 代码实现&#xff1a; #include <stdio.h> #inc…

GaussDB 数据库架构师修炼(十三)安全管理(3)-行级访问控制

1 背景行级访问控制特性将数据库的访问控制精确到数据表行级别 &#xff0c;只允许用户查看 、更新或删除特定的行数据。2 实例场景实例以医生只能看到治疗的病人&#xff0c;不能看其它医生的病人为例&#xff1a;1)医院病人的信息表pat_info&#xff1a;csdn> set search_…

Wi-Fi 与蜂窝网络(手机网络)的核心区别,以及 Wi-Fi 技术未来的发展方向

在日常生活中&#xff0c;我们既离不开家里的 Wi-Fi&#xff0c;也离不开手机的 4G/5G 网络。它们都能把我们连接到互联网&#xff0c;但底层的工作方式却大不相同。一、设计初衷的不同Wi-Fi诞生于 1997 年的 IEEE 802.11 标准&#xff0c;定位是局域网无线替代。它的目标是让电…

C++编程实战:高效解决算法与数据结构问题

个人主页 &#xff1a; zxctscl 专栏 【C】、 【C语言】、 【Linux】、 【数据结构】、 【算法】 如有转载请先通知 题目1. 数字统计2. 两个数组的交集3. 牛牛的快递4. 点击消除5. 最小花费爬楼梯6. 简写单词1. 数字统计 BC153 数字统计 #include <iostream> using na…

《零基础入门AI:深度学习中的视觉处理(卷积神经网络(CNN)进阶)》

一、卷积知识扩展 1. 二维卷积 单通道版本 对于单通道输入图像 III (尺寸 HWH \times WHW) 和卷积核 KKK (尺寸 FFF \times FFF)&#xff0c;输出特征图 OOO 的计算公式为&#xff1a; O(i,j)∑m0F−1∑n0F−1I(im,jn)⋅K(m,n)O(i,j) \sum_{m0}^{F-1} \sum_{n0}^{F-1} I(im, j…

pyecharts可视化图表-pie:从入门到精通(进阶篇)

欢迎来到pyecharts饼图系列教程的进阶篇&#xff01;在上一篇基础教程中&#xff0c;我们学习了饼图的基本概念和简单实现。在本文中&#xff0c;我们将深入探索pyecharts中饼图的六种高级用法和自定义选项&#xff0c;包括环形饼图、富文本标签饼图、滚动图例饼图、环形图、嵌…