✨ add iocaine blog post
This commit is contained in:
@@ -70,7 +70,7 @@ pub trait BlogEntry: Sized {
|
|||||||
"certified catgirl™",
|
"certified catgirl™",
|
||||||
"software engineer",
|
"software engineer",
|
||||||
"professional yapper",
|
"professional yapper",
|
||||||
"neurospicy and disabled"
|
"neurospicy and disabled",
|
||||||
],
|
],
|
||||||
about: "",
|
about: "",
|
||||||
},
|
},
|
||||||
@@ -83,17 +83,122 @@ pub trait BlogEntry: Sized {
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
const POSTS: [&'static Post; 1] = [
|
const POSTS: [&'static Post; 2] = [
|
||||||
/*&Post {
|
&Post {
|
||||||
id: 0,
|
id: 0,
|
||||||
authors: &[0],
|
authors: &[0],
|
||||||
title: "sweet little poison",
|
title: "haj, world!",
|
||||||
utcdate: "1970-01-01",
|
utcdate: "2025-08-24",
|
||||||
content: r#"
|
content: r#"
|
||||||
### this will be a future write-up how i set up iocaine with caddy and docker.
|
### my first blogpost
|
||||||
### here's my docker-compose.yml:
|
haj! and welcome to my first blogpost.
|
||||||
|
this blogpost won't have that much content.
|
||||||
|
fun fact: this post becomes html from markdown :3
|
||||||
|
pretty cool, ain't it? we think so too.
|
||||||
|
it's for including images, formatted text, code and content much easier.
|
||||||
|
i also added a too overcomplicated blog backend that allows authors and posts by u8::MAX, cause why not.
|
||||||
|
won't post that much either way, so why bother with higher values.
|
||||||
|
nonetheless... have a great day, evening, whatever daytime it's for you rn and stay safe. ♡
|
||||||
|
you may take a look at my other blogposts. this one was basically practially just a test.
|
||||||
|
"#,
|
||||||
|
},
|
||||||
|
&Post {
|
||||||
|
id: 1,
|
||||||
|
authors: &[0],
|
||||||
|
title: "sweet little poison",
|
||||||
|
utcdate: "2025-08-25",
|
||||||
|
content: r#"
|
||||||
|
### > setting up iocaine with docker and caddy. ~
|
||||||
|
sup, today we're going to give ya a crash course on how to homebrew poison for ai. ^.^
|
||||||
|
we'll be utilizing docker for containerization and caddy as a reverse-proxy.
|
||||||
|
|
||||||
```yml
|
#### > preparing docker and files ~
|
||||||
|
first, we're going to create a new external network and recreate our file struct.
|
||||||
|
in this example we're going to name it "caddy". very creative, i know.
|
||||||
|
we achieve this by running following pile of commands:
|
||||||
|
```sh
|
||||||
|
docker network create caddy && \
|
||||||
|
mkdir -p ./caddy/pages/example.com ./iocaine ./socks && \
|
||||||
|
touch ./docker-compose.yml ./caddy/proxy ./iocaine/config.toml && \
|
||||||
|
touch ./caddy/pages/example.com/index.html && \
|
||||||
|
printf '<html><body><h1>hellow body consisting of blood and flesh</h1></body></html>' \
|
||||||
|
> ./caddy/pages/example.com/index.html
|
||||||
|
```
|
||||||
|
|
||||||
|
after running that we should be set and ready for the next few steps.
|
||||||
|
if you're curious, this is how it should look like right now:
|
||||||
|
```sh
|
||||||
|
Documents/example » tree .
|
||||||
|
.
|
||||||
|
├── caddy
|
||||||
|
│ ├── pages
|
||||||
|
│ │ └── example.com
|
||||||
|
│ │ └── index.html
|
||||||
|
│ └── proxy
|
||||||
|
├── docker-compose.yml
|
||||||
|
├── iocaine
|
||||||
|
│ └── config.toml
|
||||||
|
└── socks
|
||||||
|
```
|
||||||
|
|
||||||
|
#### > downloading data and configuring iocaine ~
|
||||||
|
|
||||||
|
next things next: we're going to download a robots.json, some markov-chain-stuffies and a words.txt.
|
||||||
|
for now, we will be using the default stuff from the official docs cause why not:
|
||||||
|
```sh
|
||||||
|
curl --proto '=https' --tlsv1.3 \
|
||||||
|
-L https://archive.org/download/GeorgeOrwells1984/1984_djvu.txt \
|
||||||
|
-o ./iocaine/1984.txt && \
|
||||||
|
curl --proto '=https' --tlsv1.3 \
|
||||||
|
-L https://archive.org/download/ost-english-brave_new_world_aldous_huxley/Brave_New_World_Aldous_Huxley_djvu.txt \
|
||||||
|
-o ./iocaine/brave-new-world.txt && \
|
||||||
|
curl --proto '=https' --tlsv1.2 \
|
||||||
|
-L https://git.savannah.gnu.org/cgit/miscfiles.git/plain/web2 \
|
||||||
|
-o ./iocaine/words.txt && \
|
||||||
|
curl --proto '=https' --tlsv1.3 \
|
||||||
|
-L https://github.com/ai-robots-txt/ai.robots.txt/raw/refs/heads/main/robots.json \
|
||||||
|
-o ./iocaine/robots.json
|
||||||
|
```
|
||||||
|
|
||||||
|
most importantly, we have to scrape nam-shub-of-enki from gergely's git.
|
||||||
|
here's a way to curl and extract it automatically in the correct folder:
|
||||||
|
```sh
|
||||||
|
curl --proto '=https' --tlsv1.3 \
|
||||||
|
-L https://git.madhouse-project.org/api/packages/iocaine/generic/nam-shub-of-enki/20250711.0/nam-shub-of-enki-20250711.0.tar.zst \
|
||||||
|
-o ./iocaine/nam-shub-of-enki.tar.zst && \
|
||||||
|
sudo tar -xvf ./iocaine/nam-shub-of-enki.tar.zst -C ./iocaine
|
||||||
|
```
|
||||||
|
|
||||||
|
now, we're going to prepare our iocaine/config.toml like this:
|
||||||
|
```sh
|
||||||
|
cat > ./iocaine/config.toml <<'YAML'
|
||||||
|
[server]
|
||||||
|
bind = "/run/iocaine/waow.socket"
|
||||||
|
unix_listen_access = "everybody"
|
||||||
|
|
||||||
|
[server.control]
|
||||||
|
bind = "/run/iocaine/listen.socket"
|
||||||
|
unix_listen_access = "owner"
|
||||||
|
|
||||||
|
[server.request-handler]
|
||||||
|
path = "/data"
|
||||||
|
language = "roto"
|
||||||
|
|
||||||
|
[sources]
|
||||||
|
words = "/data/words.txt"
|
||||||
|
markov = [ "/data/1984.txt", "/data/brave-new-world.txt" ]
|
||||||
|
|
||||||
|
[metrics]
|
||||||
|
enable = false
|
||||||
|
YAML
|
||||||
|
```
|
||||||
|
|
||||||
|
#### > cooking up our docker compose file for deployment ~
|
||||||
|
|
||||||
|
i have fucked around with docker a little while to make this somehow work.
|
||||||
|
here's a command which will insert needed content into our docker-compose.yml:
|
||||||
|
```sh
|
||||||
|
cat > ./docker-compose.yml <<'YAML'
|
||||||
services:
|
services:
|
||||||
caddy:
|
caddy:
|
||||||
image: caddy:alpine
|
image: caddy:alpine
|
||||||
@@ -107,10 +212,10 @@ services:
|
|||||||
- "443:443"
|
- "443:443"
|
||||||
- "443:443/udp"
|
- "443:443/udp"
|
||||||
networks:
|
networks:
|
||||||
- nginx
|
- caddy
|
||||||
volumes:
|
volumes:
|
||||||
- ./socks:/run/iocaine:ro
|
- ./socks:/run/iocaine:ro
|
||||||
- ./nginx/pages:/var/www/html
|
- ./caddy/pages:/var/www/html
|
||||||
- ./caddy/data:/data
|
- ./caddy/data:/data
|
||||||
- ./caddy/config:/config
|
- ./caddy/config:/config
|
||||||
- ./caddy/proxy:/etc/caddy/Caddyfile:ro
|
- ./caddy/proxy:/etc/caddy/Caddyfile:ro
|
||||||
@@ -122,15 +227,13 @@ services:
|
|||||||
hostname: proxy.iocaine
|
hostname: proxy.iocaine
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
ports:
|
ports:
|
||||||
- "42069:42069"
|
- "127.0.0.1:42069:42069"
|
||||||
networks:
|
networks:
|
||||||
- nginx
|
- caddy
|
||||||
volumes:
|
volumes:
|
||||||
- ./iocaine:/data
|
|
||||||
- ./socks:/run/iocaine:rw
|
- ./socks:/run/iocaine:rw
|
||||||
# - iocainesocket:/run/iocaine/waow.socket:rw
|
- ./iocaine:/data
|
||||||
environment:
|
environment:
|
||||||
# - IOCAINE__SERVER__BIND="0.0.0.0:42069"
|
|
||||||
- IOCAINE__SERVER__BIND="/run/iocaine/waow.socket"
|
- IOCAINE__SERVER__BIND="/run/iocaine/waow.socket"
|
||||||
- IOCAINE__SERVER__UNIX_LISTEN_ACCESS="everybody"
|
- IOCAINE__SERVER__UNIX_LISTEN_ACCESS="everybody"
|
||||||
- IOCAINE__SERVER__REQUEST_HANDLER__PATH="/data"
|
- IOCAINE__SERVER__REQUEST_HANDLER__PATH="/data"
|
||||||
@@ -140,39 +243,19 @@ services:
|
|||||||
- IOCAINE__SOURCES__WORDS="/data/words.txt"
|
- IOCAINE__SOURCES__WORDS="/data/words.txt"
|
||||||
- IOCAINE__SOURCES__MARKOV=["/data/1984.txt", "/data/brave-new-world.txt"]
|
- IOCAINE__SOURCES__MARKOV=["/data/1984.txt", "/data/brave-new-world.txt"]
|
||||||
- IOCAINE__METRICS__ENABLE=false
|
- IOCAINE__METRICS__ENABLE=false
|
||||||
command: --config-file /data/config.toml
|
- NSOE__AI_ROBOTS_TXT_PATH=/data/robots.json
|
||||||
|
command: --config-file /data/config.toml start
|
||||||
networks:
|
networks:
|
||||||
nginx:
|
caddy:
|
||||||
external: true
|
external: true
|
||||||
|
YAML
|
||||||
```
|
```
|
||||||
|
|
||||||
### my file-tree:
|
#### > finishing up with caddy and deploying ~
|
||||||
|
our caddyfile needs some love to work.
|
||||||
|
here's what i ripped from the official docs:
|
||||||
```sh
|
```sh
|
||||||
services/proxy » tree iocaine
|
cat > ./iocaine/proxy <<'TXT'
|
||||||
iocaine
|
|
||||||
├── 1984.txt
|
|
||||||
├── brave-new-world.txt
|
|
||||||
├── nam_shub_of_enki
|
|
||||||
│ ├── classify
|
|
||||||
│ │ └── mod.roto
|
|
||||||
│ ├── config.roto
|
|
||||||
│ ├── detect
|
|
||||||
│ │ └── mod.roto
|
|
||||||
│ ├── mod.roto
|
|
||||||
│ └── tests
|
|
||||||
│ └── mod.roto
|
|
||||||
├── nam-shub-of-enki-20250711.0.tar.zst
|
|
||||||
├── nam-shub-of-enki-latest.tar.zst
|
|
||||||
├── pkg.roto
|
|
||||||
├── robots.json
|
|
||||||
└── words.txt
|
|
||||||
```
|
|
||||||
|
|
||||||
### and my caddy-snippet with example:
|
|
||||||
|
|
||||||
|
|
||||||
```txt
|
|
||||||
(iocaine) {
|
(iocaine) {
|
||||||
@read method GET HEAD
|
@read method GET HEAD
|
||||||
@not-read not {
|
@not-read not {
|
||||||
@@ -196,29 +279,21 @@ example.com {
|
|||||||
reverse_proxy http://example:8080
|
reverse_proxy http://example:8080
|
||||||
}
|
}
|
||||||
default {
|
default {
|
||||||
respond 405
|
# this is the behaviour if neither a GET nor HEAD request comes in
|
||||||
|
reverse_proxy http://example:8080
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
TXT
|
||||||
```
|
```
|
||||||
|
now the last thing that's left is a plain and simple:
|
||||||
|
`docker compose up -d`
|
||||||
|
and we should be good to go!
|
||||||
|
|
||||||
|
i hope this post made it easier/helped you with setting up iocaine on your own server. ♡
|
||||||
|
it's good to have this set up just to fuck around with fucking parisitic generative ai stealing your things.
|
||||||
|
gatekeep your stuff from big corpos that are trying to make their business from your experience and skills.
|
||||||
"#,
|
"#,
|
||||||
},
|
},
|
||||||
*/&Post {
|
|
||||||
id: 0,
|
|
||||||
authors: &[0],
|
|
||||||
title: "haj, world!",
|
|
||||||
utcdate: "2025-08-24",
|
|
||||||
content: r#"
|
|
||||||
### my first blogpost
|
|
||||||
haj! and welcome to my first blogpost.
|
|
||||||
this blogpost won't have that much content.
|
|
||||||
fun fact: this post generates html from markdown :3
|
|
||||||
so i can include images, formatted text, code and content much easier.
|
|
||||||
i also added a too overcomplicated blog backend that allows authors and posts by u8::MAX, cause why not.
|
|
||||||
won't post that much either way, so why bother with higher values. /srs
|
|
||||||
nonetheless... have a great day, evening, whatever daytime it's for you rn and stay safe. ♡s
|
|
||||||
"#,
|
|
||||||
},
|
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user