How to self-host your own Nostr ๐Ÿฆฉblog ๐Ÿ“ฐ with Oracolo

How to self-host your own Nostr ๐Ÿฆฉblog ๐Ÿ“ฐ with Oracolo

One other day on Nostr, one other app!

Today I'll present you a new self-hosted Nostr blog web application recently released on github by dtonon, Oracolo:

GitHub - dtonon/oracolo: A minimalist Nostr blog that consists of a single html file
A minimalist Nostr blog that consists of a single html file - dtonon/oracolo
Oracolo is a minimalist blog powered by Nostr, that consists of a single html file, weighing only ~140Kb. You can use whatever Nostr client that supports long format (, etc ) to write your posts, and your personal blog is automatically updated.
It works also without a web server; for example you can send it via email as a business card.

Oracolo's technical particularity is to be able to run into a single file. Every time you access the web page, the web page is compiled and your blog posts appears like magic in a white, clean and sobr blog (a Dark theme would be awesome ๐Ÿ‘€).

Blog articles are nostr events you published or will publish on Nostr relays through long notes applications like the ones quoted above.

Speak your mind


A censorship and data ownership free protocol, youโ€˜ll enjoy a fully decentralized media experience. (no caption available).

Don't forget to use a NIP07 web browser extensions to login on those websites. Old time where we were forced to fill our nsec key is nearly over!

For the hurry ones of you, you can find here the Oracolo demo with my Nostr long notes article. It will include this one when I'll publish it on Nostr!

How to self-host Oracolo?

You can build the application locally or use a docker compose stack to run it (or any other method). I just build a docker compose stack with Traefik and an Oracolo docker image to let you quickly run it.

The oracolo-docker github repo is available here:

GitHub - PastaGringo/oracolo-docker: Mirror from
Mirror from - PastaGringo/oracolo-docker

PS: don't freak out about the commits number, oracolo has been the lucky one to let me practrice docker image CI/CD build/push with Forgejo, that went well but it took me a while before finding how to make Forgejo runner dood work ๐Ÿ˜†). Please ping me on Nostr if you are interested by an article on this topic!

This repo is a mirror from my new Forgejo git instance where the code has been originaly published and will be updated if needed (I think it will):


Here is how to do it.

1) First, you need to create an A DNS record into your domain.tld zone. You can create a A with "oracole" .domain.tld or "*" .domain.tld. The second one will allow traefik to generate all the future subdomain.domain.tld without having to create them in advance.

You can verify DNS records with the website

2) Clone the oracolo-docker repository:

git clone
cd oracolo-docker

3) Rename the .env.example file:

mv .env.example .env

4) Modify and update your .env file with your own infos:

# Let's Encrypt email used to generate the SSL certificate
# domain for oracolo. Ex:
# Npub author at "npub" format, not HEX.
# Relays where Oracolo will retrieve the Nostr events.
# Ex: "wss://, wss://"
# Number of blog article with an thumbnail. Ex: 4

5) Compose Oracolo:

docker compose up -d && docker compose logs -f oracolo traefik
[+] Running 2/0
 โœ” Container traefik  Running                                                                                                                                                        0.0s 
 โœ” Container oracolo  Running                                                                                                                                                        0.0s 
