02 | 快速部署 fastgo 项目

提示:

  • 所有体系课见专栏:Go 项目开发极速入门实战课;
  • 欢迎加入 云原生 AI 实战 星球,12+ 高质量体系课、20+ 高质量实战项目助你在 AI 时代建立技术竞争力(聚焦于 Go、云原生、AI Infra)。

在学习一个开源项目时,建议先将项目部署成功。这样学习过程中可以直接魔改测试。本节课,来教你快速部署 fastgo 项目。

部署环境

本项目的部署环境要求如下:

  • Go 版本:>= 1.24.0;
  • 操作系统: 建议使用 Linux 操作系统。本课程的部署环境为 Debian 12。如有条件,建议直接使用 Debian 12 系统,这样可以避免因操作系统差异带来的安装问题。若非 Debian 12 系统,出现部署问题,需要你自己根据错误日志,解决问题。

部署 fastgo 项目分为以下 3 步:

  1. Go 编译环境安装和配置;
  2. 安装和配置 MariaDB 数据库;
  3. 初始化 fastgo 数据库;
  4. 安装和配置 fastgo 项目。

步骤 1:Go 编译环境安装和配置

提示:如果你已经安装了 Go 编译环境,可跳过这一步。

安装 Go 编译环境的步骤相对简单,只需下载源码包并配置相应的环境变量。具体步骤如下。

1. 下载安装包。

你可以从 Go 语言官方网站下载对应的 Go 安装包和源码包。以下命令将下载 go1.24.0 安装包:

$ wget -P /tmp/ https://go.dev/dl/go1.24.0.linux-amd64.tar.gz

2. 解压并安装。

请执行以下命令解压并安装 Go 编译工具及源码:

$ mkdir -p $HOME/go
$ tar -xvzf /tmp/go1.24.0.linux-amd64.tar.gz -C $HOME/go
$ mv $HOME/go/go $HOME/go/go1.24.0

3. 配置 $HOME/.bashrc 文件。

请按照以下命令将 Go 的相关环境变量追加到 HOME/.bashrc 文件中。

$ tee -a $HOME/.bashrc <<'EOF'
# Go envs
export GOVERSION=${GOVERSION-go1.24.0} # Go 版本设置
export GO_INSTALL_DIR=$HOME/go # Go 安装目录
export GOROOT=$GO_INSTALL_DIR/$GOVERSION # GOROOT 设置
export GOPATH=$HOME/golang # GOPATH 设置
export PATH=$GOROOT/bin:$GOPATH/bin:$PATH # 添加 PATH 路径
export GOPROXY=https://goproxy.cn,direct # 安装 Go 模块时,代理服务器设置
export GOPRIVATE=
export GOSUMDB=off # 关闭校验 Go 依赖包的哈希值
EOF

4. 测试是否安装成功。

如果执行 go version 命令后可以成功输出 Go 的版本信息,则说明 Go 编译环境已成功安装。具体命令如下:

$ bash # 配置 $HOME/.bashrc 后,需要执行 bash 命令将配置加载到当前 Shell
$ go version
go version go1.24.0 linux/amd64

步骤 2: 安装和配置 MariaDB 数据库

提示:如果你已经安装和配置 MariaDB 数据库,可跳过这一步。

本课程在 master 分支下提供了一个名为 configs/fg-apiserver.yaml 的文件,其中保存了数据库初始化的 SQL 语句。

在生产环境中,fastgo 项目需要使用 MariaDB 数据库来存储数据,因此需要先安装 MariaDB 数据库。安装和配置 MariaDB 的具体步骤如下。

1. 安装 MariaDB 服务端和 MariaDB 客户端

安装命令如下:

$ sudo apt install -y mariadb-server mariadb-client

2. 启动 MariaDB,并设置开机启动

启动命令如下:

$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
$ sudo systemctl enable mariadb

3. 设置 root 初始密码

初始化命令如下:

$ sudo mysqladmin -uroot password 'fastgo1234'

提示: 执行 mysqladmin 命令时,必须具有 root 权限,否则可能会出现错误:mysqladmin: connect to server at ‘localhost’ failed。

步骤 3:初始化 fastgo 数据库

如果你使用之前安装的 MySQL 数据库,而非本课程安装的 MySQL。那么课程中访问数据库的地址、用户名和密码,需要你自行适配。

1. 登录数据库并创建 fastgo 用户

创建命令如下:

$ mysql -h127.0.0.1 -P3306 -uroot -p'fastgo1234'
> grant all on fastgo.* TO fastgo@127.0.0.1 identified by 'fastgo1234';
> flush privileges;
> exit;

2. 创建 fastgo 数据库

使用 fastgo 用户登录 MariaDB,并创建 fastgo 数据库,创建命令如下:

