27 Commits
Author SHA1 Message Date
monrepo-bot 609da6b6bc chore: update hub to c891439857df 2026-08-14 00:14:22 +00:00
monrepo-bot 402499d109 chore: update hub to bfbfc175ca82 2026-08-13 00:13:26 +00:00
monrepo-bot 1389d5faa3 chore: update hub to b30e6936b1df 2026-08-11 00:12:50 +00:00
monrepo-bot 59e6c5c6a1 chore: update hub to 9ea002a7a10d 2026-08-10 00:24:27 +00:00
monrepo-bot 4f8a975337 chore: update hub to e67db071bb0f 2026-08-10 00:24:15 +00:00
monrepo-bot c251867f05 chore: update hub to 17a785c9d277 2026-08-10 00:18:32 +00:00
monrepo-bot b06cddca4a chore: update hub to 915d8482947a 2026-08-10 00:18:27 +00:00
monrepo-bot 19aface599 chore: update hub to a5bf846e52fd 2026-08-10 00:18:19 +00:00
monrepo-bot 528a109d53 chore: update hub to eb80d4a0fd73 2026-08-07 00:10:49 +00:00
asepharyana 97b635e8c6 firewall: whitelist TCPShield proxy ranges untuk port 25565 (Minecraft) 2026-08-06 20:42:39 +07:00
mytheclipsebotreview[bot] 99e438d9c5 Auto-merge PR #10
chore(deps): bump actions/checkout from 6 to 7 in the github-actions group
2026-08-06 13:28:09 +00:00
dependabot[bot] 8e850f05c4 chore(deps): bump actions/checkout in the github-actions group
Bumps the github-actions group with 1 update: [actions/checkout](https://github.com/actions/checkout).


Updates `actions/checkout` from 6 to 7
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v6...v7)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-version: '7'
  dependency-type: direct:production
  update-type: version-update:semver-major
  dependency-group: github-actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2026-08-06 13:16:00 +00:00
