[{"data":1,"prerenderedAt":671},["ShallowReactive",2],{"navigation_docs":3,"-deployment-systemd":218,"-deployment-systemd-surround":666},[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":161,"body":220,"description":657,"extension":658,"links":659,"meta":660,"navigation":661,"path":162,"seo":662,"stem":163,"__hash__":665},"docs\u002F7.deployment\u002F4.systemd.md",{"type":221,"value":222,"toc":650},"minimark",[223,227,235,238,243,250,368,373,434,436,440,447,563,565,569,572,646],[224,225,161],"h1",{"id":226},"systemd",[228,229,230,231,234],"p",{},"GO Shortener runs as a native Linux service managed by ",[232,233,226],"code",{},", ensuring automatic recovery in the event of crashes, system reboots, or server maintenance.",[236,237],"hr",{},[239,240,242],"h2",{"id":241},"service-unit-definition","Service Unit Definition",[228,244,245,246,249],{},"The unit file is located at ",[232,247,248],{},"\u002Fetc\u002Fsystemd\u002Fsystem\u002Fgo-shortener.service",":",[251,252,257],"pre",{"className":253,"code":254,"filename":248,"language":255,"meta":256,"style":256},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Unit]\nDescription=GO Shortener - Minimal High-Performance URL Shortener\nAfter=network.target\n\n[Service]\nType=simple\nUser=root\nWorkingDirectory=\u002Froot\u002FGo-shortner\nExecStart=\u002Froot\u002FGo-shortner\u002Fgo-shortener\nRestart=always\nRestartSec=3\nLimitNOFILE=65535\n\n# Security Hardening\nPrivateTmp=true\n\n[Install]\nWantedBy=multi-user.target\n","ini","",[232,258,259,267,273,279,286,292,298,304,310,316,322,328,334,339,345,351,356,362],{"__ignoreMap":256},[260,261,264],"span",{"class":262,"line":263},"line",1,[260,265,266],{},"[Unit]\n",[260,268,270],{"class":262,"line":269},2,[260,271,272],{},"Description=GO Shortener - Minimal High-Performance URL Shortener\n",[260,274,276],{"class":262,"line":275},3,[260,277,278],{},"After=network.target\n",[260,280,282],{"class":262,"line":281},4,[260,283,285],{"emptyLinePlaceholder":284},true,"\n",[260,287,289],{"class":262,"line":288},5,[260,290,291],{},"[Service]\n",[260,293,295],{"class":262,"line":294},6,[260,296,297],{},"Type=simple\n",[260,299,301],{"class":262,"line":300},7,[260,302,303],{},"User=root\n",[260,305,307],{"class":262,"line":306},8,[260,308,309],{},"WorkingDirectory=\u002Froot\u002FGo-shortner\n",[260,311,313],{"class":262,"line":312},9,[260,314,315],{},"ExecStart=\u002Froot\u002FGo-shortner\u002Fgo-shortener\n",[260,317,319],{"class":262,"line":318},10,[260,320,321],{},"Restart=always\n",[260,323,325],{"class":262,"line":324},11,[260,326,327],{},"RestartSec=3\n",[260,329,331],{"class":262,"line":330},12,[260,332,333],{},"LimitNOFILE=65535\n",[260,335,337],{"class":262,"line":336},13,[260,338,285],{"emptyLinePlaceholder":284},[260,340,342],{"class":262,"line":341},14,[260,343,344],{},"# Security Hardening\n",[260,346,348],{"class":262,"line":347},15,[260,349,350],{},"PrivateTmp=true\n",[260,352,354],{"class":262,"line":353},16,[260,355,285],{"emptyLinePlaceholder":284},[260,357,359],{"class":262,"line":358},17,[260,360,361],{},"[Install]\n",[260,363,365],{"class":262,"line":364},18,[260,366,367],{},"WantedBy=multi-user.target\n",[369,370,372],"h3",{"id":371},"directive-breakdown","Directive Breakdown",[374,375,376,386,402,414,422],"ul",{},[377,378,379,385],"li",{},[380,381,382],"strong",{},[232,383,384],{},"After=network.target",": Delays service startup until server networking interfaces are fully initialized.",[377,387,388,393,394,397,398,401],{},[380,389,390],{},[232,391,392],{},"WorkingDirectory=\u002Froot\u002FGo-shortner",": Sets the root execution context so the binary correctly discovers ",[232,395,396],{},".env"," and ",[232,399,400],{},".\u002Fdata\u002Fgo.sqlite",".",[377,403,404,413],{},[380,405,406,409,410],{},[232,407,408],{},"Restart=always"," & ",[232,411,412],{},"RestartSec=3",": Ensures the service is immediately restarted within 3 seconds if an unexpected panic or termination occurs.",[377,415,416,421],{},[380,417,418],{},[232,419,420],{},"LimitNOFILE=65535",": Increases the maximum file descriptor limit, ensuring high concurrent HTTP connection handling.",[377,423,424,429,430,433],{},[380,425,426],{},[232,427,428],{},"PrivateTmp=true",": Isolates the ",[232,431,432],{},"\u002Ftmp"," directory to protect temporary files from other system processes.",[236,435],{},[239,437,439],{"id":438},"managing-the-service","Managing the Service",[228,441,442,443,446],{},"Use standard ",[232,444,445],{},"systemctl"," commands to control the application:",[251,448,453],{"className":449,"code":450,"filename":451,"language":452,"meta":256,"style":256},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","# Start the service\nsystemctl start go-shortener\n\n# Stop the service\nsystemctl stop go-shortener\n\n# Restart the service (after updating .env or the binary)\nsystemctl restart go-shortener\n\n# Check current runtime status\nsystemctl status go-shortener\n\n# Enable service to start automatically on system boot\nsystemctl enable go-shortener\n\n# Disable auto-start on boot\nsystemctl disable go-shortener\n","Terminal","bash",[232,454,455,461,473,477,482,491,495,500,509,513,518,527,531,536,545,549,554],{"__ignoreMap":256},[260,456,457],{"class":262,"line":263},[260,458,460],{"class":459},"sHwdD","# Start the service\n",[260,462,463,466,470],{"class":262,"line":269},[260,464,445],{"class":465},"sBMFI",[260,467,469],{"class":468},"sfazB"," start",[260,471,472],{"class":468}," go-shortener\n",[260,474,475],{"class":262,"line":275},[260,476,285],{"emptyLinePlaceholder":284},[260,478,479],{"class":262,"line":281},[260,480,481],{"class":459},"# Stop the service\n",[260,483,484,486,489],{"class":262,"line":288},[260,485,445],{"class":465},[260,487,488],{"class":468}," stop",[260,490,472],{"class":468},[260,492,493],{"class":262,"line":294},[260,494,285],{"emptyLinePlaceholder":284},[260,496,497],{"class":262,"line":300},[260,498,499],{"class":459},"# Restart the service (after updating .env or the binary)\n",[260,501,502,504,507],{"class":262,"line":306},[260,503,445],{"class":465},[260,505,506],{"class":468}," restart",[260,508,472],{"class":468},[260,510,511],{"class":262,"line":312},[260,512,285],{"emptyLinePlaceholder":284},[260,514,515],{"class":262,"line":318},[260,516,517],{"class":459},"# Check current runtime status\n",[260,519,520,522,525],{"class":262,"line":324},[260,521,445],{"class":465},[260,523,524],{"class":468}," status",[260,526,472],{"class":468},[260,528,529],{"class":262,"line":330},[260,530,285],{"emptyLinePlaceholder":284},[260,532,533],{"class":262,"line":336},[260,534,535],{"class":459},"# Enable service to start automatically on system boot\n",[260,537,538,540,543],{"class":262,"line":341},[260,539,445],{"class":465},[260,541,542],{"class":468}," enable",[260,544,472],{"class":468},[260,546,547],{"class":262,"line":347},[260,548,285],{"emptyLinePlaceholder":284},[260,550,551],{"class":262,"line":353},[260,552,553],{"class":459},"# Disable auto-start on boot\n",[260,555,556,558,561],{"class":262,"line":358},[260,557,445],{"class":465},[260,559,560],{"class":468}," disable",[260,562,472],{"class":468},[236,564],{},[239,566,568],{"id":567},"inspecting-application-logs","Inspecting Application Logs",[228,570,571],{},"All standard output (stdout) and standard error (stderr) streams from the Go binary are captured by the systemd journal:",[251,573,575],{"className":449,"code":574,"filename":451,"language":452,"meta":256,"style":256},"# Stream live logs in real time\njournalctl -u go-shortener -f\n\n# View the last 100 log entries\njournalctl -u go-shortener -n 100 --no-pager\n\n# View logs generated today\njournalctl -u go-shortener --since today\n",[232,576,577,582,596,600,605,623,627,632],{"__ignoreMap":256},[260,578,579],{"class":262,"line":263},[260,580,581],{"class":459},"# Stream live logs in real time\n",[260,583,584,587,590,593],{"class":262,"line":269},[260,585,586],{"class":465},"journalctl",[260,588,589],{"class":468}," -u",[260,591,592],{"class":468}," go-shortener",[260,594,595],{"class":468}," -f\n",[260,597,598],{"class":262,"line":275},[260,599,285],{"emptyLinePlaceholder":284},[260,601,602],{"class":262,"line":281},[260,603,604],{"class":459},"# View the last 100 log entries\n",[260,606,607,609,611,613,616,620],{"class":262,"line":288},[260,608,586],{"class":465},[260,610,589],{"class":468},[260,612,592],{"class":468},[260,614,615],{"class":468}," -n",[260,617,619],{"class":618},"sbssI"," 100",[260,621,622],{"class":468}," --no-pager\n",[260,624,625],{"class":262,"line":294},[260,626,285],{"emptyLinePlaceholder":284},[260,628,629],{"class":262,"line":300},[260,630,631],{"class":459},"# View logs generated today\n",[260,633,634,636,638,640,643],{"class":262,"line":306},[260,635,586],{"class":465},[260,637,589],{"class":468},[260,639,592],{"class":468},[260,641,642],{"class":468}," --since",[260,644,645],{"class":468}," today\n",[647,648,649],"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 .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":256,"searchDepth":269,"depth":269,"links":651},[652,655,656],{"id":241,"depth":269,"text":242,"children":653},[654],{"id":371,"depth":275,"text":372},{"id":438,"depth":269,"text":439},{"id":567,"depth":269,"text":568},"Manage the GO Shortener background service, auto-restarts, and logs using systemd.","md",null,{},{"icon":164},{"title":663,"description":664},"Systemd Service Guide - GO Shortener","Complete guide to managing GO Shortener as a systemd service, monitoring logs, and configuring auto-restart policies.","n4K-WrG3g9QZ-jpYM5JSzm4qmNkVMEIaO-TooVGtmuU",[667,669],{"title":156,"path":157,"stem":158,"description":668,"icon":159,"children":-1},"Expose GO Shortener securely through go.arcn.online without opening public firewall ports.",{"title":41,"path":166,"stem":167,"description":670,"icon":44,"children":-1},"Production release upgrade procedures, database backup safeguards, and rollbacks.",1788462428269]