$ mkdir -p  $HOME/golang/src/github.com/onexstack/
$ cd $HOME/golang/src/github.com/onexstack/
$ git clone https://github.com/onexstack/fastgo
$ cd $HOME/golang/src/github.com/onexstack/fastgo
$ mysql -h127.0.0.1 -P3306 -u fastgo -p'fastgo1234'
> source configs/fastgo.sql;
> use fastgo;
Database changed
> show tables;
+--------------------+
| Tables_in_fastgo |
+--------------------+
| post               |
| user               |
+--------------------+
3 rows in set (0.000 sec)

步骤 4: 安装和配置 fastgo 项目

安装和配置 fastgo 项目步骤如下。

1. 在配置文件中添加数据库配置

fastgo 项目启动需要连接数据库,所以需要在配置文件 configs/fg-apiserver.yaml 中配置数据库的 IP、端口、用户名、密码和数据库名信息。configs/fg-apiserver.yaml 配置文件内容如下:

# 通用配置
## JWT 签发密钥
jwt-key: Rtg8BPKNEf2mB4mgvKONGPZZQSaJWNLijxR42qRgq0iBb5
# JWT Token 过期时间
expiration: 1000h# MySQL 数据库相关配置
mysql:# MySQL 机器 IP 和端口,默认 127.0.0.1:3306addr: 127.0.0.1:3306# MySQL 用户名(建议授权最小权限集)username: fastgo# MySQL 用户密码password: fastgo1234# fastgo 系统所用的数据库名database: fastgo# MySQL 最大空闲连接数,默认 100max-idle-connections: 100# MySQL 最大打开的连接数,默认 100max-open-connections: 100# 空闲连接最大存活时间,默认 10smax-connection-life-time: 10slog:format: textlevel: infooutput: stdout

提示:如果你使用之前创建的数据库,则需要适配 mysql.addrmysql.usernamemysql.password 配置项。

2. 启动 fg-apiserver 组件

执行以下命令编译并启动 fg-apiserver 组件:

$ cd $HOME/golang/src/github.com/onexstack/fastgo
$ ./build.sh
$ _output/fg-apiserver -c configs/fg-apiserver.yaml 
...
time=2025-03-10T19:24:23.440+08:00 level=INFO msg="Start to listening the incoming requests on http address" addr=0.0.0.0:6666

启动的 API 服务器监听地址为:0.0.0.0:6666

3. 测试 fg-apiserver 组件功能是否正常

打开一个新的 Linux 终端,执行以下命令测试 fg-apiserver 中的 API 接口是否正常工作:

$ ./scripts/test.sh

执行结果如下图所示:

可以看到,fg-apiserver 中的接口,都测试通过。

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

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

相关文章

[Linux] 3588开发准备工作

背景需求 在3588上开发软件系统&#xff0c;用于视频流读取&#xff0c;处理&#xff0c;推流等操作。一般来说&#xff0c;会先买对应型号的开发板进行开发测试。同步制作硬件&#xff0c;等到硬件回来之后&#xff0c;可将代码进行烧录到嵌入式板端&#xff0c;能够执行相应…

stm32-RTC时实时钟

1. 时间戳的基本概念 定义&#xff1a; 时间戳是一个表示时间的标记&#xff0c;它通常以数字的形式出现&#xff0c;代表某一时刻距离参考时刻的时间差。最常见的是 Unix 时间戳&#xff0c;它表示从1970年1月1日 00:00:00 UTC 到某个时刻所经过的秒数&#xff08;或毫秒、微秒…

【操作系统安全】任务1:操作系统部署

目录 一、VMware Workstation Pro 17 部署 二、VMware Workstation 联网方式 三、VMware 虚拟机安装流程 四、操作系统介绍 五、Kali 操作系统安装 六、Windows 系统安装 七、Windows 系统网络配置 八、Linux 网络配置 CSDN 原创主页&#xff1a;不羁https://blog.csd…

JavaScript读取当前URL字符串中参数的两种方法

方法1 使用location.search属性&#xff0c;location.search属性会返回URL的问号后面的参数字符串 const querystr window.location.search; const params new URLSearchParams(querystr); //例如&#xff1a;URL为 index.html?Id123&Nametest //要获取参数名Id的值…

DeepSeek-进阶版部署(Linux+GPU)

前面几个小节讲解的Win和Linux部署DeepSeek的比较简单的方法&#xff0c;而且采用的模型也是最小的&#xff0c;作为测试体验使用是没问题的。如果要在生产环境使用还是需要用到GPU来实现&#xff0c;下面我将以有一台带上GPU显卡的Linux机器来部署DeepSeek。这里还只是先体验单…

MySQL的安装与建表

目录 一&#xff0c;MySQL 安装部署 1.1 版本及下载 1.2安装过程 二&#xff0c;数据库的建立 1&#xff0c;employees 表的建立 2&#xff0c;orders表的建立​ 3&#xff0c;involces表的建立 一&#xff0c;MySQL 安装部署 1.1 版本及下载 MySQL官网地址&#xff1a…

Spring 框架学习

技术体系结构 总体技术体系 单一架构 一个项目&#xff0c;一个工程&#xff0c;导出为一个 war 包&#xff0c;在一个 Tomcat 上运行&#xff0c;也叫 all in one。 单一架构&#xff0c;项目主要应用技术框架为&#xff1a;Spring、SpringMVC 、Mybatis。 分布式架构 一个…

