Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

5 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Navigation Admin / ็ฝ‘ๅ€ๅฏผ่ˆชๅŽๅฐ็ฎก็†็ณป็ปŸ

English | ไธญๆ–‡


English

Introduction

Navigation Admin is a lightweight backend management system built with Go, designed for managing navigation page data. It uses SQLite as the database and automatically generates static JSON files for optimal frontend performance.

Features

  • Go + Gin Framework - High performance, low resource usage
  • SQLite Database - No external database server required, single file storage
  • Auto JSON Generation - Database changes automatically regenerate nav.json
  • Embedded Resources - Templates and static files compiled into single binary
  • RESTful API - Standard REST API design
  • Session Authentication - Secure login with bcrypt password hashing
  • File Upload - Support for logos and downloadable files
  • Data Import/Export - Full JSON data import and export
  • Transaction Protection - All write operations protected by database transactions

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Frontend Browser                         โ”‚
โ”‚                                                            โ”‚
โ”‚   Admin Panel (/admin)      Navigation Page (/)            โ”‚
โ”‚        โ”‚                           โ”‚                       โ”‚
โ”‚        โ–ผ                           โ–ผ                       โ”‚
โ”‚   REST API (/api/admin)    Static nav.json                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ”‚                    โ–ฒ
                    โ–ผ                    โ”‚ Auto-generate
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                    Go Backend                               โ”‚
โ”‚                                                            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Handlers โ”‚โ—„โ”€โ”‚Middlewareโ”‚โ—„โ”€โ”‚  Models  โ”‚โ—„โ”€โ”‚  Database  โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                                            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚              utils/navjson.go                         โ”‚ โ”‚
โ”‚  โ”‚         (Generate nav.json on data change)            โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Tech Stack

  • Language: Go 1.21+
  • Web Framework: Gin
  • Database: SQLite (modernc.org/sqlite - pure Go, no CGO)
  • Password: bcrypt
  • Template: Go embed (compiled into binary)

Quick Start

Method 1: Docker Deployment (Recommended)

# Enter project directory
cd goversion

# Create data directories
sudo mkdir -p /home/docker/navigo/{data,uploads,static}
sudo chown -R 1000:1000 /home/docker/navigo

# Start with Docker Compose
docker-compose up -d --build

# View logs
docker-compose logs -f navigo

Access at: http://localhost:8787

For detailed Docker deployment guide, see DOCKER.md

Method 2: Direct Binary

# Enter project directory
cd goversion

# Download dependencies
go mod tidy

# Run (development)
go run main.go

# Build (production)
go build -o nav-admin.exe   # Windows
go build -o nav-admin       # Linux/Mac

# Run compiled binary
./nav-admin

Access URLs

Deployment URL Description
Docker http://localhost:8787/ Navigation page
Docker http://localhost:8787/login Login page
Docker http://localhost:8787/admin Admin panel
Direct Binary http://localhost:8080/ Navigation page
Direct Binary http://localhost:8080/login Login page
Direct Binary http://localhost:8080/admin Admin panel

Default credentials: admin / admin

Configuration

Environment variables (optional):

Variable Default Description
SERVER_PORT 8080 Server port
SERVER_MODE release Gin mode (debug/release)
DB_PATH ./data/admin.db SQLite database path
UPLOAD_PATH ./uploads Upload directory
NAV_JSON_PATH ../static/nav.json nav.json output path
SESSION_SECRET (built-in) Session encryption key

Project Structure

