Skip to content

为Flutter_book提供的Api接口 An API project developed using the Go language, including the function of verifying JWT authorization

License

Notifications You must be signed in to change notification settings

Tecode/golang_api

Repository files navigation

beego version & go version

Go

要运行项目不要配置GOPATH,需要GO版本大于1.16,这样才支持使用go mod 管理依赖

解决不能debug问题 WARNING: undefined behavior - version of Delve is too old for Go version 1.20.5 (maximum supported version 1.18)

go env -w GO111MODULE=on
go install github.com/go-delve/delve/cmd/dlv@latest

新增配置文件conf/app.conf

appname = golang_apiv2
httpport = 8080
runmode = prod
CopyRequestBody = true

# 是否需要创建数据表
createtable = false
mysqlurl = localhost:3306
mysqlaccount = root
mysqlpassword = 123456
msqldatabase = golang_apiv2

# 发送邮件的邮箱配置
emailhost = smtp.qq.com #邮件发送的地址
emailport = 587 #端口号
emailaccount= 邮箱账号
emailpassword = 邮箱密码(开启POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务后的授权码)

Nginx配置

server {
  listen [::]:443 ssl ipv6only=on http2;
  listen       443 ssl http2;
  server_name  soscoon.com www.soscoon.com;

  ssl_certificate       /home/xm/certificate/soscoon.com_nginx/soscoon.com_bundle.pem;
  ssl_certificate_key   /home/xm/certificate/soscoon.com_nginx/soscoon.com.key;


  # ssl验证相关配置
  ssl_session_timeout  5m;    #缓存有效期
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;    
  #加密算法
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;    #安全链接可选的加密协议
  ssl_prefer_server_ciphers on;   #使用服务器端的首选算法

  #开启gzip
  gzip  on;
  #低于1kb的资源不压缩
  gzip_min_length 1k;
  #压缩级别1-9,越大压缩率越高,同时消耗cpu资源也越多,建议设置在5左右。
  gzip_comp_level 5;
  #需要压缩哪些响应类型的资源,多个空格隔开。不建议压缩图片.
  gzip_types text/plain application/javascript application/x-javascript text/javascript text/xml text/css;
  #配置禁用gzip条件,支持正则。此处表示ie6及以下不启用gzip(因为ie低版本不支持)
  gzip_disable "MSIE [1-6]\.";
  #是否添加“Vary: Accept-Encoding”响应头
  gzip_vary on;

  charset utf-8;
    #access_log  /var/log/nginx/admin-nginx-access.log  main;
    access_log off;

    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;

    location /ws {
        proxy_pass http://localhost:8080/ws;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "Upgrade";
    }

    location / {
        proxy_buffers 8 1024k;
        proxy_buffer_size 1024k;
        proxy_pass      http://localhost:8080;
    }

    # redirect server error pages to the static page /50x.html
    #
    #error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
}

# 将http请求重定向到https
server{
  listen 80 default_server;
  server_name _;
  return 301 https://$host$request_uri;
}
| ___ \
| |_/ /  ___   ___
| ___ \ / _ \ / _ \
| |_/ /|  __/|  __/
\____/  \___| \___| v2.0.4

├── GoVersion : go1.20.5
├── GOOS      : windows
├── GOARCH    : amd64
├── NumCPU    : 12
├── GOPATH    : C:\Users\Administrator\go
├── GOROOT    : D:/Go
├── Compiler  : gc
└── Date      : Friday, 16 Jun 2023

go version go1.20.5 windows/amd64

安装依赖 & 运行

# 全局安装beego工具
go get -u github.com/beego/bee/v2
# 注意设置 GO111MODULE="auto",项目中有go.mod会提示错误
go env -w GO111MODULE=auto


# 安装bee工具 https://beego.gocn.vip/beego/zh/v2.0.x/bee/#bee-%E5%B7%A5%E5%85%B7%E7%9A%84%E5%AE%89%E8%A3%85
#http://localhost:8080/swagger/
#http://localhost:8080

go get golang_apiv2

# 包含swagger文档
bee generate docs
bee run -gendoc=true -downdoc=true

使用到的第三方插件

go get gopkg.in/gomail.v2
go get github.com/patrickmn/go-cache
go get github.com/beego/beego/v2/core/validation
go get github.com/gorilla/websocket
# 获取农历
go get github.com/ying32/govcl/samples/lunar

快捷命令

# 快速创建一个controller
bee generate controller haouxuan
# 快速创建一个model
bee generate model modelName -fields="name:string,age:int"

# 使用了命名路由需要执行这个命令重新生成commentRouter.go文件
bee generate routers

部署

bee version
bee pack
tar -zxvf golang_apiv2.tar.gz
nohup ./golang_apiv2 &
rm -rf golang_apiv2.tar.gz

自动化脚本

#!/bin/bash

export BUILD_ID=dontKillMe
export PATH=$PATH:/usr/local/go/bin
# 获取程序的进程ID(PID)
PID=$(pgrep golang_apiv2)

if [ -n "$PID" ]; then
  # 存在进程ID,说明程序正在运行
  echo "程序正在运行,进程ID为: $PID"
  
  # 终止程序
  kill $PID
  
  echo "程序已终止"
else
  echo "程序未在后台运行"
fi
# 从这里开始记录错误,如果解压或者运行失败会捕获到做自动化程序会自动终止
# set +e 表示不记录错误
set -e
/usr/local/go/bin/bee pack
tar -zxvf golang_apiv2.tar.gz
nohup ./golang_apiv2 > /home/xm/logs/golang_api2.txt 2>&1 &
sleep 10

Go Env 配置

GO111MODULE="on"
GOARCH="amd64"
GOBIN=""
GOCACHE="/root/.cache/go-build"
GOENV="/root/.config/go/env"
GOEXE=""
GOEXPERIMENT=""
GOFLAGS=""
GOHOSTARCH="amd64"
GOHOSTOS="linux"
GOINSECURE=""
GOMODCACHE="/root/go/pkg/mod"
GONOPROXY=""
GONOSUMDB=""
GOOS="linux"
GOPATH="/root/go"
GOPRIVATE=""
GOPROXY="https://goproxy.cn,direct"
GOROOT="/usr/local/go"
GOSUMDB="sum.golang.org"
GOTMPDIR=""
GOTOOLDIR="/usr/local/go/pkg/tool/linux_amd64"
GOVCS=""
GOVERSION="go1.20.5"
GCCGO="gccgo"
GOAMD64="v1"
AR="ar"
CC="gcc"
CXX="g++"
CGO_ENABLED="1"
GOMOD="/dev/null"
GOWORK=""
CGO_CFLAGS="-O2 -g"
CGO_CPPFLAGS=""
CGO_CXXFLAGS="-O2 -g"
CGO_FFLAGS="-O2 -g"
CGO_LDFLAGS="-O2 -g"
PKG_CONFIG="pkg-config"
GOGCCFLAGS="-fPIC -m64 -pthread -Wl,--no-gc-sections -fmessage-length=0 -fdebug-prefix-map=/tmp/go-build903738740=/tmp/go-build -gno-record-gcc-switches"

About

为Flutter_book提供的Api接口 An API project developed using the Go language, including the function of verifying JWT authorization

Topics

Resources

License

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages