blog/BlogService/main.go

122 lines
3.2 KiB
Go

package main
import (
"Blog/bootstrap"
"Blog/cloud"
"Blog/internal/controller"
"Blog/internal/middleware"
"Blog/internal/service"
"Blog/third_party/database"
"log"
"net/http"
"os"
"time"
"github.com/kataras/iris/v12"
"github.com/kataras/iris/v12/mvc"
"github.com/kataras/iris/v12/sessions"
"github.com/kataras/iris/v12/sessions/sessiondb/redis"
)
func main() {
profile := os.Getenv("profile")
log.SetFlags(log.Ldate | log.Ltime | log.Lmicroseconds | log.Ltime | log.Llongfile)
app := iris.Default()
app.FallbackView(iris.FallbackView("404.html"))
app.HandleDir("/assets", iris.Dir("./assets"))
tmpl := iris.HTML("./template", ".html")
// Set custom delimeters.
tmpl.Delims("#{", "}")
tmpl.Reload(true)
if profile != "dev" {
tmpl.Reload(false)
logFile, err := os.OpenFile("./iris.log", os.O_CREATE|os.O_APPEND|os.O_WRONLY, 0644)
if err != nil {
panic("日志初始化失败")
}
app.Logger().SetOutput(logFile)
log.SetOutput(logFile)
profile = "prod"
}
log.Println("Go Iris 启动")
log.Println("当前环境是:", profile)
app.OnErrorCode(http.StatusNotFound, func(ctx iris.Context) {
// ctx.StatusCode(http.StatusNotFound)
// s := ctx.Path()
// log.Println(s)
ctx.View("404.html")
})
app.OnErrorCode(http.StatusInternalServerError, func(ctx iris.Context) {
err := ctx.GetErr()
log.Println(err)
ctx.View("500.html")
})
addr := bootstrap.Config.Session.Addr
redisDatabase := bootstrap.Config.Session.Database
prefix := bootstrap.Config.Session.Prefix
expires := bootstrap.Config.Session.Expires
db := redis.New(redis.Config{
Network: "tcp",
Addr: addr,
Timeout: time.Duration(10) * time.Second,
MaxActive: 10,
Username: "",
Database: redisDatabase,
Prefix: prefix,
Driver: redis.GoRedis(), // defaults to this driver.
})
// sess := sessions.New(sessions.Config{
// Cookie: "_session_id",
// Expires: time.Hour * 2,
// DisableSubdomainPersistence: false,
// AllowReclaim: true,
// /*
// SessionIDGenerator: func(ctx iris.Context) string {
// id:= ctx.GetHeader("X-Session-Id")
// if id == "" {
// id = // [generate ID here and set the header]
// ctx.Header("X-Session-Id", id)
// }
// return id
// },
// */
// })
// using the standard `html/template` package.
sess := sessions.New(sessions.Config{
Cookie: "session_id_cookie",
Expires: time.Duration(expires) * time.Hour,
AllowReclaim: true,
})
sess.UseDatabase(db)
app.Use(sess.Handler(), middleware.Record, middleware.SessionViewData)
app.RegisterView(tmpl)
app.Get("/", func(ctx iris.Context) {
ctx.View("index.html")
})
articleApi := app.Party("/article")
diaryApi := app.Party("/diary")
mvc.New(articleApi).Handle(new(controller.ArticleController))
mvc.New(diaryApi).Handle(new(controller.DiaryController))
go service.ArticleService.InitArticleData()
go service.DiaryService.InitDiaryData()
go service.ContentService.InitContentData()
go cloud.DistributedService.ServiceUp()
host := bootstrap.Config.Cloud.Host
app.Listen(host)
defer func() {
log.Println("程序结束,关闭资源")
cloud.DistributedService.ServiceDown()
db.Close()
database.RedisTemplate.Close()
}()
}