[{"data":1,"prerenderedAt":583},["ShallowReactive",2],{"navigation_docs":3,"-getting-started-configuration":218,"-getting-started-configuration-surround":578},[4,20,45,75,95,105,140,168,198],{"title":5,"path":6,"stem":7,"children":8,"page":19},"Introduction","\u002Fintroduction","1.introduction",[9,14],{"title":10,"path":11,"stem":12,"icon":13},"What is GO?","\u002Fintroduction\u002Fwhat-is-go","1.introduction\u002F1.what-is-go","i-lucide-info",{"title":15,"path":16,"stem":17,"icon":18},"Features","\u002Fintroduction\u002Ffeatures","1.introduction\u002F2.features","i-lucide-sparkles",false,{"title":21,"path":22,"stem":23,"children":24,"page":19},"Getting Started","\u002Fgetting-started","2.getting-started",[25,30,35,40],{"title":26,"path":27,"stem":28,"icon":29},"Installation","\u002Fgetting-started\u002Finstallation","2.getting-started\u002F1.installation","i-lucide-download",{"title":31,"path":32,"stem":33,"icon":34},"Configuration","\u002Fgetting-started\u002Fconfiguration","2.getting-started\u002F2.configuration","i-lucide-settings",{"title":36,"path":37,"stem":38,"icon":39},"First Setup","\u002Fgetting-started\u002Ffirst-setup","2.getting-started\u002F3.first-setup","i-lucide-rocket",{"title":41,"path":42,"stem":43,"icon":44},"Updating","\u002Fgetting-started\u002Fupdating","2.getting-started\u002F4.updating","i-lucide-refresh-cw",{"title":46,"icon":19,"path":47,"stem":48,"children":49,"page":19},"User Guide","\u002Fuser-guide","3.user-guide",[50,55,60,65,70],{"title":51,"path":52,"stem":53,"icon":54},"Creating a Short Link","\u002Fuser-guide\u002Fcreating-a-short-link","3.user-guide\u002F1.creating-a-short-link","i-lucide-link",{"title":56,"path":57,"stem":58,"icon":59},"Expiration","\u002Fuser-guide\u002Fexpiration","3.user-guide\u002F2.expiration","i-lucide-clock",{"title":61,"path":62,"stem":63,"icon":64},"Renewing Links","\u002Fuser-guide\u002Frenewing-links","3.user-guide\u002F3.renewing-links","i-lucide-repeat",{"title":66,"path":67,"stem":68,"icon":69},"Dashboard","\u002Fuser-guide\u002Fdashboard","3.user-guide\u002F4.dashboard","i-lucide-layout-dashboard",{"title":71,"path":72,"stem":73,"icon":74},"Analytics","\u002Fuser-guide\u002Fanalytics","3.user-guide\u002F5.analytics","i-lucide-bar-chart-3",{"title":76,"path":77,"stem":78,"children":79,"page":19},"Authentication","\u002Fauthentication","4.authentication",[80,85,90],{"title":81,"path":82,"stem":83,"icon":84},"Email Login","\u002Fauthentication\u002Femail-login","4.authentication\u002F1.email-login","i-lucide-mail",{"title":86,"path":87,"stem":88,"icon":89},"Google Login","\u002Fauthentication\u002Fgoogle-login","4.authentication\u002F2.google-login","i-lucide-globe",{"title":91,"path":92,"stem":93,"icon":94},"Firebase Setup","\u002Fauthentication\u002Ffirebase-setup","4.authentication\u002F3.firebase-setup","i-simple-icons-firebase",{"title":96,"path":97,"stem":98,"children":99,"page":19},"Captcha","\u002Fcaptcha","5.captcha",[100],{"title":101,"path":102,"stem":103,"icon":104},"Cloudflare Turnstile","\u002Fcaptcha\u002Fcloudflare-turnstile","5.captcha\u002F1.cloudflare-turnstile","i-simple-icons-cloudflare",{"title":106,"path":107,"stem":108,"children":109,"page":19},"Administration","\u002Fadministration","6.administration",[110,115,120,125,130,135],{"title":111,"path":112,"stem":113,"icon":114},"Admin Panel","\u002Fadministration\u002Fadmin-panel","6.administration\u002F1.admin-panel","i-lucide-shield",{"title":116,"path":117,"stem":118,"icon":119},"Users","\u002Fadministration\u002Fusers","6.administration\u002F2.users","i-lucide-users",{"title":121,"path":122,"stem":123,"icon":124},"Links","\u002Fadministration\u002Flinks","6.administration\u002F3.links","i-lucide-link-2",{"title":126,"path":127,"stem":128,"icon":129},"Reports","\u002Fadministration\u002Freports","6.administration\u002F4.reports","i-lucide-flag",{"title":131,"path":132,"stem":133,"icon":134},"Bans & Timeouts","\u002Fadministration\u002Fbans-and-timeouts","6.administration\u002F5.bans-and-timeouts","i-lucide-user-x",{"title":136,"path":137,"stem":138,"icon":139},"Audit Logs","\u002Fadministration\u002Faudit-logs","6.administration\u002F6.audit-logs","i-lucide-scroll",{"title":141,"path":142,"stem":143,"children":144,"page":19},"Deployment","\u002Fdeployment","7.deployment",[145,150,155,160,165],{"title":146,"path":147,"stem":148,"icon":149},"VPS Installation","\u002Fdeployment\u002Fvps-installation","7.deployment\u002F1.vps-installation","i-lucide-server",{"title":151,"path":152,"stem":153,"icon":154},"Environment Variables","\u002Fdeployment\u002Fenvironment-variables","7.deployment\u002F2.environment-variables","i-lucide-sliders",{"title":156,"path":157,"stem":158,"icon":159},"Cloudflare Tunnel","\u002Fdeployment\u002Fcloudflare-tunnel","7.deployment\u002F3.cloudflare-tunnel","i-lucide-network",{"title":161,"path":162,"stem":163,"icon":164},"Systemd","\u002Fdeployment\u002Fsystemd","7.deployment\u002F4.systemd","i-lucide-cpu",{"title":41,"path":166,"stem":167,"icon":44},"\u002Fdeployment\u002Fupdating","7.deployment\u002F5.updating",{"title":169,"path":170,"stem":171,"children":172,"page":19},"Developer","\u002Fdeveloper","8.developer",[173,178,183,188,193],{"title":174,"path":175,"stem":176,"icon":177},"Architecture","\u002Fdeveloper\u002Farchitecture","8.developer\u002F1.architecture","i-lucide-box",{"title":179,"path":180,"stem":181,"icon":182},"API Architecture","\u002Fdeveloper\u002Fapi","8.developer\u002F2.api","i-lucide-code-xml",{"title":184,"path":185,"stem":186,"icon":187},"Database","\u002Fdeveloper\u002Fdatabase","8.developer\u002F3.database","i-lucide-database",{"title":189,"path":190,"stem":191,"icon":192},"Development","\u002Fdeveloper\u002Fdevelopment","8.developer\u002F4.development","i-lucide-terminal",{"title":194,"path":195,"stem":196,"icon":197},"Building Releases","\u002Fdeveloper\u002Fbuilding-releases","8.developer\u002F5.building-releases","i-lucide-package-check",{"title":199,"path":200,"stem":201,"children":202,"page":19},"Reference","\u002Freference","9.reference",[203,208,213],{"title":204,"path":205,"stem":206,"icon":207},"Configuration Reference","\u002Freference\u002Fconfiguration","9.reference\u002F1.configuration","i-lucide-file-cog",{"title":209,"path":210,"stem":211,"icon":212},"API Reference","\u002Freference\u002Fapi-reference","9.reference\u002F2.api-reference","i-lucide-webhook",{"title":214,"path":215,"stem":216,"icon":217},"Changelog","\u002Freference\u002Fchangelog","9.reference\u002F3.changelog","i-lucide-history",{"id":219,"title":31,"body":220,"description":569,"extension":570,"links":571,"meta":572,"navigation":573,"path":32,"seo":574,"stem":33,"__hash__":577},"docs\u002F2.getting-started\u002F2.configuration.md",{"type":221,"value":222,"toc":561},"minimark",[223,227,240,251,254,259,336,341,412,414,418,421,460,468,470,474,477,515,517,521,527,557],[224,225,31],"h1",{"id":226},"configuration",[228,229,230,231,235,236,239],"p",{},"GO Shortener is configured exclusively via environment variables loaded from the ",[232,233,234],"code",{},".env"," file located in the working directory (typically ",[232,237,238],{},"\u002Froot\u002FGo-shortner\u002F.env",").",[241,242,243,244,246,247,250],"caution",{},"Never commit your ",[232,245,234],{}," file to public source control or expose it publicly. Restrict access using ",[232,248,249],{},"chmod 600 .env"," so only the owner can read or write to it.",[252,253],"hr",{},[255,256,258],"h2",{"id":257},"core-server-settings","Core Server Settings",[260,261,266],"pre",{"className":262,"code":263,"filename":234,"language":264,"meta":265,"style":265},"language-dotenv shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Network Binding\nPORT=3000\nHOST=127.0.0.1\nBASE_URL=https:\u002F\u002Fgo.arcn.online\n\n# Database Path\nDB_PATH=\u002Froot\u002FGo-shortner\u002Fdata\u002Fgo.sqlite\n\n# Security & Sessions\nJWT_SECRET=your_32_or_64_character_random_hex_string\nSESSION_DURATION_HOURS=72\n","dotenv","",[232,267,268,276,282,288,294,301,307,313,318,324,330],{"__ignoreMap":265},[269,270,273],"span",{"class":271,"line":272},"line",1,[269,274,275],{},"# Network Binding\n",[269,277,279],{"class":271,"line":278},2,[269,280,281],{},"PORT=3000\n",[269,283,285],{"class":271,"line":284},3,[269,286,287],{},"HOST=127.0.0.1\n",[269,289,291],{"class":271,"line":290},4,[269,292,293],{},"BASE_URL=https:\u002F\u002Fgo.arcn.online\n",[269,295,297],{"class":271,"line":296},5,[269,298,300],{"emptyLinePlaceholder":299},true,"\n",[269,302,304],{"class":271,"line":303},6,[269,305,306],{},"# Database Path\n",[269,308,310],{"class":271,"line":309},7,[269,311,312],{},"DB_PATH=\u002Froot\u002FGo-shortner\u002Fdata\u002Fgo.sqlite\n",[269,314,316],{"class":271,"line":315},8,[269,317,300],{"emptyLinePlaceholder":299},[269,319,321],{"class":271,"line":320},9,[269,322,323],{},"# Security & Sessions\n",[269,325,327],{"class":271,"line":326},10,[269,328,329],{},"JWT_SECRET=your_32_or_64_character_random_hex_string\n",[269,331,333],{"class":271,"line":332},11,[269,334,335],{},"SESSION_DURATION_HOURS=72\n",[337,338,340],"h3",{"id":339},"parameters","Parameters",[342,343,344,357,373,385,393,401],"ul",{},[345,346,347,353,354,239],"li",{},[348,349,350],"strong",{},[232,351,352],{},"PORT",": The internal TCP port the HTTP server listens on (default: ",[232,355,356],{},"3000",[345,358,359,364,365,368,369,372],{},[348,360,361],{},[232,362,363],{},"HOST",": IP address to bind to. Set to ",[232,366,367],{},"127.0.0.1"," when proxied by Cloudflare Tunnel or Nginx; use ",[232,370,371],{},"0.0.0.0"," only if directly reachable.",[345,374,375,380,381,384],{},[348,376,377],{},[232,378,379],{},"BASE_URL",": Canonical public URL for generating short links (e.g., ",[232,382,383],{},"https:\u002F\u002Fgo.arcn.online","). Crucial for redirect links and OAuth callbacks.",[345,386,387,392],{},[348,388,389],{},[232,390,391],{},"DB_PATH",": Absolute file path to the SQLite database file.",[345,394,395,400],{},[348,396,397],{},[232,398,399],{},"JWT_SECRET",": Cryptographic secret used for signing HMAC authentication cookies. Must be at least 32 characters long.",[345,402,403,408,409,239],{},[348,404,405],{},[232,406,407],{},"SESSION_DURATION_HOURS",": Validity lifetime of authenticated user session cookies in hours (default: ",[232,410,411],{},"72",[252,413],{},[255,415,417],{"id":416},"quotas-and-lifecycles","Quotas and Lifecycles",[228,419,420],{},"GO enforces separate rate limits and expiration boundaries for anonymous visitors and registered accounts:",[260,422,424],{"className":262,"code":423,"filename":234,"language":264,"meta":265,"style":265},"# Anonymous Quota Limits\nANONYMOUS_DAILY_QUOTA=15\nANONYMOUS_MAX_EXPIRATION_DAYS=7\n\n# Registered User Quota Limits\nREGISTERED_MONTHLY_QUOTA=100\nREGISTERED_MAX_EXPIRATION_DAYS=365\n",[232,425,426,431,436,441,445,450,455],{"__ignoreMap":265},[269,427,428],{"class":271,"line":272},[269,429,430],{},"# Anonymous Quota Limits\n",[269,432,433],{"class":271,"line":278},[269,434,435],{},"ANONYMOUS_DAILY_QUOTA=15\n",[269,437,438],{"class":271,"line":284},[269,439,440],{},"ANONYMOUS_MAX_EXPIRATION_DAYS=7\n",[269,442,443],{"class":271,"line":290},[269,444,300],{"emptyLinePlaceholder":299},[269,446,447],{"class":271,"line":296},[269,448,449],{},"# Registered User Quota Limits\n",[269,451,452],{"class":271,"line":303},[269,453,454],{},"REGISTERED_MONTHLY_QUOTA=100\n",[269,456,457],{"class":271,"line":309},[269,458,459],{},"REGISTERED_MAX_EXPIRATION_DAYS=365\n",[461,462,463,464,467],"note",{},"Changing quota variables affects newly created links immediately upon restarting the service. Existing links maintain their established ",[232,465,466],{},"expires_at"," timestamps.",[252,469],{},[255,471,473],{"id":472},"optional-integrations","Optional Integrations",[228,475,476],{},"GO supports two optional external integrations that can be enabled as needed:",[478,479,480,502],"ol",{},[345,481,482,484,485,488,489,492,493,496,497,501],{},[348,483,101],{},": Set ",[232,486,487],{},"TURNSTILE_ENABLED=true"," and provide ",[232,490,491],{},"TURNSTILE_SITE_KEY"," and ",[232,494,495],{},"TURNSTILE_SECRET_KEY",". See ",[498,499,500],"a",{"href":102},"Cloudflare Turnstile Documentation",".",[345,503,504,507,508,511,512,501],{},[348,505,506],{},"Firebase Google OAuth",": Supply the six ",[232,509,510],{},"FIREBASE_*"," client credentials. See ",[498,513,514],{"href":92},"Firebase Setup Documentation",[252,516],{},[255,518,520],{"id":519},"applying-configuration-changes","Applying Configuration Changes",[228,522,523,524,526],{},"Whenever you edit ",[232,525,238],{},", restart the systemd service to apply the changes:",[260,528,533],{"className":529,"code":530,"filename":531,"language":532,"meta":265,"style":265},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","systemctl restart go-shortener\nsystemctl status go-shortener\n","Terminal","bash",[232,534,535,548],{"__ignoreMap":265},[269,536,537,541,545],{"class":271,"line":272},[269,538,540],{"class":539},"sBMFI","systemctl",[269,542,544],{"class":543},"sfazB"," restart",[269,546,547],{"class":543}," go-shortener\n",[269,549,550,552,555],{"class":271,"line":278},[269,551,540],{"class":539},[269,553,554],{"class":543}," status",[269,556,547],{"class":543},[558,559,560],"style",{},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}",{"title":265,"searchDepth":278,"depth":278,"links":562},[563,566,567,568],{"id":257,"depth":278,"text":258,"children":564},[565],{"id":339,"depth":284,"text":340},{"id":416,"depth":278,"text":417},{"id":472,"depth":278,"text":473},{"id":519,"depth":278,"text":520},"Initial configuration and environment settings for GO Shortener.","md",null,{},{"icon":34},{"title":575,"description":576},"Configuration Guide - GO Shortener","Learn how to configure environment variables, database storage, and operational parameters for GO Shortener.","NJwWOTEuWOUNkMoiR9OeT404Qxh9EK8mCIkEwQVvAU0",[579,581],{"title":26,"path":27,"stem":28,"description":580,"icon":29,"children":-1},"Install GO Shortener on an Ubuntu VPS or standalone Linux host.",{"title":36,"path":37,"stem":38,"description":582,"icon":39,"children":-1},"Initialize GO Shortener, claim the Super Admin role, and complete initial setup.",1788462425844]