go项目部署+实战(一)
写在前面
花费了一晚上的时间完成配置以及初步编程,并记录了部署和实战过程中的一些技巧和问题。
项目伊始
笔者采用了go + gin + gorm的主流框架
采用go get -u xxx下载包,下载后自动更新在go.mod中。十分类似于maven。
1
2
3
|
go get -u github.com/gin-gonic/gin
go get -u gorm.io/gorm
go get -u gorm.io/driver/mysql
|
出现报错。显然,和pip、apt安装时类似,采用换源方法,配置国内源。
1
|
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy,direct
|
1
2
3
4
5
|
1. 在 golang 安装路径下寻找:
'go1.17.2\src\runtime\internal\sys\zversion.go' 文件
2. 打开 'zversion.go' 文件,在其中追加如下行(你的版本号)并保存
const TheVersion = `go1.23.2`
3. 再次 配置 goland 的 GOROOT 路径,即可正常配置
|
配置好后,运行
打包部署云服务器
相比于java,go的打包部署更为简单。
总结而言,采用.bat + .ssh方式,一键部署。
编写.bat文件实现一键上传。
1
2
3
4
5
6
7
8
|
set GOOS=linux
set GOARCH=amd64
go build -o chorus_server main.go
ssh tidechoir "systemctl --user stop tidechoir"
scp -i C:\Users\PC\.ssh\id_rsa_tidechoir -r chorus_server config.yaml ubuntu@175.24.130.180:/home/ubuntu/backend/tidechoir
ssh tidechoir "systemctl --user start tidechoir"
|
注意
1
2
|
set GOOS=linux
set GOARCH=amd64
|
两句话不可省略,否则默认打包成exe。
由于在~/.ssh/config中配置了ssh免密登录,直接ssh + {设置的Host名称} 即可快捷登录。
配置ssl证书
类似于java,go的配置更为简洁。
1
2
3
4
5
6
7
8
9
10
11
|
func main() {
config.InitDB()
r := gin.Default()
routers.SetupRouter(r)
// 启动 HTTPS 服务器
err := r.RunTLS(":{port}", "/your-path/fullchain.pem",
"/your-path/privateKey.pem")
if err != nil {
log.Fatalf("Failed to start HTTPS server: %v", err)
}
}
|
配置viper读取yaml
go项目中,可用viper读取yaml文件。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import (
"github.com/spf13/viper"
)
var Config = viper.New()
func init() {
// 设置配置文件名(不需要后缀)
Config.SetConfigName("config")
// 设置配置文件的路径,可以设置多个路径,Viper 会自动搜索
Config.AddConfigPath(".") // 当前目录
// 设置配置文件的格式
Config.SetConfigType("yaml")
// 读取配置文件
if err := Config.ReadInConfig(); err != nil {
log.Fatal("Config not find", err)
}
}
|
至此,基本配置已经完成。后续将阐述go+gin+gorm开发中的技巧与难点。