[{"data":1,"prerenderedAt":663},["ShallowReactive",2],{"navigation_docs":3,"-docs-installation-10-nginx-https":71,"-docs-installation-10-nginx-https-surround":658},[4,9],{"title":5,"path":6,"stem":7,"icon":8},"Getting Started","\u002Fdocs\u002Fgetting-started","docs\u002FGetting Started","i-lucide-alert-triangle",{"title":10,"path":11,"stem":12,"children":13,"icon":15},"Installation","\u002Fdocs\u002Finstallation","docs\u002Finstallation\u002Findex",[14,16,21,26,31,36,41,46,51,56,61,66],{"title":10,"path":11,"stem":12,"icon":15},"i-lucide-server",{"title":17,"path":18,"stem":19,"icon":20},"Requirements","\u002Fdocs\u002Finstallation\u002F02-requirements","docs\u002Finstallation\u002F02-requirements","i-lucide-list-checks",{"title":22,"path":23,"stem":24,"icon":25},"Install Dependencies","\u002Fdocs\u002Finstallation\u002F03-install-dependencies","docs\u002Finstallation\u002F03-install-dependencies","i-lucide-package",{"title":27,"path":28,"stem":29,"icon":30},"Download Southactyl","\u002Fdocs\u002Finstallation\u002F04-download-southactyl","docs\u002Finstallation\u002F04-download-southactyl","i-lucide-download",{"title":32,"path":33,"stem":34,"icon":35},"Create the Database","\u002Fdocs\u002Finstallation\u002F05-database","docs\u002Finstallation\u002F05-database","i-lucide-database",{"title":37,"path":38,"stem":39,"icon":40},"Configure the Application","\u002Fdocs\u002Finstallation\u002F06-application-config","docs\u002Finstallation\u002F06-application-config","i-lucide-settings",{"title":42,"path":43,"stem":44,"icon":45},"Migrations and Admin User","\u002Fdocs\u002Finstallation\u002F07-migrations-admin","docs\u002Finstallation\u002F07-migrations-admin","i-lucide-user-plus",{"title":47,"path":48,"stem":49,"icon":50},"File Permissions","\u002Fdocs\u002Finstallation\u002F08-permissions","docs\u002Finstallation\u002F08-permissions","i-lucide-lock-keyhole",{"title":52,"path":53,"stem":54,"icon":55},"Scheduler and Queue Worker","\u002Fdocs\u002Finstallation\u002F09-scheduler-queue","docs\u002Finstallation\u002F09-scheduler-queue","i-lucide-timer",{"title":57,"path":58,"stem":59,"icon":60},"NGINX and HTTPS","\u002Fdocs\u002Finstallation\u002F10-nginx-https","docs\u002Finstallation\u002F10-nginx-https","i-lucide-shield-check",{"title":62,"path":63,"stem":64,"icon":65},"Verify and Troubleshoot","\u002Fdocs\u002Finstallation\u002F11-verify-troubleshoot","docs\u002Finstallation\u002F11-verify-troubleshoot","i-lucide-stethoscope",{"title":67,"path":68,"stem":69,"icon":70},"Migrate from Pterodactyl","\u002Fdocs\u002Finstallation\u002F12-migrate-from-pterodactyl","docs\u002Finstallation\u002F12-migrate-from-pterodactyl","i-lucide-git-compare-arrows",{"id":72,"title":57,"body":73,"description":649,"extension":650,"links":651,"meta":652,"navigation":653,"path":58,"seo":654,"stem":59,"__hash__":657},"docs\u002Fdocs\u002Finstallation\u002F10-nginx-https.md",{"type":74,"value":75,"toc":641},"minimark",[76,80,84,89,130,134,156,163,169,173,189,193,206,213,564,568,605,609,616,625,628,637],[77,78,57],"h1",{"id":79},"nginx-and-https",[81,82,83],"p",{},"This example uses NGINX with Let's Encrypt.",[85,86,88],"h2",{"id":87},"install-certbot","Install Certbot",[90,91,97],"pre",{"className":92,"code":93,"filename":94,"language":95,"meta":96,"style":96},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","apt update\napt -y install certbot python3-certbot-nginx\n","Terminal","bash","",[98,99,100,113],"code",{"__ignoreMap":96},[101,102,105,109],"span",{"class":103,"line":104},"line",1,[101,106,108],{"class":107},"sBMFI","apt",[101,110,112],{"class":111},"sfazB"," update\n",[101,114,116,118,121,124,127],{"class":103,"line":115},2,[101,117,108],{"class":107},[101,119,120],{"class":111}," -y",[101,122,123],{"class":111}," install",[101,125,126],{"class":111}," certbot",[101,128,129],{"class":111}," python3-certbot-nginx\n",[85,131,133],{"id":132},"request-a-certificate","Request a certificate",[90,135,137],{"className":92,"code":136,"filename":94,"language":95,"meta":96,"style":96},"certbot certonly --nginx -d panel.example.com\n",[98,138,139],{"__ignoreMap":96},[101,140,141,144,147,150,153],{"class":103,"line":104},[101,142,143],{"class":107},"certbot",[101,145,146],{"class":111}," certonly",[101,148,149],{"class":111}," --nginx",[101,151,152],{"class":111}," -d",[101,154,155],{"class":111}," panel.example.com\n",[81,157,158,159,162],{},"Your domain must point to the server, and port ",[98,160,161],{},"80"," must be reachable.",[164,165,166],"blockquote",{},[81,167,168],{},"Do not enable the SSL NGINX config before the certificate exists. NGINX will fail to start if the certificate paths are missing.",[85,170,172],{"id":171},"remove-the-default-nginx-site","Remove the default NGINX site",[90,174,176],{"className":92,"code":175,"filename":94,"language":95,"meta":96,"style":96},"rm -f \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fdefault\n",[98,177,178],{"__ignoreMap":96},[101,179,180,183,186],{"class":103,"line":104},[101,181,182],{"class":107},"rm",[101,184,185],{"class":111}," -f",[101,187,188],{"class":111}," \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fdefault\n",[85,190,192],{"id":191},"create-the-southactyl-nginx-config","Create the Southactyl NGINX config",[90,194,196],{"className":92,"code":195,"filename":94,"language":95,"meta":96,"style":96},"nano \u002Fetc\u002Fnginx\u002Fsites-available\u002Fsouthactyl.conf\n",[98,197,198],{"__ignoreMap":96},[101,199,200,203],{"class":103,"line":104},[101,201,202],{"class":107},"nano",[101,204,205],{"class":111}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fsouthactyl.conf\n",[81,207,208,209,212],{},"Paste this config and replace ",[98,210,211],{},"panel.example.com",":",[90,214,219],{"className":215,"code":216,"filename":217,"language":218,"meta":96,"style":96},"language-nginx shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","server {\n    listen 80;\n    server_name panel.example.com;\n    return 301 https:\u002F\u002F$server_name$request_uri;\n}\n\nserver {\n    listen 443 ssl http2;\n    server_name panel.example.com;\n\n    root \u002Fvar\u002Fwww\u002Fsouthactyl\u002Fpublic;\n    index index.php;\n\n    access_log \u002Fvar\u002Flog\u002Fnginx\u002Fsouthactyl-access.log;\n    error_log  \u002Fvar\u002Flog\u002Fnginx\u002Fsouthactyl-error.log error;\n\n    client_max_body_size 100m;\n    client_body_timeout 120s;\n\n    sendfile off;\n\n    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fpanel.example.com\u002Ffullchain.pem;\n    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fpanel.example.com\u002Fprivkey.pem;\n    ssl_session_cache shared:SSL:10m;\n    ssl_protocols TLSv1.2 TLSv1.3;\n    ssl_prefer_server_ciphers on;\n\n    add_header X-Content-Type-Options nosniff;\n    add_header X-XSS-Protection \"1; mode=block\";\n    add_header X-Robots-Tag none;\n    add_header Content-Security-Policy \"frame-ancestors 'self'\";\n    add_header X-Frame-Options DENY;\n    add_header Referrer-Policy same-origin;\n\n    location \u002F {\n        try_files $uri $uri\u002F \u002Findex.php?$query_string;\n    }\n\n    location ~ \\.php$ {\n        fastcgi_split_path_info ^(.+\\.php)(\u002F.+)$;\n        fastcgi_pass unix:\u002Frun\u002Fphp\u002Fphp8.3-fpm.sock;\n        fastcgi_index index.php;\n        include fastcgi_params;\n\n        fastcgi_param PHP_VALUE \"upload_max_filesize = 100M \\n post_max_size=100M\";\n        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n        fastcgi_param HTTP_PROXY \"\";\n\n        fastcgi_intercept_errors off;\n        fastcgi_buffer_size 16k;\n        fastcgi_buffers 4 16k;\n        fastcgi_connect_timeout 300;\n        fastcgi_send_timeout 300;\n        fastcgi_read_timeout 300;\n    }\n\n    location ~ \u002F\\.ht {\n        deny all;\n    }\n}\n","\u002Fetc\u002Fnginx\u002Fsites-available\u002Fsouthactyl.conf","nginx",[98,220,221,226,231,237,243,249,256,261,267,272,277,283,289,294,300,306,311,317,323,328,334,339,345,351,357,363,369,374,380,386,392,398,404,410,415,421,427,433,438,444,450,456,462,468,473,479,485,491,496,502,508,514,520,526,532,537,542,548,554,559],{"__ignoreMap":96},[101,222,223],{"class":103,"line":104},[101,224,225],{},"server {\n",[101,227,228],{"class":103,"line":115},[101,229,230],{},"    listen 80;\n",[101,232,234],{"class":103,"line":233},3,[101,235,236],{},"    server_name panel.example.com;\n",[101,238,240],{"class":103,"line":239},4,[101,241,242],{},"    return 301 https:\u002F\u002F$server_name$request_uri;\n",[101,244,246],{"class":103,"line":245},5,[101,247,248],{},"}\n",[101,250,252],{"class":103,"line":251},6,[101,253,255],{"emptyLinePlaceholder":254},true,"\n",[101,257,259],{"class":103,"line":258},7,[101,260,225],{},[101,262,264],{"class":103,"line":263},8,[101,265,266],{},"    listen 443 ssl http2;\n",[101,268,270],{"class":103,"line":269},9,[101,271,236],{},[101,273,275],{"class":103,"line":274},10,[101,276,255],{"emptyLinePlaceholder":254},[101,278,280],{"class":103,"line":279},11,[101,281,282],{},"    root \u002Fvar\u002Fwww\u002Fsouthactyl\u002Fpublic;\n",[101,284,286],{"class":103,"line":285},12,[101,287,288],{},"    index index.php;\n",[101,290,292],{"class":103,"line":291},13,[101,293,255],{"emptyLinePlaceholder":254},[101,295,297],{"class":103,"line":296},14,[101,298,299],{},"    access_log \u002Fvar\u002Flog\u002Fnginx\u002Fsouthactyl-access.log;\n",[101,301,303],{"class":103,"line":302},15,[101,304,305],{},"    error_log  \u002Fvar\u002Flog\u002Fnginx\u002Fsouthactyl-error.log error;\n",[101,307,309],{"class":103,"line":308},16,[101,310,255],{"emptyLinePlaceholder":254},[101,312,314],{"class":103,"line":313},17,[101,315,316],{},"    client_max_body_size 100m;\n",[101,318,320],{"class":103,"line":319},18,[101,321,322],{},"    client_body_timeout 120s;\n",[101,324,326],{"class":103,"line":325},19,[101,327,255],{"emptyLinePlaceholder":254},[101,329,331],{"class":103,"line":330},20,[101,332,333],{},"    sendfile off;\n",[101,335,337],{"class":103,"line":336},21,[101,338,255],{"emptyLinePlaceholder":254},[101,340,342],{"class":103,"line":341},22,[101,343,344],{},"    ssl_certificate \u002Fetc\u002Fletsencrypt\u002Flive\u002Fpanel.example.com\u002Ffullchain.pem;\n",[101,346,348],{"class":103,"line":347},23,[101,349,350],{},"    ssl_certificate_key \u002Fetc\u002Fletsencrypt\u002Flive\u002Fpanel.example.com\u002Fprivkey.pem;\n",[101,352,354],{"class":103,"line":353},24,[101,355,356],{},"    ssl_session_cache shared:SSL:10m;\n",[101,358,360],{"class":103,"line":359},25,[101,361,362],{},"    ssl_protocols TLSv1.2 TLSv1.3;\n",[101,364,366],{"class":103,"line":365},26,[101,367,368],{},"    ssl_prefer_server_ciphers on;\n",[101,370,372],{"class":103,"line":371},27,[101,373,255],{"emptyLinePlaceholder":254},[101,375,377],{"class":103,"line":376},28,[101,378,379],{},"    add_header X-Content-Type-Options nosniff;\n",[101,381,383],{"class":103,"line":382},29,[101,384,385],{},"    add_header X-XSS-Protection \"1; mode=block\";\n",[101,387,389],{"class":103,"line":388},30,[101,390,391],{},"    add_header X-Robots-Tag none;\n",[101,393,395],{"class":103,"line":394},31,[101,396,397],{},"    add_header Content-Security-Policy \"frame-ancestors 'self'\";\n",[101,399,401],{"class":103,"line":400},32,[101,402,403],{},"    add_header X-Frame-Options DENY;\n",[101,405,407],{"class":103,"line":406},33,[101,408,409],{},"    add_header Referrer-Policy same-origin;\n",[101,411,413],{"class":103,"line":412},34,[101,414,255],{"emptyLinePlaceholder":254},[101,416,418],{"class":103,"line":417},35,[101,419,420],{},"    location \u002F {\n",[101,422,424],{"class":103,"line":423},36,[101,425,426],{},"        try_files $uri $uri\u002F \u002Findex.php?$query_string;\n",[101,428,430],{"class":103,"line":429},37,[101,431,432],{},"    }\n",[101,434,436],{"class":103,"line":435},38,[101,437,255],{"emptyLinePlaceholder":254},[101,439,441],{"class":103,"line":440},39,[101,442,443],{},"    location ~ \\.php$ {\n",[101,445,447],{"class":103,"line":446},40,[101,448,449],{},"        fastcgi_split_path_info ^(.+\\.php)(\u002F.+)$;\n",[101,451,453],{"class":103,"line":452},41,[101,454,455],{},"        fastcgi_pass unix:\u002Frun\u002Fphp\u002Fphp8.3-fpm.sock;\n",[101,457,459],{"class":103,"line":458},42,[101,460,461],{},"        fastcgi_index index.php;\n",[101,463,465],{"class":103,"line":464},43,[101,466,467],{},"        include fastcgi_params;\n",[101,469,471],{"class":103,"line":470},44,[101,472,255],{"emptyLinePlaceholder":254},[101,474,476],{"class":103,"line":475},45,[101,477,478],{},"        fastcgi_param PHP_VALUE \"upload_max_filesize = 100M \\n post_max_size=100M\";\n",[101,480,482],{"class":103,"line":481},46,[101,483,484],{},"        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n",[101,486,488],{"class":103,"line":487},47,[101,489,490],{},"        fastcgi_param HTTP_PROXY \"\";\n",[101,492,494],{"class":103,"line":493},48,[101,495,255],{"emptyLinePlaceholder":254},[101,497,499],{"class":103,"line":498},49,[101,500,501],{},"        fastcgi_intercept_errors off;\n",[101,503,505],{"class":103,"line":504},50,[101,506,507],{},"        fastcgi_buffer_size 16k;\n",[101,509,511],{"class":103,"line":510},51,[101,512,513],{},"        fastcgi_buffers 4 16k;\n",[101,515,517],{"class":103,"line":516},52,[101,518,519],{},"        fastcgi_connect_timeout 300;\n",[101,521,523],{"class":103,"line":522},53,[101,524,525],{},"        fastcgi_send_timeout 300;\n",[101,527,529],{"class":103,"line":528},54,[101,530,531],{},"        fastcgi_read_timeout 300;\n",[101,533,535],{"class":103,"line":534},55,[101,536,432],{},[101,538,540],{"class":103,"line":539},56,[101,541,255],{"emptyLinePlaceholder":254},[101,543,545],{"class":103,"line":544},57,[101,546,547],{},"    location ~ \u002F\\.ht {\n",[101,549,551],{"class":103,"line":550},58,[101,552,553],{},"        deny all;\n",[101,555,557],{"class":103,"line":556},59,[101,558,432],{},[101,560,562],{"class":103,"line":561},60,[101,563,248],{},[85,565,567],{"id":566},"enable-the-site","Enable the site",[90,569,571],{"className":92,"code":570,"filename":94,"language":95,"meta":96,"style":96},"ln -s \u002Fetc\u002Fnginx\u002Fsites-available\u002Fsouthactyl.conf \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fsouthactyl.conf\nnginx -t\nsystemctl restart nginx\n",[98,572,573,587,594],{"__ignoreMap":96},[101,574,575,578,581,584],{"class":103,"line":104},[101,576,577],{"class":107},"ln",[101,579,580],{"class":111}," -s",[101,582,583],{"class":111}," \u002Fetc\u002Fnginx\u002Fsites-available\u002Fsouthactyl.conf",[101,585,586],{"class":111}," \u002Fetc\u002Fnginx\u002Fsites-enabled\u002Fsouthactyl.conf\n",[101,588,589,591],{"class":103,"line":115},[101,590,218],{"class":107},[101,592,593],{"class":111}," -t\n",[101,595,596,599,602],{"class":103,"line":233},[101,597,598],{"class":107},"systemctl",[101,600,601],{"class":111}," restart",[101,603,604],{"class":111}," nginx\n",[85,606,608],{"id":607},"php-82-socket","PHP 8.2 socket",[81,610,611,612,615],{},"If you installed PHP ",[98,613,614],{},"8.2",", change this line:",[90,617,619],{"className":215,"code":618,"language":218,"meta":96,"style":96},"fastcgi_pass unix:\u002Frun\u002Fphp\u002Fphp8.3-fpm.sock;\n",[98,620,621],{"__ignoreMap":96},[101,622,623],{"class":103,"line":104},[101,624,618],{},[81,626,627],{},"to:",[90,629,631],{"className":215,"code":630,"language":218,"meta":96,"style":96},"fastcgi_pass unix:\u002Frun\u002Fphp\u002Fphp8.2-fpm.sock;\n",[98,632,633],{"__ignoreMap":96},[101,634,635],{"class":103,"line":104},[101,636,630],{},[638,639,640],"style",{},"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 .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":96,"searchDepth":115,"depth":115,"links":642},[643,644,645,646,647,648],{"id":87,"depth":115,"text":88},{"id":132,"depth":115,"text":133},{"id":171,"depth":115,"text":172},{"id":191,"depth":115,"text":192},{"id":566,"depth":115,"text":567},{"id":607,"depth":115,"text":608},"Configure TLS and NGINX for the Southactyl panel.","md",null,{},{"icon":60},{"title":655,"description":656},"Southactyl NGINX and HTTPS","Configure Certbot, Let's Encrypt, TLS, and NGINX for Southactyl.","OyyVFuKoz7QSGOrhwIIvPyE0pipzNsJ5HgyCEqNwnGU",[659,661],{"title":52,"path":53,"stem":54,"description":660,"icon":55,"children":-1},"Configure cron and systemd queue worker for Southactyl.",{"title":62,"path":63,"stem":64,"description":662,"icon":65,"children":-1},"Verify the Southactyl install and fix common problems.",1777300575684]