Files
rootandClaude Opus 5 8679200f41 Initial commit
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 13:57:10 +08:00

174 lines
4.9 KiB
Go

package main
import (
"91porn-server/common/cachev2"
"91porn-server/common/laosiji"
"context"
"fmt"
"net/http"
"os"
"os/signal"
"syscall"
"time"
"91porn-server/common"
"91porn-server/common/conf"
"91porn-server/common/constant"
"91porn-server/common/db"
"91porn-server/common/httputil"
"91porn-server/common/laosiji_app"
"91porn-server/common/log"
"91porn-server/common/sms"
"91porn-server/common/tg"
"91porn-server/models"
"91porn-server/models/Init"
_ "91porn-server/models/commod" // swagger依赖
_ "91porn-server/models/v/ldycfgmod" // swagger依赖
_ "91porn-server/models/v/moduleconfmod" // swagger依赖
_ "91porn-server/models/v/modulesectionmod" // swagger依赖
_ "91porn-server/models/v/operationlogmod" // swagger依赖
_ "91porn-server/models/v/rchgamegoldmod" // swagger依赖
_ "91porn-server/models/v/rchgamtmod" // swagger依赖
_ "91porn-server/models/v/rchgchanmod" // swagger依赖
_ "91porn-server/models/v/tagconfmod" // swagger依赖
_ "91porn-server/models/v/wdchannmod" // swagger依赖
// _ "91porn-server/web/docs"
"91porn-server/web/router"
"91porn-server/web/service/activityser"
officialwebsiteser "91porn-server/web/service/officialWebsiteser"
"91porn-server/web/service/prefetch"
"91porn-server/web/webg"
)
var httpServer *http.Server
func main() {
time.Local, _ = time.LoadLocation("Asia/Shanghai")
common.Go(startUp)
waitQuit()
}
func init() {
cfg := webg.GlobalConfig{}
//加载配置 etcd配置
static := webg.StaticSource{}
if err := conf.LoadJSON("config/static.json", &static); err != nil {
fmt.Printf("startUp load static error: %v\n", err)
}
if err := conf.LoadJSON("config/web.json", &cfg); err != nil {
fmt.Printf("startUp get config error: %v\n", err)
os.Exit(1)
}
fmt.Println("use local config successfully")
webg.Conf = &cfg
webg.Static = &static
sms.Init(sms.Config{
FengNiao: sms.FengNiaoConfig{
Url: cfg.SMS.FengNiao.Url,
ChinaMercId: cfg.SMS.FengNiao.ChinaMercId,
ChinaSecret: cfg.SMS.FengNiao.ChinaSecret,
ChinaTmplId: cfg.SMS.FengNiao.ChinaTmplId,
InterMercId: cfg.SMS.FengNiao.InterMercId,
InterSecret: cfg.SMS.FengNiao.InterSecret,
InterTmplId: cfg.SMS.FengNiao.InterTmplId,
},
})
laosiji_app.Init(webg.Conf.LaoSiJiAiMate)
log.Init(log.Options{Level: webg.Conf.Log.Level, DisableStack: webg.Conf.Log.DisableStacktrace})
if cfg.Base.Env == constant.ProdEnv {
webg.Bot = tg.New(tg.TianTian_Bot, fmt.Sprintf("短视频[env:%s]", webg.Conf.Base.Env))
common.SetPanicHandler(func(s string) { _ = webg.Bot.Send(tg.Msg{ChatId: tg.ChatIdServerTeam, Text: "[Web-Server]" + s}) })
}
}
func startUp() {
ds := db.InitDS(InitMongodbParam(models.RegisterPool))
if len(ds) > 0 {
for k, v := range ds {
switch k {
case models.VideoDb:
webg.VideoDB = v
case models.LogDb:
webg.LogDB = v
case models.StatDb:
webg.StatDB = v
}
}
}
// 初始化Redis
webg.InitRedis()
// 初始化缓存操作中间件
cachev2.Init(webg.Redis, log.ZapLog)
// 初始化ES
webg.InitElastic()
webg.ProxyCfg = &httputil.ProxyCfg{
Host: webg.Conf.URL.HttpProxy,
IsActive: false,
}
Init.InitMongo()
laosiji.Init(*webg.Conf)
//载入活动定时任务
if err := activityser.LoadingJob(); err != nil {
os.Exit(1)
return
}
// 官网 seoSlug 回填定时任务:扫描各表缺失 seoSlug 的记录按标题补齐
officialwebsiteser.StartSeoSlugBackfillCron()
port := webg.Conf.Base.Port
httpServer = &http.Server{
Addr: fmt.Sprintf(":%d", port),
Handler: router.SetupGin(),
}
log.Info("Web Start Listen ...", log.Any("port", port))
if err := httpServer.ListenAndServe(); err != nil && err != http.ErrServerClosed {
log.Fatal("server listen err", log.E(err))
}
//Block Here
log.Info("httpServer quit...")
}
func waitQuit() {
//graceful exit
ch := make(chan os.Signal, 1)
signal.Notify(ch, syscall.SIGTERM, syscall.SIGQUIT, syscall.SIGINT)
<-ch
log.Info("Recv Signal, Shutdown Server Start...")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
if httpServer != nil {
if err := httpServer.Shutdown(ctx); err != nil {
log.Error(fmt.Sprintf("Server Shutdown:%+v", err))
}
}
db.CloseDS()
prefetch.StopSubmitPrefetch()
if err := webg.RedisClose(); err != nil {
log.Error("redis close error", log.E(err))
return
}
log.Warn("Shutdown Server OK...")
}
func InitMongodbParam(registerPool []models.Register) ([]db.DBmap, []db.Register) {
pri := db.DBmap{
Key: models.VideoDb,
URL: webg.Conf.Mongo.VideoDbUrl,
}
sta := db.DBmap{
Key: models.StatDb,
URL: webg.Conf.Mongo.StatDbUrl,
}
log := db.DBmap{
Key: models.LogDb,
URL: webg.Conf.Mongo.LogDbUrl,
}
dbgister := make([]db.Register, len(registerPool))
for i, v := range registerPool {
dbgister[i] = db.Register{Key: v.Key, Table: v.Table}
}
dbmaps := []db.DBmap{pri, sta, log}
return dbmaps, dbgister
}