[{"data":1,"prerenderedAt":2274},["ShallowReactive",2],{"navigation_docs":3,"-docs-installation-12-migrate-from-pterodactyl":71,"-docs-installation-12-migrate-from-pterodactyl-surround":2271},[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":67,"body":73,"description":2262,"extension":2263,"links":2264,"meta":2265,"navigation":2266,"path":68,"seo":2267,"stem":69,"__hash__":2270},"docs\u002Fdocs\u002Finstallation\u002F12-migrate-from-pterodactyl.md",{"type":74,"value":75,"toc":2237},"minimark",[76,80,89,101,106,109,149,153,156,179,183,186,206,209,213,216,276,280,303,306,329,339,343,346,387,390,459,462,466,480,483,514,517,521,524,573,576,607,613,635,638,674,683,705,708,750,756,760,763,807,810,822,825,834,839,843,846,857,860,997,1003,1007,1040,1043,1047,1050,1056,1086,1091,1114,1117,1121,1124,1127,1144,1147,1153,1165,1168,1195,1206,1210,1213,1235,1242,1245,1249,1299,1302,1334,1337,1341,1344,1386,1389,1421,1424,1456,1460,1470,1473,1485,1488,1576,1587,1590,1630,1634,1641,1691,1705,1709,1729,1732,1736,1739,1784,1787,1816,1819,1886,1890,1893,1934,1937,1980,1983,2012,2015,2032,2035,2065,2068,2086,2089,2093,2210,2214,2217,2230,2233],[77,78,67],"h1",{"id":79},"migrate-from-pterodactyl",[81,82,83,84,88],"p",{},"Use this guide when you already have a working ",[85,86,87],"strong",{},"Pterodactyl Panel v1"," install and want to move it to Southactyl.",[81,90,91,92,96,97,100],{},"This is not a fresh install. Do not create a new database, do not generate a new ",[93,94,95],"code",{},"APP_KEY",", and do not blindly overwrite ",[93,98,99],{},".env",". That would be a stupid way to turn a migration into data loss.",[102,103,105],"h2",{"id":104},"what-this-migration-keeps","What this migration keeps",[81,107,108],{},"A normal migration keeps your existing:",[110,111,112,116,119,122,125,128,131,134,137,140,145],"ul",{},[113,114,115],"li",{},"Users",[113,117,118],{},"Servers",[113,120,121],{},"Nodes",[113,123,124],{},"Allocations",[113,126,127],{},"Eggs and nests",[113,129,130],{},"API keys",[113,132,133],{},"Database records",[113,135,136],{},"Mail settings",[113,138,139],{},"Panel URL settings",[113,141,142,143],{},"Existing ",[93,144,99],{},[113,146,142,147],{},[93,148,95],{},[102,150,152],{"id":151},"what-this-migration-replaces","What this migration replaces",[81,154,155],{},"The migration replaces or updates panel application files, such as:",[110,157,158,161,164,167,170,173,176],{},[113,159,160],{},"Application source files",[113,162,163],{},"Routes",[113,165,166],{},"Views",[113,168,169],{},"Config files",[113,171,172],{},"Public assets",[113,174,175],{},"Frontend build output",[113,177,178],{},"Composer and frontend dependencies",[102,180,182],{"id":181},"before-you-start","Before you start",[81,184,185],{},"You need:",[110,187,188,191,194,197,200,203],{},[113,189,190],{},"A working Pterodactyl Panel v1 install",[113,192,193],{},"SSH root or sudo access",[113,195,196],{},"Access to the panel database",[113,198,199],{},"The Southactyl release archive",[113,201,202],{},"Enough disk space for a full backup",[113,204,205],{},"A maintenance window",[81,207,208],{},"Do this on a staging copy first if the panel matters. Testing on production first is not confidence; it is gambling.",[102,210,212],{"id":211},"placeholders-used-in-this-guide","Placeholders used in this guide",[81,214,215],{},"Replace these values before running commands:",[217,218,219,232],"table",{},[220,221,222],"thead",{},[223,224,225,229],"tr",{},[226,227,228],"th",{},"Placeholder",[226,230,231],{},"Replace with",[233,234,235,246,256,266],"tbody",{},[223,236,237,243],{},[238,239,240],"td",{},[93,241,242],{},"\u002Fvar\u002Fwww\u002Fpterodactyl",[238,244,245],{},"Your current Pterodactyl panel path",[223,247,248,253],{},[238,249,250],{},[93,251,252],{},"pterodactyl",[238,254,255],{},"Your current database name",[223,257,258,263],{},[238,259,260],{},[93,261,262],{},"panel.example.com",[238,264,265],{},"Your panel domain",[223,267,268,273],{},[238,269,270],{},[93,271,272],{},"https:\u002F\u002Fgithub.com\u002Fsouthactyl\u002Fsouthactyl\u002Freleases\u002Flatest\u002Fdownload\u002Fpanel.tar.gz",[238,274,275],{},"Your real Southactyl release URL",[102,277,279],{"id":278},"_1-enter-the-panel-directory","1) Enter the panel directory",[281,282,288],"pre",{"className":283,"code":284,"filename":285,"language":286,"meta":287,"style":287},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","cd \u002Fvar\u002Fwww\u002Fpterodactyl\n","Terminal","bash","",[93,289,290],{"__ignoreMap":287},[291,292,295,299],"span",{"class":293,"line":294},"line",1,[291,296,298],{"class":297},"s2Zo4","cd",[291,300,302],{"class":301},"sfazB"," \u002Fvar\u002Fwww\u002Fpterodactyl\n",[81,304,305],{},"Confirm this is the right directory:",[281,307,309],{"className":283,"code":308,"filename":285,"language":286,"meta":287,"style":287},"ls -lah artisan .env composer.json\n",[93,310,311],{"__ignoreMap":287},[291,312,313,317,320,323,326],{"class":293,"line":294},[291,314,316],{"class":315},"sBMFI","ls",[291,318,319],{"class":301}," -lah",[291,321,322],{"class":301}," artisan",[291,324,325],{"class":301}," .env",[291,327,328],{"class":301}," composer.json\n",[81,330,331,332,335,336,338],{},"If ",[93,333,334],{},"artisan"," or ",[93,337,99],{}," is missing, you are in the wrong directory. Stop.",[102,340,342],{"id":341},"_2-check-the-current-panel","2) Check the current panel",[81,344,345],{},"Run basic checks before touching anything:",[281,347,349],{"className":283,"code":348,"filename":285,"language":286,"meta":287,"style":287},"php artisan --version\nphp artisan about\nphp -v\ncomposer --version\n",[93,350,351,361,371,379],{"__ignoreMap":287},[291,352,353,356,358],{"class":293,"line":294},[291,354,355],{"class":315},"php",[291,357,322],{"class":301},[291,359,360],{"class":301}," --version\n",[291,362,364,366,368],{"class":293,"line":363},2,[291,365,355],{"class":315},[291,367,322],{"class":301},[291,369,370],{"class":301}," about\n",[291,372,374,376],{"class":293,"line":373},3,[291,375,355],{"class":315},[291,377,378],{"class":301}," -v\n",[291,380,382,385],{"class":293,"line":381},4,[291,383,384],{"class":315},"composer",[291,386,360],{"class":301},[81,388,389],{},"Check the current services:",[281,391,393],{"className":283,"code":392,"filename":285,"language":286,"meta":287,"style":287},"systemctl status nginx || systemctl status apache2\nsystemctl status php8.3-fpm || systemctl status php8.2-fpm\nsystemctl status redis-server\nsystemctl status pteroq || true\n",[93,394,395,418,436,445],{"__ignoreMap":287},[291,396,397,400,403,406,410,413,415],{"class":293,"line":294},[291,398,399],{"class":315},"systemctl",[291,401,402],{"class":301}," status",[291,404,405],{"class":301}," nginx",[291,407,409],{"class":408},"sMK4o"," ||",[291,411,412],{"class":315}," systemctl",[291,414,402],{"class":301},[291,416,417],{"class":301}," apache2\n",[291,419,420,422,424,427,429,431,433],{"class":293,"line":363},[291,421,399],{"class":315},[291,423,402],{"class":301},[291,425,426],{"class":301}," php8.3-fpm",[291,428,409],{"class":408},[291,430,412],{"class":315},[291,432,402],{"class":301},[291,434,435],{"class":301}," php8.2-fpm\n",[291,437,438,440,442],{"class":293,"line":373},[291,439,399],{"class":315},[291,441,402],{"class":301},[291,443,444],{"class":301}," redis-server\n",[291,446,447,449,451,454,456],{"class":293,"line":381},[291,448,399],{"class":315},[291,450,402],{"class":301},[291,452,453],{"class":301}," pteroq",[291,455,409],{"class":408},[291,457,458],{"class":297}," true\n",[81,460,461],{},"If the existing panel is already broken, fix that first. Migrating a broken panel usually gives you a broken Southactyl panel with extra mystery.",[102,463,465],{"id":464},"_3-put-the-panel-in-maintenance-mode","3) Put the panel in maintenance mode",[281,467,469],{"className":283,"code":468,"filename":285,"language":286,"meta":287,"style":287},"php artisan down\n",[93,470,471],{"__ignoreMap":287},[291,472,473,475,477],{"class":293,"line":294},[291,474,355],{"class":315},[291,476,322],{"class":301},[291,478,479],{"class":301}," down\n",[81,481,482],{},"Stop the current queue worker:",[281,484,486],{"className":283,"code":485,"filename":285,"language":286,"meta":287,"style":287},"systemctl stop pteroq || true\nsystemctl stop southactyl-queue || true\n",[93,487,488,501],{"__ignoreMap":287},[291,489,490,492,495,497,499],{"class":293,"line":294},[291,491,399],{"class":315},[291,493,494],{"class":301}," stop",[291,496,453],{"class":301},[291,498,409],{"class":408},[291,500,458],{"class":297},[291,502,503,505,507,510,512],{"class":293,"line":363},[291,504,399],{"class":315},[291,506,494],{"class":301},[291,508,509],{"class":301}," southactyl-queue",[291,511,409],{"class":408},[291,513,458],{"class":297},[81,515,516],{},"Your queue service may use a different name. If it does, stop that service instead.",[102,518,520],{"id":519},"_4-create-a-full-backup","4) Create a full backup",[81,522,523],{},"Create a backup directory:",[281,525,527],{"className":283,"code":526,"filename":285,"language":286,"meta":287,"style":287},"BACKUP_DIR=\"\u002Froot\u002Fpanel-backups\u002F$(date +%F-%H%M%S)\"\nmkdir -p \"$BACKUP_DIR\"\n",[93,528,529,556],{"__ignoreMap":287},[291,530,531,535,538,541,544,547,550,553],{"class":293,"line":294},[291,532,534],{"class":533},"sTEyZ","BACKUP_DIR",[291,536,537],{"class":408},"=",[291,539,540],{"class":408},"\"",[291,542,543],{"class":301},"\u002Froot\u002Fpanel-backups\u002F",[291,545,546],{"class":408},"$(",[291,548,549],{"class":315},"date",[291,551,552],{"class":301}," +%F-%H%M%S",[291,554,555],{"class":408},")\"\n",[291,557,558,561,564,567,570],{"class":293,"line":363},[291,559,560],{"class":315},"mkdir",[291,562,563],{"class":301}," -p",[291,565,566],{"class":408}," \"",[291,568,569],{"class":533},"$BACKUP_DIR",[291,571,572],{"class":408},"\"\n",[81,574,575],{},"Back up the panel files:",[281,577,579],{"className":283,"code":578,"filename":285,"language":286,"meta":287,"style":287},"tar -czf \"$BACKUP_DIR\u002Fpanel-files.tar.gz\" -C \u002Fvar\u002Fwww pterodactyl\n",[93,580,581],{"__ignoreMap":287},[291,582,583,586,589,591,593,596,598,601,604],{"class":293,"line":294},[291,584,585],{"class":315},"tar",[291,587,588],{"class":301}," -czf",[291,590,566],{"class":408},[291,592,569],{"class":533},[291,594,595],{"class":301},"\u002Fpanel-files.tar.gz",[291,597,540],{"class":408},[291,599,600],{"class":301}," -C",[291,602,603],{"class":301}," \u002Fvar\u002Fwww",[291,605,606],{"class":301}," pterodactyl\n",[81,608,609,610,612],{},"Back up ",[93,611,99],{}," separately:",[281,614,616],{"className":283,"code":615,"filename":285,"language":286,"meta":287,"style":287},"cp \u002Fvar\u002Fwww\u002Fpterodactyl\u002F.env \"$BACKUP_DIR\u002F.env\"\n",[93,617,618],{"__ignoreMap":287},[291,619,620,623,626,628,630,633],{"class":293,"line":294},[291,621,622],{"class":315},"cp",[291,624,625],{"class":301}," \u002Fvar\u002Fwww\u002Fpterodactyl\u002F.env",[291,627,566],{"class":408},[291,629,569],{"class":533},[291,631,632],{"class":301},"\u002F.env",[291,634,572],{"class":408},[81,636,637],{},"Back up the database:",[281,639,641],{"className":283,"code":640,"filename":285,"language":286,"meta":287,"style":287},"mysqldump -u root -p --single-transaction pterodactyl > \"$BACKUP_DIR\u002Fdatabase.sql\"\n",[93,642,643],{"__ignoreMap":287},[291,644,645,648,651,654,656,659,662,665,667,669,672],{"class":293,"line":294},[291,646,647],{"class":315},"mysqldump",[291,649,650],{"class":301}," -u",[291,652,653],{"class":301}," root",[291,655,563],{"class":301},[291,657,658],{"class":301}," --single-transaction",[291,660,661],{"class":301}," pterodactyl",[291,663,664],{"class":408}," >",[291,666,566],{"class":408},[291,668,569],{"class":533},[291,670,671],{"class":301},"\u002Fdatabase.sql",[291,673,572],{"class":408},[81,675,676,677,679,680,682],{},"If your database is not named ",[93,678,252],{},", use the value from ",[93,681,99],{},":",[281,684,686],{"className":283,"code":685,"filename":285,"language":286,"meta":287,"style":287},"grep '^DB_DATABASE=' \u002Fvar\u002Fwww\u002Fpterodactyl\u002F.env\n",[93,687,688],{"__ignoreMap":287},[291,689,690,693,696,699,702],{"class":293,"line":294},[291,691,692],{"class":315},"grep",[291,694,695],{"class":408}," '",[291,697,698],{"class":301},"^DB_DATABASE=",[291,700,701],{"class":408},"'",[291,703,704],{"class":301}," \u002Fvar\u002Fwww\u002Fpterodactyl\u002F.env\n",[81,706,707],{},"Back up the application key:",[281,709,711],{"className":283,"code":710,"filename":285,"language":286,"meta":287,"style":287},"grep '^APP_KEY=' \u002Fvar\u002Fwww\u002Fpterodactyl\u002F.env > \"$BACKUP_DIR\u002FAPP_KEY.txt\"\ncat \"$BACKUP_DIR\u002FAPP_KEY.txt\"\n",[93,712,713,737],{"__ignoreMap":287},[291,714,715,717,719,722,724,726,728,730,732,735],{"class":293,"line":294},[291,716,692],{"class":315},[291,718,695],{"class":408},[291,720,721],{"class":301},"^APP_KEY=",[291,723,701],{"class":408},[291,725,625],{"class":301},[291,727,664],{"class":408},[291,729,566],{"class":408},[291,731,569],{"class":533},[291,733,734],{"class":301},"\u002FAPP_KEY.txt",[291,736,572],{"class":408},[291,738,739,742,744,746,748],{"class":293,"line":363},[291,740,741],{"class":315},"cat",[291,743,566],{"class":408},[291,745,569],{"class":533},[291,747,734],{"class":301},[291,749,572],{"class":408},[81,751,752,753,755],{},"Save that key somewhere secure. Losing ",[93,754,95],{}," can make encrypted data unrecoverable.",[102,757,759],{"id":758},"_5-download-southactyl-to-a-temporary-directory","5) Download Southactyl to a temporary directory",[81,761,762],{},"Do not extract the archive directly on top of your live panel. That is sloppy.",[281,764,766],{"className":283,"code":765,"filename":285,"language":286,"meta":287,"style":287},"mkdir -p \u002Ftmp\u002Fsouthactyl-migration\ncd \u002Ftmp\u002Fsouthactyl-migration\ncurl -Lo panel.tar.gz https:\u002F\u002Fgithub.com\u002Fsouthactyl\u002Fsouthactyl\u002Freleases\u002Flatest\u002Fdownload\u002Fpanel.tar.gz\ntar -xzvf panel.tar.gz\n",[93,767,768,777,783,797],{"__ignoreMap":287},[291,769,770,772,774],{"class":293,"line":294},[291,771,560],{"class":315},[291,773,563],{"class":301},[291,775,776],{"class":301}," \u002Ftmp\u002Fsouthactyl-migration\n",[291,778,779,781],{"class":293,"line":363},[291,780,298],{"class":297},[291,782,776],{"class":301},[291,784,785,788,791,794],{"class":293,"line":373},[291,786,787],{"class":315},"curl",[291,789,790],{"class":301}," -Lo",[291,792,793],{"class":301}," panel.tar.gz",[291,795,796],{"class":301}," https:\u002F\u002Fgithub.com\u002Fsouthactyl\u002Fsouthactyl\u002Freleases\u002Flatest\u002Fdownload\u002Fpanel.tar.gz\n",[291,798,799,801,804],{"class":293,"line":381},[291,800,585],{"class":315},[291,802,803],{"class":301}," -xzvf",[291,805,806],{"class":301}," panel.tar.gz\n",[81,808,809],{},"Check the extracted files:",[281,811,813],{"className":283,"code":812,"filename":285,"language":286,"meta":287,"style":287},"ls -lah\n",[93,814,815],{"__ignoreMap":287},[291,816,817,819],{"class":293,"line":294},[291,818,316],{"class":315},[291,820,821],{"class":301}," -lah\n",[81,823,824],{},"You should see files such as:",[281,826,832],{"className":827,"code":829,"filename":830,"language":831,"meta":287},[828],"language-text","artisan\napp\nbootstrap\nconfig\ndatabase\npublic\nresources\nroutes\nstorage\ncomposer.json\n","Output","text",[93,833,829],{"__ignoreMap":287},[81,835,331,836,838],{},[93,837,334],{}," is missing, you downloaded the wrong archive or extracted it wrong.",[102,840,842],{"id":841},"_6-overlay-southactyl-files-onto-pterodactyl","6) Overlay Southactyl files onto Pterodactyl",[81,844,845],{},"Return to the temporary release directory:",[281,847,849],{"className":283,"code":848,"filename":285,"language":286,"meta":287,"style":287},"cd \u002Ftmp\u002Fsouthactyl-migration\n",[93,850,851],{"__ignoreMap":287},[291,852,853,855],{"class":293,"line":294},[291,854,298],{"class":297},[291,856,776],{"class":301},[81,858,859],{},"Copy Southactyl over the existing panel while preserving critical local data:",[281,861,863],{"className":283,"code":862,"filename":285,"language":286,"meta":287,"style":287},"rsync -a --delete \\\n  --exclude='.env' \\\n  --exclude='storage\u002Fapp' \\\n  --exclude='storage\u002Flogs' \\\n  --exclude='storage\u002Fframework\u002Fcache\u002F*' \\\n  --exclude='storage\u002Fframework\u002Fsessions\u002F*' \\\n  --exclude='storage\u002Fframework\u002Fviews\u002F*' \\\n  --exclude='node_modules' \\\n  --exclude='vendor' \\\n  .\u002F \u002Fvar\u002Fwww\u002Fpterodactyl\u002F\n",[93,864,865,879,892,905,918,932,946,960,974,988],{"__ignoreMap":287},[291,866,867,870,873,876],{"class":293,"line":294},[291,868,869],{"class":315},"rsync",[291,871,872],{"class":301}," -a",[291,874,875],{"class":301}," --delete",[291,877,878],{"class":533}," \\\n",[291,880,881,884,886,888,890],{"class":293,"line":363},[291,882,883],{"class":301},"  --exclude=",[291,885,701],{"class":408},[291,887,99],{"class":301},[291,889,701],{"class":408},[291,891,878],{"class":533},[291,893,894,896,898,901,903],{"class":293,"line":373},[291,895,883],{"class":301},[291,897,701],{"class":408},[291,899,900],{"class":301},"storage\u002Fapp",[291,902,701],{"class":408},[291,904,878],{"class":533},[291,906,907,909,911,914,916],{"class":293,"line":381},[291,908,883],{"class":301},[291,910,701],{"class":408},[291,912,913],{"class":301},"storage\u002Flogs",[291,915,701],{"class":408},[291,917,878],{"class":533},[291,919,921,923,925,928,930],{"class":293,"line":920},5,[291,922,883],{"class":301},[291,924,701],{"class":408},[291,926,927],{"class":301},"storage\u002Fframework\u002Fcache\u002F*",[291,929,701],{"class":408},[291,931,878],{"class":533},[291,933,935,937,939,942,944],{"class":293,"line":934},6,[291,936,883],{"class":301},[291,938,701],{"class":408},[291,940,941],{"class":301},"storage\u002Fframework\u002Fsessions\u002F*",[291,943,701],{"class":408},[291,945,878],{"class":533},[291,947,949,951,953,956,958],{"class":293,"line":948},7,[291,950,883],{"class":301},[291,952,701],{"class":408},[291,954,955],{"class":301},"storage\u002Fframework\u002Fviews\u002F*",[291,957,701],{"class":408},[291,959,878],{"class":533},[291,961,963,965,967,970,972],{"class":293,"line":962},8,[291,964,883],{"class":301},[291,966,701],{"class":408},[291,968,969],{"class":301},"node_modules",[291,971,701],{"class":408},[291,973,878],{"class":533},[291,975,977,979,981,984,986],{"class":293,"line":976},9,[291,978,883],{"class":301},[291,980,701],{"class":408},[291,982,983],{"class":301},"vendor",[291,985,701],{"class":408},[291,987,878],{"class":533},[291,989,991,994],{"class":293,"line":990},10,[291,992,993],{"class":301},"  .\u002F",[291,995,996],{"class":301}," \u002Fvar\u002Fwww\u002Fpterodactyl\u002F\n",[81,998,999,1000,1002],{},"This keeps your ",[93,1001,99],{},", uploaded application storage, and logs while replacing the panel code.",[102,1004,1006],{"id":1005},"_7-install-backend-dependencies","7) Install backend dependencies",[281,1008,1010],{"className":283,"code":1009,"filename":285,"language":286,"meta":287,"style":287},"cd \u002Fvar\u002Fwww\u002Fpterodactyl\nCOMPOSER_ALLOW_SUPERUSER=1 composer install --no-dev --optimize-autoloader\n",[93,1011,1012,1018],{"__ignoreMap":287},[291,1013,1014,1016],{"class":293,"line":294},[291,1015,298],{"class":297},[291,1017,302],{"class":301},[291,1019,1020,1023,1025,1028,1031,1034,1037],{"class":293,"line":363},[291,1021,1022],{"class":533},"COMPOSER_ALLOW_SUPERUSER",[291,1024,537],{"class":408},[291,1026,1027],{"class":301},"1",[291,1029,1030],{"class":315}," composer",[291,1032,1033],{"class":301}," install",[291,1035,1036],{"class":301}," --no-dev",[291,1038,1039],{"class":301}," --optimize-autoloader\n",[81,1041,1042],{},"If Composer fails, do not keep going. Fix the dependency error first.",[102,1044,1046],{"id":1045},"_8-install-frontend-dependencies-and-build-assets","8) Install frontend dependencies and build assets",[81,1048,1049],{},"Use the package manager your release provides.",[81,1051,1052,1053,682],{},"If the release has ",[93,1054,1055],{},"yarn.lock",[281,1057,1059],{"className":283,"code":1058,"filename":285,"language":286,"meta":287,"style":287},"corepack enable\nyarn install --frozen-lockfile\nyarn build:production\n",[93,1060,1061,1069,1079],{"__ignoreMap":287},[291,1062,1063,1066],{"class":293,"line":294},[291,1064,1065],{"class":315},"corepack",[291,1067,1068],{"class":301}," enable\n",[291,1070,1071,1074,1076],{"class":293,"line":363},[291,1072,1073],{"class":315},"yarn",[291,1075,1033],{"class":301},[291,1077,1078],{"class":301}," --frozen-lockfile\n",[291,1080,1081,1083],{"class":293,"line":373},[291,1082,1073],{"class":315},[291,1084,1085],{"class":301}," build:production\n",[81,1087,1052,1088,682],{},[93,1089,1090],{},"package-lock.json",[281,1092,1094],{"className":283,"code":1093,"filename":285,"language":286,"meta":287,"style":287},"npm ci\nnpm run build\n",[93,1095,1096,1104],{"__ignoreMap":287},[291,1097,1098,1101],{"class":293,"line":294},[291,1099,1100],{"class":315},"npm",[291,1102,1103],{"class":301}," ci\n",[291,1105,1106,1108,1111],{"class":293,"line":363},[291,1107,1100],{"class":315},[291,1109,1110],{"class":301}," run",[291,1112,1113],{"class":301}," build\n",[81,1115,1116],{},"If Southactyl ships prebuilt assets and has no frontend build step, skip this section.",[102,1118,1120],{"id":1119},"_9-update-environment-values-only-if-needed","9) Update environment values only if needed",[81,1122,1123],{},"Do not generate a new key.",[81,1125,1126],{},"Bad command during migration:",[281,1128,1130],{"className":283,"code":1129,"filename":285,"language":286,"meta":287,"style":287},"php artisan key:generate --force\n",[93,1131,1132],{"__ignoreMap":287},[291,1133,1134,1136,1138,1141],{"class":293,"line":294},[291,1135,355],{"class":315},[291,1137,322],{"class":301},[291,1139,1140],{"class":301}," key:generate",[291,1142,1143],{"class":301}," --force\n",[81,1145,1146],{},"Do not run that. It can invalidate encrypted data.",[81,1148,1149,1150,1152],{},"Only update ",[93,1151,99],{}," if your domain or driver settings changed:",[281,1154,1156],{"className":283,"code":1155,"filename":285,"language":286,"meta":287,"style":287},"nano \u002Fvar\u002Fwww\u002Fpterodactyl\u002F.env\n",[93,1157,1158],{"__ignoreMap":287},[291,1159,1160,1163],{"class":293,"line":294},[291,1161,1162],{"class":315},"nano",[291,1164,704],{"class":301},[81,1166,1167],{},"Recommended values:",[281,1169,1173],{"className":1170,"code":1171,"filename":99,"language":1172,"meta":287,"style":287},"language-env shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","APP_URL=https:\u002F\u002Fpanel.example.com\nCACHE_DRIVER=redis\nSESSION_DRIVER=redis\nQUEUE_CONNECTION=redis\n","env",[93,1174,1175,1180,1185,1190],{"__ignoreMap":287},[291,1176,1177],{"class":293,"line":294},[291,1178,1179],{},"APP_URL=https:\u002F\u002Fpanel.example.com\n",[291,1181,1182],{"class":293,"line":363},[291,1183,1184],{},"CACHE_DRIVER=redis\n",[291,1186,1187],{"class":293,"line":373},[291,1188,1189],{},"SESSION_DRIVER=redis\n",[291,1191,1192],{"class":293,"line":381},[291,1193,1194],{},"QUEUE_CONNECTION=redis\n",[81,1196,1197,1198,1201,1202,1205],{},"Some older installs may use ",[93,1199,1200],{},"QUEUE_DRIVER"," instead of ",[93,1203,1204],{},"QUEUE_CONNECTION",". Use whatever your codebase expects.",[102,1207,1209],{"id":1208},"_10-run-migrations","10) Run migrations",[81,1211,1212],{},"Run migrations against the existing database:",[281,1214,1216],{"className":283,"code":1215,"filename":285,"language":286,"meta":287,"style":287},"cd \u002Fvar\u002Fwww\u002Fpterodactyl\nphp artisan migrate --force\n",[93,1217,1218,1224],{"__ignoreMap":287},[291,1219,1220,1222],{"class":293,"line":294},[291,1221,298],{"class":297},[291,1223,302],{"class":301},[291,1225,1226,1228,1230,1233],{"class":293,"line":363},[291,1227,355],{"class":315},[291,1229,322],{"class":301},[291,1231,1232],{"class":301}," migrate",[291,1234,1143],{"class":301},[81,1236,1237,1238,1241],{},"Do not run ",[93,1239,1240],{},"migrate:fresh",". That destroys tables.",[81,1243,1244],{},"Do not create a new admin user unless you actually need one. Your existing admin users should remain.",[102,1246,1248],{"id":1247},"_11-clear-and-rebuild-caches","11) Clear and rebuild caches",[281,1250,1252],{"className":283,"code":1251,"filename":285,"language":286,"meta":287,"style":287},"php artisan optimize:clear\nphp artisan config:clear\nphp artisan route:clear\nphp artisan view:clear\nphp artisan cache:clear\n",[93,1253,1254,1263,1272,1281,1290],{"__ignoreMap":287},[291,1255,1256,1258,1260],{"class":293,"line":294},[291,1257,355],{"class":315},[291,1259,322],{"class":301},[291,1261,1262],{"class":301}," optimize:clear\n",[291,1264,1265,1267,1269],{"class":293,"line":363},[291,1266,355],{"class":315},[291,1268,322],{"class":301},[291,1270,1271],{"class":301}," config:clear\n",[291,1273,1274,1276,1278],{"class":293,"line":373},[291,1275,355],{"class":315},[291,1277,322],{"class":301},[291,1279,1280],{"class":301}," route:clear\n",[291,1282,1283,1285,1287],{"class":293,"line":381},[291,1284,355],{"class":315},[291,1286,322],{"class":301},[291,1288,1289],{"class":301}," view:clear\n",[291,1291,1292,1294,1296],{"class":293,"line":920},[291,1293,355],{"class":315},[291,1295,322],{"class":301},[291,1297,1298],{"class":301}," cache:clear\n",[81,1300,1301],{},"Then rebuild optimized caches:",[281,1303,1305],{"className":283,"code":1304,"filename":285,"language":286,"meta":287,"style":287},"php artisan config:cache\nphp artisan route:cache\nphp artisan view:cache\n",[93,1306,1307,1316,1325],{"__ignoreMap":287},[291,1308,1309,1311,1313],{"class":293,"line":294},[291,1310,355],{"class":315},[291,1312,322],{"class":301},[291,1314,1315],{"class":301}," config:cache\n",[291,1317,1318,1320,1322],{"class":293,"line":363},[291,1319,355],{"class":315},[291,1321,322],{"class":301},[291,1323,1324],{"class":301}," route:cache\n",[291,1326,1327,1329,1331],{"class":293,"line":373},[291,1328,355],{"class":315},[291,1330,322],{"class":301},[291,1332,1333],{"class":301}," view:cache\n",[81,1335,1336],{},"If one cache command fails because of a route or config issue, fix the error before continuing.",[102,1338,1340],{"id":1339},"_12-fix-ownership-and-permissions","12) Fix ownership and permissions",[81,1342,1343],{},"For Debian or Ubuntu:",[281,1345,1347],{"className":283,"code":1346,"filename":285,"language":286,"meta":287,"style":287},"chown -R www-data:www-data \u002Fvar\u002Fwww\u002Fpterodactyl\u002F*\nchmod -R 755 \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fstorage\u002F* \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fbootstrap\u002Fcache\u002F\n",[93,1348,1349,1366],{"__ignoreMap":287},[291,1350,1351,1354,1357,1360,1363],{"class":293,"line":294},[291,1352,1353],{"class":315},"chown",[291,1355,1356],{"class":301}," -R",[291,1358,1359],{"class":301}," www-data:www-data",[291,1361,1362],{"class":301}," \u002Fvar\u002Fwww\u002Fpterodactyl\u002F",[291,1364,1365],{"class":533},"*\n",[291,1367,1368,1371,1373,1377,1380,1383],{"class":293,"line":363},[291,1369,1370],{"class":315},"chmod",[291,1372,1356],{"class":301},[291,1374,1376],{"class":1375},"sbssI"," 755",[291,1378,1379],{"class":301}," \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fstorage\u002F",[291,1381,1382],{"class":533},"*",[291,1384,1385],{"class":301}," \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fbootstrap\u002Fcache\u002F\n",[81,1387,1388],{},"For Rocky, AlmaLinux, or RHEL with NGINX:",[281,1390,1392],{"className":283,"code":1391,"filename":285,"language":286,"meta":287,"style":287},"chown -R nginx:nginx \u002Fvar\u002Fwww\u002Fpterodactyl\u002F*\nchmod -R 755 \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fstorage\u002F* \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fbootstrap\u002Fcache\u002F\n",[93,1393,1394,1407],{"__ignoreMap":287},[291,1395,1396,1398,1400,1403,1405],{"class":293,"line":294},[291,1397,1353],{"class":315},[291,1399,1356],{"class":301},[291,1401,1402],{"class":301}," nginx:nginx",[291,1404,1362],{"class":301},[291,1406,1365],{"class":533},[291,1408,1409,1411,1413,1415,1417,1419],{"class":293,"line":363},[291,1410,1370],{"class":315},[291,1412,1356],{"class":301},[291,1414,1376],{"class":1375},[291,1416,1379],{"class":301},[291,1418,1382],{"class":533},[291,1420,1385],{"class":301},[81,1422,1423],{},"For Rocky, AlmaLinux, or RHEL with Apache:",[281,1425,1427],{"className":283,"code":1426,"filename":285,"language":286,"meta":287,"style":287},"chown -R apache:apache \u002Fvar\u002Fwww\u002Fpterodactyl\u002F*\nchmod -R 755 \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fstorage\u002F* \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fbootstrap\u002Fcache\u002F\n",[93,1428,1429,1442],{"__ignoreMap":287},[291,1430,1431,1433,1435,1438,1440],{"class":293,"line":294},[291,1432,1353],{"class":315},[291,1434,1356],{"class":301},[291,1436,1437],{"class":301}," apache:apache",[291,1439,1362],{"class":301},[291,1441,1365],{"class":533},[291,1443,1444,1446,1448,1450,1452,1454],{"class":293,"line":363},[291,1445,1370],{"class":315},[291,1447,1356],{"class":301},[291,1449,1376],{"class":1375},[291,1451,1379],{"class":301},[291,1453,1382],{"class":533},[291,1455,1385],{"class":301},[102,1457,1459],{"id":1458},"_13-update-the-queue-worker-name-if-wanted","13) Update the queue worker name if wanted",[81,1461,1462,1463,1466,1467,1469],{},"If your existing ",[93,1464,1465],{},"pteroq"," service works and points to the correct ",[93,1468,334],{}," path, you can keep it.",[81,1471,1472],{},"If you want a Southactyl-branded service, create this file:",[281,1474,1476],{"className":283,"code":1475,"filename":285,"language":286,"meta":287,"style":287},"nano \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsouthactyl-queue.service\n",[93,1477,1478],{"__ignoreMap":287},[291,1479,1480,1482],{"class":293,"line":294},[291,1481,1162],{"class":315},[291,1483,1484],{"class":301}," \u002Fetc\u002Fsystemd\u002Fsystem\u002Fsouthactyl-queue.service\n",[81,1486,1487],{},"Paste:",[281,1489,1494],{"className":1490,"code":1491,"filename":1492,"language":1493,"meta":287,"style":287},"language-ini shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","[Unit]\nDescription=Southactyl Queue Worker\nAfter=redis-server.service\n\n[Service]\nUser=www-data\nGroup=www-data\nRestart=always\nExecStart=\u002Fusr\u002Fbin\u002Fphp \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fartisan queue:work --queue=high,standard,low --sleep=3 --tries=3\nStartLimitInterval=180\nStartLimitBurst=30\nRestartSec=5s\n\n[Install]\nWantedBy=multi-user.target\n","\u002Fetc\u002Fsystemd\u002Fsystem\u002Fsouthactyl-queue.service","ini",[93,1495,1496,1501,1506,1511,1517,1522,1527,1532,1537,1542,1547,1553,1559,1564,1570],{"__ignoreMap":287},[291,1497,1498],{"class":293,"line":294},[291,1499,1500],{},"[Unit]\n",[291,1502,1503],{"class":293,"line":363},[291,1504,1505],{},"Description=Southactyl Queue Worker\n",[291,1507,1508],{"class":293,"line":373},[291,1509,1510],{},"After=redis-server.service\n",[291,1512,1513],{"class":293,"line":381},[291,1514,1516],{"emptyLinePlaceholder":1515},true,"\n",[291,1518,1519],{"class":293,"line":920},[291,1520,1521],{},"[Service]\n",[291,1523,1524],{"class":293,"line":934},[291,1525,1526],{},"User=www-data\n",[291,1528,1529],{"class":293,"line":948},[291,1530,1531],{},"Group=www-data\n",[291,1533,1534],{"class":293,"line":962},[291,1535,1536],{},"Restart=always\n",[291,1538,1539],{"class":293,"line":976},[291,1540,1541],{},"ExecStart=\u002Fusr\u002Fbin\u002Fphp \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fartisan queue:work --queue=high,standard,low --sleep=3 --tries=3\n",[291,1543,1544],{"class":293,"line":990},[291,1545,1546],{},"StartLimitInterval=180\n",[291,1548,1550],{"class":293,"line":1549},11,[291,1551,1552],{},"StartLimitBurst=30\n",[291,1554,1556],{"class":293,"line":1555},12,[291,1557,1558],{},"RestartSec=5s\n",[291,1560,1562],{"class":293,"line":1561},13,[291,1563,1516],{"emptyLinePlaceholder":1515},[291,1565,1567],{"class":293,"line":1566},14,[291,1568,1569],{},"[Install]\n",[291,1571,1573],{"class":293,"line":1572},15,[291,1574,1575],{},"WantedBy=multi-user.target\n",[81,1577,1578,1579,1582,1583,1586],{},"Adjust ",[93,1580,1581],{},"User",", ",[93,1584,1585],{},"Group",", and Redis service name for your operating system.",[81,1588,1589],{},"Enable it:",[281,1591,1593],{"className":283,"code":1592,"filename":285,"language":286,"meta":287,"style":287},"systemctl daemon-reload\nsystemctl disable --now pteroq || true\nsystemctl enable --now southactyl-queue.service\n",[93,1594,1595,1602,1618],{"__ignoreMap":287},[291,1596,1597,1599],{"class":293,"line":294},[291,1598,399],{"class":315},[291,1600,1601],{"class":301}," daemon-reload\n",[291,1603,1604,1606,1609,1612,1614,1616],{"class":293,"line":363},[291,1605,399],{"class":315},[291,1607,1608],{"class":301}," disable",[291,1610,1611],{"class":301}," --now",[291,1613,453],{"class":301},[291,1615,409],{"class":408},[291,1617,458],{"class":297},[291,1619,1620,1622,1625,1627],{"class":293,"line":373},[291,1621,399],{"class":315},[291,1623,1624],{"class":301}," enable",[291,1626,1611],{"class":301},[291,1628,1629],{"class":301}," southactyl-queue.service\n",[102,1631,1633],{"id":1632},"_14-restart-services","14) Restart services",[81,1635,1636,1637,1640],{},"For PHP ",[93,1638,1639],{},"8.3"," with NGINX:",[281,1642,1644],{"className":283,"code":1643,"filename":285,"language":286,"meta":287,"style":287},"systemctl restart php8.3-fpm\nsystemctl restart redis-server\nsystemctl restart nginx\nsystemctl restart southactyl-queue.service || systemctl restart pteroq\n",[93,1645,1646,1656,1664,1673],{"__ignoreMap":287},[291,1647,1648,1650,1653],{"class":293,"line":294},[291,1649,399],{"class":315},[291,1651,1652],{"class":301}," restart",[291,1654,1655],{"class":301}," php8.3-fpm\n",[291,1657,1658,1660,1662],{"class":293,"line":363},[291,1659,399],{"class":315},[291,1661,1652],{"class":301},[291,1663,444],{"class":301},[291,1665,1666,1668,1670],{"class":293,"line":373},[291,1667,399],{"class":315},[291,1669,1652],{"class":301},[291,1671,1672],{"class":301}," nginx\n",[291,1674,1675,1677,1679,1682,1684,1686,1688],{"class":293,"line":381},[291,1676,399],{"class":315},[291,1678,1652],{"class":301},[291,1680,1681],{"class":301}," southactyl-queue.service",[291,1683,409],{"class":408},[291,1685,412],{"class":315},[291,1687,1652],{"class":301},[291,1689,1690],{"class":301}," pteroq\n",[81,1692,1636,1693,1696,1697,1700,1701,1704],{},[93,1694,1695],{},"8.2",", replace ",[93,1698,1699],{},"php8.3-fpm"," with ",[93,1702,1703],{},"php8.2-fpm",".",[102,1706,1708],{"id":1707},"_15-bring-the-panel-back-online","15) Bring the panel back online",[281,1710,1712],{"className":283,"code":1711,"filename":285,"language":286,"meta":287,"style":287},"cd \u002Fvar\u002Fwww\u002Fpterodactyl\nphp artisan up\n",[93,1713,1714,1720],{"__ignoreMap":287},[291,1715,1716,1718],{"class":293,"line":294},[291,1717,298],{"class":297},[291,1719,302],{"class":301},[291,1721,1722,1724,1726],{"class":293,"line":363},[291,1723,355],{"class":315},[291,1725,322],{"class":301},[291,1727,1728],{"class":301}," up\n",[81,1730,1731],{},"Open the panel in your browser and log in with an existing admin account.",[102,1733,1735],{"id":1734},"_16-verify-the-migration","16) Verify the migration",[81,1737,1738],{},"Run:",[281,1740,1742],{"className":283,"code":1741,"filename":285,"language":286,"meta":287,"style":287},"php artisan about\nsystemctl status redis-server\nsystemctl status nginx\nsystemctl status southactyl-queue.service || systemctl status pteroq\n",[93,1743,1744,1752,1760,1768],{"__ignoreMap":287},[291,1745,1746,1748,1750],{"class":293,"line":294},[291,1747,355],{"class":315},[291,1749,322],{"class":301},[291,1751,370],{"class":301},[291,1753,1754,1756,1758],{"class":293,"line":363},[291,1755,399],{"class":315},[291,1757,402],{"class":301},[291,1759,444],{"class":301},[291,1761,1762,1764,1766],{"class":293,"line":373},[291,1763,399],{"class":315},[291,1765,402],{"class":301},[291,1767,1672],{"class":301},[291,1769,1770,1772,1774,1776,1778,1780,1782],{"class":293,"line":381},[291,1771,399],{"class":315},[291,1773,402],{"class":301},[291,1775,1681],{"class":301},[291,1777,409],{"class":408},[291,1779,412],{"class":315},[291,1781,402],{"class":301},[291,1783,1690],{"class":301},[81,1785,1786],{},"Check these in the panel:",[110,1788,1789,1792,1795,1798,1801,1804,1807,1810,1813],{},[113,1790,1791],{},"Login works",[113,1793,1794],{},"Admin area loads",[113,1796,1797],{},"Server list loads",[113,1799,1800],{},"Node list loads",[113,1802,1803],{},"Console pages load",[113,1805,1806],{},"CSS and JavaScript assets load",[113,1808,1809],{},"Addons still appear if installed",[113,1811,1812],{},"Creating or editing a server does not error",[113,1814,1815],{},"Queue jobs process correctly",[81,1817,1818],{},"Check logs:",[281,1820,1822],{"className":283,"code":1821,"filename":285,"language":286,"meta":287,"style":287},"tail -n 100 \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fstorage\u002Flogs\u002Flaravel-*.log\njournalctl -u southactyl-queue.service -n 100 --no-pager || journalctl -u pteroq -n 100 --no-pager\ntail -n 100 \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log\n",[93,1823,1824,1843,1875],{"__ignoreMap":287},[291,1825,1826,1829,1832,1835,1838,1840],{"class":293,"line":294},[291,1827,1828],{"class":315},"tail",[291,1830,1831],{"class":301}," -n",[291,1833,1834],{"class":1375}," 100",[291,1836,1837],{"class":301}," \u002Fvar\u002Fwww\u002Fpterodactyl\u002Fstorage\u002Flogs\u002Flaravel-",[291,1839,1382],{"class":533},[291,1841,1842],{"class":301},".log\n",[291,1844,1845,1848,1850,1852,1854,1856,1859,1861,1864,1866,1868,1870,1872],{"class":293,"line":363},[291,1846,1847],{"class":315},"journalctl",[291,1849,650],{"class":301},[291,1851,1681],{"class":301},[291,1853,1831],{"class":301},[291,1855,1834],{"class":1375},[291,1857,1858],{"class":301}," --no-pager",[291,1860,409],{"class":408},[291,1862,1863],{"class":315}," journalctl",[291,1865,650],{"class":301},[291,1867,453],{"class":301},[291,1869,1831],{"class":301},[291,1871,1834],{"class":1375},[291,1873,1874],{"class":301}," --no-pager\n",[291,1876,1877,1879,1881,1883],{"class":293,"line":373},[291,1878,1828],{"class":315},[291,1880,1831],{"class":301},[291,1882,1834],{"class":1375},[291,1884,1885],{"class":301}," \u002Fvar\u002Flog\u002Fnginx\u002Ferror.log\n",[102,1887,1889],{"id":1888},"roll-back-if-the-migration-fails","Roll back if the migration fails",[81,1891,1892],{},"Stop services:",[281,1894,1896],{"className":283,"code":1895,"filename":285,"language":286,"meta":287,"style":287},"systemctl stop southactyl-queue.service || true\nsystemctl stop pteroq || true\nsystemctl stop nginx || true\n",[93,1897,1898,1910,1922],{"__ignoreMap":287},[291,1899,1900,1902,1904,1906,1908],{"class":293,"line":294},[291,1901,399],{"class":315},[291,1903,494],{"class":301},[291,1905,1681],{"class":301},[291,1907,409],{"class":408},[291,1909,458],{"class":297},[291,1911,1912,1914,1916,1918,1920],{"class":293,"line":363},[291,1913,399],{"class":315},[291,1915,494],{"class":301},[291,1917,453],{"class":301},[291,1919,409],{"class":408},[291,1921,458],{"class":297},[291,1923,1924,1926,1928,1930,1932],{"class":293,"line":373},[291,1925,399],{"class":315},[291,1927,494],{"class":301},[291,1929,405],{"class":301},[291,1931,409],{"class":408},[291,1933,458],{"class":297},[81,1935,1936],{},"Restore files:",[281,1938,1940],{"className":283,"code":1939,"filename":285,"language":286,"meta":287,"style":287},"rm -rf \u002Fvar\u002Fwww\u002Fpterodactyl\nmkdir -p \u002Fvar\u002Fwww\ntar -xzf \"$BACKUP_DIR\u002Fpanel-files.tar.gz\" -C \u002Fvar\u002Fwww\n",[93,1941,1942,1952,1961],{"__ignoreMap":287},[291,1943,1944,1947,1950],{"class":293,"line":294},[291,1945,1946],{"class":315},"rm",[291,1948,1949],{"class":301}," -rf",[291,1951,302],{"class":301},[291,1953,1954,1956,1958],{"class":293,"line":363},[291,1955,560],{"class":315},[291,1957,563],{"class":301},[291,1959,1960],{"class":301}," \u002Fvar\u002Fwww\n",[291,1962,1963,1965,1968,1970,1972,1974,1976,1978],{"class":293,"line":373},[291,1964,585],{"class":315},[291,1966,1967],{"class":301}," -xzf",[291,1969,566],{"class":408},[291,1971,569],{"class":533},[291,1973,595],{"class":301},[291,1975,540],{"class":408},[291,1977,600],{"class":301},[291,1979,1960],{"class":301},[81,1981,1982],{},"Restore the database:",[281,1984,1986],{"className":283,"code":1985,"filename":285,"language":286,"meta":287,"style":287},"mysql -u root -p pterodactyl \u003C \"$BACKUP_DIR\u002Fdatabase.sql\"\n",[93,1987,1988],{"__ignoreMap":287},[291,1989,1990,1993,1995,1997,1999,2001,2004,2006,2008,2010],{"class":293,"line":294},[291,1991,1992],{"class":315},"mysql",[291,1994,650],{"class":301},[291,1996,653],{"class":301},[291,1998,563],{"class":301},[291,2000,661],{"class":301},[291,2002,2003],{"class":408}," \u003C",[291,2005,566],{"class":408},[291,2007,569],{"class":533},[291,2009,671],{"class":301},[291,2011,572],{"class":408},[81,2013,2014],{},"Restore ownership:",[281,2016,2018],{"className":283,"code":2017,"filename":285,"language":286,"meta":287,"style":287},"chown -R www-data:www-data \u002Fvar\u002Fwww\u002Fpterodactyl\u002F*\n",[93,2019,2020],{"__ignoreMap":287},[291,2021,2022,2024,2026,2028,2030],{"class":293,"line":294},[291,2023,1353],{"class":315},[291,2025,1356],{"class":301},[291,2027,1359],{"class":301},[291,2029,1362],{"class":301},[291,2031,1365],{"class":533},[81,2033,2034],{},"Restart services:",[281,2036,2038],{"className":283,"code":2037,"filename":285,"language":286,"meta":287,"style":287},"systemctl start nginx\nsystemctl start pteroq || systemctl start southactyl-queue.service\n",[93,2039,2040,2049],{"__ignoreMap":287},[291,2041,2042,2044,2047],{"class":293,"line":294},[291,2043,399],{"class":315},[291,2045,2046],{"class":301}," start",[291,2048,1672],{"class":301},[291,2050,2051,2053,2055,2057,2059,2061,2063],{"class":293,"line":363},[291,2052,399],{"class":315},[291,2054,2046],{"class":301},[291,2056,453],{"class":301},[291,2058,409],{"class":408},[291,2060,412],{"class":315},[291,2062,2046],{"class":301},[291,2064,1629],{"class":301},[81,2066,2067],{},"Bring the panel online:",[281,2069,2070],{"className":283,"code":1711,"filename":285,"language":286,"meta":287,"style":287},[93,2071,2072,2078],{"__ignoreMap":287},[291,2073,2074,2076],{"class":293,"line":294},[291,2075,298],{"class":297},[291,2077,302],{"class":301},[291,2079,2080,2082,2084],{"class":293,"line":363},[291,2081,355],{"class":315},[291,2083,322],{"class":301},[291,2085,1728],{"class":301},[81,2087,2088],{},"If rollback fails too, your backup process was trash. Fix that before attempting the migration again.",[102,2090,2092],{"id":2091},"common-migration-problems","Common migration problems",[217,2094,2095,2108],{},[220,2096,2097],{},[223,2098,2099,2102,2105],{},[226,2100,2101],{},"Problem",[226,2103,2104],{},"Likely cause",[226,2106,2107],{},"Fix",[233,2109,2110,2128,2139,2153,2164,2181,2192],{},[223,2111,2112,2119,2125],{},[238,2113,2114,2115,2118],{},"White screen or ",[93,2116,2117],{},"500"," error",[238,2120,2121,2122,2124],{},"Bad permissions, broken ",[93,2123,99],{},", or failed Composer install",[238,2126,2127],{},"Check Laravel logs and rerun Composer",[223,2129,2130,2133,2136],{},[238,2131,2132],{},"Assets look broken",[238,2134,2135],{},"Frontend assets were not built or old cache is still used",[238,2137,2138],{},"Rebuild assets and clear caches",[223,2140,2141,2144,2147],{},[238,2142,2143],{},"Login fails after migration",[238,2145,2146],{},"Session\u002Fcache driver changed or Redis is broken",[238,2148,2149,2150,2152],{},"Check ",[93,2151,99],{},", Redis, and Laravel logs",[223,2154,2155,2158,2161],{},[238,2156,2157],{},"Queue jobs do not run",[238,2159,2160],{},"Queue worker still points to the wrong path or is stopped",[238,2162,2163],{},"Check systemd service and restart it",[223,2165,2166,2169,2175],{},[238,2167,2168],{},"Database error",[238,2170,2171,2172,2174],{},"Wrong ",[93,2173,99],{}," database values or failed migration",[238,2176,2177,2178,2180],{},"Restore ",[93,2179,99],{}," or fix database credentials",[223,2182,2183,2186,2189],{},[238,2184,2185],{},"Addon pages fail",[238,2187,2188],{},"Addon not compatible with Southactyl files",[238,2190,2191],{},"Disable the addon or install a compatible version",[223,2193,2194,2199,2205],{},[238,2195,2196,2198],{},[93,2197,95],{}," errors",[238,2200,2201,2202,2204],{},"A new key was generated or ",[93,2203,99],{}," was overwritten",[238,2206,2177,2207,2209],{},[93,2208,99],{}," from backup immediately",[102,2211,2213],{"id":2212},"final-cleanup","Final cleanup",[81,2215,2216],{},"After everything works:",[281,2218,2220],{"className":283,"code":2219,"filename":285,"language":286,"meta":287,"style":287},"rm -rf \u002Ftmp\u002Fsouthactyl-migration\n",[93,2221,2222],{"__ignoreMap":287},[291,2223,2224,2226,2228],{"class":293,"line":294},[291,2225,1946],{"class":315},[291,2227,1949],{"class":301},[291,2229,776],{"class":301},[81,2231,2232],{},"Keep your backup until you have confirmed the panel works under real usage. Deleting the only rollback point five minutes after migration is how amateurs suffer.",[2234,2235,2236],"style",{},"html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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);}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":287,"searchDepth":363,"depth":363,"links":2238},[2239,2240,2241,2242,2243,2244,2245,2246,2247,2248,2249,2250,2251,2252,2253,2254,2255,2256,2257,2258,2259,2260,2261],{"id":104,"depth":363,"text":105},{"id":151,"depth":363,"text":152},{"id":181,"depth":363,"text":182},{"id":211,"depth":363,"text":212},{"id":278,"depth":363,"text":279},{"id":341,"depth":363,"text":342},{"id":464,"depth":363,"text":465},{"id":519,"depth":363,"text":520},{"id":758,"depth":363,"text":759},{"id":841,"depth":363,"text":842},{"id":1005,"depth":363,"text":1006},{"id":1045,"depth":363,"text":1046},{"id":1119,"depth":363,"text":1120},{"id":1208,"depth":363,"text":1209},{"id":1247,"depth":363,"text":1248},{"id":1339,"depth":363,"text":1340},{"id":1458,"depth":363,"text":1459},{"id":1632,"depth":363,"text":1633},{"id":1707,"depth":363,"text":1708},{"id":1734,"depth":363,"text":1735},{"id":1888,"depth":363,"text":1889},{"id":2091,"depth":363,"text":2092},{"id":2212,"depth":363,"text":2213},"Convert an existing Pterodactyl Panel v1 install into Southactyl safely.","md",null,{},{"icon":70},{"title":2268,"description":2269},"Migrate from Pterodactyl to Southactyl","Back up an existing Pterodactyl panel, apply Southactyl files, rebuild assets, run migrations, and verify the migration.","LX4tCOCKuDnzI6UXU-pdxl_Js89tqnbX6taWg9IE17g",[2272,2264],{"title":62,"path":63,"stem":64,"description":2273,"icon":65,"children":-1},"Verify the Southactyl install and fix common problems.",1777300575853]