From bdb59a38c2d35acd276c4a84ecabbd3a080fa8d9 Mon Sep 17 00:00:00 2001 From: Seongmin Lee Date: Sat, 2 May 2026 02:06:34 +0900 Subject: [PATCH] appview,nix: add porxie blob store Signed-off-by: Seongmin Lee --- appview/config/config.go | 5 +++++ appview/state/state.go | 7 ++++++- blobstore/porxie.go | 3 +-- flake.lock | 6 +++--- nix/vm.nix | 13 +++++++++++++ 5 files changed, 28 insertions(+), 6 deletions(-) diff --git a/appview/config/config.go b/appview/config/config.go index d8a533e8..e9f27b61 100644 --- a/appview/config/config.go +++ b/appview/config/config.go @@ -149,6 +149,10 @@ type OgreConfig struct { Host string `env:"HOST, default=https://ogre.tangled.network"` } +type PorxieConfig struct { + Url string `env:"URL"` // appview will default to PDS when porxie url is not configured +} + func (cfg RedisConfig) ToURL() string { u := &url.URL{ Scheme: "redis", @@ -182,6 +186,7 @@ type Config struct { Sites SitesConfig `env:",prefix=TANGLED_SITES_"` KnotMirror KnotMirrorConfig `env:",prefix=TANGLED_KNOTMIRROR_"` Ogre OgreConfig `env:",prefix=TANGLED_OGRE_"` + Porxie PorxieConfig `env:",prefix=TANGLED_PORXIE_"` } func LoadConfig(ctx context.Context) (*Config, error) { diff --git a/appview/state/state.go b/appview/state/state.go index a7ca52f8..70d55d53 100644 --- a/appview/state/state.go +++ b/appview/state/state.go @@ -120,7 +120,12 @@ func Make(ctx context.Context, config *config.Config) (*State, error) { mentionsResolver := mentions.New(config, res, d, log.SubLogger(logger, "mentionsResolver")) - blobStore := blobstore.NewPdsBlobStore(res.Directory()) + var blobStore blobstore.BlobStore + if config.Porxie.Url != "" { + blobStore = blobstore.NewPorxieBlobStore(config.Porxie.Url) + } else { + blobStore = blobstore.NewPdsBlobStore(res.Directory()) + } wrapper := db.DbWrapper{Execer: d} jc, err := jetstream.NewJetstreamClient( diff --git a/blobstore/porxie.go b/blobstore/porxie.go index 99898dc7..9f867480 100644 --- a/blobstore/porxie.go +++ b/blobstore/porxie.go @@ -5,7 +5,6 @@ import ( "fmt" "io" "net/http" - "path" "github.com/bluesky-social/indigo/atproto/syntax" "github.com/ipfs/go-cid" @@ -20,7 +19,7 @@ func NewPorxieBlobStore(url string) *Porxie { } func (s *Porxie) GetBlob(ctx context.Context, did syntax.DID, cid cid.Cid) (io.ReadCloser, error) { - url := path.Join(s.url, did.String(), cid.String()) + url := fmt.Sprintf("%s/%s/%s", s.url, did, cid) resp, err := http.Get(url) if err != nil { return nil, err diff --git a/flake.lock b/flake.lock index ea4a2361..9006fd8d 100644 --- a/flake.lock +++ b/flake.lock @@ -183,11 +183,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1771848320, - "narHash": "sha256-0MAd+0mun3K/Ns8JATeHT1sX28faLII5hVLq0L3BdZU=", + "lastModified": 1777954456, + "narHash": "sha256-hGdgeU2Nk87RAuZyYjyDjFL6LK7dAZN5RE9+hrDTkDU=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2fc6539b481e1d2569f25f8799236694180c0993", + "rev": "549bd84d6279f9852cae6225e372cc67fb91a4c1", "type": "github" }, "original": { diff --git a/nix/vm.nix b/nix/vm.nix index ea1501f6..c71f1bb0 100644 --- a/nix/vm.nix +++ b/nix/vm.nix @@ -76,6 +76,11 @@ in host.port = 7200; guest.port = 7200; } + { + from = "host"; + host.port = 6314; + guest.port = 6314; + } ]; sharedDirectories = { # We can't use the 9p mounts directly for most of these @@ -148,6 +153,14 @@ in host all tnglr 127.0.0.1/32 trust ''; }; + services.porxie = { + enable = true; + settings = { + PORXIE_SERVER_ADDRESS = "ip:0.0.0.0:6314"; + PORXIE_BLOB_ALLOWED_MIMETYPES = ["application/gzip" "image/*" "text/plain"]; + PORXIE_IDENTITY_PLC_URL = plcUrl; + }; + }; services.tangled.knotmirror = { enable = true; listenAddr = "0.0.0.0:7000"; -- knotmirror 0.0.1