Nightingale源碼Linux進行跨平臺編譯

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;包括環形餅圖、富文本標簽餅圖、滾動圖例餅圖、環形圖、嵌…