SlavinskyCookbook-Backup/8-Extra/Self-hosting-guide.html
2024-11-04 00:19:56 -05:00

258 lines
81 KiB
HTML
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html lang="en"><head><title>Self hosting guide</title><meta charset="utf-8"/><link rel="preconnect" href="https://fonts.googleapis.com"/><link rel="preconnect" href="https://fonts.gstatic.com"/><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=IBM Plex Mono&amp;family=Schibsted Grotesk:wght@400;700&amp;family=Source Sans Pro:ital,wght@0,400;0,600;1,400;1,600&amp;display=swap"/><meta name="viewport" content="width=device-width, initial-scale=1.0"/><meta property="og:title" content="Self hosting guide"/><meta property="og:description" content="In this guide I tell you how to install NGINX on your Linux based machine and how to serve the entire website all locally on your own network using hardware you control (Or you can make ..."/><meta property="og:image" content="https://cookbook.slavserver.com/static/og-image.png"/><meta property="og:width" content="1200"/><meta property="og:height" content="675"/><link rel="icon" href="../static/icon.png"/><meta name="description" content="In this guide I tell you how to install NGINX on your Linux based machine and how to serve the entire website all locally on your own network using hardware you control (Or you can make ..."/><meta name="generator" content="Quartz"/><link href="../index.css" rel="stylesheet" type="text/css" spa-preserve/><link href="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/katex.min.css" rel="stylesheet" type="text/css" spa-preserve/><script src="../prescript.js" type="application/javascript" spa-preserve></script><script type="application/javascript" spa-preserve>const fetchData = fetch("../static/contentIndex.json").then(data => data.json())</script></head><body data-slug="8-Extra/Self-hosting-guide"><div id="quartz-root" class="page"><div id="quartz-body"><div class="left sidebar"><h2 class="page-title"><a href="..">Slavinsky Cookbook</a></h2><div class="spacer mobile-only"></div><div class="search"><button class="search-button" id="search-button"><p>Search</p><svg role="img" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 19.9 19.7"><title>Search</title><g class="search-path" fill="none"><path stroke-linecap="square" d="M18.5 18.3l-5.4-5.4"></path><circle cx="8" cy="8" r="7"></circle></g></svg></button><div id="search-container"><div id="search-space"><input autocomplete="off" id="search-bar" name="search" type="text" aria-label="Search for something" placeholder="Search for something"/><div id="search-layout" data-preview="true"></div></div></div></div><button class="darkmode" id="darkmode"><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="dayIcon" x="0px" y="0px" viewBox="0 0 35 35" style="enable-background:new 0 0 35 35" xml:space="preserve" aria-label="Dark mode"><title>Dark mode</title><path d="M6,17.5C6,16.672,5.328,16,4.5,16h-3C0.672,16,0,16.672,0,17.5 S0.672,19,1.5,19h3C5.328,19,6,18.328,6,17.5z M7.5,26c-0.414,0-0.789,0.168-1.061,0.439l-2,2C4.168,28.711,4,29.086,4,29.5 C4,30.328,4.671,31,5.5,31c0.414,0,0.789-0.168,1.06-0.44l2-2C8.832,28.289,9,27.914,9,27.5C9,26.672,8.329,26,7.5,26z M17.5,6 C18.329,6,19,5.328,19,4.5v-3C19,0.672,18.329,0,17.5,0S16,0.672,16,1.5v3C16,5.328,16.671,6,17.5,6z M27.5,9 c0.414,0,0.789-0.168,1.06-0.439l2-2C30.832,6.289,31,5.914,31,5.5C31,4.672,30.329,4,29.5,4c-0.414,0-0.789,0.168-1.061,0.44 l-2,2C26.168,6.711,26,7.086,26,7.5C26,8.328,26.671,9,27.5,9z M6.439,8.561C6.711,8.832,7.086,9,7.5,9C8.328,9,9,8.328,9,7.5 c0-0.414-0.168-0.789-0.439-1.061l-2-2C6.289,4.168,5.914,4,5.5,4C4.672,4,4,4.672,4,5.5c0,0.414,0.168,0.789,0.439,1.06 L6.439,8.561z M33.5,16h-3c-0.828,0-1.5,0.672-1.5,1.5s0.672,1.5,1.5,1.5h3c0.828,0,1.5-0.672,1.5-1.5S34.328,16,33.5,16z M28.561,26.439C28.289,26.168,27.914,26,27.5,26c-0.828,0-1.5,0.672-1.5,1.5c0,0.414,0.168,0.789,0.439,1.06l2,2 C28.711,30.832,29.086,31,29.5,31c0.828,0,1.5-0.672,1.5-1.5c0-0.414-0.168-0.789-0.439-1.061L28.561,26.439z M17.5,29 c-0.829,0-1.5,0.672-1.5,1.5v3c0,0.828,0.671,1.5,1.5,1.5s1.5-0.672,1.5-1.5v-3C19,29.672,18.329,29,17.5,29z M17.5,7 C11.71,7,7,11.71,7,17.5S11.71,28,17.5,28S28,23.29,28,17.5S23.29,7,17.5,7z M17.5,25c-4.136,0-7.5-3.364-7.5-7.5 c0-4.136,3.364-7.5,7.5-7.5c4.136,0,7.5,3.364,7.5,7.5C25,21.636,21.636,25,17.5,25z"></path></svg><svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="nightIcon" x="0px" y="0px" viewBox="0 0 100 100" style="enable-background:new 0 0 100 100" xml:space="preserve" aria-label="Light mode"><title>Light mode</title><path d="M96.76,66.458c-0.853-0.852-2.15-1.064-3.23-0.534c-6.063,2.991-12.858,4.571-19.655,4.571 C62.022,70.495,50.88,65.88,42.5,57.5C29.043,44.043,25.658,23.536,34.076,6.47c0.532-1.08,0.318-2.379-0.534-3.23 c-0.851-0.852-2.15-1.064-3.23-0.534c-4.918,2.427-9.375,5.619-13.246,9.491c-9.447,9.447-14.65,22.008-14.65,35.369 c0,13.36,5.203,25.921,14.65,35.368s22.008,14.65,35.368,14.65c13.361,0,25.921-5.203,35.369-14.65 c3.872-3.871,7.064-8.328,9.491-13.246C97.826,68.608,97.611,67.309,96.76,66.458z"></path></svg></button><div class="explorer desktop-only"><button type="button" id="explorer" data-behavior="collapse" data-collapsed="collapsed" data-savestate="true" data-tree="[{&quot;path&quot;:&quot;1-Appetizers,-Beverages&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;2-Soups,-Salads&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;3-Vegetables&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;4-Main-Dishes&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;5-Breads,-Rolls&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;6-Desserts&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;7-Miscellaneous&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;8-Extra&quot;,&quot;collapsed&quot;:true},{&quot;path&quot;:&quot;8-Extra/Browse-by&quot;,&quot;collapsed&quot;:true}]" aria-controls="explorer-content" aria-expanded="false"><h2>Explorer</h2><svg xmlns="http://www.w3.org/2000/svg" width="14" height="14" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="fold"><polyline points="6 9 12 15 18 9"></polyline></svg></button><div id="explorer-content"><ul class="overflow" id="explorer-ul"><li><div class="folder-outer open"><ul style="padding-left:0;" class="content" data-folderul><li><div class="folder-container"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="folder-icon"><polyline points="6 9 12 15 18 9"></polyline></svg><div data-folderpath="1-Appetizers,-Beverages"><button class="folder-button"><span class="folder-title">1 Appetizers, Beverages</span></button></div></div><div class="folder-outer "><ul style="padding-left:1.4rem;" class="content" data-folderul="1-Appetizers,-Beverages"><li><a href="../1-Appetizers,-Beverages/Beef-Stick" data-for="1-Appetizers,-Beverages/Beef-Stick">Beef Stick</a></li><li><a href="../1-Appetizers,-Beverages/Brian's-Favorite-Humus" data-for="1-Appetizers,-Beverages/Brian's-Favorite-Humus">Brian's Favorite Humus</a></li><li><a href="../1-Appetizers,-Beverages/Bruschetta" data-for="1-Appetizers,-Beverages/Bruschetta">Bruschetta</a></li><li><a href="../1-Appetizers,-Beverages/Clams-Casino" data-for="1-Appetizers,-Beverages/Clams-Casino">Clams Casino</a></li><li><a href="../1-Appetizers,-Beverages/David's-Famous-Meatballs" data-for="1-Appetizers,-Beverages/David's-Famous-Meatballs">David's Famous Meatballs</a></li><li><a href="../1-Appetizers,-Beverages/Deviled-Eggs" data-for="1-Appetizers,-Beverages/Deviled-Eggs">Deviled Eggs</a></li><li><a href="../1-Appetizers,-Beverages/Fancy-Appetizers" data-for="1-Appetizers,-Beverages/Fancy-Appetizers">Fancy Appetizers</a></li><li><a href="../1-Appetizers,-Beverages/Grandma-Leaper's-Cup-a-Cup,-a-Cup" data-for="1-Appetizers,-Beverages/Grandma-Leaper's-Cup-a-Cup,-a-Cup">Grandma Leaper's Cup a Cup, a Cup</a></li><li><a href="../1-Appetizers,-Beverages/Grandma-Leaper's-Hot-Mushroom-Cheese-Dip" data-for="1-Appetizers,-Beverages/Grandma-Leaper's-Hot-Mushroom-Cheese-Dip">Grandma Leaper's Hot Mushroom Cheese Dip</a></li><li><a href="../1-Appetizers,-Beverages/Grandma's-Oyster-Crackers" data-for="1-Appetizers,-Beverages/Grandma's-Oyster-Crackers">Grandma's Oyster Crackers</a></li><li><a href="../1-Appetizers,-Beverages/Homemade-Wine" data-for="1-Appetizers,-Beverages/Homemade-Wine">Homemade Wine</a></li><li><a href="../1-Appetizers,-Beverages/Hot-Bruschetta" data-for="1-Appetizers,-Beverages/Hot-Bruschetta">Hot Bruschetta</a></li><li><a href="../1-Appetizers,-Beverages/Laurie's-Anytime-for-a-Party-Sangria" data-for="1-Appetizers,-Beverages/Laurie's-Anytime-for-a-Party-Sangria">Laurie's Anytime for a Party Sangria</a></li><li><a href="../1-Appetizers,-Beverages/Laurie's-Champagne-Cocktail" data-for="1-Appetizers,-Beverages/Laurie's-Champagne-Cocktail">Laurie's Champagne Cocktail</a></li><li><a href="../1-Appetizers,-Beverages/Laurie's-Hawaii-Mai-Tai" data-for="1-Appetizers,-Beverages/Laurie's-Hawaii-Mai-Tai">Laurie's Hawaii Mai Tai</a></li><li><a href="../1-Appetizers,-Beverages/Mom's-Tapanade" data-for="1-Appetizers,-Beverages/Mom's-Tapanade">Mom's Tapanade</a></li><li><a href="../1-Appetizers,-Beverages/Orange-Julius" data-for="1-Appetizers,-Beverages/Orange-Julius">Orange Julius</a></li><li><a href="../1-Appetizers,-Beverages/Oysterettes" data-for="1-Appetizers,-Beverages/Oysterettes">Oysterettes</a></li><li><a href="../1-Appetizers,-Beverages/Pepperoni-Dip" data-for="1-Appetizers,-Beverages/Pepperoni-Dip">Pepperoni Dip</a></li><li><a href="../1-Appetizers,-Beverages/Pig-on-a-Date-with-a-Nut" data-for="1-Appetizers,-Beverages/Pig-on-a-Date-with-a-Nut">Pig on a Date with a Nut</a></li><li><a href="../1-Appetizers,-Beverages/Polynesian-Ginger-Dip" data-for="1-Appetizers,-Beverages/Polynesian-Ginger-Dip">Polynesian Ginger Dip</a></li><li><a href="../1-Appetizers,-Beverages/Roquefort-and-onion-spread" data-for="1-Appetizers,-Beverages/Roquefort-and-onion-spread">Roquefort and onion spread</a></li><li><a href="../1-Appetizers,-Beverages/Swedish-Meatballs" data-for="1-Appetizers,-Beverages/Swedish-Meatballs">Swedish Meatballs</a></li><li><a href="../1-Appetizers,-Beverages/The-Best-Hot-Artichoke-Spinach-Dip-Ever!" data-for="1-Appetizers,-Beverages/The-Best-Hot-Artichoke-Spinach-Dip-Ever!">The Best Hot Artichoke Spinach Dip Ever!</a></li><li><a href="../1-Appetizers,-Beverages/Uncle-Everett's-Little-Hot-Dogs" data-for="1-Appetizers,-Beverages/Uncle-Everett's-Little-Hot-Dogs">Uncle Everett's Little Hot Dogs</a></li></ul></div></li><li><div class="folder-container"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="folder-icon"><polyline points="6 9 12 15 18 9"></polyline></svg><div data-folderpath="2-Soups,-Salads"><button class="folder-button"><span class="folder-title">2 Soups, Salads</span></button></div></div><div class="folder-outer "><ul style="padding-left:1.4rem;" class="content" data-folderul="2-Soups,-Salads"><li><a href="../2-Soups,-Salads/Apricot-Jello-Salad" data-for="2-Soups,-Salads/Apricot-Jello-Salad">Apricot Jello Salad</a></li><li><a href="../2-Soups,-Salads/Broccoli-Salad" data-for="2-Soups,-Salads/Broccoli-Salad">Broccoli Salad</a></li><li><a href="../2-Soups,-Salads/Cranberry-Gorgonzola-Green-Salad" data-for="2-Soups,-Salads/Cranberry-Gorgonzola-Green-Salad">Cranberry Gorgonzola Green Salad</a></li><li><a href="../2-Soups,-Salads/Dad's-Onion-Soup-(Soupe-À-L'oignon-Au-Fromage)" data-for="2-Soups,-Salads/Dad's-Onion-Soup-(Soupe-À-L'oignon-Au-Fromage)">Dad's Onion Soup (Soupe À L'oignon Au Fromage)</a></li><li><a href="../2-Soups,-Salads/Grandma-Leaper's-Beef-Burgundy" data-for="2-Soups,-Salads/Grandma-Leaper's-Beef-Burgundy">Grandma Leaper's Beef Burgundy</a></li><li><a href="../2-Soups,-Salads/Grandma-Leaper's-Chili" data-for="2-Soups,-Salads/Grandma-Leaper's-Chili">Grandma Leaper's Chili</a></li><li><a href="../2-Soups,-Salads/Grandma's-Chicken-Soup" data-for="2-Soups,-Salads/Grandma's-Chicken-Soup">Grandma's Chicken Soup</a></li><li><a href="../2-Soups,-Salads/Harriet's-Orange-Buttermilk-Salad" data-for="2-Soups,-Salads/Harriet's-Orange-Buttermilk-Salad">Harriet's Orange Buttermilk Salad</a></li><li><a href="../2-Soups,-Salads/Lentil-Soup" data-for="2-Soups,-Salads/Lentil-Soup">Lentil Soup</a></li><li><a href="../2-Soups,-Salads/Mary's-Chili" data-for="2-Soups,-Salads/Mary's-Chili">Mary's Chili</a></li><li><a href="../2-Soups,-Salads/Olive-Garden-Italian-Salad-Dressing" data-for="2-Soups,-Salads/Olive-Garden-Italian-Salad-Dressing">Olive Garden Italian Salad Dressing</a></li><li><a href="../2-Soups,-Salads/Pineapple-Mint-Freeze" data-for="2-Soups,-Salads/Pineapple-Mint-Freeze">Pineapple Mint Freeze</a></li><li><a href="../2-Soups,-Salads/Taco-Soup" data-for="2-Soups,-Salads/Taco-Soup">Taco Soup</a></li><li><a href="../2-Soups,-Salads/Three-Bean-Salad" data-for="2-Soups,-Salads/Three-Bean-Salad">Three Bean Salad</a></li><li><a href="../2-Soups,-Salads/Tim's-Caesar-Salad" data-for="2-Soups,-Salads/Tim's-Caesar-Salad">Tim's Caesar Salad</a></li><li><a href="../2-Soups,-Salads/Vegetable-Soup" data-for="2-Soups,-Salads/Vegetable-Soup">Vegetable Soup</a></li><li><a href="../2-Soups,-Salads/Wild-Rice-and-Mushroom-Soup" data-for="2-Soups,-Salads/Wild-Rice-and-Mushroom-Soup">Wild Rice and Mushroom Soup</a></li><li><a href="../2-Soups,-Salads/Winter-Corn-Chowder" data-for="2-Soups,-Salads/Winter-Corn-Chowder">Winter Corn Chowder</a></li></ul></div></li><li><div class="folder-container"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="folder-icon"><polyline points="6 9 12 15 18 9"></polyline></svg><div data-folderpath="3-Vegetables"><button class="folder-button"><span class="folder-title">3 Vegetables</span></button></div></div><div class="folder-outer "><ul style="padding-left:1.4rem;" class="content" data-folderul="3-Vegetables"><li><a href="../3-Vegetables/Alda's-Cole-Slaw" data-for="3-Vegetables/Alda's-Cole-Slaw">Alda's Cole Slaw</a></li><li><a href="../3-Vegetables/Bacon-and-Mushrooms" data-for="3-Vegetables/Bacon-and-Mushrooms">Bacon and Mushrooms</a></li><li><a href="../3-Vegetables/Baked-Bean-Casserole" data-for="3-Vegetables/Baked-Bean-Casserole">Baked Bean Casserole</a></li><li><a href="../3-Vegetables/Carrot-Souffle" data-for="3-Vegetables/Carrot-Souffle">Carrot Souffle</a></li><li><a href="../3-Vegetables/Creamed-Onions" data-for="3-Vegetables/Creamed-Onions">Creamed Onions</a></li><li><a href="../3-Vegetables/Dads-Mashed-Potatoes" data-for="3-Vegetables/Dads-Mashed-Potatoes">Dads Mashed Potatoes</a></li><li><a href="../3-Vegetables/Emily's-First-French-Fries" data-for="3-Vegetables/Emily's-First-French-Fries">Emily's First French Fries</a></li><li><a href="../3-Vegetables/Grace's-Baked-Beans" data-for="3-Vegetables/Grace's-Baked-Beans">Grace's Baked Beans</a></li><li><a href="../3-Vegetables/Grandma-Leaper's-Cheese-Potatoes" data-for="3-Vegetables/Grandma-Leaper's-Cheese-Potatoes">Grandma Leaper's Cheese Potatoes</a></li><li><a href="../3-Vegetables/Grandma-Leaper's-Scalloped-Corn" data-for="3-Vegetables/Grandma-Leaper's-Scalloped-Corn">Grandma Leaper's Scalloped Corn</a></li><li><a href="../3-Vegetables/Grandma-Peters'-Peas" data-for="3-Vegetables/Grandma-Peters'-Peas">Grandma Peters' Peas</a></li><li><a href="../3-Vegetables/Grandma-Peters'-Stuffed-Artichokes" data-for="3-Vegetables/Grandma-Peters'-Stuffed-Artichokes">Grandma Peters' Stuffed Artichokes</a></li><li><a href="../3-Vegetables/Harriet's-Famous-Corn-Souffle" data-for="3-Vegetables/Harriet's-Famous-Corn-Souffle">Harriet's Famous Corn Souffle</a></li><li><a href="../3-Vegetables/Heavenly-Spinach" data-for="3-Vegetables/Heavenly-Spinach">Heavenly Spinach</a></li><li><a href="../3-Vegetables/Kugeli" data-for="3-Vegetables/Kugeli">Kugeli</a></li><li><a href="../3-Vegetables/Mary-Lou's-Potato-Salad" data-for="3-Vegetables/Mary-Lou's-Potato-Salad">Mary Lou's Potato Salad</a></li><li><a href="../3-Vegetables/Smootsa-Toota" data-for="3-Vegetables/Smootsa-Toota">Smootsa Toota</a></li><li><a href="../3-Vegetables/Sweet-Potato-Casserole" data-for="3-Vegetables/Sweet-Potato-Casserole">Sweet Potato Casserole</a></li><li><a href="../3-Vegetables/Tim's-Mushrooms" data-for="3-Vegetables/Tim's-Mushrooms">Tim's Mushrooms</a></li></ul></div></li><li><div class="folder-container"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="folder-icon"><polyline points="6 9 12 15 18 9"></polyline></svg><div data-folderpath="4-Main-Dishes"><button class="folder-button"><span class="folder-title">4 Main Dishes</span></button></div></div><div class="folder-outer "><ul style="padding-left:1.4rem;" class="content" data-folderul="4-Main-Dishes"><li><a href="../4-Main-Dishes/Alysa's-Beef-Enchiladas" data-for="4-Main-Dishes/Alysa's-Beef-Enchiladas">Alysa's Beef Enchiladas</a></li><li><a href="../4-Main-Dishes/Alysa's-Easy-Steak-Fajitas" data-for="4-Main-Dishes/Alysa's-Easy-Steak-Fajitas">Alysa's Easy Steak Fajitas</a></li><li><a href="../4-Main-Dishes/Arroz-Con-Polo-(Chicken-and-Yellow-Rice)" data-for="4-Main-Dishes/Arroz-Con-Polo-(Chicken-and-Yellow-Rice)">Arroz Con Polo (Chicken and Yellow Rice)</a></li><li><a href="../4-Main-Dishes/Bacon-Turkey-Bravo" data-for="4-Main-Dishes/Bacon-Turkey-Bravo">Bacon Turkey Bravo</a></li><li><a href="../4-Main-Dishes/Braciola" data-for="4-Main-Dishes/Braciola">Braciola</a></li><li><a href="../4-Main-Dishes/Chicken-and-Stuffing-Scallop" data-for="4-Main-Dishes/Chicken-and-Stuffing-Scallop">Chicken and Stuffing Scallop</a></li><li><a href="../4-Main-Dishes/Chicken-Salad-Croissant" data-for="4-Main-Dishes/Chicken-Salad-Croissant">Chicken Salad Croissant</a></li><li><a href="../4-Main-Dishes/Chicken-Tacos" data-for="4-Main-Dishes/Chicken-Tacos">Chicken Tacos</a></li><li><a href="../4-Main-Dishes/Chili-Relleno-Casserole" data-for="4-Main-Dishes/Chili-Relleno-Casserole">Chili Relleno Casserole</a></li><li><a href="../4-Main-Dishes/Cran-Apple-Glazed-Pork-Chops" data-for="4-Main-Dishes/Cran-Apple-Glazed-Pork-Chops">Cran-Apple Glazed Pork Chops</a></li><li><a href="../4-Main-Dishes/Cranberry-Pork-Roast" data-for="4-Main-Dishes/Cranberry-Pork-Roast">Cranberry Pork Roast</a></li><li><a href="../4-Main-Dishes/Dad's-Ribs" data-for="4-Main-Dishes/Dad's-Ribs">Dad's Ribs</a></li><li><a href="../4-Main-Dishes/David's-Famous-Hamburgers" data-for="4-Main-Dishes/David's-Famous-Hamburgers">David's Famous Hamburgers</a></li><li><a href="../4-Main-Dishes/Easy-Enchilada-Casserole" data-for="4-Main-Dishes/Easy-Enchilada-Casserole">Easy Enchilada Casserole</a></li><li><a href="../4-Main-Dishes/Emily's-Macaroni-and-Cheese" data-for="4-Main-Dishes/Emily's-Macaroni-and-Cheese">Emily's Macaroni and Cheese</a></li><li><a href="../4-Main-Dishes/Fettuccini-Alfredo" data-for="4-Main-Dishes/Fettuccini-Alfredo">Fettuccini Alfredo</a></li><li><a href="../4-Main-Dishes/Grandma-Peters'-Cutlets" data-for="4-Main-Dishes/Grandma-Peters'-Cutlets">Grandma Peters' Cutlets</a></li><li><a href="../4-Main-Dishes/Grandma's-Italian-Sausage-Casserole" data-for="4-Main-Dishes/Grandma's-Italian-Sausage-Casserole">Grandma's Italian Sausage Casserole</a></li><li><a href="../4-Main-Dishes/Grandpa-Alda's-Stuffed-Cabbage" data-for="4-Main-Dishes/Grandpa-Alda's-Stuffed-Cabbage">Grandpa Alda's Stuffed Cabbage</a></li><li><a href="../4-Main-Dishes/Grandpa-Leaper's-Flank-Steak" data-for="4-Main-Dishes/Grandpa-Leaper's-Flank-Steak">Grandpa Leaper's Flank Steak</a></li><li><a href="../4-Main-Dishes/Grandpa-Leaper's-Grilled-Hamburger" data-for="4-Main-Dishes/Grandpa-Leaper's-Grilled-Hamburger">Grandpa Leaper's Grilled Hamburger</a></li><li><a href="../4-Main-Dishes/Grandpa's-Spaghetti-Sauce" data-for="4-Main-Dishes/Grandpa's-Spaghetti-Sauce">Grandpa's Spaghetti Sauce</a></li><li><a href="../4-Main-Dishes/Jordan's-Lemon-Chicken" data-for="4-Main-Dishes/Jordan's-Lemon-Chicken">Jordan's Lemon Chicken</a></li><li><a href="../4-Main-Dishes/Kid's-Favorite-BBQ" data-for="4-Main-Dishes/Kid's-Favorite-BBQ">Kid's Favorite BBQ</a></li><li><a href="../4-Main-Dishes/Kielbasa" data-for="4-Main-Dishes/Kielbasa">Kielbasa</a></li><li><a href="../4-Main-Dishes/Laurie's-Eggplant-Parmigiana" data-for="4-Main-Dishes/Laurie's-Eggplant-Parmigiana">Laurie's Eggplant Parmigiana</a></li><li><a href="../4-Main-Dishes/Laurie's-Grilled-Cheese" data-for="4-Main-Dishes/Laurie's-Grilled-Cheese">Laurie's Grilled Cheese</a></li><li><a href="../4-Main-Dishes/Mary-Lou's-Lasagna" data-for="4-Main-Dishes/Mary-Lou's-Lasagna">Mary Lou's Lasagna</a></li><li><a href="../4-Main-Dishes/Michelle's-Beef-Stroganoff" data-for="4-Main-Dishes/Michelle's-Beef-Stroganoff">Michelle's Beef Stroganoff</a></li><li><a href="../4-Main-Dishes/Mock-Lobster-Pie" data-for="4-Main-Dishes/Mock-Lobster-Pie">Mock Lobster Pie</a></li><li><a href="../4-Main-Dishes/Nama's-Chicken-Casserole" data-for="4-Main-Dishes/Nama's-Chicken-Casserole">Nama's Chicken Casserole</a></li><li><a href="../4-Main-Dishes/Nana's-Pot-Roast" data-for="4-Main-Dishes/Nana's-Pot-Roast">Nana's Pot Roast</a></li><li><a href="../4-Main-Dishes/Pasgetti-Pie" data-for="4-Main-Dishes/Pasgetti-Pie">Pasgetti Pie</a></li><li><a href="../4-Main-Dishes/Peter-Rabbit-Pasta-(For-babies-learning-to-eat)" data-for="4-Main-Dishes/Peter-Rabbit-Pasta-(For-babies-learning-to-eat)">Peter Rabbit Pasta (For babies learning to eat)</a></li><li><a href="../4-Main-Dishes/Polish-Pierogi" data-for="4-Main-Dishes/Polish-Pierogi">Polish Pierogi</a></li><li><a href="../4-Main-Dishes/Pork-Chops-with-Red-Pepper-Sauce" data-for="4-Main-Dishes/Pork-Chops-with-Red-Pepper-Sauce">Pork Chops with Red Pepper Sauce</a></li><li><a href="../4-Main-Dishes/Saturday-Night-Dinner-(When-Mom-and-Dad-went-out)" data-for="4-Main-Dishes/Saturday-Night-Dinner-(When-Mom-and-Dad-went-out)">Saturday Night Dinner (When Mom and Dad went out)</a></li><li><a href="../4-Main-Dishes/Shrimp-Fra-Diavola" data-for="4-Main-Dishes/Shrimp-Fra-Diavola">Shrimp Fra Diavola</a></li><li><a href="../4-Main-Dishes/Shrimp-Peel" data-for="4-Main-Dishes/Shrimp-Peel">Shrimp Peel</a></li><li><a href="../4-Main-Dishes/Six-Layer-Dinner" data-for="4-Main-Dishes/Six-Layer-Dinner">Six-Layer Dinner</a></li><li><a href="../4-Main-Dishes/Strudel---Sausage-and-Mushroom" data-for="4-Main-Dishes/Strudel---Sausage-and-Mushroom">Strudel - Sausage and Mushroom</a></li><li><a href="../4-Main-Dishes/Tim-Pariso's-Filet-Mignon-for-4" data-for="4-Main-Dishes/Tim-Pariso's-Filet-Mignon-for-4">Tim Pariso's Filet Mignon for 4</a></li><li><a href="../4-Main-Dishes/Tongue" data-for="4-Main-Dishes/Tongue">Tongue</a></li></ul></div></li><li><div class="folder-container"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="folder-icon"><polyline points="6 9 12 15 18 9"></polyline></svg><div data-folderpath="5-Breads,-Rolls"><button class="folder-button"><span class="folder-title">5 Breads, Rolls</span></button></div></div><div class="folder-outer "><ul style="padding-left:1.4rem;" class="content" data-folderul="5-Breads,-Rolls"><li><a href="../5-Breads,-Rolls/Cranberry-Nut-Bread" data-for="5-Breads,-Rolls/Cranberry-Nut-Bread">Cranberry Nut Bread</a></li><li><a href="../5-Breads,-Rolls/Danielle's-Famous-Better-than-Cinnabon-Cinnamon-Rolls" data-for="5-Breads,-Rolls/Danielle's-Famous-Better-than-Cinnabon-Cinnamon-Rolls">Danielle's Famous Better than Cinnabon Cinnamon Rolls</a></li><li><a href="../5-Breads,-Rolls/Homemade-Sicilian-Bread" data-for="5-Breads,-Rolls/Homemade-Sicilian-Bread">Homemade Sicilian Bread</a></li><li><a href="../5-Breads,-Rolls/Mom's-Famous-Hot-Rolls" data-for="5-Breads,-Rolls/Mom's-Famous-Hot-Rolls">Mom's Famous Hot Rolls</a></li><li><a href="../5-Breads,-Rolls/Mr.-Slavinsky's-Muffins" data-for="5-Breads,-Rolls/Mr.-Slavinsky's-Muffins">Mr. Slavinsky's Muffins</a></li><li><a href="../5-Breads,-Rolls/Six-Week-Muffins-(Batter-will-keep-that-long)" data-for="5-Breads,-Rolls/Six-Week-Muffins-(Batter-will-keep-that-long)">Six Week Muffins (Batter will keep that long)</a></li><li><a href="../5-Breads,-Rolls/Zucchini-Bread" data-for="5-Breads,-Rolls/Zucchini-Bread">Zucchini Bread</a></li></ul></div></li><li><div class="folder-container"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="folder-icon"><polyline points="6 9 12 15 18 9"></polyline></svg><div data-folderpath="6-Desserts"><button class="folder-button"><span class="folder-title">6 Desserts</span></button></div></div><div class="folder-outer "><ul style="padding-left:1.4rem;" class="content" data-folderul="6-Desserts"><li><a href="../6-Desserts/7-Layer-Magic-Cookie-Bars" data-for="6-Desserts/7-Layer-Magic-Cookie-Bars">7 Layer Magic Cookie Bars</a></li><li><a href="../6-Desserts/Amelia-Cookies" data-for="6-Desserts/Amelia-Cookies">Amelia Cookies</a></li><li><a href="../6-Desserts/April-Fools-Cake-(Chocolate-Coconut-Cake)" data-for="6-Desserts/April-Fools-Cake-(Chocolate-Coconut-Cake)">April Fools Cake (Chocolate Coconut Cake)</a></li><li><a href="../6-Desserts/Aunt-Barbie's-Cheese-Cake" data-for="6-Desserts/Aunt-Barbie's-Cheese-Cake">Aunt Barbie's Cheese Cake</a></li><li><a href="../6-Desserts/Blue-Ribbon-Carrot-Cake" data-for="6-Desserts/Blue-Ribbon-Carrot-Cake">Blue Ribbon Carrot Cake</a></li><li><a href="../6-Desserts/Boiled-Cider-Apple-Pie" data-for="6-Desserts/Boiled-Cider-Apple-Pie">Boiled Cider Apple Pie</a></li><li><a href="../6-Desserts/Buckeyes" data-for="6-Desserts/Buckeyes">Buckeyes</a></li><li><a href="../6-Desserts/Cannoli" data-for="6-Desserts/Cannoli">Cannoli</a></li><li><a href="../6-Desserts/Cannoli-Shells" data-for="6-Desserts/Cannoli-Shells">Cannoli Shells</a></li><li><a href="../6-Desserts/Carrot-Cake" data-for="6-Desserts/Carrot-Cake">Carrot Cake</a></li><li><a href="../6-Desserts/Chocolate-Chip-Cookies" data-for="6-Desserts/Chocolate-Chip-Cookies">Chocolate Chip Cookies</a></li><li><a href="../6-Desserts/Chocolate-Chocolate-Chip-Cookies" data-for="6-Desserts/Chocolate-Chocolate-Chip-Cookies">Chocolate Chocolate Chip Cookies</a></li><li><a href="../6-Desserts/Company-Coconut-Cake" data-for="6-Desserts/Company-Coconut-Cake">Company Coconut Cake</a></li><li><a href="../6-Desserts/Dutch-Chocolate-Birthday-Cake" data-for="6-Desserts/Dutch-Chocolate-Birthday-Cake">Dutch Chocolate Birthday Cake</a></li><li><a href="../6-Desserts/Easter-Story-Cookies" data-for="6-Desserts/Easter-Story-Cookies">Easter Story Cookies</a></li><li><a href="../6-Desserts/Flan" data-for="6-Desserts/Flan">Flan</a></li><li><a href="../6-Desserts/Frozen-Peanut-Butter-Pie" data-for="6-Desserts/Frozen-Peanut-Butter-Pie">Frozen Peanut Butter Pie</a></li><li><a href="../6-Desserts/Fruit-Trifle" data-for="6-Desserts/Fruit-Trifle">Fruit Trifle</a></li><li><a href="../6-Desserts/Fudgy-Chocolate-Birthday-Cake" data-for="6-Desserts/Fudgy-Chocolate-Birthday-Cake">Fudgy Chocolate Birthday Cake</a></li><li><a href="../6-Desserts/Grace's-Molasses-Cookies" data-for="6-Desserts/Grace's-Molasses-Cookies">Grace's Molasses Cookies</a></li><li><a href="../6-Desserts/Grammie-Grace's-Peanut-Butter-Cookies" data-for="6-Desserts/Grammie-Grace's-Peanut-Butter-Cookies">Grammie Grace's Peanut Butter Cookies</a></li><li><a href="../6-Desserts/Grandma-DeRosa's-Sour-Cream-Coffee-Cake" data-for="6-Desserts/Grandma-DeRosa's-Sour-Cream-Coffee-Cake">Grandma DeRosa's Sour Cream Coffee Cake</a></li><li><a href="../6-Desserts/Grandma-Leaper's-Cherry-Berries-on-a-Cloud" data-for="6-Desserts/Grandma-Leaper's-Cherry-Berries-on-a-Cloud">Grandma Leaper's Cherry Berries on a Cloud</a></li><li><a href="../6-Desserts/Grandma-Leaper's-Chocolate-Chip-Cookies" data-for="6-Desserts/Grandma-Leaper's-Chocolate-Chip-Cookies">Grandma Leaper's Chocolate Chip Cookies</a></li><li><a href="../6-Desserts/Grandma-Leaper's-Hot-Fudge-Sauce" data-for="6-Desserts/Grandma-Leaper's-Hot-Fudge-Sauce">Grandma Leaper's Hot Fudge Sauce</a></li><li><a href="../6-Desserts/Grandma-Leaper's-Sweetened-Condensed-Milk-Dessert" data-for="6-Desserts/Grandma-Leaper's-Sweetened-Condensed-Milk-Dessert">Grandma Leaper's Sweetened Condensed Milk Dessert</a></li><li><a href="../6-Desserts/Grandma-Peters'-Almond-Balls" data-for="6-Desserts/Grandma-Peters'-Almond-Balls">Grandma Peters' Almond Balls</a></li><li><a href="../6-Desserts/Grandma's-Cookies" data-for="6-Desserts/Grandma's-Cookies">Grandma's Cookies</a></li><li><a href="../6-Desserts/Grandma's-Fig-Cookies-(Cuccidati)" data-for="6-Desserts/Grandma's-Fig-Cookies-(Cuccidati)">Grandma's Fig Cookies (Cuccidati)</a></li><li><a href="../6-Desserts/Grapes-with-Sour-Cream-and-Brown-Sugar" data-for="6-Desserts/Grapes-with-Sour-Cream-and-Brown-Sugar">Grapes with Sour Cream and Brown Sugar</a></li><li><a href="../6-Desserts/Hello-Dolly-Bars" data-for="6-Desserts/Hello-Dolly-Bars">Hello Dolly Bars</a></li><li><a href="../6-Desserts/Hot-Banana-Split" data-for="6-Desserts/Hot-Banana-Split">Hot Banana Split</a></li><li><a href="../6-Desserts/Italian-Chocolate-Cookies" data-for="6-Desserts/Italian-Chocolate-Cookies">Italian Chocolate Cookies</a></li><li><a href="../6-Desserts/Jane's-Pecan-Sandies" data-for="6-Desserts/Jane's-Pecan-Sandies">Jane's Pecan Sandies</a></li><li><a href="../6-Desserts/Lisa,-Laurie,-and-Mom's-Brownies" data-for="6-Desserts/Lisa,-Laurie,-and-Mom's-Brownies">Lisa, Laurie, and Mom's Brownies</a></li><li><a href="../6-Desserts/Mark's-Favorite-Pecan-Pie" data-for="6-Desserts/Mark's-Favorite-Pecan-Pie">Mark's Favorite Pecan Pie</a></li><li><a href="../6-Desserts/Melt-Away-Dessert" data-for="6-Desserts/Melt-Away-Dessert">Melt Away Dessert</a></li><li><a href="../6-Desserts/Mom's-Pumpkin-Pie" data-for="6-Desserts/Mom's-Pumpkin-Pie">Mom's Pumpkin Pie</a></li><li><a href="../6-Desserts/Mormon-Apple-Cake" data-for="6-Desserts/Mormon-Apple-Cake">Mormon Apple Cake</a></li><li><a href="../6-Desserts/Mud-Slide" data-for="6-Desserts/Mud-Slide">Mud Slide</a></li><li><a href="../6-Desserts/Nama's-Christmas-Cookies" data-for="6-Desserts/Nama's-Christmas-Cookies">Nama's Christmas Cookies</a></li><li><a href="../6-Desserts/Nama's-Gingerbread-Men" data-for="6-Desserts/Nama's-Gingerbread-Men">Nama's Gingerbread Men</a></li><li><a href="../6-Desserts/Nana's-Shortbread" data-for="6-Desserts/Nana's-Shortbread">Nana's Shortbread</a></li><li><a href="../6-Desserts/Nancy's-Cookies" data-for="6-Desserts/Nancy's-Cookies">Nancy's Cookies</a></li><li><a href="../6-Desserts/Peanut-Butter-Balls" data-for="6-Desserts/Peanut-Butter-Balls">Peanut Butter Balls</a></li><li><a href="../6-Desserts/Ricotta-Filled-Cake" data-for="6-Desserts/Ricotta-Filled-Cake">Ricotta Filled Cake</a></li><li><a href="../6-Desserts/Russian-Tea-Cakes-(Snowball-Cookies)" data-for="6-Desserts/Russian-Tea-Cakes-(Snowball-Cookies)">Russian Tea Cakes (Snowball Cookies)</a></li><li><a href="../6-Desserts/S-Cookies" data-for="6-Desserts/S-Cookies">S Cookies</a></li><li><a href="../6-Desserts/Texas-Sheet-Cake" data-for="6-Desserts/Texas-Sheet-Cake">Texas Sheet Cake</a></li><li><a href="../6-Desserts/Todd's-Favorite-Cheesecake" data-for="6-Desserts/Todd's-Favorite-Cheesecake">Todd's Favorite Cheesecake</a></li><li><a href="../6-Desserts/Wandes-(Fried-Bow-Knots)" data-for="6-Desserts/Wandes-(Fried-Bow-Knots)">Wandes (Fried Bow Knots)</a></li></ul></div></li><li><div class="folder-container"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="folder-icon"><polyline points="6 9 12 15 18 9"></polyline></svg><div data-folderpath="7-Miscellaneous"><button class="folder-button"><span class="folder-title">7 Miscellaneous</span></button></div></div><div class="folder-outer "><ul style="padding-left:1.4rem;" class="content" data-folderul="7-Miscellaneous"><li><a href="../7-Miscellaneous/Bab's-Scotch-Eggs" data-for="7-Miscellaneous/Bab's-Scotch-Eggs">Bab's Scotch Eggs</a></li><li><a href="../7-Miscellaneous/Bab's-Swedish-Pancakes" data-for="7-Miscellaneous/Bab's-Swedish-Pancakes">Bab's Swedish Pancakes</a></li><li><a href="../7-Miscellaneous/Bacon-Turkey-Bravo-Sauce" data-for="7-Miscellaneous/Bacon-Turkey-Bravo-Sauce">Bacon Turkey Bravo Sauce</a></li><li><a href="../7-Miscellaneous/BBQ-Sauce" data-for="7-Miscellaneous/BBQ-Sauce">BBQ Sauce</a></li><li><a href="../7-Miscellaneous/Beth's-Strawberry-Freezer-Jam" data-for="7-Miscellaneous/Beth's-Strawberry-Freezer-Jam">Beth's Strawberry Freezer Jam</a></li><li><a href="../7-Miscellaneous/Breakfast-Casserole" data-for="7-Miscellaneous/Breakfast-Casserole">Breakfast Casserole</a></li><li><a href="../7-Miscellaneous/Caramel-Corn" data-for="7-Miscellaneous/Caramel-Corn">Caramel Corn</a></li><li><a href="../7-Miscellaneous/Dad's-Blinis" data-for="7-Miscellaneous/Dad's-Blinis">Dad's Blinis</a></li><li><a href="../7-Miscellaneous/Danielle's-Hot-Pepper-Jelly" data-for="7-Miscellaneous/Danielle's-Hot-Pepper-Jelly">Danielle's Hot Pepper Jelly</a></li><li><a href="../7-Miscellaneous/Danielle's-Stuffed-French-Toast" data-for="7-Miscellaneous/Danielle's-Stuffed-French-Toast">Danielle's Stuffed French Toast</a></li><li><a href="../7-Miscellaneous/Emily's-Favorite-Pancakes-(Baby-Pancakes)" data-for="7-Miscellaneous/Emily's-Favorite-Pancakes-(Baby-Pancakes)">Emily's Favorite Pancakes (Baby Pancakes)</a></li><li><a href="../7-Miscellaneous/French-Breakfast-Puffs" data-for="7-Miscellaneous/French-Breakfast-Puffs">French Breakfast Puffs</a></li><li><a href="../7-Miscellaneous/Grandma-Leaper's-Christmas-Breakfast" data-for="7-Miscellaneous/Grandma-Leaper's-Christmas-Breakfast">Grandma Leaper's Christmas Breakfast</a></li><li><a href="../7-Miscellaneous/Grandma-Peters'-Meatballs" data-for="7-Miscellaneous/Grandma-Peters'-Meatballs">Grandma Peters' Meatballs</a></li><li><a href="../7-Miscellaneous/Grandma-Peters'-Sauce" data-for="7-Miscellaneous/Grandma-Peters'-Sauce">Grandma Peters' Sauce</a></li><li><a href="../7-Miscellaneous/Great-Gift-Mustard" data-for="7-Miscellaneous/Great-Gift-Mustard">Great Gift Mustard</a></li><li><a href="../7-Miscellaneous/Mint-Sauce-(for-Lamb)" data-for="7-Miscellaneous/Mint-Sauce-(for-Lamb)">Mint Sauce (for Lamb)</a></li><li><a href="../7-Miscellaneous/Nama's-Magic-Cough-Medicine" data-for="7-Miscellaneous/Nama's-Magic-Cough-Medicine">Nama's Magic Cough Medicine</a></li><li><a href="../7-Miscellaneous/Patrick's-Sunday-Breakfast-(Biscuits-and-Gravy)" data-for="7-Miscellaneous/Patrick's-Sunday-Breakfast-(Biscuits-and-Gravy)">Patrick's Sunday Breakfast (Biscuits and Gravy)</a></li><li><a href="../7-Miscellaneous/Peters'-Anytime-Meal" data-for="7-Miscellaneous/Peters'-Anytime-Meal">Peters' Anytime Meal</a></li><li><a href="../7-Miscellaneous/Pimento-Mushroom-Sauce" data-for="7-Miscellaneous/Pimento-Mushroom-Sauce">Pimento-Mushroom Sauce</a></li><li><a href="../7-Miscellaneous/Richard's-Turkey-Stuffing" data-for="7-Miscellaneous/Richard's-Turkey-Stuffing">Richard's Turkey Stuffing</a></li><li><a href="../7-Miscellaneous/Sunday-Afternoon-Fondue" data-for="7-Miscellaneous/Sunday-Afternoon-Fondue">Sunday Afternoon Fondue</a></li><li><a href="../7-Miscellaneous/Uncle-Mark's-French-Toast" data-for="7-Miscellaneous/Uncle-Mark's-French-Toast">Uncle Mark's French Toast</a></li></ul></div></li><li><div class="folder-container"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="folder-icon"><polyline points="6 9 12 15 18 9"></polyline></svg><div data-folderpath="8-Extra"><button class="folder-button"><span class="folder-title">8 Extra</span></button></div></div><div class="folder-outer "><ul style="padding-left:1.4rem;" class="content" data-folderul="8-Extra"><li><div class="folder-container"><svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="5 8 14 8" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="folder-icon"><polyline points="6 9 12 15 18 9"></polyline></svg><div data-folderpath="8-Extra/Browse-by"><button class="folder-button"><span class="folder-title">Browse by</span></button></div></div><div class="folder-outer "><ul style="padding-left:1.4rem;" class="content" data-folderul="8-Extra/Browse-by"><li><a href="../8-Extra/Browse-by/Authors" data-for="8-Extra/Browse-by/Authors">Authors</a></li></ul></div></li><li><a href="../8-Extra/Book-Digital-Backup" data-for="8-Extra/Book-Digital-Backup">Book Digital Backup</a></li><li><a href="../8-Extra/Self-hosting-guide" data-for="8-Extra/Self-hosting-guide">Self hosting guide</a></li><li><a href="../8-Extra/Web-Version-vs-Book-Version" data-for="8-Extra/Web-Version-vs-Book-Version">Web Version vs Book Version</a></li></ul></div></li><li><div class="folder-outer "><ul style="padding-left:0;" class="content" data-folderul></ul></div></li></ul></div></li><li id="explorer-end"></li></ul></div></div></div><div class="center"><div class="page-header"><div class="popover-hint"><h1 class="article-title">Self hosting guide</h1></div></div><article class="popover-hint narrow-page"><p>In this guide I tell you how to <strong>install NGINX</strong> on your Linux based machine and how to serve the entire website all <strong>locally on your own network using hardware you control</strong> (Or you can make it public but you need a domain and a SSL cert)</p>
<h1 id="requirements">Requirements<a role="anchor" aria-hidden="true" tabindex="-1" data-no-popover="true" href="#requirements" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<ul>
<li><strong>Basic Linux knowledge</strong>.</li>
<li><strong>A Linux server</strong> (Ex. Old laptop or even a <a href="https://www.pishop.us/product/raspberry-pi-4-model-b-4gb" class="external">RasberryPi<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>) or Linux VM/LXC (Ex. <a href="https://www.proxmox.com/en/proxmox-virtual-environment/overview" class="external">Proxmox<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>, <a href="https://www.vmware.com/products/cloud-infrastructure/esxi-and-esx" class="external">VMware<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>, or basically any Linux VPS like <a href="https://www.hetzner.com/cloud/" class="external">Hetzner<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>, <a href="https://www.digitalocean.com/products/droplets" class="external">DigitalOcean<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>, <a href="https://aws.amazon.com/ec2/" class="external">AWS<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a>).
<ul>
<li><strong>Preferably running a Debian</strong> based distribution (If your using another one some commands may be different but you should be able to figure it out)</li>
</ul>
</li>
</ul>
<h1 id="guide">Guide<a role="anchor" aria-hidden="true" tabindex="-1" data-no-popover="true" href="#guide" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h1>
<h2 id="install-nginx">Install NGINX<a role="anchor" aria-hidden="true" tabindex="-1" data-no-popover="true" href="#install-nginx" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<blockquote class="callout todo is-collapsible is-collapsed" data-callout="todo" data-callout-fold>
<div class="callout-title">
<div class="callout-icon"></div>
<div class="callout-title-inner"><p>(Recommended) Debian and Ubuntu </p></div>
<div class="fold-callout-icon"></div>
</div>
<div class="callout-content">
<p>Update the Debian repository information:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> apt-get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> update</span></span></code></pre></figure>
<p>Install the NGINX Open Source package:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> apt-get</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nginx</span></span></code></pre></figure>
<p>Verify the installation:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nginx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -v</span></span></code></pre></figure>
</div>
</blockquote>
<blockquote class="callout info is-collapsible is-collapsed" data-callout="info" data-callout-fold>
<div class="callout-title">
<div class="callout-icon"></div>
<div class="callout-title-inner"><p>Alpine Linux </p></div>
<div class="fold-callout-icon"></div>
</div>
<div class="callout-content">
<p>Install the prerequisites:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> apk</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> openssl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> curl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ca-certificates</span></span></code></pre></figure>
<p>To set up the apk repository for stable NGINX packages, run the command:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">printf</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> &quot;%s%s%s\n&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span data-line><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">&quot;http://nginx.org/packages/alpine/v&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span data-line><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">`</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">egrep</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '^[0-9]+\.[0-9]+' /etc/alpine-release`</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">&quot;/main&quot;</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span data-line><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;">|</span><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;"> sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> tee</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -a</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /etc/apk/repositories</span></span></code></pre></figure>
<p>Import an official NGINX signing key so apk could verify the packages authenticity. Fetch the key:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /tmp/nginx_signing.rsa.pub</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://nginx.org/keys/nginx_signing.rsa.pub</span></span></code></pre></figure>
<p>Verify that the downloaded file contains the proper key:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">openssl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rsa</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -pubin</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -in</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /tmp/nginx_signing.rsa.pub</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -text</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -noout</span></span></code></pre></figure>
<p>The output should contain the following modulus:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="text" data-theme="github-light github-dark"><code data-language="text" data-theme="github-light github-dark" style="display:grid;"><span data-line><span>Public-Key: (2048 bit)</span></span>
<span data-line><span>Modulus:</span></span>
<span data-line><span> 00:fe:14:f6:0a:1a:b8:86:19:fe:cd:ab:02:9f:58:</span></span>
<span data-line><span> 2f:37:70:15:74:d6:06:9b:81:55:90:99:96:cc:70:</span></span>
<span data-line><span> 5c:de:5b:e8:4c:b2:0c:47:5b:a8:a2:98:3d:11:b1:</span></span>
<span data-line><span> f6:7d:a0:46:df:24:23:c6:d0:24:52:67:ba:69:ab:</span></span>
<span data-line><span> 9a:4a:6a:66:2c:db:e1:09:f1:0d:b2:b0:e1:47:1f:</span></span>
<span data-line><span> 0a:46:ac:0d:82:f3:3c:8d:02:ce:08:43:19:d9:64:</span></span>
<span data-line><span> 86:c4:4e:07:12:c0:5b:43:ba:7d:17:8a:a3:f0:3d:</span></span>
<span data-line><span> 98:32:b9:75:66:f4:f0:1b:2d:94:5b:7c:1c:e6:f3:</span></span>
<span data-line><span> 04:7f:dd:25:b2:82:a6:41:04:b7:50:93:94:c4:7c:</span></span>
<span data-line><span> 34:7e:12:7c:bf:33:54:55:47:8c:42:94:40:8e:34:</span></span>
<span data-line><span> 5f:54:04:1d:9e:8c:57:48:d4:b0:f8:e4:03:db:3f:</span></span>
<span data-line><span> 68:6c:37:fa:62:14:1c:94:d6:de:f2:2b:68:29:17:</span></span>
<span data-line><span> 24:6d:f7:b5:b3:18:79:fd:31:5e:7f:4c:be:c0:99:</span></span>
<span data-line><span> 13:cc:e2:97:2b:dc:96:9c:9a:d0:a7:c5:77:82:67:</span></span>
<span data-line><span> c9:cb:a9:e7:68:4a:e1:c5:ba:1c:32:0e:79:40:6e:</span></span>
<span data-line><span> ef:08:d7:a3:b9:5d:1a:df:ce:1a:c7:44:91:4c:d4:</span></span>
<span data-line><span> 99:c8:88:69:b3:66:2e:b3:06:f1:f4:22:d7:f2:5f:</span></span>
<span data-line><span> ab:6d</span></span>
<span data-line><span>Exponent: 65537 (0x10001)</span></span></code></pre></figure>
<p>Move the key to <code>apk</code> trusted keys storage:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> mv</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /tmp/nginx_signing.rsa.pub</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /etc/apk/keys/</span></span></code></pre></figure>
<p>To install NGINX, run the command:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> apk</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> add</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nginx</span></span></code></pre></figure>
</div>
</blockquote>
<blockquote class="callout info is-collapsible is-collapsed" data-callout="info" data-callout-fold>
<div class="callout-title">
<div class="callout-icon"></div>
<div class="callout-title-inner"><p>RHEL, CentOS, Oracle Linux, AlmaLinux, Rocky Linux </p></div>
<div class="fold-callout-icon"></div>
</div>
<div class="callout-content">
<p>Install the EPEL repository:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yum</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> epel-release</span></span></code></pre></figure>
<p>Update the repository:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yum</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> update</span></span></code></pre></figure>
<p>Install NGINX Open Source:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yum</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nginx</span></span></code></pre></figure>
<p>Verify the installation:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nginx</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -v</span></span></code></pre></figure>
</div>
</blockquote>
<blockquote class="callout info is-collapsible is-collapsed" data-callout="info" data-callout-fold>
<div class="callout-title">
<div class="callout-icon"></div>
<div class="callout-title-inner"><p>SUSE </p></div>
<div class="fold-callout-icon"></div>
</div>
<div class="callout-content">
<p>Install the prerequisites:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> zypper</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> curl</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> ca-certificates</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> gpg2</span></span></code></pre></figure>
<p>To set up the <code>zypper</code> repository for stable NGINX packages, run the following command:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> zypper</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> addrepo</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --gpgcheck</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --type</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yum</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --refresh</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --check</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> \</span></span>
<span data-line><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> 'http://nginx.org/packages/sles/$releasever_major'</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nginx-stable</span></span></code></pre></figure>
<p>Import an official NGINX signing key so <code>zypper/rpm</code> could verify the packages authenticity. Fetch the key:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">curl</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -o</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /tmp/nginx_signing.key</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://nginx.org/keys/nginx_signing.key</span></span></code></pre></figure>
<p>Verify that the downloaded file contains the proper key:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">gpg</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --with-fingerprint</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /tmp/nginx_signing.key</span></span></code></pre></figure>
<p>The output should contain the full fingerprints: <code>8540 A6F1 8833 A80E 9C16 53A4 2FD2 1310 B49F 6B46</code>, <code>573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62</code>, <code>9E9B E90E ACBC DE69 FE9B 204C BCDC D8A3 8D88 A2B3</code> as follows:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="text" data-theme="github-light github-dark"><code data-language="text" data-theme="github-light github-dark" style="display:grid;"><span data-line><span>pub rsa4096 2024-05-29 [SC]</span></span>
<span data-line><span> 8540A6F18833A80E9C1653A42FD21310B49F6B46</span></span>
<span data-line><span>uid nginx signing key &lt;signing-key-2@nginx.com></span></span>
<span data-line> </span>
<span data-line><span>pub rsa2048 2011-08-19 [SC] [expires: 2027-05-24]</span></span>
<span data-line><span> 573BFD6B3D8FBC641079A6ABABF5BD827BD9BF62</span></span>
<span data-line><span>uid nginx signing key &lt;signing-key@nginx.com></span></span>
<span data-line> </span>
<span data-line><span>pub rsa4096 2024-05-29 [SC]</span></span>
<span data-line><span> 9E9BE90EACBCDE69FE9B204CBCDCD8A38D88A2B3</span></span>
<span data-line><span>uid nginx signing key &lt;signing-key-3@nginx.com></span></span></code></pre></figure>
<p>If the fingerprint is different, remove the file.</p>
<p>Import the key to the rpm database:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> rpmkeys</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> --import</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /tmp/nginx_signing.key</span></span></code></pre></figure>
<p>To install NGINX, run the command:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> zypper</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nginx</span></span></code></pre></figure>
</div>
</blockquote>
<blockquote class="callout info is-collapsible is-collapsed" data-callout="info" data-callout-fold>
<div class="callout-title">
<div class="callout-icon"></div>
<div class="callout-title-inner"><p>Amazon Linux </p></div>
<div class="fold-callout-icon"></div>
</div>
<div class="callout-content">
<p>Install the prerequisites:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yum</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yum-utils</span></span></code></pre></figure>
<p>To set up the <code>yum</code> repository for Amazon Linux 2, create the file named <code>/etc/yum.repos.d/nginx.repo</code> with the following contents:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="text" data-theme="github-light github-dark"><code data-language="text" data-theme="github-light github-dark" style="display:grid;"><span data-line><span>[nginx-stable]</span></span>
<span data-line><span>name=nginx stable repo</span></span>
<span data-line><span>baseurl=http://nginx.org/packages/amzn2/$releasever/$basearch/</span></span>
<span data-line><span>gpgcheck=1</span></span>
<span data-line><span>enabled=1</span></span>
<span data-line><span>gpgkey=https://nginx.org/keys/nginx_signing.key</span></span>
<span data-line><span>module_hotfixes=true</span></span>
<span data-line> </span>
<span data-line><span>[nginx-mainline]</span></span>
<span data-line><span>name=nginx mainline repo</span></span>
<span data-line><span>baseurl=http://nginx.org/packages/mainline/amzn2/$releasever/$basearch/</span></span>
<span data-line><span>gpgcheck=1</span></span>
<span data-line><span>enabled=0</span></span>
<span data-line><span>gpgkey=https://nginx.org/keys/nginx_signing.key</span></span>
<span data-line><span>module_hotfixes=true</span></span></code></pre></figure>
<p>To set up the <code>yum</code> repository for Amazon Linux 2023, create the file named <code>/etc/yum.repos.d/nginx.repo</code> with the following contents:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="text" data-theme="github-light github-dark"><code data-language="text" data-theme="github-light github-dark" style="display:grid;"><span data-line><span>[nginx-stable]</span></span>
<span data-line><span>name=nginx stable repo</span></span>
<span data-line><span>baseurl=http://nginx.org/packages/amzn/2023/$basearch/</span></span>
<span data-line><span>gpgcheck=1</span></span>
<span data-line><span>enabled=1</span></span>
<span data-line><span>gpgkey=https://nginx.org/keys/nginx_signing.key</span></span>
<span data-line><span>module_hotfixes=true</span></span>
<span data-line> </span>
<span data-line><span>[nginx-mainline]</span></span>
<span data-line><span>name=nginx mainline repo</span></span>
<span data-line><span>baseurl=http://nginx.org/packages/mainline/amzn/2023/$basearch/</span></span>
<span data-line><span>gpgcheck=1</span></span>
<span data-line><span>enabled=0</span></span>
<span data-line><span>gpgkey=https://nginx.org/keys/nginx_signing.key</span></span>
<span data-line><span>module_hotfixes=true</span></span></code></pre></figure>
<p>Install nginx:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">sudo</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> yum</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> install</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nginx</span></span></code></pre></figure>
<p>When prompted to accept the GPG key, verify that the fingerprint matches:
<code>8540 A6F1 8833 A80E 9C16 53A4 2FD2 1310 B49F 6B46</code>,
<code>573B FD6B 3D8F BC64 1079 A6AB ABF5 BD82 7BD9 BF62</code>,
<code>9E9B E90E ACBC DE69 FE9B 204C BCDC D8A3 8D88 A2B3</code>, and if so, accept it.</p>
</div>
</blockquote>
<blockquote class="callout info is-collapsible is-collapsed" data-callout="info" data-callout-fold>
<div class="callout-title">
<div class="callout-icon"></div>
<div class="callout-title-inner"><p>Arch Linux (Not Recommended) </p></div>
<div class="fold-callout-icon"></div>
</div>
<div class="callout-content">
<p>If your using <a href="https://archlinux.org/" class="external">Arch Linux<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> on your server follow <a href="https://wiki.archlinux.org/title/Nginx" class="external">this guide<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> the <a href="https://wiki.archlinux.org/title/Main_page" class="external">Arch Wiki<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> has some of the best most in-depth guides Ive seen. (Arch is amazing for a Linux desktop but <strong>not great in a server environment</strong> due to it being a rolling release distribution you will have to deal with the downtime from managing package/kernel updates daily. <strong>I would recommend <a href="https://www.alpinelinux.org/" class="external">Alpine Linux<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> over Arch</strong> because its a release based distribution)</p>
</div>
</blockquote>
<h2 id="hosting">Hosting<a role="anchor" aria-hidden="true" tabindex="-1" data-no-popover="true" href="#hosting" class="internal"><svg width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M10 13a5 5 0 0 0 7.54.54l3-3a5 5 0 0 0-7.07-7.07l-1.72 1.71"></path><path d="M14 11a5 5 0 0 0-7.54-.54l-3 3a5 5 0 0 0 7.07 7.07l1.71-1.71"></path></svg></a></h2>
<blockquote class="callout question" data-callout="question">
<div class="callout-title">
<div class="callout-icon"></div>
<div class="callout-title-inner"><p>Faq</p></div>
</div>
<div class="callout-content">
<p>I wrote this part <strong>assuming your using a Debian based distribution</strong>. If your using another <strong>you may need to change some commands</strong> (depending on your service manager <code>service</code> may be <code>systemctl</code> for example if your using <code>systemd</code>), install <code>git</code>, or replace <code>/var/www</code> with whatever folder you want.</p>
</div>
</blockquote>
<p>Clone the repository containing the site backup inside of <code>/var/www</code>.</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;">cd</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /var/www</span></span>
<span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> clone</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> https://git.slavserver.com/DooSkagg/SlavinskyCookbook-Backup.git</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> .</span></span></code></pre></figure>
<p>Find your nginx default config by running this command:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">find</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> /</span><span style="--shiki-light:#D73A49;--shiki-dark:#F97583;"> 2></span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;">/dev/null</span><span style="--shiki-light:#005CC5;--shiki-dark:#79B8FF;"> -wholename</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> '*/nginx/sites-enabled/default'</span></span></code></pre></figure>
<p>Open it using <code>vim</code> or <code>nano</code> (or any other text editor) delete all lines inside of the default config and paste the following in:</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="text" data-theme="github-light github-dark"><code data-language="text" data-theme="github-light github-dark" style="display:grid;"><span data-line><span>server {</span></span>
<span data-line><span> listen 80;</span></span>
<span data-line><span> server_name example.com;</span></span>
<span data-line><span> root /var/www;</span></span>
<span data-line><span> index index.html;</span></span>
<span data-line><span> error_page 404 /404.html;</span></span>
<span data-line> </span>
<span data-line><span> location / {</span></span>
<span data-line><span> try_files $uri $uri.html $uri/ =404;</span></span>
<span data-line><span> }</span></span>
<span data-line><span>}</span></span></code></pre></figure>
<p>change the <code>example.com</code> in line 3 to either the domain your going to host it on or the local IP of your server.</p>
<p>Restart NGINX (May be different command depending on your Linux distro)</p>
<figure data-rehype-pretty-code-figure><pre tabindex="0" data-language="bash" data-theme="github-light github-dark"><code data-language="bash" data-theme="github-light github-dark" style="display:grid;"><span data-line><span style="--shiki-light:#6F42C1;--shiki-dark:#B392F0;">service</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> nginx</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF;"> restart</span></span></code></pre></figure>
<p>Access your site at <code>http://[IP_OF_SERVER]:80</code> <em>For HTTPS support <a href="https://nginx.org/en/docs/http/configuring_https_servers.html" class="external">this guide<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> should help you</em></p>
<blockquote class="callout tip is-collapsible is-collapsed" data-callout="tip" data-callout-fold>
<div class="callout-title">
<div class="callout-icon"></div>
<div class="callout-title-inner"><p>Tip</p></div>
<div class="fold-callout-icon"></div>
</div>
<div class="callout-content">
<p>You can also skip all of this and <a href="https://git.slavserver.com/DooSkagg/SlavinskyCookbook-Backup/archive/main.zip" class="external">download<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> the site files as a <code>.zip</code> and upload them to <a href="https://developers.cloudflare.com/pages/get-started/direct-upload/#drag-and-drop" class="external">Cloudflare Pages<svg aria-hidden="true" class="external-icon" style="max-width:0.8em;max-height:0.8em;" viewBox="0 0 512 512"><path d="M320 0H288V64h32 82.7L201.4 265.4 178.7 288 224 333.3l22.6-22.6L448 109.3V192v32h64V192 32 0H480 320zM32 32H0V64 480v32H32 456h32V480 352 320H424v32 96H64V96h96 32V32H160 32z"></path></svg></a> for free hosting (Im personally not a fan of this because I like running everything on my own hardware).</p>
</div>
</blockquote></article><hr/><div class="page-footer"></div></div><div class="right sidebar"><div class="graph"><h3>Graph View</h3><div class="graph-outer"><div id="graph-container" data-cfg="{&quot;drag&quot;:true,&quot;zoom&quot;:true,&quot;depth&quot;:1,&quot;scale&quot;:1.1,&quot;repelForce&quot;:0.5,&quot;centerForce&quot;:0.3,&quot;linkDistance&quot;:30,&quot;fontSize&quot;:0.8,&quot;opacityScale&quot;:0,&quot;showTags&quot;:true,&quot;removeTags&quot;:[],&quot;focusOnHover&quot;:false}"></div><button id="global-graph-icon" aria-label="Global Graph"><svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 55 55" fill="currentColor" xml:space="preserve"><path d="M49,0c-3.309,0-6,2.691-6,6c0,1.035,0.263,2.009,0.726,2.86l-9.829,9.829C32.542,17.634,30.846,17,29,17
s-3.542,0.634-4.898,1.688l-7.669-7.669C16.785,10.424,17,9.74,17,9c0-2.206-1.794-4-4-4S9,6.794,9,9s1.794,4,4,4
c0.74,0,1.424-0.215,2.019-0.567l7.669,7.669C21.634,21.458,21,23.154,21,25s0.634,3.542,1.688,4.897L10.024,42.562
C8.958,41.595,7.549,41,6,41c-3.309,0-6,2.691-6,6s2.691,6,6,6s6-2.691,6-6c0-1.035-0.263-2.009-0.726-2.86l12.829-12.829
c1.106,0.86,2.44,1.436,3.898,1.619v10.16c-2.833,0.478-5,2.942-5,5.91c0,3.309,2.691,6,6,6s6-2.691,6-6c0-2.967-2.167-5.431-5-5.91
v-10.16c1.458-0.183,2.792-0.759,3.898-1.619l7.669,7.669C41.215,39.576,41,40.26,41,41c0,2.206,1.794,4,4,4s4-1.794,4-4
s-1.794-4-4-4c-0.74,0-1.424,0.215-2.019,0.567l-7.669-7.669C36.366,28.542,37,26.846,37,25s-0.634-3.542-1.688-4.897l9.665-9.665
C46.042,11.405,47.451,12,49,12c3.309,0,6-2.691,6-6S52.309,0,49,0z M11,9c0-1.103,0.897-2,2-2s2,0.897,2,2s-0.897,2-2,2
S11,10.103,11,9z M6,51c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S8.206,51,6,51z M33,49c0,2.206-1.794,4-4,4s-4-1.794-4-4
s1.794-4,4-4S33,46.794,33,49z M29,31c-3.309,0-6-2.691-6-6s2.691-6,6-6s6,2.691,6,6S32.309,31,29,31z M47,41c0,1.103-0.897,2-2,2
s-2-0.897-2-2s0.897-2,2-2S47,39.897,47,41z M49,10c-2.206,0-4-1.794-4-4s1.794-4,4-4s4,1.794,4,4S51.206,10,49,10z"></path></svg></button></div><div id="global-graph-outer"><div id="global-graph-container" data-cfg="{&quot;drag&quot;:true,&quot;zoom&quot;:true,&quot;depth&quot;:-1,&quot;scale&quot;:0.9,&quot;repelForce&quot;:0.5,&quot;centerForce&quot;:0.3,&quot;linkDistance&quot;:30,&quot;fontSize&quot;:1,&quot;opacityScale&quot;:0,&quot;showTags&quot;:true,&quot;removeTags&quot;:[],&quot;focusOnHover&quot;:true}"></div></div></div><div class="toc desktop-only"><button type="button" id="toc" class aria-controls="toc-content" aria-expanded="true"><h3>Table of Contents</h3><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="fold"><polyline points="6 9 12 15 18 9"></polyline></svg></button><div id="toc-content" class><ul class="overflow"><li class="depth-0"><a href="#requirements" data-for="requirements">Requirements</a></li><li class="depth-0"><a href="#guide" data-for="guide">Guide</a></li><li class="depth-1"><a href="#install-nginx" data-for="install-nginx">Install NGINX</a></li><li class="depth-1"><a href="#hosting" data-for="hosting">Hosting</a></li></ul></div></div></div><footer class><p>Made by Ryan</p><ul></ul></footer></div></div></body><script type="application/javascript">var m=Object.create;var f=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var S=Object.getOwnPropertyNames;var y=Object.getPrototypeOf,b=Object.prototype.hasOwnProperty;var R=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var j=(e,t,n,A)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of S(t))!b.call(e,i)&&i!==n&&f(e,i,{get:()=>t[i],enumerable:!(A=x(t,i))||A.enumerable});return e};var v=(e,t,n)=>(n=e!=null?m(y(e)):{},j(t||!e||!e.__esModule?f(n,"default",{value:e,enumerable:!0}):n,e));var p=R((_,g)=>{"use strict";g.exports=w;function B(e){return e instanceof Buffer?Buffer.from(e):new e.constructor(e.buffer.slice(),e.byteOffset,e.length)}function w(e){if(e=e||{},e.circles)return L(e);let t=new Map;if(t.set(Date,F=>new Date(F)),t.set(Map,(F,E)=>new Map(A(Array.from(F),E))),t.set(Set,(F,E)=>new Set(A(Array.from(F),E))),e.constructorHandlers)for(let F of e.constructorHandlers)t.set(F[0],F[1]);let n=null;return e.proto?C:i;function A(F,E){let u=Object.keys(F),D=new Array(u.length);for(let l=0;l<u.length;l++){let r=u[l],s=F[r];typeof s!="object"||s===null?D[r]=s:s.constructor!==Object&&(n=t.get(s.constructor))?D[r]=n(s,E):ArrayBuffer.isView(s)?D[r]=B(s):D[r]=E(s)}return D}function i(F){if(typeof F!="object"||F===null)return F;if(Array.isArray(F))return A(F,i);if(F.constructor!==Object&&(n=t.get(F.constructor)))return n(F,i);let E={};for(let u in F){if(Object.hasOwnProperty.call(F,u)===!1)continue;let D=F[u];typeof D!="object"||D===null?E[u]=D:D.constructor!==Object&&(n=t.get(D.constructor))?E[u]=n(D,i):ArrayBuffer.isView(D)?E[u]=B(D):E[u]=i(D)}return E}function C(F){if(typeof F!="object"||F===null)return F;if(Array.isArray(F))return A(F,C);if(F.constructor!==Object&&(n=t.get(F.constructor)))return n(F,C);let E={};for(let u in F){let D=F[u];typeof D!="object"||D===null?E[u]=D:D.constructor!==Object&&(n=t.get(D.constructor))?E[u]=n(D,C):ArrayBuffer.isView(D)?E[u]=B(D):E[u]=C(D)}return E}}function L(e){let t=[],n=[],A=new Map;if(A.set(Date,u=>new Date(u)),A.set(Map,(u,D)=>new Map(C(Array.from(u),D))),A.set(Set,(u,D)=>new Set(C(Array.from(u),D))),e.constructorHandlers)for(let u of e.constructorHandlers)A.set(u[0],u[1]);let i=null;return e.proto?E:F;function C(u,D){let l=Object.keys(u),r=new Array(l.length);for(let s=0;s<l.length;s++){let c=l[s],o=u[c];if(typeof o!="object"||o===null)r[c]=o;else if(o.constructor!==Object&&(i=A.get(o.constructor)))r[c]=i(o,D);else if(ArrayBuffer.isView(o))r[c]=B(o);else{let a=t.indexOf(o);a!==-1?r[c]=n[a]:r[c]=D(o)}}return r}function F(u){if(typeof u!="object"||u===null)return u;if(Array.isArray(u))return C(u,F);if(u.constructor!==Object&&(i=A.get(u.constructor)))return i(u,F);let D={};t.push(u),n.push(D);for(let l in u){if(Object.hasOwnProperty.call(u,l)===!1)continue;let r=u[l];if(typeof r!="object"||r===null)D[l]=r;else if(r.constructor!==Object&&(i=A.get(r.constructor)))D[l]=i(r,F);else if(ArrayBuffer.isView(r))D[l]=B(r);else{let s=t.indexOf(r);s!==-1?D[l]=n[s]:D[l]=F(r)}}return t.pop(),n.pop(),D}function E(u){if(typeof u!="object"||u===null)return u;if(Array.isArray(u))return C(u,E);if(u.constructor!==Object&&(i=A.get(u.constructor)))return i(u,E);let D={};t.push(u),n.push(D);for(let l in u){let r=u[l];if(typeof r!="object"||r===null)D[l]=r;else if(r.constructor!==Object&&(i=A.get(r.constructor)))D[l]=i(r,E);else if(ArrayBuffer.isView(r))D[l]=B(r);else{let s=t.indexOf(r);s!==-1?D[l]=n[s]:D[l]=E(r)}}return t.pop(),n.pop(),D}}});var W=Object.hasOwnProperty;var d=v(p(),1),$=(0,d.default)();function h(e){return e.document.body.dataset.slug}var O=e=>`${h(window)}-checkbox-${e}`;document.addEventListener("nav",()=>{document.querySelectorAll("input.checkbox-toggle").forEach((t,n)=>{let A=O(n),i=C=>{let F=C.target?.checked?"true":"false";localStorage.setItem(A,F)};t.addEventListener("change",i),window.addCleanup(()=>t.removeEventListener("change",i)),localStorage.getItem(A)==="true"&&(t.checked=!0)})});
</script><script type="application/javascript">function c(){let t=this.parentElement;t.classList.toggle("is-collapsed");let l=t.classList.contains("is-collapsed")?this.scrollHeight:t.scrollHeight;t.style.maxHeight=l+"px";let o=t,e=t.parentElement;for(;e;){if(!e.classList.contains("callout"))return;let n=e.classList.contains("is-collapsed")?e.scrollHeight:e.scrollHeight+o.scrollHeight;e.style.maxHeight=n+"px",o=e,e=e.parentElement}}function i(){let t=document.getElementsByClassName("callout is-collapsible");for(let s of t){let l=s.firstElementChild;if(l){l.addEventListener("click",c),window.addCleanup(()=>l.removeEventListener("click",c));let e=s.classList.contains("is-collapsed")?l.scrollHeight:s.scrollHeight;s.style.maxHeight=e+"px"}}}document.addEventListener("nav",i);window.addEventListener("resize",i);
</script><script type="module">
let mermaidImport = undefined
document.addEventListener('nav', async () => {
if (document.querySelector("code.mermaid")) {
mermaidImport ||= await import('https://cdnjs.cloudflare.com/ajax/libs/mermaid/10.7.0/mermaid.esm.min.mjs')
const mermaid = mermaidImport.default
const darkMode = document.documentElement.getAttribute('saved-theme') === 'dark'
mermaid.initialize({
startOnLoad: false,
securityLevel: 'loose',
theme: darkMode ? 'dark' : 'default'
})
await mermaid.run({
querySelector: '.mermaid'
})
}
});
</script><script src="https://cdnjs.cloudflare.com/ajax/libs/KaTeX/0.16.9/contrib/copy-tex.min.js" type="application/javascript"></script><script src="../postscript.js" type="module"></script></html>