goversion/
โ”œโ”€โ”€ main.go                 # Entry point, routes
โ”œโ”€โ”€ go.mod                  # Dependencies
โ”œโ”€โ”€ config/
โ”‚   โ””โ”€โ”€ config.go          # Configuration management
โ”œโ”€โ”€ models/
โ”‚   โ”œโ”€โ”€ user.go            # User model
โ”‚   โ”œโ”€โ”€ category.go        # Category model
โ”‚   โ”œโ”€โ”€ site.go            # Site model
โ”‚   โ”œโ”€โ”€ announcement.go    # Announcement model
โ”‚   โ””โ”€โ”€ page_config.go     # Page config model
โ”œโ”€โ”€ handlers/
โ”‚   โ”œโ”€โ”€ auth.go            # Login/logout
โ”‚   โ”œโ”€โ”€ category.go        # Category CRUD
โ”‚   โ”œโ”€โ”€ site.go            # Site CRUD
โ”‚   โ”œโ”€โ”€ announcement.go    # Announcement CRUD
โ”‚   โ”œโ”€โ”€ upload.go          # File upload
โ”‚   โ””โ”€โ”€ nav.go             # Navigation data & import/export
โ”œโ”€โ”€ middleware/
โ”‚   โ””โ”€โ”€ auth.go            # Authentication middleware
โ”œโ”€โ”€ utils/
โ”‚   โ”œโ”€โ”€ database.go        # Database initialization
โ”‚   โ”œโ”€โ”€ response.go        # Unified response format
โ”‚   โ””โ”€โ”€ navjson.go         # JSON file generator
โ”œโ”€โ”€ templates/
โ”‚   โ”œโ”€โ”€ index.html         # Navigation page
โ”‚   โ”œโ”€โ”€ login.html         # Login page
โ”‚   โ””โ”€โ”€ admin.html         # Admin panel
โ””โ”€โ”€ static/                 # All resources embedded into binary
    โ”œโ”€โ”€ style.css          # Main stylesheet
    โ”œโ”€โ”€ themify-icons.css  # Icon font stylesheet
    โ”œโ”€โ”€ jquery.js          # jQuery library
    โ”œโ”€โ”€ nav-go.js          # Navigation page JavaScript
    โ”œโ”€โ”€ logo.png           # Logo image
    โ”œโ”€โ”€ logo.svg           # Logo vector
    โ”œโ”€โ”€ nav.json           # Auto-generated navigation data
    โ”œโ”€โ”€ fonts/             # Themify icon fonts
    โ”‚   โ”œโ”€โ”€ themify.eot
    โ”‚   โ”œโ”€โ”€ themify.svg
    โ”‚   โ”œโ”€โ”€ themify.ttf
    โ”‚   โ””โ”€โ”€ themify.woff
    โ””โ”€โ”€ lunar/
        โ””โ”€โ”€ lunar.js       # Chinese lunar calendar library

API Reference

Authentication

Method Endpoint Description
POST /api/login Login
GET /api/check-auth Check login status
POST /api/admin/logout Logout

Categories

Method Endpoint Description
GET /api/admin/categories Get all categories
GET /api/admin/categories/:id Get single category
POST /api/admin/categories Create category
PUT /api/admin/categories/:id Update category
DELETE /api/admin/categories/:id Delete category
PUT /api/admin/categories/sort Update sort order

Sites

Method Endpoint Description
GET /api/admin/categories/:id/sites Get sites by category
GET /api/admin/sites/:id Get single site
POST /api/admin/sites Create site
PUT /api/admin/sites/:id Update site
DELETE /api/admin/sites/:id Delete site
PUT /api/admin/sites/sort Update sort order

Announcements

Method Endpoint Description
GET /api/admin/announcements Get all announcements
POST /api/admin/announcements Create announcement
PUT /api/admin/announcements/:id Update announcement
DELETE /api/admin/announcements/:id Delete announcement
GET /api/admin/announcement-config Get config
PUT /api/admin/announcement-config Update config

Page Config

Method Endpoint Description
GET /api/admin/page-config Get page config
PUT /api/admin/page-config Update page config

File Management

Method Endpoint Description
POST /api/admin/upload Upload file
DELETE /api/admin/upload Delete file
GET /api/admin/files List files

Data

Method Endpoint Description
GET /api/admin/export Export all data
POST /api/admin/import Import data

Response Format

{
  "code": 0,
  "message": "success",
  "data": { }
}
  • code: 0 = Success
  • code: 400 = Bad request
  • code: 401 = Unauthorized
  • code: 404 = Not found
  • code: 500 = Server error

Design Principles

  1. Backend as Source of Truth - Database is the single source, frontend only displays
  2. Read/Write Separation - Frontend reads static JSON, backend writes to DB and generates JSON
  3. Static-First - Navigation pages are read-heavy, static files provide best performance
  4. Single Binary - All resources embedded, one file deployment

License

GPLv3


ไธญๆ–‡

้กน็›ฎ็ฎ€ไป‹

