peers/misskey.sh runs Misskey on the shared Postgres and Redis. Its config is generated with the pasture's private networks allowed and a setup password, it trusts Caddy's CA through NODE_EXTRA_CA_CERTS, and the first account it makes is the scenario's user. A new Misskey federates with nobody, so the setup also turns federation on. scenarios/misskey.sh adds 35 checks, all passing, as listed in docs/INTEROP.md. They cover posts, CW, MFM source, replies, unicode reactions both ways and their withdrawal, likes as reactions, legacy quotes both ways, polls, specified notes, media, deletes, unfollow, block and statistics. MISSKEY_NAME and MISSKEY_IMAGE are there so Sharkey can reuse the peer. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01ELjqpznMFMNrJoJUj6K5p2
49 lines
2.2 KiB
Bash
49 lines
2.2 KiB
Bash
# Misskey: one container on the shared Postgres (database misskey) and Redis (db 2). The first account, made with the
|
|
# setup password, is the scenario's user; its token is kept in .state/misskey.token.
|
|
MISSKEY_IMAGE=${MISSKEY_IMAGE:-docker.io/misskey/misskey:2026.10.0}
|
|
MISSKEY_NAME=${MISSKEY_NAME:-misskey}
|
|
. "$here/peers/shared.sh"
|
|
|
|
misskey_up() {
|
|
shared_postgres_up
|
|
shared_redis_up
|
|
podman exec pasture-postgres sh -c "psql -U pasture -tc \"select 1 from pg_database where datname='$MISSKEY_NAME'\" | grep -q 1 || createdb -U pasture $MISSKEY_NAME"
|
|
mkdir -p "$here/.state/$MISSKEY_NAME"
|
|
cat > "$here/.state/$MISSKEY_NAME/default.yml" <<YML
|
|
url: https://$MISSKEY_NAME.test/
|
|
port: 3000
|
|
db:
|
|
host: postgres
|
|
port: 5432
|
|
db: $MISSKEY_NAME
|
|
user: pasture
|
|
pass: pasture
|
|
dbReplications: false
|
|
redis:
|
|
host: redis
|
|
port: 6379
|
|
db: ${MISSKEY_REDIS_DB:-2}
|
|
fulltextSearch:
|
|
provider: sqlLike
|
|
id: 'aidx'
|
|
setupPassword: pasture-setup
|
|
allowedPrivateNetworks:
|
|
- '10.0.0.0/8'
|
|
- '172.16.0.0/12'
|
|
- '192.168.0.0/16'
|
|
YML
|
|
podman run -d --replace --name pasture-$MISSKEY_NAME --network $net -e NODE_EXTRA_CA_CERTS=/pasture/ca/root.crt \
|
|
-v "$here/.state/$MISSKEY_NAME:/misskey/.config:z,ro" -v "$ca:/pasture/ca:z,ro" $MISSKEY_IMAGE >/dev/null
|
|
for _ in $(seq 1 120); do
|
|
site "$MISSKEY_NAME.test" -s -o /dev/null -w '%{http_code}' -X POST "https://$MISSKEY_NAME.test:6443/api/meta" -H 'Content-Type: application/json' -d '{}' 2>/dev/null | grep -q 200 && break
|
|
sleep 3
|
|
done
|
|
site "$MISSKEY_NAME.test" -s -X POST "https://$MISSKEY_NAME.test:6443/api/admin/accounts/create" -H 'Content-Type: application/json' \
|
|
-d '{"username":"mkuser","password":"Misskey-Pasture-Pass-1","setupPassword":"pasture-setup"}' \
|
|
| python3 -c "import sys,json; print(json.load(sys.stdin)['token'])" > "$here/.state/$MISSKEY_NAME.token" 2>/dev/null || true
|
|
# a new Misskey federates with nobody (federation: none) until its admin says otherwise
|
|
site "$MISSKEY_NAME.test" -s -o /dev/null -X POST "https://$MISSKEY_NAME.test:6443/api/admin/update-meta" -H 'Content-Type: application/json' \
|
|
-d "{\"i\":\"$(cat "$here/.state/$MISSKEY_NAME.token")\",\"federation\":\"all\"}"
|
|
echo "$MISSKEY_NAME: https://$MISSKEY_NAME.test:6443"
|
|
}
|