feat: docker and flags support

This commit is contained in:
trafficlunar 2025-12-17 21:27:19 +00:00
parent b1deb5929a
commit 5a07e249ac
9 changed files with 113 additions and 9 deletions

2
.gitignore vendored
View file

@ -1 +1 @@
*.db data/

21
Dockerfile Normal file
View file

@ -0,0 +1,21 @@
# build
FROM golang:1.25.4 AS builder
WORKDIR /app
COPY go.mod go.sum ./
RUN go mod download
COPY . .
RUN CGO_ENABLED=0 go build -o statsys .
# copy
FROM alpine:latest
WORKDIR /app
COPY --from=builder /app/statsys .
COPY --from=builder /app/www /app/www
EXPOSE 8888/tcp
CMD [ "/app/statsys", "-config", "data/config.toml", "-db", "data/status.db" ]

View file

@ -1,6 +1,77 @@
<h1 align="center">statsys</h1> <h1 align="center">statsys</h1>
TODO: thumbnail ![thumbnail](assets/thumbnail.png)
<p align="center">The cutest lightweight status page</p> <p align="center">the cutest lightweight status page</p>
<h4 align="center"><a href="https://status.trafficlunar.net">view demo</a> | <a href="#install">install</a></h4> <h4 align="center"><a href="https://status.trafficlunar.net">view demo</a> | <a href="#install">install</a></h4>
## install
<details>
<summary><strong>docker compose (recommended)</strong></summary>
<br>
Create a `docker-compose.yaml` file:
```yaml
services:
statsys:
container_name: statsys
image: trafficlunar/statsys
restart: unless-stopped
volumes:
- ./data/:/app/data/
ports:
- 8888:8888
```
Create a new directory called `data` and download the `config.toml` example and edit it:
```bash
mkdir data && cd data
wget https://raw.githubusercontent.com/trafficlunar/statsys/refs/heads/main/config.toml
```
When ready, run:
```bash
docker compose up -d
```
Navigate to `localhost:8888` to view your status page!
</details>
<details>
<summary><strong>docker quick run</strong></summary>
<br>
Create a new directory called `data` and download the `config.toml` example and edit it:
```bash
mkdir data && cd data
wget https://raw.githubusercontent.com/trafficlunar/statsys/refs/heads/main/config.toml
```
Launch the container:
```bash
docker run -d \
--name statsys \
--restart unless-stopped \
-v "$(pwd)/data:/app/data" \
-p 8888:8888 \
trafficlunar/statsys
```
Navigate to `localhost:8888` to view your status page!
</details>
<details>
<summary><strong>manual</strong></summary>
<br>
TODO
</details>

View file

@ -1,5 +1,4 @@
- [ ] Accessibility - [ ] Accessibility
- [ ] Better mobile support
- [ ] View incidents - [ ] View incidents
- [ ] Latency graphs? - [ ] Latency graphs?
- [ ] README - [ ] README

BIN
assets/thumbnail.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 55 KiB

View file

@ -26,7 +26,7 @@ type Config struct {
var config Config var config Config
func LoadConfig() { func LoadConfig() {
configFile, err := os.ReadFile("config.toml") configFile, err := os.ReadFile(*ConfigPath)
if err != nil { if err != nil {
log.Fatalf("failed to load config: %v", err) log.Fatalf("failed to load config: %v", err)
} }
@ -60,5 +60,5 @@ func LoadConfig() {
templateData.Services[index] = service templateData.Services[index] = service
} }
log.Println("config loaded") log.Printf("config loaded from '%s'", *ConfigPath)
} }

View file

@ -15,9 +15,9 @@ var db *sql.DB
func InitDatabase() { func InitDatabase() {
// open/create database // open/create database
var err error var err error
db, err = sql.Open("sqlite", "status.db") db, err = sql.Open("sqlite", *DatabasePath)
if err != nil { if err != nil {
log.Fatalf("failed to initalise database: %v", err) log.Fatalf("failed to initalize database: %v", err)
} }
db.SetMaxOpenConns(1) db.SetMaxOpenConns(1)
@ -97,7 +97,7 @@ func InitDatabase() {
templateData.Services[index] = service templateData.Services[index] = service
} }
log.Println("database initalised") log.Printf("database initalized at '%s'", *DatabasePath)
} }
func CloseDatabase() { func CloseDatabase() {

12
internal/flags.go Normal file
View file

@ -0,0 +1,12 @@
package internal
import "flag"
var ConfigPath *string
var DatabasePath *string
func ParseFlags() {
ConfigPath = flag.String("config", "config.toml", "path to config file")
DatabasePath = flag.String("db", "status.db", "path to database file")
flag.Parse()
}

View file

@ -3,6 +3,7 @@ package main
import "statsys/internal" import "statsys/internal"
func main() { func main() {
internal.ParseFlags()
internal.LoadConfig() internal.LoadConfig()
internal.InitDatabase() internal.InitDatabase()
defer internal.CloseDatabase() defer internal.CloseDatabase()