็ฝ‘ๅ€ๅฏผ่ˆชๅŽๅฐ็ฎก็†็ณป็ปŸๆ˜ฏไธ€ไธชไฝฟ็”จGo่ฏญ่จ€ๆž„ๅปบ็š„่ฝป้‡็บงๅŽๅฐ็ฎก็†็ณป็ปŸ๏ผŒ็”จไบŽ็ฎก็†ๅฏผ่ˆช้กต้ขๆ•ฐๆฎใ€‚ไฝฟ็”จSQLiteไฝœไธบๆ•ฐๆฎๅบ“๏ผŒ่‡ชๅŠจ็”Ÿๆˆ้™ๆ€JSONๆ–‡ไปถไปฅ่Žทๅพ—ๆœ€ไฝณๅ‰็ซฏๆ€ง่ƒฝใ€‚

ๅŠŸ่ƒฝ็‰นๆ€ง

  • Go + Ginๆก†ๆžถ - ้ซ˜ๆ€ง่ƒฝ๏ผŒไฝŽ่ต„ๆบๅ ็”จ
  • SQLiteๆ•ฐๆฎๅบ“ - ๆ— ้œ€ๅค–้ƒจๆ•ฐๆฎๅบ“ๆœๅŠกๅ™จ๏ผŒๅ•ๆ–‡ไปถๅญ˜ๅ‚จ
  • ่‡ชๅŠจJSON็”Ÿๆˆ - ๆ•ฐๆฎๅ˜ๆ›ด่‡ชๅŠจ้‡ๆ–ฐ็”Ÿๆˆnav.json
  • ่ต„ๆบๅตŒๅ…ฅ - ๆจกๆฟๅ’Œ้™ๆ€ๆ–‡ไปถ็ผ–่ฏ‘ๅˆฐๅ•ไธชไบŒ่ฟ›ๅˆถๆ–‡ไปถ
  • RESTful API - ๆ ‡ๅ‡†REST API่ฎพ่ฎก
  • Session่ฎค่ฏ - ๅฎ‰ๅ…จ็™ปๅฝ•๏ผŒbcryptๅฏ†็ ๅŠ ๅฏ†
  • ๆ–‡ไปถไธŠไผ  - ๆ”ฏๆŒLogoๅ’Œๅฏไธ‹่ฝฝๆ–‡ไปถไธŠไผ 
  • ๆ•ฐๆฎๅฏผๅ…ฅๅฏผๅ‡บ - ๅฎŒๆ•ด็š„JSONๆ•ฐๆฎๅฏผๅ…ฅๅฏผๅ‡บ
  • ไบ‹ๅŠกไฟๆŠค - ๆ‰€ๆœ‰ๅ†™ๆ“ไฝœไฝฟ็”จๆ•ฐๆฎๅบ“ไบ‹ๅŠกไฟๆŠค

็ณป็ปŸๆžถๆž„

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      ๅ‰็ซฏๆต่งˆๅ™จ                              โ”‚
โ”‚                                                            โ”‚
โ”‚   ็ฎก็†ๅŽๅฐ (/admin)           ๅฏผ่ˆช้กต้ข (/)                  โ”‚
โ”‚        โ”‚                           โ”‚                       โ”‚
โ”‚        โ–ผ                           โ–ผ                       โ”‚
โ”‚   REST API (/api/admin)     ้™ๆ€ nav.json                  โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                    โ”‚                    โ–ฒ
                    โ–ผ                    โ”‚ ่‡ชๅŠจ็”Ÿๆˆ
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚                      Go ๅŽ็ซฏ                                โ”‚
โ”‚                                                            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚ Handlers โ”‚โ—„โ”€โ”‚Middlewareโ”‚โ—„โ”€โ”‚  Models  โ”‚โ—„โ”€โ”‚  Database  โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ”‚                                                            โ”‚
โ”‚  โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ” โ”‚
โ”‚  โ”‚              utils/navjson.go                         โ”‚ โ”‚
โ”‚  โ”‚           (ๆ•ฐๆฎๅ˜ๆ›ดๆ—ถ็”Ÿๆˆnav.json)                     โ”‚ โ”‚
โ”‚  โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜ โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

ๆŠ€ๆœฏๆ ˆ

  • ่ฏญ่จ€๏ผš Go 1.21+
  • Webๆก†ๆžถ๏ผš Gin
  • ๆ•ฐๆฎๅบ“๏ผš SQLite (modernc.org/sqlite - ็บฏGoๅฎž็Žฐ๏ผŒๆ— CGO)
  • ๅฏ†็ ๅŠ ๅฏ†๏ผš bcrypt
  • ๆจกๆฟ๏ผš Go embed๏ผˆ็ผ–่ฏ‘ๅˆฐไบŒ่ฟ›ๅˆถๆ–‡ไปถ๏ผ‰