WARN[0000] /home/pastadmin/DEV/FORGEJO/PLAY/oracolo-docker/docker-compose.yml: `version` is obsolete 
traefik  | 2024-05-28T19:24:18Z INF Traefik version 3.0.0 built on 2024-04-29T14:25:59Z version=3.0.0
oracolo  | 
oracolo  |   ___   ____    ____    __   ___   _       ___  
oracolo  |  /   \ |    \  /    |  /  ] /   \ | |     /   \ 
oracolo  | |     ||  D  )|  o  | /  / |     || |    |     |
oracolo  | |  O  ||    / |     |/  /  |  O  || |___ |  O  |
oracolo  | |     ||    \ |  _  /   \_ |     ||     ||     |
oracolo  | |     ||  .  \|  |  \     ||     ||     ||     |
oracolo  |  \___/ |__|\_||__|__|\____| \___/ |_____| \___/ 
oracolo  |                                                 
oracolo  | Oracolo dtonon's repo:
oracolo  | 
oracolo  | โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
oracolo  | โ”‚ Docker Compose Env Vars โคต๏ธ  โ”‚
oracolo  | โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
oracolo  | 
oracolo  | NPUB            : npub1ky4kxtyg0uxgw8g5p5mmedh8c8s6sqny6zmaaqj44gv4rk0plaus3m4fd2
oracolo  | RELAYS          : wss://, wss://
oracolo  | TOP_NOTES_NB    : 4
oracolo  | 
oracolo  | โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
oracolo  | โ”‚ Configuring Oracolo... โคต๏ธ  โ”‚
oracolo  | โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
oracolo  | 
oracolo  | > Updating npub key with npub1ky4kxtyg0uxgw8g5p5mmedh8c8s6sqny6zmaaqj44gv4rk0plaus3m4fd2... โœ…
oracolo  | > Updating nostr relays with wss://, wss:// โœ…
oracolo  | > Updating TOP_NOTE with value 4... โœ…
oracolo  | 
oracolo  | โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
oracolo  | โ”‚ Installing Oracolo โคต๏ธ  โ”‚
oracolo  | โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
oracolo  | 
oracolo  | added 122 packages, and audited 123 packages in 8s
oracolo  | 
oracolo  | 20 packages are looking for funding
oracolo  |   run `npm fund` for details
oracolo  | 
oracolo  | found 0 vulnerabilities
oracolo  | npm notice
oracolo  | npm notice New minor version of npm available! 10.7.0 -> 10.8.0
oracolo  | npm notice Changelog:
oracolo  | npm notice To update run: npm install -g npm@10.8.0
oracolo  | npm notice
oracolo  | 
oracolo  | >>> done โœ…
oracolo  | 
oracolo  | โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
oracolo  | โ”‚ Building Oracolo โคต๏ธ  โ”‚
oracolo  | โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
oracolo  | 
oracolo  | > oracolo@0.0.0 build
oracolo  | > vite build
oracolo  | 
oracolo  | 7:32:49 PM [vite-plugin-svelte] WARNING: The following packages have a svelte field in their package.json but no exports condition for svelte.
oracolo  | 
oracolo  | @splidejs/svelte-splide@0.2.9
oracolo  | @splidejs/splide@4.1.4
oracolo  | 
oracolo  | Please see for details.
oracolo  | vite v5.2.11 building for production...
oracolo  | transforming...
oracolo  | โœ“ 84 modules transformed.
oracolo  | rendering chunks...
oracolo  | 
oracolo  | 
oracolo  | Inlining: index-C6McxHm7.js
oracolo  | Inlining: style-DubfL5gy.css
oracolo  | computing gzip size...
oracolo  | dist/index.html  233.15 kB โ”‚ gzip: 82.41 kB
oracolo  | โœ“ built in 7.08s
oracolo  | 
oracolo  | >>> done โœ…
oracolo  | 
oracolo  | > Copying Oracolo built index.html to nginx usr/share/nginx/html... โœ…
oracolo  | 
oracolo  | โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
oracolo  | โ”‚ Configuring Nginx... โคต๏ธ โ”‚
oracolo  | โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
oracolo  | 
oracolo  | > Copying default nginx.conf file... โœ…
oracolo  | 
oracolo  | โ•ญโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
oracolo  | โ”‚ Starting Nginx... ๐Ÿš€ โ”‚
oracolo  | โ•ฐโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
oracolo  |

If you don't have any issue with the Traefik container, Oracolo should be live! ๐Ÿ”ฅ

You can now access it by going to the ORACOLO_DOMAIN URL configured into the .env file.

Have a good day!

Don't hesisate to follow dtonon on Nostr to follow-up the future updates โšก๐Ÿ”ฅ

See you soon in another Fractalized story!
PastaGringo ๐Ÿค–โšก