[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BVYQJRAZPTQHJDHHYWFVKM":3,"skill-same:01M6BVYQJRAZPTQHJDHHYWFVKM":52},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":20,"linkOnly":21,"markdownContent":22,"markdownBody":23,"frontMatter":24,"refName":25,"commitSha":26,"skillDirectory":27,"forksCount":14,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":30,"ownerDescription":6,"updatedAt":31,"install":32,"resources":45},"01M6BVYQJRAZPTQHJDHHYWFVKM","nginx",null,"How nginx is configured and managed for openhands-remote","rbren\u002Fdotfiles","rbren","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F7611973?v=4","01M6BVY4STMZXQPSZ27TYQ01FV","Robert Brennan","01M6BVY4YMQH5QN2CN7C55KNH2",0,"MIT","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fnginx\u002FSKILL.md",[],[5,19],"how","2026-11-10 10:12:30",false,"---\nname: nginx\ndescription: How nginx is configured and managed for openhands-remote\nlicense: MIT\n---\n\nThe nginx config lives in the repo at `\u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf`. It is NOT copied to `\u002Fetc\u002Fnginx\u002F` — nginx is started directly with `-c` pointing at the repo file.\n\n## Commands\n\nTest config for errors:\n```bash\nnginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf -t\n```\n\nStart nginx (if not running):\n```bash\nnginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf\n```\n\nReload after config changes (no downtime):\n```bash\nnginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf -s reload\n```\n\n## Workflow for config changes\n\n1. Edit `\u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf`\n2. Test: `nginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf -t`\n3. Reload: `nginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf -s reload`\n\n## What the config does\n\n- HTTP (port 80): redirects to HTTPS, except `\u002F.well-known\u002Facme-challenge\u002F` (used for Let's Encrypt cert renewal, webroot at `homepage\u002F`)\n- HTTPS (port 443): SSL termination with certs at `\u002Fetc\u002Fletsencrypt\u002Flive\u002Foh.rbren.io\u002F`\n- Cookie-based auth via `auth_request` to auth backend on port 4100 (`apps\u002Fauth\u002Fmain.py`); credentials validated against `\u002Fetc\u002Fnginx\u002F.htpasswd`; `\u002Fauth\u002F` and `\u002Fapps\u002Fsms\u002Fapi\u002F` bypass auth\n- Static routes (`\u002F`, `\u002Fstatus`, `\u002Fassistant`, `\u002Ffiles`, etc.) all serve `homepage\u002Findex.html`\n- Each app is reverse-proxied: `\u002Fapps\u002F\u003Cname>\u002F` → Vite frontend, `\u002Fapps\u002F\u003Cname>\u002Fapi\u002F` → FastAPI backend\n\n## Port assignments\n\n| App       | Frontend | Backend |\n|-----------|----------|---------|\n| status    | 4001     | 4002    |\n| assistant | 4003     | 4004    |\n| files     | 4005     | 4006    |\n| projects  | 4007     | 4008    |\n| secrets   | 4009     | 4010    |\n| scheduled | 4011     | 4012    |\n| terminal  | 4013     | 4014    |\n| skills    | 4015     | 4016    |\n| logs      | 4017     | 4018    |\n| sms       | 4019     | 4020    |\n| hud       | 4021     | —       |\n| code-server| —       | 4050    |\n","The nginx config lives in the repo at `\u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf`. It is NOT copied to `\u002Fetc\u002Fnginx\u002F` — nginx is started directly with `-c` pointing at the repo file.\n\n## Commands\n\nTest config for errors:\n```bash\nnginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf -t\n```\n\nStart nginx (if not running):\n```bash\nnginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf\n```\n\nReload after config changes (no downtime):\n```bash\nnginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf -s reload\n```\n\n## Workflow for config changes\n\n1. Edit `\u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf`\n2. Test: `nginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf -t`\n3. Reload: `nginx -c \u002Froot\u002Fgit\u002Fopenhands-remote\u002Fnginx.conf -s reload`\n\n## What the config does\n\n- HTTP (port 80): redirects to HTTPS, except `\u002F.well-known\u002Facme-challenge\u002F` (used for Let's Encrypt cert renewal, webroot at `homepage\u002F`)\n- HTTPS (port 443): SSL termination with certs at `\u002Fetc\u002Fletsencrypt\u002Flive\u002Foh.rbren.io\u002F`\n- Cookie-based auth via `auth_request` to auth backend on port 4100 (`apps\u002Fauth\u002Fmain.py`); credentials validated against `\u002Fetc\u002Fnginx\u002F.htpasswd`; `\u002Fauth\u002F` and `\u002Fapps\u002Fsms\u002Fapi\u002F` bypass auth\n- Static routes (`\u002F`, `\u002Fstatus`, `\u002Fassistant`, `\u002Ffiles`, etc.) all serve `homepage\u002Findex.html`\n- Each app is reverse-proxied: `\u002Fapps\u002F\u003Cname>\u002F` → Vite frontend, `\u002Fapps\u002F\u003Cname>\u002Fapi\u002F` → FastAPI backend\n\n## Port assignments\n\n| App       | Frontend | Backend |\n|-----------|----------|---------|\n| status    | 4001     | 4002    |\n| assistant | 4003     | 4004    |\n| files     | 4005     | 4006    |\n| projects  | 4007     | 4008    |\n| secrets   | 4009     | 4010    |\n| scheduled | 4011     | 4012    |\n| terminal  | 4013     | 4014    |\n| skills    | 4015     | 4016    |\n| logs      | 4017     | 4018    |\n| sms       | 4019     | 4020    |\n| hud       | 4021     | —       |\n| code-server| —       | 4050    |\n",{"name":5,"license":15,"description":7},"master","290120dc514b6e7b6c945db7354fea3ea80c8c37","skills\u002Fnginx","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles","https:\u002F\u002Fgithub.com\u002Frbren","rbren.io","2026-05-08 00:12:29",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add rbren\u002Fdotfiles --skill nginx",{"tool":38,"command":39},"bunx","bunx skills add rbren\u002Fdotfiles --skill nginx",{"tool":41,"command":42},"pnpm","pnpm dlx skills add rbren\u002Fdotfiles --skill nginx","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fnginx\u002FSKILL.md",true,[46],{"path":47,"resourceType":48,"resourceTypeDesc":49,"sizeBytes":50,"sourceHtmlUrl":51},"references\u002Fdetails.md","REFERENCE","参考文档",2440,"https:\u002F\u002Fgithub.com\u002Fboisenoise\u002Fskills-collections\u002Fblob\u002Fmain\u002Fskills\u002Fantigravity-arm-templates\u002Freferences\u002Fdetails.md",[53,64,83,90,102,112],{"skillNo":54,"name":55,"nameZh":6,"description":56,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":57,"categories":58,"keywords":59,"publishedAt":20},"01M6BVYXK6WJYT8JWSEXTBZWVZ","this-environment","Complete guide to this DigitalOcean droplet running openhands-remote at oh.rbren.io — hardware, networking, apps, auth, DNS, and how to add new things","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fthis-environment\u002FSKILL.md",[],[60,19,61,62,63],"this environment","dns","networking","auth",{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":68,"licenseFileUrl":6,"sourceHtmlUrl":69,"categories":70,"keywords":76,"publishedAt":20},"01M6BVYVK3FQV4GCWKGQKJP9CM","skill-creator","Guide for creating effective skills that extend agent capabilities with specialized knowledge, workflows, or tool integrations. Use when the user wants to create or update a skill.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fskill-creator\u002FSKILL.md",[71],{"categoryNo":72,"categoryName":73,"taxonomyType":74,"taxonomyTypeDesc":75},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[77,78,79,80,81,82],"skill creator","create","knowledge","capabilities","update","workflows",{"skillNo":84,"name":85,"nameZh":6,"description":86,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":20},"01M6BVYTGN4ZG2G4EJ8B45H97H","rethink","When I tell you to rethink, use this skill","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Frethink\u002FSKILL.md",[],[85],{"skillNo":91,"name":92,"nameZh":6,"description":93,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":94,"categories":95,"keywords":96,"publishedAt":20},"01M6BVYRR991NQ2M73JGKA978R","rbren-snippets","The #rbren-snippets Slack channel (ID: C0APBQYQTFV) is Robert's personal scratchpad for thoughts, observations, bug notes, and dev environment updates.","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Frbren-snippets\u002FSKILL.md",[],[97,98,99,100,101],"rbren snippets","dev","notes","slack","personal",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":108,"publishedAt":20},"01M6BVYMRW49R1W71X986J01GW","local-projects","local projects are stored in ~\u002Fgit\u002F","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Flocal-projects\u002FSKILL.md",[],[109,110,111],"projects","local projects","git",{"skillNo":113,"name":114,"nameZh":6,"description":115,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":116,"categories":117,"keywords":118,"publishedAt":20},"01M6BVYJZ4CVXAKXXAGN59YYMR","flargle","this tells you how to flargle","https:\u002F\u002Fgithub.com\u002Frbren\u002Fdotfiles\u002Fblob\u002Fmaster\u002Fskills\u002Fflargle\u002FSKILL.md",[],[114,19]]