[{"data":1,"prerenderedAt":923},["ShallowReactive",2],{"navigation_docs":3,"-deployment-environment-variables":218,"-deployment-environment-variables-surround":918},[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":151,"body":220,"description":909,"extension":910,"links":911,"meta":912,"navigation":913,"path":152,"seo":914,"stem":153,"__hash__":917},"docs\u002F7.deployment\u002F2.environment-variables.md",{"type":221,"value":222,"toc":903},"minimark",[223,227,236,239,244,303,305,309,312,701,703,710,899],[224,225,151],"h1",{"id":226},"environment-variables",[228,229,230,231,235],"p",{},"GO Shortener relies exclusively on environment variables for runtime configuration. These settings are read at startup from the local ",[232,233,234],"code",{},".env"," file located in the working directory.",[237,238],"hr",{},[240,241,243],"h2",{"id":242},"critical-security-warnings","Critical Security Warnings",[245,246,247,254],"caution",{},[228,248,249,253],{},[250,251,252],"strong",{},"Protect Your Configuration & Database",":",[255,256,257,273,281,289],"ul",{},[258,259,260,265,266,268,269,272],"li",{},[250,261,262,264],{},[232,263,234],{}," File",": Never commit ",[232,267,234],{}," files to git or make them accessible via web roots. Lock permissions using ",[232,270,271],{},"chmod 600 \u002Froot\u002FGo-shortner\u002F.env",".",[258,274,275,280],{},[250,276,277],{},[232,278,279],{},"JWT_SECRET",": Must be a cryptographically random string (32+ characters). If compromised, attackers can forge valid session tokens and impersonate administrators.",[258,282,283,288],{},[250,284,285],{},[232,286,287],{},"TURNSTILE_SECRET_KEY",": Keep your Turnstile secret key private. Never share it with users or include it in client scripts.",[258,290,291,294,295,298,299,302],{},[250,292,293],{},"SQLite Database",": Protect ",[232,296,297],{},"\u002Froot\u002FGo-shortner\u002Fdata\u002Fgo.sqlite",". Do not expose this directory to the public internet or make it world-readable (",[232,300,301],{},"chmod 600",").",[237,304],{},[240,306,308],{"id":307},"environment-variables-reference","Environment Variables Reference",[228,310,311],{},"Below is the complete configuration matrix with default behaviors and sample values:",[313,314,315,334],"table",{},[316,317,318],"thead",{},[319,320,321,325,328,331],"tr",{},[322,323,324],"th",{},"Variable",[322,326,327],{},"Description",[322,329,330],{},"Default",[322,332,333],{},"Example Value",[335,336,337,357,376,396,415,435,454,473,492,511,530,550,570,587,606,625,644,663,682],"tbody",{},[319,338,339,345,348,353],{},[340,341,342],"td",{},[232,343,344],{},"PORT",[340,346,347],{},"Local TCP port for the HTTP server",[340,349,350],{},[232,351,352],{},"3000",[340,354,355],{},[232,356,352],{},[319,358,359,364,367,372],{},[340,360,361],{},[232,362,363],{},"HOST",[340,365,366],{},"IP interface to bind to",[340,368,369],{},[232,370,371],{},"127.0.0.1",[340,373,374],{},[232,375,371],{},[319,377,378,383,386,391],{},[340,379,380],{},[232,381,382],{},"BASE_URL",[340,384,385],{},"Canonical public URL used for redirects",[340,387,388],{},[232,389,390],{},"http:\u002F\u002Flocalhost:3000",[340,392,393],{},[232,394,395],{},"https:\u002F\u002Fgo.arcn.online",[319,397,398,403,406,411],{},[340,399,400],{},[232,401,402],{},"DB_PATH",[340,404,405],{},"Absolute path to SQLite database",[340,407,408],{},[232,409,410],{},".\u002Fdata\u002Fgo.sqlite",[340,412,413],{},[232,414,297],{},[319,416,417,421,424,430],{},[340,418,419],{},[232,420,279],{},[340,422,423],{},"Secret key for signing session tokens",[340,425,426],{},[427,428,429],"em",{},"(Auto-generated)",[340,431,432],{},[232,433,434],{},"4f9e8a7b6c5d4e3f2a1b0c9d8e7f6a5b",[319,436,437,442,445,450],{},[340,438,439],{},[232,440,441],{},"SESSION_DURATION_HOURS",[340,443,444],{},"Lifetime of session cookie in hours",[340,446,447],{},[232,448,449],{},"72",[340,451,452],{},[232,453,449],{},[319,455,456,461,464,469],{},[340,457,458],{},[232,459,460],{},"ANONYMOUS_DAILY_QUOTA",[340,462,463],{},"Max links per anonymous IP per 24h",[340,465,466],{},[232,467,468],{},"15",[340,470,471],{},[232,472,468],{},[319,474,475,480,483,488],{},[340,476,477],{},[232,478,479],{},"REGISTERED_MONTHLY_QUOTA",[340,481,482],{},"Max links per user per calendar month",[340,484,485],{},[232,486,487],{},"100",[340,489,490],{},[232,491,487],{},[319,493,494,499,502,507],{},[340,495,496],{},[232,497,498],{},"ANONYMOUS_MAX_EXPIRATION_DAYS",[340,500,501],{},"Maximum link duration for guests",[340,503,504],{},[232,505,506],{},"7",[340,508,509],{},[232,510,506],{},[319,512,513,518,521,526],{},[340,514,515],{},[232,516,517],{},"REGISTERED_MAX_EXPIRATION_DAYS",[340,519,520],{},"Maximum link duration for users",[340,522,523],{},[232,524,525],{},"365",[340,527,528],{},[232,529,525],{},[319,531,532,537,540,545],{},[340,533,534],{},[232,535,536],{},"TURNSTILE_ENABLED",[340,538,539],{},"Toggle Cloudflare Turnstile verification",[340,541,542],{},[232,543,544],{},"false",[340,546,547],{},[232,548,549],{},"true",[319,551,552,557,560,565],{},[340,553,554],{},[232,555,556],{},"TURNSTILE_SITE_KEY",[340,558,559],{},"Public Turnstile site key",[340,561,562],{},[232,563,564],{},"\"\"",[340,566,567],{},[232,568,569],{},"0x4AAAAAA...",[319,571,572,576,579,583],{},[340,573,574],{},[232,575,287],{},[340,577,578],{},"Private Turnstile secret key",[340,580,581],{},[232,582,564],{},[340,584,585],{},[232,586,569],{},[319,588,589,594,597,601],{},[340,590,591],{},[232,592,593],{},"FIREBASE_API_KEY",[340,595,596],{},"Firebase Web App API Key",[340,598,599],{},[232,600,564],{},[340,602,603],{},[232,604,605],{},"AIzaSy...",[319,607,608,613,616,620],{},[340,609,610],{},[232,611,612],{},"FIREBASE_AUTH_DOMAIN",[340,614,615],{},"Firebase Auth Domain",[340,617,618],{},[232,619,564],{},[340,621,622],{},[232,623,624],{},"project.firebaseapp.com",[319,626,627,632,635,639],{},[340,628,629],{},[232,630,631],{},"FIREBASE_PROJECT_ID",[340,633,634],{},"Firebase Project Identifier",[340,636,637],{},[232,638,564],{},[340,640,641],{},[232,642,643],{},"my-go-shortener",[319,645,646,651,654,658],{},[340,647,648],{},[232,649,650],{},"FIREBASE_STORAGE_BUCKET",[340,652,653],{},"Firebase Cloud Storage Bucket",[340,655,656],{},[232,657,564],{},[340,659,660],{},[232,661,662],{},"project.firebasestorage.app",[319,664,665,670,673,677],{},[340,666,667],{},[232,668,669],{},"FIREBASE_MESSAGING_SENDER_ID",[340,671,672],{},"Firebase Sender ID",[340,674,675],{},[232,676,564],{},[340,678,679],{},[232,680,681],{},"1234567890",[319,683,684,689,692,696],{},[340,685,686],{},[232,687,688],{},"FIREBASE_APP_ID",[340,690,691],{},"Firebase Web Application ID",[340,693,694],{},[232,695,564],{},[340,697,698],{},[232,699,700],{},"1:123456:web:abcdef",[237,702],{},[240,704,706,707,709],{"id":705},"example-production-env-template","Example Production ",[232,708,234],{}," Template",[711,712,718],"pre",{"className":713,"code":714,"filename":715,"language":716,"meta":717,"style":717},"language-dotenv shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Network Configuration\nPORT=3000\nHOST=127.0.0.1\nBASE_URL=https:\u002F\u002Fgo.arcn.online\n\n# Database Storage\nDB_PATH=\u002Froot\u002FGo-shortner\u002Fdata\u002Fgo.sqlite\n\n# Cryptographic Secrets\nJWT_SECRET=replace_with_a_secure_random_string_at_least_32_chars\nSESSION_DURATION_HOURS=72\n\n# Quotas & Limits\nANONYMOUS_DAILY_QUOTA=15\nREGISTERED_MONTHLY_QUOTA=100\nANONYMOUS_MAX_EXPIRATION_DAYS=7\nREGISTERED_MAX_EXPIRATION_DAYS=365\n\n# Cloudflare Turnstile (Optional)\nTURNSTILE_ENABLED=false\nTURNSTILE_SITE_KEY=\nTURNSTILE_SECRET_KEY=\n\n# Firebase Google Authentication (Optional)\nFIREBASE_API_KEY=\nFIREBASE_AUTH_DOMAIN=\nFIREBASE_PROJECT_ID=\nFIREBASE_STORAGE_BUCKET=\nFIREBASE_MESSAGING_SENDER_ID=\nFIREBASE_APP_ID=\n","\u002Froot\u002FGo-shortner\u002F.env","dotenv","",[232,719,720,728,734,740,746,753,759,765,770,776,782,788,793,799,805,811,817,823,828,834,840,846,852,857,863,869,875,881,887,893],{"__ignoreMap":717},[721,722,725],"span",{"class":723,"line":724},"line",1,[721,726,727],{},"# Network Configuration\n",[721,729,731],{"class":723,"line":730},2,[721,732,733],{},"PORT=3000\n",[721,735,737],{"class":723,"line":736},3,[721,738,739],{},"HOST=127.0.0.1\n",[721,741,743],{"class":723,"line":742},4,[721,744,745],{},"BASE_URL=https:\u002F\u002Fgo.arcn.online\n",[721,747,749],{"class":723,"line":748},5,[721,750,752],{"emptyLinePlaceholder":751},true,"\n",[721,754,756],{"class":723,"line":755},6,[721,757,758],{},"# Database Storage\n",[721,760,762],{"class":723,"line":761},7,[721,763,764],{},"DB_PATH=\u002Froot\u002FGo-shortner\u002Fdata\u002Fgo.sqlite\n",[721,766,768],{"class":723,"line":767},8,[721,769,752],{"emptyLinePlaceholder":751},[721,771,773],{"class":723,"line":772},9,[721,774,775],{},"# Cryptographic Secrets\n",[721,777,779],{"class":723,"line":778},10,[721,780,781],{},"JWT_SECRET=replace_with_a_secure_random_string_at_least_32_chars\n",[721,783,785],{"class":723,"line":784},11,[721,786,787],{},"SESSION_DURATION_HOURS=72\n",[721,789,791],{"class":723,"line":790},12,[721,792,752],{"emptyLinePlaceholder":751},[721,794,796],{"class":723,"line":795},13,[721,797,798],{},"# Quotas & Limits\n",[721,800,802],{"class":723,"line":801},14,[721,803,804],{},"ANONYMOUS_DAILY_QUOTA=15\n",[721,806,808],{"class":723,"line":807},15,[721,809,810],{},"REGISTERED_MONTHLY_QUOTA=100\n",[721,812,814],{"class":723,"line":813},16,[721,815,816],{},"ANONYMOUS_MAX_EXPIRATION_DAYS=7\n",[721,818,820],{"class":723,"line":819},17,[721,821,822],{},"REGISTERED_MAX_EXPIRATION_DAYS=365\n",[721,824,826],{"class":723,"line":825},18,[721,827,752],{"emptyLinePlaceholder":751},[721,829,831],{"class":723,"line":830},19,[721,832,833],{},"# Cloudflare Turnstile (Optional)\n",[721,835,837],{"class":723,"line":836},20,[721,838,839],{},"TURNSTILE_ENABLED=false\n",[721,841,843],{"class":723,"line":842},21,[721,844,845],{},"TURNSTILE_SITE_KEY=\n",[721,847,849],{"class":723,"line":848},22,[721,850,851],{},"TURNSTILE_SECRET_KEY=\n",[721,853,855],{"class":723,"line":854},23,[721,856,752],{"emptyLinePlaceholder":751},[721,858,860],{"class":723,"line":859},24,[721,861,862],{},"# Firebase Google Authentication (Optional)\n",[721,864,866],{"class":723,"line":865},25,[721,867,868],{},"FIREBASE_API_KEY=\n",[721,870,872],{"class":723,"line":871},26,[721,873,874],{},"FIREBASE_AUTH_DOMAIN=\n",[721,876,878],{"class":723,"line":877},27,[721,879,880],{},"FIREBASE_PROJECT_ID=\n",[721,882,884],{"class":723,"line":883},28,[721,885,886],{},"FIREBASE_STORAGE_BUCKET=\n",[721,888,890],{"class":723,"line":889},29,[721,891,892],{},"FIREBASE_MESSAGING_SENDER_ID=\n",[721,894,896],{"class":723,"line":895},30,[721,897,898],{},"FIREBASE_APP_ID=\n",[900,901,902],"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);}",{"title":717,"searchDepth":730,"depth":730,"links":904},[905,906,907],{"id":242,"depth":730,"text":243},{"id":307,"depth":730,"text":308},{"id":705,"depth":730,"text":908},"Example Production .env Template","Comprehensive production environment variables and security hardening guidelines.","md",null,{},{"icon":154},{"title":915,"description":916},"Environment Variables & Secrets Protection - GO Shortener","Reference guide for production environment variables with critical warnings on protecting secrets and SQLite database files.","zpsJJkzaMJ6-PHaYpuFnUe6IGL4HVwQ_k6X4eTpWwwA",[919,921],{"title":146,"path":147,"stem":148,"description":920,"icon":149,"children":-1},"Complete production deployment guide for an Ubuntu VPS with systemd.",{"title":156,"path":157,"stem":158,"description":922,"icon":159,"children":-1},"Expose GO Shortener securely through go.arcn.online without opening public firewall ports.",1788462428009]