ๅฟซ้€Ÿๅผ€ๅง‹

ๆ–นๅผไธ€๏ผšDocker้ƒจ็ฝฒ๏ผˆๆŽจ่๏ผ‰

# ่ฟ›ๅ…ฅ้กน็›ฎ็›ฎๅฝ•
cd goversion

# ๅˆ›ๅปบๆ•ฐๆฎ็›ฎๅฝ•
sudo mkdir -p /home/docker/navigo/{data,uploads,static}
sudo chown -R 1000:1000 /home/docker/navigo

# ไฝฟ็”จ Docker Compose ๅฏๅŠจ
docker-compose up -d --build

# ๆŸฅ็œ‹ๆ—ฅๅฟ—
docker-compose logs -f navigo

่ฎฟ้—ฎๅœฐๅ€๏ผšhttp://localhost:8787

่ฏฆ็ป†็š„Docker้ƒจ็ฝฒๆŒ‡ๅ—่ฏทๆŸฅ็œ‹ DOCKER.md

ๆ–นๅผไบŒ๏ผš็›ดๆŽฅ่ฟ่กŒไบŒ่ฟ›ๅˆถๆ–‡ไปถ

# ่ฟ›ๅ…ฅ้กน็›ฎ็›ฎๅฝ•
cd goversion

# ไธ‹่ฝฝไพ่ต–
go mod tidy

# ่ฟ่กŒ๏ผˆๅผ€ๅ‘ๆจกๅผ๏ผ‰
go run main.go

# ็ผ–่ฏ‘๏ผˆ็”Ÿไบง้ƒจ็ฝฒ๏ผ‰
go build -o nav-admin.exe   # Windows
go build -o nav-admin       # Linux/Mac

# ่ฟ่กŒ็ผ–่ฏ‘ๅŽ็š„็จ‹ๅบ
./nav-admin

่ฎฟ้—ฎๅœฐๅ€

้ƒจ็ฝฒๆ–นๅผ ๅœฐๅ€ ่ฏดๆ˜Ž
Docker http://localhost:8787/ ๅฏผ่ˆช้กต้ข
Docker http://localhost:8787/login ็™ปๅฝ•้กต้ข
Docker http://localhost:8787/admin ็ฎก็†ๅŽๅฐ
็›ดๆŽฅ่ฟ่กŒ http://localhost:8080/ ๅฏผ่ˆช้กต้ข
็›ดๆŽฅ่ฟ่กŒ http://localhost:8080/login ็™ปๅฝ•้กต้ข
็›ดๆŽฅ่ฟ่กŒ http://localhost:8080/admin ็ฎก็†ๅŽๅฐ

้ป˜่ฎค่ดฆๅท๏ผš admin / admin

้…็ฝฎ่ฏดๆ˜Ž

็Žฏๅขƒๅ˜้‡๏ผˆๅฏ้€‰๏ผ‰๏ผš

ๅ˜้‡ ้ป˜่ฎคๅ€ผ ่ฏดๆ˜Ž
SERVER_PORT 8080 ๆœๅŠกๅ™จ็ซฏๅฃ
SERVER_MODE release Ginๆจกๅผ๏ผˆdebug/release๏ผ‰
DB_PATH ./data/admin.db SQLiteๆ•ฐๆฎๅบ“่ทฏๅพ„
UPLOAD_PATH ./uploads ไธŠไผ ๆ–‡ไปถ็›ฎๅฝ•
NAV_JSON_PATH ../static/nav.json nav.json่พ“ๅ‡บ่ทฏๅพ„
SESSION_SECRET (ๅ†…็ฝฎ้ป˜่ฎค) SessionๅŠ ๅฏ†ๅฏ†้’ฅ

้กน็›ฎ็ป“ๆž„