G-Star 公益行起航,挥动开源技术点亮公益!

公益组织&#xff0c;一直是社会温暖的传递者&#xff0c;但在数字化浪潮中&#xff0c;也面临着诸多比大众想象中复杂的挑战&#xff1a;项目管理如何更高效&#xff1f;志愿者管理又该如何创新&#xff1f;宣传推广怎么才能更有影响力&#xff1f;内部管理和技术支持又该如何…

STM32-Unix时间戳

一&#xff1a;什么是时间戳 Unix时间戳&#xff08;Unix Timestamp&#xff09;是一个计数器数值&#xff0c;这个数值表示的是一个从1970年1月1日0时0分0秒开始到现在所经过的秒数&#xff0c;不考虑闰秒。 时间戳存储在一个秒计数器里&#xff0c;秒计数器为32位/64位的整…

zsh: command not found: adb 报错问题解决

哈喽小伙伴们大家好&#xff0c;我是小李&#xff0c;今天&#xff0c;我满怀信心想要在本地跑一下pda,然而&#xff0c; what? 居然报错了&#xff01;&#xff01;别逗我啊&#xff01; 好吧&#xff0c;究其原因&#xff1a;没有配置好sdk 那就配呗。 首先&#xff0c;…

嵌入式八股C语言---面向对象篇

面向对象与面向过程 面向过程 就是把整个业务逻辑分成多个步骤,每步或每一个功能都可以使用一个函数来实现面向对象 对象是类的实例化,此时一个类就内部有属性和相应的方法 封装 在C语言里实现封装就是实现一个结构体,里面包括的成员变量和函数指针,然后在构造函数中,为结构体…

Linux_17进程控制

前提回顾&#xff1a; 页表可以将无序的物理地址映射为有序的; 通过进程地址空间&#xff0c;避免将内存直接暴漏给操作系统&#xff1b; cr3寄存器存放的有当前运行进程的页表的物理地址&#xff1b; 一、查看命令行参数和环境变量的地址 因为命令行参数和环境变量都是字符…

NVIDIA k8s-device-plugin源码分析与安装部署

在《kubernetes Device Plugin原理与源码分析》一文中&#xff0c;我们从源码层面了解了kubelet侧关于device plugin逻辑的实现逻辑&#xff0c;本文以nvidia管理GPU的开源github项目k8s-device-plugin为例&#xff0c;来看看设备插件侧的实现示例。 一、Kubernetes Device Pl…

MySql索引下推(ICP)是什么?有什么用?

目录 基本介绍为什么需要索引下推&#xff1f;未引入ICP&#xff08;x&#xff09;引入ICP&#xff08;√&#xff09; 如何指导sql优化适用场景sql优化 基本介绍 索引下推&#xff08;Index Condition Pushdown, ICP&#xff09;&#xff0c;是MySQL5.6 引入的优化技术&#…

用户可免费体验!国家超算互联网平台上线阿里开源推理模型接口服

近日&#xff0c;国家超算互联网平台上线阿里巴巴开源推理模型QwQ-32B API接口服务&#xff0c;现在用户可获得免费的100万Tokens。基于国产深算智能加速卡以及全国一体化算力网&#xff0c;平台支持海量用户便捷调用QwQ-32B、DeepSeek-R1等国产开源大模型的接口服务。 了解QwQ…

大数据学习(63)- Zookeeper详解

&&大数据学习&& &#x1f525;系列专栏&#xff1a; &#x1f451;哲学语录: 用力所能及&#xff0c;改变世界。 &#x1f496;如果觉得博主的文章还不错的话&#xff0c;请点赞&#x1f44d;收藏⭐️留言&#x1f4dd;支持一下博主哦&#x1f91e; &#x1f…

【蓝桥杯python研究生组备赛】003 贪心

题目1 股票买卖 给定一个长度为 N 的数组&#xff0c;数组中的第 i 个数字表示一个给定股票在第 i 天的价格。 设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;。 注意&#xff1a;你不能同时参与多笔交易&…

mmdet3d.models.utils的clip_sigmoid理解

Sigmoid 函数 标准的 sigmoid 函数定义为&#xff1a; 容易得出结论&#xff1a; 取值范围(0, 1) clip_sigmoid 是在标准的 sigmoid 函数基础上进行 裁剪&#xff08;clip&#xff09;&#xff0c;即对 sigmoid 输出的结果加以限制&#xff0c;避免其超出特定范围。 import …

侯捷 C++ 课程学习笔记:进阶语法之lambda表达式(二)

侯捷 C 课程学习笔记&#xff1a;进阶语法之lambda表达式&#xff08;二&#xff09; 一、捕获范围界定 1. 局部变量与函数参数 ​非静态局部变量&#xff1a;Lambda 所在作用域内定义的局部变量&#xff08;如函数内部的 int x&#xff09;会被完整复制其当前值。捕获后外部变…