Add self-hosted RCS backend, extension, and ops tooling
Ship the Go/SQLite API and Web UI, Chrome/Brave capture addon, Docker Compose, Pangolin reverse-proxy support, and a user-crontab watchdog so the binary stays running without systemd.
This commit is contained in:
@@ -0,0 +1,64 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"log"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
|
||||
"github.com/squid/rcs/backend/internal/api"
|
||||
"github.com/squid/rcs/backend/internal/config"
|
||||
"github.com/squid/rcs/backend/internal/db"
|
||||
"github.com/squid/rcs/backend/internal/imgur"
|
||||
"github.com/squid/rcs/backend/internal/web"
|
||||
)
|
||||
|
||||
func main() {
|
||||
cfg := config.Load()
|
||||
|
||||
if err := os.MkdirAll(cfg.ScreenshotDir, 0o755); err != nil {
|
||||
log.Fatalf("create screenshot dir: %v", err)
|
||||
}
|
||||
if err := os.MkdirAll(filepath.Dir(cfg.DBPath), 0o755); err != nil {
|
||||
log.Fatalf("create db dir: %v", err)
|
||||
}
|
||||
|
||||
store, err := db.Open(cfg.DBPath)
|
||||
if err != nil {
|
||||
log.Fatalf("open db: %v", err)
|
||||
}
|
||||
defer store.Close()
|
||||
|
||||
imgurClient := imgur.New(cfg.ImgurClientID)
|
||||
webUI, err := web.New(cfg, store, imgurClient)
|
||||
if err != nil {
|
||||
log.Fatalf("web ui: %v", err)
|
||||
}
|
||||
|
||||
server := api.New(cfg, store, imgurClient, webUI)
|
||||
|
||||
fmt.Printf("RCS backend listening on http://%s\n", cfg.Addr)
|
||||
fmt.Printf(" data dir: %s\n", cfg.DataDir)
|
||||
fmt.Printf(" db: %s\n", cfg.DBPath)
|
||||
if cfg.PublicBaseURL != "" {
|
||||
fmt.Printf(" public: %s\n", cfg.PublicBaseURL)
|
||||
}
|
||||
if cfg.TrustProxy {
|
||||
fmt.Println(" proxy: trusting X-Forwarded-* headers")
|
||||
}
|
||||
if cfg.APIKey != "" {
|
||||
fmt.Println(" api key: enabled")
|
||||
} else {
|
||||
fmt.Println(" api key: disabled (open)")
|
||||
}
|
||||
if imgurClient.Enabled() {
|
||||
fmt.Println(" imgur: enabled")
|
||||
} else {
|
||||
fmt.Println(" imgur: disabled (set IMGUR_CLIENT_ID)")
|
||||
}
|
||||
|
||||
if err := http.ListenAndServe(cfg.Addr, server.Handler()); err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user