goversion/
โ”œโ”€โ”€ main.go                 # ๅ…ฅๅฃๆ–‡ไปถ๏ผŒ่ทฏ็”ฑ้…็ฝฎ
โ”œโ”€โ”€ go.mod                  # ไพ่ต–็ฎก็†
โ”œโ”€โ”€ config/
โ”‚   โ””โ”€โ”€ config.go          # ้…็ฝฎ็ฎก็†
โ”œโ”€โ”€ models/
โ”‚   โ”œโ”€โ”€ user.go            # ็”จๆˆทๆจกๅž‹
โ”‚   โ”œโ”€โ”€ category.go        # ๅˆ†็ฑปๆจกๅž‹
โ”‚   โ”œโ”€โ”€ site.go            # ็ซ™็‚นๆจกๅž‹
โ”‚   โ”œโ”€โ”€ announcement.go    # ๅ…ฌๅ‘Šๆจกๅž‹
โ”‚   โ””โ”€โ”€ page_config.go     # ้กต้ข้…็ฝฎๆจกๅž‹
โ”œโ”€โ”€ handlers/
โ”‚   โ”œโ”€โ”€ auth.go            # ็™ปๅฝ•/็™ปๅ‡บ
โ”‚   โ”œโ”€โ”€ category.go        # ๅˆ†็ฑปๅขžๅˆ ๆ”นๆŸฅ
โ”‚   โ”œโ”€โ”€ site.go            # ็ซ™็‚นๅขžๅˆ ๆ”นๆŸฅ
โ”‚   โ”œโ”€โ”€ announcement.go    # ๅ…ฌๅ‘Šๅขžๅˆ ๆ”นๆŸฅ
โ”‚   โ”œโ”€โ”€ upload.go          # ๆ–‡ไปถไธŠไผ 
โ”‚   โ””โ”€โ”€ nav.go             # ๅฏผ่ˆชๆ•ฐๆฎใ€ๅฏผๅ…ฅๅฏผๅ‡บ
โ”œโ”€โ”€ middleware/
โ”‚   โ””โ”€โ”€ auth.go            # ่ฎค่ฏไธญ้—ดไปถ
โ”œโ”€โ”€ utils/
โ”‚   โ”œโ”€โ”€ database.go        # ๆ•ฐๆฎๅบ“ๅˆๅง‹ๅŒ–
โ”‚   โ”œโ”€โ”€ response.go        # ็ปŸไธ€ๅ“ๅบ”ๆ ผๅผ
โ”‚   โ””โ”€โ”€ navjson.go         # JSONๆ–‡ไปถ็”Ÿๆˆๅ™จ
โ”œโ”€โ”€ templates/
โ”‚   โ”œโ”€โ”€ index.html         # ๅฏผ่ˆช้กต้ข
โ”‚   โ”œโ”€โ”€ login.html         # ็™ปๅฝ•้กต้ข
โ”‚   โ””โ”€โ”€ admin.html         # ็ฎก็†ๅŽๅฐ
โ””โ”€โ”€ static/                 # ๆ‰€ๆœ‰่ต„ๆบๅตŒๅ…ฅๅˆฐไบŒ่ฟ›ๅˆถๆ–‡ไปถ
    โ”œโ”€โ”€ style.css          # ไธปๆ ทๅผ่กจ
    โ”œโ”€โ”€ themify-icons.css  # ๅ›พๆ ‡ๅญ—ไฝ“ๆ ทๅผ
    โ”œโ”€โ”€ jquery.js          # jQueryๅบ“
    โ”œโ”€โ”€ nav-go.js          # ๅฏผ่ˆช้กต้ขJavaScript
    โ”œโ”€โ”€ logo.png           # Logoๅ›พ็‰‡
    โ”œโ”€โ”€ logo.svg           # Logo็Ÿข้‡ๅ›พ
    โ”œโ”€โ”€ nav.json           # ่‡ชๅŠจ็”Ÿๆˆ็š„ๅฏผ่ˆชๆ•ฐๆฎ
    โ”œโ”€โ”€ fonts/             # Themifyๅ›พๆ ‡ๅญ—ไฝ“
    โ”‚   โ”œโ”€โ”€ themify.eot
    โ”‚   โ”œโ”€โ”€ themify.svg
    โ”‚   โ”œโ”€โ”€ themify.ttf
    โ”‚   โ””โ”€โ”€ themify.woff
    โ””โ”€โ”€ lunar/
        โ””โ”€โ”€ lunar.js       # ไธญๅ›ฝๅ†œๅކๅบ“

APIๆŽฅๅฃๆ–‡ๆกฃ

่ฎค่ฏ็›ธๅ…ณ

