avatar

Jacky Fong

Software Engineer // Homelabber // Traveller // Caffeine Addicted

Certificate Transparency with HTTP-01 = Bot Scanning Invitation

Last post on 2025, yay. ٩(◕‿◕)۶ Reverse Proxy, for example, Caddy, is handy to auto generate a HTTPS certificate with auto renewal, but it does have one problem. endpoint.of.your.s3.domain.tld { reverse_proxy garage:3900 } The scenario I have a DNS record A *.foo.bar.com, to add/remove multi-level domain record without configure DNS everytime. Also I don’t want someone to spy and scan the domain by not expose them on DNS record. Once I setup something like https://whoops.foo.bar.com, I am happy to use the service through internet. The weird thing is, despite I don’t expose A whoops.foo.bar.com in DNS record. ...

2025-12-31 · 3 min · 435 words · Jacky

Check API request, with a honeypot

You might quite found some scenario that needs to check the content of HTTP request, or just a placeholder HTTP server for tests / development, or even just a honeypot to intercept some internet traffic for analysis. In some cases, you can just use utility like netcat or python3 -m http.server 8000 to quickly spin up a HTTP server for request interception. But I found that a dedicated honeypot is a better fit for this job. ...

2025-11-22 · 2 min · 309 words · Jacky

Automatic image converter to WebP format - Garage Events Proof Of Concept

The goal I want a service that automatically convert image to webP image, and serve the converted image while the mobile access the original image. Requirements When an image is uploaded to the S3, send an event to server to convert the image to WebP After converting it into WebP, save it into the bucket (The WebP Server is good but I want to serve ther WebP content static) For each mobile image request, redirect the request to the WebP image After resolving the reverse proxy url rewrite PoC , let’s focus on the S3 event triggering PoC. ...

2025-11-21 · 2 min · 408 words · Jacky

Automatic image converter to WebP format - URL Rewrite Proof Of Concept

The goal I want a service that automatically convert image to webP image, and serve the converted image while the mobile access the original image. Requirements When an image is uploaded to the S3, send an event to server to convert the image to WebP After converting it into WebP, save it into the bucket (The WebP Server is good but I want to serve ther WebP content static) For each mobile image request, redirect the request to the WebP image So I PoC the redirect logic first For each reverse proxy, rewritting url is a basic requirement. So it should be easy enough, just handle the image extension checking and the mobile User-Agent checking. ...

2025-11-18 · 1 min · 177 words · Jacky

Serving gz-compressed content to save bandwidth on Garage website bucket

What Happened Recently I need to serve a 10MB+ json file as a static API JSON endpoint. (Don’t ask me why the API content-length is that high) Turns out that Garage and Ferron does not do the compression and I need to do that manually. The trick Compress it locally and instruct the browser to treat that file as gzip by passing specific header. Content-Encoding: gzip Compress the file locally $ gzip -c example.json > example.json.gz ...

2025-11-14 · 1 min · 182 words · Jacky

A little adventure on exploring the ProtonVPN

What just happened I have a repo to collect the ProtonVPN data just for my convenience and further network check. This “API” is undocumented (It is never meant to be an API), and it is known for the users to get the endpoint and loading for each server. Until it was unavailable without authentication, it needs cookie to do that. The endpoint worked just fine for a bit. Until the behavior changes recently, affecting the account profile generation and the chrome extension (In my record, the response starts changing in October). ...

2025-11-10 · 3 min · 472 words · Jacky

S3 hosting with another reverse proxy, Ferron.

As of my last garage setup , I use Caddy as my reverse proxy, it worked just fine. But Ferron 2 was released recently, so I give it another shot. Ferron is small in image size (the alpine image is just 15MB in size). Which is good enough for just a reverse proxy with AutoTLS at that size, Caddy seems to be overkill in my usage. Reverse Proxy Configuration For Ferron, it takes almost nothing to configure the reverse proxy by passing the config kdl to the container. ...

2025-11-10 · 2 min · 299 words · Jacky

Build a selfhosted s3 storage, using Garage and Caddy

Recently I want to host my Pangolin instance to expose some services to internet. Instead of finding VPS like AWS Lightsail, Vultr, etc, I go to Lowendtalk. Lowendtalk is a great place to find some crazy VPS deals, and bought too much VPS for the purpose. Finally I found a suitable VPS instance, and left some VPS idle. To make use of these idle VPS, I have a static side project and I think it is good to test it out. ...

2025-08-14 · 3 min · 558 words · Jacky

Build and deploy a docker image using Komodo, automatically

Off topic, again Lilo Coffee Roasters is good, but not as shockingly great as Glitch. Coffee bean is a OK for me, bit too light roasted for me. May be just for the beans next time. Back to the topic Recently I built a small project and I want to run the code inside Docker container. I am going to host this Docker container inside my homelab, but too lazy to do the manual docker build and docker run each time I change something. ...

2025-03-02 · 2 min · 390 words · Jacky

Ditching Portainer. First try with Komodo and auto-stack deployment with Gitea

Off Topic Yay! First post written across two countries. Osaka + Kobe = perfect short break destination. The Glitch Coffee offers great quality coffee with reasonable price. Back to the topic Recently I want to ditch Portainer for couple of reasons: Why not? It is always fun to tinker. 5 instances limit for Portainer CE, which is not that enough for tons of VM. Even there is free Portainer BE provided, it is only 3 nodes and requires unnecessary information Some core functions are paywalled, e.g. auto-update image, you need watchtower to do that on Portainer CE. So I check for the FOSS options available, and I found 2 of them ...

2025-02-28 · 3 min · 588 words · Jacky