asepharyana 6c2a4fc9d2 fix(infra): sync Caddyfile.prod with live — add dashboard.asepharyana.my.id block
dashboard was proxied via wildcard but missing from live Caddy site
blocks -> Cloudflare 525. Live /etc/caddy/Caddyfile is now the
authoritative copy; repo reference updated to match byte-for-byte so
the drift cannot recur.
2026-08-05 09:44:26 +07:00
Asep Haryana 3e92f68d78 fix(infra): revert imphnen block ke gmw-proxy 4009 (dimentorin gak dipublish via domain ini) 2026-08-04 23:12:02 +07:00
Asep Haryana 2050129062 fix(infra): imphnen site block — SPA :5173 + API /v1 → :4099 (was 525: no block on live caddy) 2026-08-04 22:51:09 +07:00
asepharyana a6148753ca fix(infra): 9router Caddy timeouts — false 504 on slow LLM TTFT
9router combo models (deepseek-v4-flash-free fallback) have TTFT up to
30-40s. Default (proxy) response_header_timeout 30s / read 60s caused
false-positive 504 'timeout awaiting response headers' even while 9router
was processing. Give the 9router route dedicated long timeouts
(response_header 120s, read/write 300s). Syncs /etc/caddy/Caddyfile.
2026-08-04 22:02:09 +07:00
asepharyana d02989f1a7 ci: add Nix GC cleanup job on VPS after deploy 2026-08-04 13:58:10 +07:00
monrepo-bot 6e317eb05a chore: update hub to 55310768a5ac 2026-08-04 02:39:29 +00:00
asepharyana 4e114edb89 chore: update settings.json with new hooks and commands; update .gitignore to include .serena/ directory 2026-08-03 16:49:28 +07:00
aseph 49123c08b3 ci: use free GHA Nix cache (disable FlakeHub cache, not subscribed) 2026-08-03 16:44:32 +07:00
asepharyana 539b5b8320 ci: enable FlakeHub Cache (id-token: write + use-flakehub) 2026-08-03 16:24:48 +07:00
monrepo-bot 39df52aab7 chore: update hub to ad6b1847c563 2026-08-03 09:23:16 +00:00
Asep Haryana b326911478 chore(infra): bump hub flake rev to a90d0c4 (error rate fix) 2026-08-03 13:07:38 +07:00
monrepo-bot 8242325ffd chore: update hub to a90d0c43336a 2026-08-03 06:06:50 +00:00
Asep Haryana c075cf282b fix(infra): correct hub flake rev to 62966fd (full sha) 2026-08-03 12:48:14 +07:00
Asep Haryana 93936efd40 chore(infra): bump hub flake rev to 62966fd (LLM dashboard card) 2026-08-03 12:46:11 +07:00
monrepo-bot 5f66cfc12b chore: update hub to 62966fd7cf45 2026-08-03 05:45:45 +00:00
9 changed files with 135 additions and 30 deletions
+45 -1
View File
@@ -25,5 +25,49 @@
"filePattern": ".claude/skills/deploy-workflow.md",
"description": "CI/CD pipeline, Docker patterns, deployment guide"
}
]
],
"hooks": {
"PreToolUse": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "serena-hooks remind --client=claude-code"
}
]
},
{
"matcher": "mcp__serena__*",
"hooks": [
{
"type": "command",
"command": "serena-hooks auto-approve --client=claude-code"
}
]
}
],
"SessionStart": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "serena-hooks activate --client=claude-code"
}
]
}
],
"SessionEnd": [
{
"matcher": "",
"hooks": [
{
"type": "command",
"command": "serena-hooks cleanup --client=claude-code"
}
]
}
]
}
}
@@ -12,7 +12,7 @@ jobs:
id-token: write
contents: read
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v7
- uses: DeterminateSystems/determinate-nix-action@main
- uses: DeterminateSystems/flakehub-push@main
with:
+22
View File
@@ -14,6 +14,7 @@ concurrency:
permissions:
contents: read
id-token: write
env:
VPS_HOST: ${{ secrets.VPS_HOST }}
@@ -44,6 +45,8 @@ jobs:
- name: Cache Nix
uses: DeterminateSystems/magic-nix-cache-action@v14
with:
use-flakehub: false
- name: Build ${{ matrix.service }}
id: build
@@ -79,3 +82,22 @@ jobs:
ssh "$VPS_USER@$VPS_HOST" "sudo systemctl restart ${{ matrix.service }}" || echo " ⚠️ restart failed (may not be enabled yet)"
echo "✅ ${{ matrix.service }} deployed"
cleanup:
# Bersihkan sampah Nix di VPS SETELAH deploy: hapus generasi profile lama
# + nix store gc. Profil yang sedang dipakai tidak disentuh.
needs: build-and-deploy
if: always()
runs-on: ubuntu-latest
steps:
- name: Nix GC on VPS
env:
VPS_HOST: ${{ secrets.VPS_HOST }}
VPS_USER: ${{ secrets.VPS_USER }}
SSH_KEY: ${{ secrets.SSH_PRIVATE_KEY }}
run: |
mkdir -p ~/.ssh
echo "$SSH_KEY" > ~/.ssh/id_ed25519
chmod 600 ~/.ssh/id_ed25519
ssh-keyscan -H "$VPS_HOST" >> ~/.ssh/known_hosts 2>/dev/null
ssh "$VPS_USER@$VPS_HOST" "sudo /usr/local/bin/nix-gc-vps.sh" || echo "⚠️ Nix GC gagal (non-fatal)"
+1
View File
@@ -11,6 +11,7 @@ node_modules
.turbo/
# IDEs and editors
/.idea
.serena/
.project
.classpath
.c9/
+1 -1
View File
@@ -61,7 +61,7 @@
# ── Fetch submodule source ──
submoduleSrc = name: builtins.fetchGit {
url = submoduleRepos.${name};
rev = if name == "hub" then "6829c7efe2a735d249f5135bff4a0fc28411a295"
rev = if name == "hub" then "a90d0c43336a5f000b5856003d2293c420e7d595"
else if name == "scraper" then "62aa5b0e52859afe3ba9de1c7b11cfe2dacf6c2c"
else if name == "tools" then "3956b90c3ce39ffa7ffba8084937f20e11364d6b"
else if name == "llm-api" then "5f7ead5503082a71d41a36fd1727325c784e4b79"
+37 -18
View File
@@ -40,6 +40,14 @@ asepharyana.my.id, www.asepharyana.my.id, asepharyana.web.id, www.asepharyana.we
}
dashboard.asepharyana.my.id {
import proxy 4013
}
imphnen.asepharyana.my.id {
import proxy 4009
}
scraper.asepharyana.my.id, api.asepharyana.my.id, scraper.asepharyana.web.id, api.asepharyana.web.id {
import proxy 4091
}
@@ -53,7 +61,23 @@ tools.asepharyana.my.id, tools.asepharyana.web.id {
9router.asepharyana.my.id {
# LLM streaming: 9router combo models punya TTFT sampe 30-40s (deepseek,
}
# fallback chain). Default (proxy) response_header_timeout 30s / read 60s
# bikin false-positive 504 walau 9router masih ngolah. Longgarkan khusus
# biar health-check & request PR-Agent real gak kena timeout transient.
encode zstd gzip
header {
-Server
X-Content-Type-Options "nosniff"
}
reverse_proxy 127.0.0.1:4014 {
transport http {
dial_timeout 3s
response_header_timeout 120s
read_timeout 300s
write_timeout 300s
}
}
}
pr-agent.asepharyana.my.id {
import proxy 4002
@@ -80,26 +104,21 @@ ml-zeavisedu.asepharyana.my.id {
}
upload.asepharyana.my.id, upload.asepharyana.web.id {
import proxy 4013
}
imphnen.asepharyana.my.id {
import proxy 4009
}
upload.asepharyana.my.id, upload.asepharyana.web.id {
# Upload/download besar: JANGAN kompres, JANGAN limit body, flush instan (no buffering)
reverse_proxy 127.0.0.1:4000 {
transport http {
keepalive 120s
keepalive_interval 30s
max_conns_per_host 100
dial_timeout 3s
}
flush_interval -1
}
header {
-Server
X-Content-Type-Options "nosniff"
}
request_body {
max_size 0
}
reverse_proxy 127.0.0.1:4000 {
transport http {
dial_timeout 3s
read_timeout 300s
write_timeout 300s
}
flush_interval -1
}
}
}
+26 -7
View File
@@ -2,10 +2,30 @@
# ============================================================
# firewall.sh — deny-by-default firewall untuk orangevps
# Public: 22 (SSH), 80/443 (Caddy), 4013 (hermes dashboard)
# 25565 (Minecraft) — WHITELIST TCPShield proxy only
# Tailscale CGNAT 100.64/10: semua port (imrnes & node lain)
# Localhost: semua
# Sisanya: DROP + log
# ============================================================
# TCPShield proxy ranges (https://tcpshield.com/v4/ + /v4-cf/)
# Update saat TCPShield publish range baru.
TCPSHIELD_V4=(
198.178.119.0/24
104.234.6.0/24
)
TCPSHIELD_V4_CF=(
89.222.122.36/31
152.233.22.8/31
89.222.108.246/31
84.17.55.186/31
51.79.45.52/31
5.135.84.92/30
51.75.35.44/30
51.161.27.110/31
152.233.30.16/31
152.233.30.232/31
203.205.31.160/31
)
set -e
### IPv4 ###
@@ -33,6 +53,10 @@ iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
# Public: hermes dashboard (auth-protected)
iptables -A INPUT -p tcp --dport 4013 -j ACCEPT
# Public: Minecraft (FTB sky) — hanya dari proxy TCPShield
for cidr in "${TCPSHIELD_V4[@]}" "${TCPSHIELD_V4_CF[@]}"; do
iptables -A INPUT -s "$cidr" -p tcp --dport 25565 -j ACCEPT
done
# ICMP (ping, PMTU)
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 5/sec --limit-burst 10 -j ACCEPT
@@ -66,15 +90,10 @@ ip6tables -A INPUT -p tcp --dport 22 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 80 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 443 -j ACCEPT
ip6tables -A INPUT -p tcp --dport 4013 -j ACCEPT
# ICMPv6/MLD: ping + neighbor discovery (NIC multicast ff02::1 = MLDv2 reports
# dari host lain; kena LOG+DROP tiap menit — 1800 baris/6h di journal).
# IPv6 layer-2 discovery WAJIB di-ACCEPT, bukan cuma dropped.
# Minecraft 25565: TCPShield IPv4 only — tidak ada range IPv6 publik
ip6tables -A INPUT -p icmpv6 -j ACCEPT
ip6tables -A INPUT -d ff02::1 -j ACCEPT
ip6tables -A INPUT -d ff02::2 -j ACCEPT
ip6tables -A INPUT -d ff02::fb -j ACCEPT
ip6tables -A INPUT -m limit --limit 5/min --limit-burst 10 -j LOG --log-prefix "FW6-DROP " --log-level 4
ip6tables -A INPUT -j DROP
echo "Firewall applied:"
iptables -L INPUT -n --line-numbers | head -20
iptables -L INPUT -n --line-numbers | head -24