ๆ–นๆณ• ็ซฏ็‚น ่ฏดๆ˜Ž
POST /api/login ็™ปๅฝ•
GET /api/check-auth ๆฃ€ๆŸฅ็™ปๅฝ•็Šถๆ€
POST /api/admin/logout ็™ปๅ‡บ

ๅˆ†็ฑป็ฎก็†

ๆ–นๆณ• ็ซฏ็‚น ่ฏดๆ˜Ž
GET /api/admin/categories ่Žทๅ–ๆ‰€ๆœ‰ๅˆ†็ฑป
GET /api/admin/categories/:id ่Žทๅ–ๅ•ไธชๅˆ†็ฑป
POST /api/admin/categories ๅˆ›ๅปบๅˆ†็ฑป
PUT /api/admin/categories/:id ๆ›ดๆ–ฐๅˆ†็ฑป
DELETE /api/admin/categories/:id ๅˆ ้™คๅˆ†็ฑป
PUT /api/admin/categories/sort ๆ›ดๆ–ฐๆŽ’ๅบ

็ซ™็‚น็ฎก็†

ๆ–นๆณ• ็ซฏ็‚น ่ฏดๆ˜Ž
GET /api/admin/categories/:id/sites ่Žทๅ–ๅˆ†็ฑปไธ‹็š„็ซ™็‚น
GET /api/admin/sites/:id ่Žทๅ–ๅ•ไธช็ซ™็‚น
POST /api/admin/sites ๅˆ›ๅปบ็ซ™็‚น
PUT /api/admin/sites/:id ๆ›ดๆ–ฐ็ซ™็‚น
DELETE /api/admin/sites/:id ๅˆ ้™ค็ซ™็‚น
PUT /api/admin/sites/sort ๆ›ดๆ–ฐๆŽ’ๅบ

ๅ…ฌๅ‘Š็ฎก็†

ๆ–นๆณ• ็ซฏ็‚น ่ฏดๆ˜Ž
GET /api/admin/announcements ่Žทๅ–ๆ‰€ๆœ‰ๅ…ฌๅ‘Š
POST /api/admin/announcements ๅˆ›ๅปบๅ…ฌๅ‘Š
PUT /api/admin/announcements/:id ๆ›ดๆ–ฐๅ…ฌๅ‘Š
DELETE /api/admin/announcements/:id ๅˆ ้™คๅ…ฌๅ‘Š
GET /api/admin/announcement-config ่Žทๅ–ๅ…ฌๅ‘Š้…็ฝฎ
PUT /api/admin/announcement-config ๆ›ดๆ–ฐๅ…ฌๅ‘Š้…็ฝฎ

้กต้ข้…็ฝฎ

ๆ–นๆณ• ็ซฏ็‚น ่ฏดๆ˜Ž
GET /api/admin/page-config ่Žทๅ–้กต้ข้…็ฝฎ
PUT /api/admin/page-config ๆ›ดๆ–ฐ้กต้ข้…็ฝฎ

ๆ–‡ไปถ็ฎก็†

ๆ–นๆณ• ็ซฏ็‚น ่ฏดๆ˜Ž
POST /api/admin/upload ไธŠไผ ๆ–‡ไปถ
DELETE /api/admin/upload ๅˆ ้™คๆ–‡ไปถ
GET /api/admin/files ่Žทๅ–ๆ–‡ไปถๅˆ—่กจ

ๆ•ฐๆฎ็ฎก็†

ๆ–นๆณ• ็ซฏ็‚น ่ฏดๆ˜Ž
GET /api/admin/export ๅฏผๅ‡บๆ‰€ๆœ‰ๆ•ฐๆฎ
POST /api/admin/import ๅฏผๅ…ฅๆ•ฐๆฎ

ๅ“ๅบ”ๆ ผๅผ

{
  "code": 0,
  "message": "success",
  "data": { }
}
  • code: 0 = ๆˆๅŠŸ
  • code: 400 = ่ฏทๆฑ‚้”™่ฏฏ
  • code: 401 = ๆœชๆŽˆๆƒ
  • code: 404 = ๆœชๆ‰พๅˆฐ
  • code: 500 = ๆœๅŠกๅ™จ้”™่ฏฏ

