gemini://technicalsuwako.moe
テクニカル諏訪子
2023-07-17T02:40:00Z
テクニカル諏訪子
blog/urloli-220.gmi
凛
【076】URLロリ 2.2.0登場
2023-07-17T02:40:00Z
<p>URLロリ は2.2.0にバージョンアップしました!!</p>
<h2 id="url">URLロリって何?</h2>
<p>URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡</p>
<h2 id="heading">変更</h2>
<ul>
<li>ポート番号の修正</li>
<li>言語は<a href="https://gitler.moe/suwako/goliblocale">liblocale</a>化</li>
<li>複数言語対応</li>
</ul>
<h2 id="heading-1">ソースコード</h2>
<p><a href="https://gitler.moe/suwako/urloli">Gitler</a><br />
<a href="https://codeberg.org/TechnicalSuwako/urloli">Codeberg</a><br />
<a href="https://notabug.org/TechnicalSuwako/urloli">Notabug</a><br />
<a href="https://git.disroot.org/TechnicalSuwako/urloli">Disroot</a></p>
<h2 id="heading-2">公式インスタンス</h2>
<p><a href="https://urlo.li/">https://urlo.li/</a></p>
<h2 id="heading-3">ダウンロード</h2>
<p><a href="https://076.moe/repo/bin/urloli/">https://076.moe/repo/bin/urloli/</a></p>
<h2 id="heading-4">会話</h2>
<h3 id="xmpp">XMPP</h3>
<p><a href="xmpp:urloli@chat.xmpp.076.ne.jp?join">xmpp:urloli@chat.xmpp.076.ne.jp?join</a></p>
<h3 id="irc">IRC</h3>
<p>irc.076.ne.jp/6697<br />
#urloli</p>
<p>以上</p>
blog/hozonsite-110.gmi
凛
【076】保存サイト 1.1.0登場
2023-07-17T02:30:00Z
<p>保存サイト は1.1.0にバージョンアップしました!!</p>
<h2 id="heading">保存サイトって何?</h2>
<p>世界初FOSS系ウエブアーカイバーです。</p>
<h2 id="heading-1">変更</h2>
<ul>
<li>言語は<a href="https://gitler.moe/suwako/goliblocale">liblocale</a>化</li>
<li>複数言語対応</li>
<li>NetBSD対応</li>
<li>IPアドレスを設定する様に</li>
</ul>
<h2 id="heading-2">ソースコード</h2>
<p><a href="https://gitler.moe/suwako/hozonsite">Gitler</a><br />
<a href="https://codeberg.org/TechnicalSuwako/hozonsite">Codeberg</a><br />
<a href="https://notabug.org/TechnicalSuwako/hozonsite">Notabug</a><br />
<a href="https://git.disroot.org/TechnicalSuwako/hozonsite">Disroot</a></p>
<h2 id="heading-3">公式インスタンス</h2>
<p><a href="https://hozon.site/">https://hozon.site/</a></p>
<h2 id="heading-4">ダウンロード</h2>
<p><a href="https://076.moe/repo/bin/hozonsite/">https://076.moe/repo/bin/hozonsite/</a></p>
<h2 id="heading-5">会話</h2>
<h3 id="xmpp">XMPP</h3>
<p><a href="xmpp:hozonsite@chat.xmpp.076.ne.jp?join">xmpp:hozonsite@chat.xmpp.076.ne.jp?join</a></p>
<h3 id="irc">IRC</h3>
<p>irc.076.ne.jp/6697<br />
#hozonsite</p>
<p>以上</p>
blog/urloli-211.gmi
凛
【076】URLロリ 2.1.1登場
2023-07-04T00:00:00Z
<p>URLロリ は2.1.1にバージョンアップしました!!</p>
<h2 id="url">URLロリって何?</h2>
<p>URLロリはクッソ小さいURL短縮作成ソフトだわ〜♡</p>
<h2 id="heading">変更</h2>
<ul>
<li>バグを修正</li>
</ul>
<h2 id="heading-1">ソースコード</h2>
<p><a href="https://gitler.moe/suwako/urloli">Gitler</a></p>
<h2 id="heading-2">公式インスタンス</h2>
<p><a href="https://urlo.li/">https://urlo.li/</a></p>
<h2 id="heading-3">ダウンロード</h2>
<p><a href="https://gitler.moe/suwako/urloli/releases">リリースページ</a></p>
<h2 id="heading-4">会話</h2>
<h3 id="xmpp">XMPP</h3>
<p><a href="xmpp:urloli@chat.xmpp.076.ne.jp?join">xmpp:urloli@chat.xmpp.076.ne.jp?join</a></p>
<h3 id="irc">IRC</h3>
<p>irc.076.ne.jp/6697<br />
#urloli</p>
<p>以上</p>
blog/digital-autonomy-with-wireguard-home-host.gmi
凛
【デジタル自主】自宅サーバーからWireGuardを使ったホスティング方法
2023-07-03T00:00:00Z
<p>WireGuardは非常に便利ですね。<br />
自宅からウェブサイトをホスティングしたり、どこからでも自宅のサーバーやパソコンにアクセスしたりといった事が可能です。<br />
今回はウェブホスティングの方法についてお伝えします。</p>
<h2 id="heading">材料</h2>
<p>食べ物じゃないけど(ジョーダンダヨー)、必要な物は下記で御座います。</p>
<ul>
<li>好みのVPSホスティング会社から最も安いVPS(日本のOpenBSDサーバーはオススメ、ConoHaまたはVultrは良い)</li>
<li>自宅にあるサーバー(1台でも複数台でも可)</li>
<li>高速光回線インターネット接続</li>
</ul>
<p>静的IPは不要です。<br />
動的IPでも問題がありません。</p>
<p>OS等は何でも良いですが、この記事ではVPSはConoHaのOpenBSDで、自宅サーバーは2台のThinkCentreとOpenBSD、及びNECとFreeBSDを使用しています。<br />
また、どこへでも持ち運べるThinkPad(Artix)というノートパソコンも用いています。<br />
FreeBSDでPeerTubeをインストールし、URLロリはOpenBSDで行い、さまざまな静的なホームページはOpenBSDで実行しています。<br />
インターネット接続サービスは何でも良いですが、高速光回線インターネット接続が推奨されます。</p>
<h2 id="wireguard">WireGuardのインストール</h2>
<table>
<thead>
<tr>
<th>OpenBSD</th>
<th>FreeBSD</th>
<th>Artix (runitの場合)</th>
</tr>
</thead>
<tbody>
<tr>
<td>doas pkg_add wireguard-tools</td>
<td>sudo pkg install wireguard-tools</td>
<td>sudo pacman -S wireguard-tools wireguard-runit</td>
</tr>
</tbody>
</table>
<p>Artixの場合、インストール後に再起動が必要な場合があります。<br />
インストールしたlinux-kernelのバージョンが現在実行中のバージョンと異なると、WireGuardが起動出来なくなります。</p>
<h2 id="wireguard-1">WireGuardの設定</h2>
<h3 id="vps">VPS側</h3>
<pre><code lang="">doas su
mkdir /etc/wireguard
chmod <span style="color:#666">600</span> /etc/wireguard
<span style="color:#a2f">cd</span> /etc/wireguard
wg genkey | tee private.key | wg pubkey > public.key
nvim wg0.conf
</code></pre><pre><code lang="">[Interface]
Address = 192.168.10.1/24
PrivateKey = (VPSのprivate.keyの内容)
ListenPort = 51820
[Peer]
PublicKey = (ThinkPadのpublic.keyの内容)
PreSharedKey = (ThinkPadのpreshared.keyの内容)
AllowedIPs = 192.168.10.100/32
PersistentKeepalive = 25
[Peer]
PublicKey = (ThinkCentreのpublic.keyの内容)
PreSharedKey = (ThinkCentreのpreshared.keyの内容)
AllowedIPs = 192.168.10.101/32
PersistentKeepalive = 25
[Peer]
PublicKey = (NECのpublic.keyの内容)
PreSharedKey = (NECのpreshared.keyの内容)
AllowedIPs = 192.168.10.102/32
PersistentKeepalive = 25
</code></pre><pre><code lang="">nvim /etc/pf.conf
</code></pre><pre><code lang="">set skip on lo
exsrv1 = (VPSのIPアドレス)
insrv1 = 192.168.10.101
insrv2 = 192.168.10.102
block return
pass
pass in on wg0
pass in inet proto udp from any to any port 51820
# PeerTube
pass in inet proto udp from any to $insrv2 port 9000
pass in on egress proto tcp from any to $insrv2 port {1935, 1936} rdr-to $insrv2
# URLロリ
pass in inet proto udp from any to $insrv1 port 9910
# Gemini
pass in on egress proto tcp from any to $insrv1 port { 1965 } rdr-to $insrv1
# HTML
pass out on egress inet from (wg0:network) nat-to (vio0:0)
# SSHはWireGuardネットワーク内のみ許可する
pass in on wg0 proto tcp from 192.168.10.0/24 to any port 22
block in on egress proto tcp from any to any port 22
...
</code></pre><pre><code lang="">pfctl -f /etc/pf.conf
</code></pre><p>最高レベルのセキュリティを保つ為に:</p>
<pre><code lang="">nvim /etc/ssh/sshd_config
</code></pre><pre><code lang="">...
AllowUsers (貴方のユーザー名)@192.168.10.0/24
PermitRootLogin no
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication no
...
</code></pre><pre><code lang=""><span style="color:#a2f">exit</span>
ssh-keygen -t ed25519
<span style="color:#666">(</span>最後までそのままEnterキーを押して<span style="color:#666">)</span>
cat ~/.ssh/id_ed25519.pub
</code></pre><p>出力内容をコピーし、各サーバーとノートパソコンの「~/.ssh/authorized_keys」ファイルに貼り付けて下さい。<br />
次に、上記のステップを各サーバー及びノートパソコンで実行し、その結果をVPSの「/.ssh/authorized_keys」ファイルに貼り付けて下さい。</p>
<pre><code lang="">doas rcctl restart sshd
wg-quick up wg0
</code></pre><h3 id="heading-1">自宅サーバーとノートパソコンの設定</h3>
<p>各デバイスの設定は基本的に同じです。</p>
<pre><code lang="">doas su
mkdir /etc/wireguard
chmod <span style="color:#666">600</span> /etc/wireguard
<span style="color:#a2f">cd</span> /etc/wireguard
wg genkey | tee private.key | wg pubkey > public.key
wg genpsk > preshared.key
nvim wg0.conf
</code></pre><pre><code lang="">[Interface]
PrivateKey = (現在のデバイスのprivate.keyの内容)
Address = 192.168.10.10x/24
[Peer]
PublicKey = (VPSのpublic.keyの内容)
PreSharedKey = (現在のデバイスのpreshared.keyの内容)
Endpoint = (VPSの公開IPアドレス):51820
AllowedIPs = 192.168.10.0/24
PersistentKeepalive = 25
</code></pre><p>Address部分の「x」は、各サーバーで設定した通りです。<br />
この記事では、Artix=0、OpenBSD=1、FreeBSD=2となります。</p>
<h4 id="openbsd">OpenBSDサーバー</h4>
<pre><code lang=""><span style="color:#a2f">cd</span>
wget https://lab.abiscuola.org/gmnxd/tarball/v1.2.0/gmnxd-v1.2.0.tar.gz
tar zxfv gmnxd-v1.2.0.tar.gz
<span style="color:#a2f">cd</span> gmnxd-v1.2.0/src
make
make install
<span style="color:#a2f">cd</span>
useradd -g <span style="color:#b44">'=uid'</span> -L daemon -s /sbin/nologin -c <span style="color:#b44">'Gmnxd user'</span> -d /var/gemini _gmnxd
chown -R _gmnxd:_gmnxd /var/gemini
nvim /etc/inetd.conf
</code></pre><pre><code lang="">0.0.0.0:11965 stream tcp nowait _gmnxd /usr/local/libexec/gmnxd gmnxd
</code></pre><pre><code lang="">rcctl <span style="color:#a2f">enable</span> inetd
rcctl start inetd
nvim /etc/pf.conf
</code></pre><pre><code lang="">set skip on lo
block return
pass
# HTTP
pass in inet proto tcp from any to (self) port {80, 443}
# URLロリ
pass in inet proto tcp from any to (self) port 9910
# Gemini
pass in inet proto tcp from any to (self) port 11965
...
anchor "relayd/*"
</code></pre><pre><code lang="">pfctl -f /etc/pf.conf
wg-quick up wg0
mkdir -p /var/www/htdocs/<span style="color:#666">{</span>076,minmi<span style="color:#666">}</span>.moe/www
mkdir -p /var/gemini/076.moe
<span style="color:#a2f">echo</span> <span style="color:#b44">"わーい"</span> >> /var/www/htdocs/<span style="color:#666">{</span>076,minmi<span style="color:#666">}</span>.moe/www/index.html
<span style="color:#a2f">echo</span> <span style="color:#b44">"わーい"</span> >> /var/gemini/076.moe/index.gmi
nvim /etc/httpd.conf
</code></pre><pre><code lang="">eth_addr=*
wg0_addr=192.168.10.103
## 076.moe
server "076.moe" {
listen on $wg0_addr port 8080
root "/htdocs/076.moe/www"
directory index "index.html"
location "/repo/*" {
directory auto index
}
}
server "l3nbzyxgrkmd46nacmzf2sy6tpjrwh4iv3pgacbrbk72wcgxq5a.b32.i2p" {
listen on $eth_addr port 8450
root "/htdocs/076.moe/www"
directory index "index.html"
location "/repo/*" {
directory auto index
}
}
server "7dt6irsmfvbrtgn4nuah56kky6mvr472fbwwaltuxpf26qdqkdhfvnqd.onion" {
listen on $eth_addr port 8500
root "/htdocs/076.moe/www"
directory index "index.html"
location "/repo/*" {
directory auto index
}
}
## minmi.moe
server "minmi.moe" {
listen on $wg0_addr port 8087
root "/htdocs/minmi.moe/www"
directory index "index.html"
}
</code></pre><pre><code lang="">mkdir -p /var/www/htdocs/urlo.li
<span style="color:#a2f">cd</span> /var/www/htdocs/urlo.li
git clone https://gitler.moe/suwako/urloli.git .
nvim Makefile
</code></pre><p>一部編集は必要となります。</p>
<pre><code lang=""># Linux、Cruxの場合は必須。他のディストリビューションはどうでも良い
#PREFIX=/usr
# FreeBSDとOpenBSD
PREFIX=/usr/local
</code></pre><pre><code lang="">rcctl <span style="color:#a2f">enable</span> httpd
rcctl start httpd
make
make install
nvim /etc/urloli/config.json
</code></pre><pre><code lang="">{
"domain": "https://(ドメイン名)",
"webpath": "/var/www/htdocs/urlo.li"
}
</code></pre><h4 id="freebsd">FreeBSDサーバー</h4>
<p>公式ガイドに従って、nginxとcertbotをインストールが必要とされていますが、今回の場合は不要です。</p>
<pre><code lang="">wg-quick up wg0
pkg install -y sudo bash wget git python pkgconf postgresql13-server postgresql13-contrib redis openssl node npm yarn ffmpeg unzip
visudo
</code></pre><pre><code lang="">%wheel ALL=(ALL) ALL
</code></pre><pre><code lang="">sysrc <span style="color:#b8860b">postgresql_enable</span><span style="color:#666">=</span><span style="color:#b44">"YES"</span>
sysrc <span style="color:#b8860b">redis_enable</span><span style="color:#666">=</span><span style="color:#b44">"YES"</span>
sysrc <span style="color:#b8860b">nginx_enable</span><span style="color:#666">=</span><span style="color:#b44">"YES"</span>
sudo pw useradd -n peertube -d /var/www/peertube -s /usr/local/bin/bash -m
sudo passwd peertube
<span style="color:#a2f">cd</span> /var/www/peertube
sudo -u postgres createuser -P peertube
sudo -u postgres createdb -O peertube -E UTF8 -T template0 peertube_prod
sudo -u postgres psql -c <span style="color:#b44">"CREATE EXTENSION pg_trgm;"</span> peertube_prod
sudo -u postgres psql -c <span style="color:#b44">"CREATE EXTENSION unaccent;"</span> peertube_prod
<span style="color:#b8860b">VERSION</span><span style="color:#666">=</span><span style="color:#a2f;font-weight:bold">$(</span>curl -s https://api.github.com/repos/chocobozzz/peertube/releases/latest | grep tag_name | cut -d <span style="color:#b44">'"'</span> -f 4<span style="color:#a2f;font-weight:bold">)</span> <span style="color:#666">&&</span> <span style="color:#a2f">echo</span> <span style="color:#b44">"Latest Peertube version is </span><span style="color:#b8860b">$VERSION</span><span style="color:#b44">"</span>
<span style="color:#a2f">cd</span> /var/www/peertube
sudo -u peertube mkdir config storage versions
sudo -u peertube chmod <span style="color:#666">750</span> config/
<span style="color:#a2f">cd</span> /var/www/peertube/versions
sudo -u peertube wget -q <span style="color:#b44">"https://github.com/Chocobozzz/PeerTube/releases/download/</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">/peertube-</span><span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span><span style="color:#b44">.zip"</span>
sudo -u peertube unzip -q peertube-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span>.zip <span style="color:#666">&&</span> sudo -u peertube rm peertube-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span>.zip
<span style="color:#a2f">cd</span> /var/www/peertube
sudo -u peertube ln -s versions/peertube-<span style="color:#b68;font-weight:bold">${</span><span style="color:#b8860b">VERSION</span><span style="color:#b68;font-weight:bold">}</span> ./peertube-latest
<span style="color:#a2f">cd</span> ./peertube-latest <span style="color:#666">&&</span> sudo -H -u peertube yarn install --production --pure-lockfile
<span style="color:#a2f">cd</span> /var/www/peertube
sudo -u peertube cp peertube-latest/config/default.yaml config/default.yaml
<span style="color:#a2f">cd</span> /var/www/peertube
sudo -u peertube cp peertube-latest/config/production.yaml.example config/production.yaml
nvim config/production.yaml
</code></pre><pre><code lang="">listen:
hostname: '0.0.0.0'
port: 9000
webserver:
https: true
hostname: '(ドメイン名)'
port: 443
...
</code></pre><pre><code lang="">sudo install -m <span style="color:#666">0555</span> /var/www/peertube/peertube-latest/support/freebsd/peertube /usr/local/etc/rc.d/
sudo sysrc <span style="color:#b8860b">peertube_enable</span><span style="color:#666">=</span><span style="color:#b44">"YES"</span>
sudo service peertube start
</code></pre><h4 id="artix">Artixノートパソコン</h4>
<pre><code lang="">wg-quick up wg0
</code></pre><h3 id="vps-1">再度、VPSの設定</h3>
<pre><code lang="">nvim /etc/acme-client.conf
</code></pre><pre><code lang="">authority letsencrypt {
api url "https://acme-v02.api.letsencrypt.org/directory"
account key "/etc/acme/letsencrypt-privkey.pem"
}
domain 076.moe {
alternative names { www.076.moe }
domain key "/etc/ssl/private/076.moe.key"
domain full chain certificate "/etc/ssl/076.moe.crt"
sign with letsencrypt
}
domain video.076.moe {
domain key "/etc/ssl/private/video.076.moe.key"
domain full chain certificate "/etc/ssl/video.076.moe.crt"
sign with letsencrypt
}
domain urlo.li {
domain key "/etc/ssl/private/urlo.li.key"
domain full chain certificate "/etc/ssl/urlo.li.crt"
sign with letsencrypt
}
domain minmi.moe {
domain key "/etc/ssl/private/minmi.moe.key"
domain full chain certificate "/etc/ssl/minmi.moe.crt"
sign with letsencrypt
}
</code></pre><pre><code lang="">nvim /etc/httpd.conf
</code></pre><pre><code lang="">server "default" {
listen on * port 80
root "/htdocs"
location "/.well-known/acme-challenge/*" {
root "/acme"
request strip 2
}
}
</code></pre><pre><code lang="">nvim /etc/relayd.conf
</code></pre><pre><code lang="">relayd_addr="0.0.0.0"
insrv1_addr="192.168.10.101"
insrv2_addr="192.168.10.102"
table <home> { $insrv1_addr }
table <urloli> { $insrv1_addr }
table <minmi> { $insrv1_addr }
table <video> { $insrv2_addr }
http protocol reverse {
tcp { nodelay, sack }
tls ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
tls keypair "076.moe"
tls keypair "video.076.moe"
tls keypair "urlo.li"
tls keypair "minmi.moe"
match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
match request header append "X-Forwarded-Port" value "$REMOTE_PORT"
match response header set "Referrer-Policy" value "same-origin"
match response header set "X-Frame-Options" value "deny"
match response header set "X-XSS-Protection" value "1; mode=block"
match response header set "X-Content-Type-Options" value "nosniff"
match response header set "Strict-Transport-Security" value "max-age=31536000; includeSubDomains; preload"
match response header set "Cache-Control" value "max-age=86400"
pass request quick header "Host" value "076.moe" forward to <home>
pass request quick header "Host" value "www.076.moe" forward to <home>
pass request quick header "Host" value "video.076.moe" forward to <video>
pass request quick header "Host" value "urlo.li" forward to <urloli>
pass request quick header "Host" value "minmi.moe" forward to <minmi>
return error
pass
}
http protocol reverse80 {
match request header append "X-Forwarded-For" value "$REMOTE_ADDR"
match request header append "X-Forwarded-Port" value "$REMOTE_PORT"
match response header set "Referrer-Policy" value "same-origin"
match response header set "X-Frame-Options" value "deny"
match response header set "X-XSS-Protection" value "1; mode=block"
match response header set "X-Content-Type-Options" value "nosniff"
match response header set "Strict-Transport-Security" value "max-age=31536000; includeSubDomains; preload"
match response header set "Cache-Control" value "max-age=86400"
pass request quick header "Host" value "076.moe" forward to <home>
pass request quick header "Host" value "www.076.moe" forward to <home>
pass request quick header "Host" value "video.076.moe" forward to <video>
pass request quick header "Host" value "urlo.li" forward to <urloli>
pass request quick header "Host" value "minmi.moe" forward to <minmi>
return error
pass
}
protocol gemini {
tcp { nodelay, sack }
tls ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256"
tls keypair "076.moe"
}
relay www_tls {
listen on $relayd_addr port 443 tls
protocol reverse
forward to <video> port 9000 check tcp
forward to <home> port 8080 check tcp
forward to <urloli> port 9910 check tcp
forward to <minmi> port 8087 check tcp
}
relay www_http {
listen on $relayd_addr port 80
protocol reverse80
forward to <video> port 9000 check tcp
forward to <home> port 8080 check tcp
forward to <urloli> port 9910 check tcp
forward to <minmi> port 8087 check tcp
}
relay gemini {
listen on $relayd_addr port 1965 tls
protocol gemini
forward to <home> check tcp port 11965
}
</code></pre><pre><code lang="">rcctl <span style="color:#a2f">enable</span> httpd
rcctl start httpd
acme-client -v 076.moe
acme-client -v video.076.moe
acme-client -v urlo.li
acme-client -v minmi.moe
rcctl <span style="color:#a2f">enable</span> relayd
rcctl start relayd
</code></pre><p>SSL証明書を更新するには、下記のコマンドをVPS上で実行して下さい:</p>
<pre><code lang="">rcctl stop relayd
acme-client -v 076.moe
acme-client -v video.076.moe
acme-client -v urlo.li
acme-client -v minmi.moe
rcctl start relayd
</code></pre><p><img src="https://ass.technicalsuwako.moe/kanrinya.jpg" alt="" /></p>
<p>ねぇー!簡単でしょー!</p>
<p>以上</p>
blog/hozonsite-100.gmi
凛
【076】保存サイト 1.0.0登場
2023-06-23T19:20:00Z
<p>保存サイト は1.0.0にバージョンアップしました!!</p>
<h2 id="heading">保存サイトって何?</h2>
<p>世界初FOSS系ウエブアーカイバーです。</p>
<h2 id="heading-1">変更</h2>
<ul>
<li>PHPからGoに交換しました</li>
<li>今度からバージョンを付きます</li>
</ul>
<h2 id="heading-2">ソースコード</h2>
<p><a href="https://gitler.moe/suwako/hozonsite">Gitler</a><br />
<a href="https://codeberg.org/TechnicalSuwako/hozonsite">Codeberg</a><br />
<a href="https://notabug.org/TechnicalSuwako/hozonsite">Notabug</a><br />
<a href="https://git.disroot.org/TechnicalSuwako/hozonsite">Disroot</a></p>
<h2 id="heading-3">公式インスタンス</h2>
<p><a href="https://hozon.site/">https://hozon.site/</a></p>
<h2 id="heading-4">ダウンロード</h2>
<p><a href="https://gitler.moe/suwako/hozonsite/releases">リリースページ</a></p>
<h2 id="heading-5">会話</h2>
<h3 id="xmpp">XMPP</h3>
<p><a href="xmpp:hozonsite@chat.xmpp.076.ne.jp?join">xmpp:hozonsite@chat.xmpp.076.ne.jp?join</a></p>
<h3 id="irc">IRC</h3>
<p>irc.076.ne.jp/6697<br />
#hozonsite</p>
<p>以上</p>