initial commit
This commit is contained in:
commit
734e1b22f9
11 changed files with 201 additions and 0 deletions
94
examples/db/cluster.yaml
Normal file
94
examples/db/cluster.yaml
Normal file
|
@ -0,0 +1,94 @@
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: ConfigMap
|
||||||
|
metadata:
|
||||||
|
name: pgsodium-config
|
||||||
|
data:
|
||||||
|
pgsodium_getkey.sh: |
|
||||||
|
#!/bin/bash
|
||||||
|
set -euo pipefail
|
||||||
|
if [[ -z "${VAULT_KEY}" ]]; then
|
||||||
|
echo "PGSODIUM_KEY is not set" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo -n "$VAULT_KEY"
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: pgsodium-key
|
||||||
|
data:
|
||||||
|
# Generate a 32-byte key
|
||||||
|
# head -c 32 /dev/urandom | od -A n -t x1 | tr -d ' \n' | base64
|
||||||
|
key: NmE4YzQwMWY3NzI4YzdiMWViOTE5NmJhMWRlYmFkOTRhMDRlZTgwZDUzZDg4NWE5MWZlODY0MzdkOGIyYmQ2OA==
|
||||||
|
---
|
||||||
|
apiVersion: v1
|
||||||
|
kind: Secret
|
||||||
|
metadata:
|
||||||
|
name: supabase-admin-credentials
|
||||||
|
labels:
|
||||||
|
cnpg.io/reload: "true"
|
||||||
|
type: kubernetes.io/basic-auth
|
||||||
|
stringData:
|
||||||
|
username: supabase_admin
|
||||||
|
password: 1n1t-R00t!
|
||||||
|
---
|
||||||
|
apiVersion: postgresql.cnpg.io/v1
|
||||||
|
kind: Cluster
|
||||||
|
metadata:
|
||||||
|
name: cluster-example
|
||||||
|
spec:
|
||||||
|
instances: 1
|
||||||
|
imageName: ghcr.io/supabase/postgres:15.6.1.145
|
||||||
|
postgresUID: 105
|
||||||
|
postgresGID: 106
|
||||||
|
|
||||||
|
bootstrap:
|
||||||
|
initdb:
|
||||||
|
database: app
|
||||||
|
owner: supabase_admin
|
||||||
|
|
||||||
|
postgresql:
|
||||||
|
shared_preload_libraries:
|
||||||
|
- pg_stat_statements
|
||||||
|
- pgaudit
|
||||||
|
- plpgsql
|
||||||
|
- plpgsql_check
|
||||||
|
- pg_cron
|
||||||
|
- pg_net
|
||||||
|
- pgsodium
|
||||||
|
- timescaledb
|
||||||
|
- auto_explain
|
||||||
|
- pg_tle
|
||||||
|
- plan_filter
|
||||||
|
parameters:
|
||||||
|
pgsodium.getkey_script: /projected/bin/pgsodium_getkey.sh
|
||||||
|
cron.database_name: app
|
||||||
|
auto_explain.log_min_duration: 10s
|
||||||
|
projectedVolumeTemplate:
|
||||||
|
sources:
|
||||||
|
- configMap:
|
||||||
|
name: pgsodium-config
|
||||||
|
items:
|
||||||
|
- key: pgsodium_getkey.sh
|
||||||
|
path: bin/pgsodium_getkey.sh
|
||||||
|
mode: 0755
|
||||||
|
env:
|
||||||
|
# cloudnative-pg reserves all env variables that start with PG for internal use
|
||||||
|
- name: VAULT_KEY
|
||||||
|
valueFrom:
|
||||||
|
secretKeyRef:
|
||||||
|
name: pgsodium-key
|
||||||
|
key: key
|
||||||
|
|
||||||
|
managed:
|
||||||
|
roles:
|
||||||
|
- name: supabase_admin
|
||||||
|
ensure: present
|
||||||
|
superuser: true
|
||||||
|
login: true
|
||||||
|
passwordSecret:
|
||||||
|
name: supabase-admin-credentials
|
||||||
|
storage:
|
||||||
|
size: 1Gi
|
5
go.mod
Normal file
5
go.mod
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
module code.icb4dc0.de/prskr/supabase-operator
|
||||||
|
|
||||||
|
go 1.23.4
|
||||||
|
|
||||||
|
require github.com/magefile/mage v1.15.0
|
2
go.sum
Normal file
2
go.sum
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
github.com/magefile/mage v1.15.0 h1:BvGheCMAsG3bWUDbZ8AyXXpCNwU9u5CB6sM+HNb9HYg=
|
||||||
|
github.com/magefile/mage v1.15.0/go.mod h1:z5UZb/iS3GoOSn0JgWuiw7dxlurVYTu+/jHXqQg881A=
|
6
go.work
Normal file
6
go.work
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
go 1.23.4
|
||||||
|
|
||||||
|
use (
|
||||||
|
.
|
||||||
|
./tools
|
||||||
|
)
|
3
hack/clean.sql
Normal file
3
hack/clean.sql
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
-- drop publication if exists supabase_realtime;
|
||||||
|
-- reach clean state for supabase-operator
|
||||||
|
drop publication if exists supabase_realtime;
|
13
mage.go
Normal file
13
mage.go
Normal file
|
@ -0,0 +1,13 @@
|
||||||
|
//go:build ignore
|
||||||
|
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"os"
|
||||||
|
|
||||||
|
"github.com/magefile/mage/mage"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
os.Exit(mage.Main())
|
||||||
|
}
|
30
magefiles/common.go
Normal file
30
magefiles/common.go
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log/slog"
|
||||||
|
"os"
|
||||||
|
|
||||||
|
_ "github.com/magefile/mage/sh"
|
||||||
|
)
|
||||||
|
|
||||||
|
var workingDir string
|
||||||
|
|
||||||
|
func init() {
|
||||||
|
logLevel := new(slog.LevelVar)
|
||||||
|
|
||||||
|
if val, set := os.LookupEnv("MAGE_LOG_LEVEL"); set {
|
||||||
|
_ = logLevel.UnmarshalText([]byte(val))
|
||||||
|
}
|
||||||
|
|
||||||
|
handler := slog.NewTextHandler(os.Stderr, &slog.HandlerOptions{
|
||||||
|
Level: logLevel,
|
||||||
|
})
|
||||||
|
|
||||||
|
slog.SetDefault(slog.New(handler))
|
||||||
|
|
||||||
|
if wd, err := os.Getwd(); err != nil {
|
||||||
|
panic(err)
|
||||||
|
} else {
|
||||||
|
workingDir = wd
|
||||||
|
}
|
||||||
|
}
|
4
magefiles/generate.go
Normal file
4
magefiles/generate.go
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
func FetchImageMeta() {
|
||||||
|
}
|
41
magefiles/magefile.go
Normal file
41
magefiles/magefile.go
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
"os"
|
||||||
|
"os/exec"
|
||||||
|
|
||||||
|
"github.com/magefile/mage/mg" // mg contains helpful utility functions, like Deps
|
||||||
|
)
|
||||||
|
|
||||||
|
// Default target to run when none is specified
|
||||||
|
// If not set, running mage will list available targets
|
||||||
|
// var Default = Build
|
||||||
|
|
||||||
|
// A build step that requires additional params, or platform specific steps for example
|
||||||
|
func Build() error {
|
||||||
|
mg.Deps(InstallDeps)
|
||||||
|
fmt.Println("Building...")
|
||||||
|
cmd := exec.Command("go", "build", "-o", "MyApp", ".")
|
||||||
|
return cmd.Run()
|
||||||
|
}
|
||||||
|
|
||||||
|
// A custom install step if you need your bin someplace other than go/bin
|
||||||
|
func Install() error {
|
||||||
|
mg.Deps(Build)
|
||||||
|
fmt.Println("Installing...")
|
||||||
|
return os.Rename("./MyApp", "/usr/bin/MyApp")
|
||||||
|
}
|
||||||
|
|
||||||
|
// Manage your deps, or running package managers.
|
||||||
|
func InstallDeps() error {
|
||||||
|
fmt.Println("Installing Deps...")
|
||||||
|
cmd := exec.Command("go", "get", "github.com/stretchr/piglatin")
|
||||||
|
return cmd.Run()
|
||||||
|
}
|
||||||
|
|
||||||
|
// Clean up after yourself
|
||||||
|
func Clean() {
|
||||||
|
fmt.Println("Cleaning...")
|
||||||
|
os.RemoveAll("MyApp")
|
||||||
|
}
|
3
tools/go.mod
Normal file
3
tools/go.mod
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
module tools
|
||||||
|
|
||||||
|
go 1.23.4
|
0
tools/go.sum
Normal file
0
tools/go.sum
Normal file
Loading…
Reference in a new issue