่ฎพ่ฎก็†ๅฟต

  1. ๅŽ็ซฏไธบๆ•ฐๆฎๆบ - ๆ•ฐๆฎๅบ“ๆ˜ฏๅ”ฏไธ€ๆ•ฐๆฎๆบ๏ผŒๅ‰็ซฏๅช่ดŸ่ดฃๅฑ•็คบ
  2. ่ฏปๅ†™ๅˆ†็ฆป - ๅ‰็ซฏ่ฏปๅ–้™ๆ€JSON๏ผŒๅŽ็ซฏๅ†™ๅ…ฅๆ•ฐๆฎๅบ“ๅนถ็”ŸๆˆJSON
  3. ้™ๆ€ๅŒ–ไผ˜ๅ…ˆ - ๅฏผ่ˆช้กต่ฏปๅคšๅ†™ๅฐ‘๏ผŒ้™ๆ€ๆ–‡ไปถๆ€ง่ƒฝๆœ€ไผ˜
  4. ๅ•ๆ–‡ไปถ้ƒจ็ฝฒ - ๆ‰€ๆœ‰่ต„ๆบๅตŒๅ…ฅ๏ผŒๅ•ไธชๆ–‡ไปถๅณๅฏ่ฟ่กŒ

ๆ•ฐๆฎๅบ“่กจ็ป“ๆž„

-- ็”จๆˆท่กจ
CREATE TABLE users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    username TEXT UNIQUE NOT NULL,
    password TEXT NOT NULL,
    created_at DATETIME,
    updated_at DATETIME
);

-- ๅˆ†็ฑป่กจ
CREATE TABLE categories (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    id_str TEXT NOT NULL,
    classify TEXT NOT NULL,
    icon TEXT NOT NULL,
    sort_no INTEGER DEFAULT 0
);

-- ็ซ™็‚น่กจ
CREATE TABLE sites (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    cat_id INTEGER NOT NULL,
    name TEXT NOT NULL,
    href TEXT NOT NULL,
    description TEXT,
    logo TEXT,
    sort_no INTEGER DEFAULT 0,
    FOREIGN KEY (cat_id) REFERENCES categories(id) ON DELETE CASCADE
);

-- ๅ…ฌๅ‘Š่กจ
CREATE TABLE announcements (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    timestamp TEXT NOT NULL,
    content TEXT NOT NULL
);

-- ๅ…ฌๅ‘Š้…็ฝฎ่กจ
CREATE TABLE announcement_config (
    id INTEGER PRIMARY KEY CHECK (id = 1),
    interval INTEGER DEFAULT 5000
);

-- ้กต้ข้…็ฝฎ่กจ
CREATE TABLE page_config (
    id INTEGER PRIMARY KEY CHECK (id = 1),
    title TEXT,
    subtitle TEXT,
    logo TEXT,
    footer_text TEXT,
    icp TEXT
);

nav.json่พ“ๅ‡บๆ ผๅผ

[
  {
    "_id": "announcement_config",
    "type": "announcement_config",
    "interval": 5000,
    "announcements": [
      {"id": 1, "timestamp": "2025-01-01", "content": "ๅ…ฌๅ‘Šๅ†…ๅฎน"}
    ]
  },
  {
    "_id": "category_id",
    "classify": "ๅˆ†็ฑปๅ็งฐ",
    "icon": "ti-cloud",
    "sites": [
      {
        "name": "็ซ™็‚นๅ็งฐ",
        "href": "https://example.com",
        "desc": "็ซ™็‚นๆ่ฟฐ",
        "logo": "static/icons/logo.png"
      }
    ]
  }
]

ๅฎ‰ๅ…จ่ฏดๆ˜Ž

  • ๅฏ†็ ไฝฟ็”จbcryptๅŠ ๅฏ†ๅญ˜ๅ‚จ
  • nav.jsonไธๅŒ…ๅซไปปไฝ•ๆ•ๆ„Ÿไฟกๆฏ๏ผˆ็”จๆˆทใ€ๅฏ†็ ็ญ‰๏ผ‰
  • ็ฎก็†ๆŽฅๅฃ้œ€่ฆSession่ฎค่ฏ
  • ๆ–‡ไปถไธŠไผ ๆœ‰็ฑปๅž‹ๅ’Œๅคงๅฐ้™ๅˆถ
  • ๆ‰€ๆœ‰ๆ•ฐๆฎๅบ“ๅ†™ๆ“ไฝœไฝฟ็”จไบ‹ๅŠกไฟๆŠค

่ฎธๅฏ่ฏ

GPLv3

About

navi page based on golang admin management

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages