mirror of
https://github.com/fosrl/docs.git
synced 2025-05-13 13:50:38 +01:00
add choosing vps section
This commit is contained in:
parent
1bc0c7fb0d
commit
48317fca0f
6 changed files with 117 additions and 93 deletions
|
@ -4,6 +4,7 @@
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
"start": "cd packages/docusaurus && npm start",
|
||||||
"deploy": "AWS_PROFILE=fossorial npx sst deploy --stage prod",
|
"deploy": "AWS_PROFILE=fossorial npx sst deploy --stage prod",
|
||||||
"typecheck": "tsc --noEmit"
|
"typecheck": "tsc --noEmit"
|
||||||
},
|
},
|
||||||
|
|
|
@ -12,8 +12,8 @@ This guide will walk you through setting up the Docker Compose stack manually wi
|
||||||
|
|
||||||
- A Linux system with root access and a public IP address
|
- A Linux system with root access and a public IP address
|
||||||
- We recommend Ubuntu or Debian based systems
|
- We recommend Ubuntu or Debian based systems
|
||||||
- A domain name pointed to your server's IP address
|
- [A domain name pointed to your server's IP address](./04-dns-networking.md)
|
||||||
- **TCP ports 80, 443, and UDP port 51820 exposed** to your Linux instance
|
- [TCP ports 80, 443, and UDP port 51820 exposed to your Linux instance.](./04-dns-networking.md)
|
||||||
- An email address for Let's Encrypt certificate registration
|
- An email address for Let's Encrypt certificate registration
|
||||||
- (Optionally) a SMTP server
|
- (Optionally) a SMTP server
|
||||||
|
|
||||||
|
|
|
@ -1,12 +1,18 @@
|
||||||
# DNS & Networking
|
# DNS & Networking
|
||||||
|
|
||||||
Some notes about how to set up key parts of the networking in this project are below:
|
:::note
|
||||||
|
|
||||||
### DNS
|
You will not need to open any ports on your private (the network running Newt) network. All traffic is sent through the the tunnel. Therefore, you only need to open ports on the VPS running Pangolin.
|
||||||
|
|
||||||
|
:::
|
||||||
|
|
||||||
|
Some notes about how to set up key parts of the networking in this project are below. This is not a comprehensive guide to networking, but should help you get started.
|
||||||
|
|
||||||
|
## DNS
|
||||||
|
|
||||||
In your DNS service you will want to create A (or AAAA for IPv6) records pointing at your VPS hosting Pangolin.
|
In your DNS service you will want to create A (or AAAA for IPv6) records pointing at your VPS hosting Pangolin.
|
||||||
|
|
||||||
##### Wildcards
|
### Wildcards
|
||||||
|
|
||||||
Use *
|
Use *
|
||||||
|
|
||||||
|
@ -14,7 +20,7 @@ Example: **\*.example.com**
|
||||||
|
|
||||||
You will need a wildcard subdomain for each level you want to create and you can not have more than one * in a row for many providers. So if you wanted your resources to include a subdomain like "proxy", then you would want *.proxy.example.com.
|
You will need a wildcard subdomain for each level you want to create and you can not have more than one * in a row for many providers. So if you wanted your resources to include a subdomain like "proxy", then you would want *.proxy.example.com.
|
||||||
|
|
||||||
##### The Root
|
### The Root
|
||||||
|
|
||||||
Use @ (or nothing depending on the provider)
|
Use @ (or nothing depending on the provider)
|
||||||
|
|
||||||
|
@ -28,19 +34,19 @@ Sometimes you need to be patient with your DNS service provider. Once you make t
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### Ports to Expose
|
## Ports to Expose
|
||||||
|
|
||||||
When you setup your VPS you want to make sure that you expose the following ports **on the VPS itself**.
|
When you setup your VPS you want to make sure that you expose the following ports **on the VPS itself**.
|
||||||
|
|
||||||
##### TCP 80
|
### TCP 80
|
||||||
|
|
||||||
If you are using HTTP SSL verification (default from the installer) then Lets Encrypt will try to reach Traefik on this port to verify the subdomain. Non SSL resources will also use this port.
|
If you are using HTTP SSL verification (default from the installer) then Lets Encrypt will try to reach Traefik on this port to verify the subdomain. Non SSL resources will also use this port.
|
||||||
|
|
||||||
##### TCP 443
|
### TCP 443
|
||||||
|
|
||||||
The Pangolin web UI and SSL resources use this port to connect with HTTPS.
|
The Pangolin web UI and SSL resources use this port to connect with HTTPS.
|
||||||
|
|
||||||
##### UDP 51820
|
### UDP 51820
|
||||||
|
|
||||||
This is the default WireGuard port and is used for Newt and WireGuard clients to connect to Gerbil. If you change this in the config file then you would use that port.
|
This is the default WireGuard port and is used for Newt and WireGuard clients to connect to Gerbil. If you change this in the config file then you would use that port.
|
||||||
|
|
||||||
|
@ -50,6 +56,6 @@ Its important to **ONLY** expose the ports you need. Effectively by tunneling ou
|
||||||
|
|
||||||
:::
|
:::
|
||||||
|
|
||||||
### Notes on Docker
|
## Notes on Docker
|
||||||
|
|
||||||
If you deploy Newt in Docker: "localhost" only refers to stuff inside of the container itself, so if you want to address other things in the Docker environment you need the internal docker IP of that service or the host when setting up your resources.
|
If you deploy Newt in Docker: "localhost" only refers to stuff inside of the container itself, so if you want to address other things in the Docker environment you need the internal docker IP of that service or the host when setting up your resources.
|
|
@ -0,0 +1,41 @@
|
||||||
|
# Choosing a VPS
|
||||||
|
|
||||||
|
Our stack is lightweight and efficient, so you don’t need a high-powered server to get started. A minimal VPS instance with **1 vCPU, 1GB RAM, and 8GB SSD** will perform perfectly well for most use cases. In some cases, you may be able to get away with even less.
|
||||||
|
|
||||||
|
## Recommended VPS Providers
|
||||||
|
|
||||||
|
Here’s a list of popular VPS platforms in no particular order, all offering low-cost options that fit the recommended specs:
|
||||||
|
|
||||||
|
1. **[Amazon EC2](https://instances.vantage.sh/)**
|
||||||
|
|
||||||
|
- Pricing: Starts around $8.50/month for 1 vCPU, 1GB RAM, and 8GB SSD.
|
||||||
|
|
||||||
|
2. **[DigitalOcean](https://www.digitalocean.com/pricing/droplets)**
|
||||||
|
|
||||||
|
- Pricing: Starts around $6/month for 1 vCPU, 1GB RAM, and 25GB SSD.
|
||||||
|
|
||||||
|
3. **[Vultr](https://www.vultr.com/pricing)**
|
||||||
|
|
||||||
|
- Pricing: Starts around $5/month for 1 vCPU, 1GB RAM, and 25GB SSD.
|
||||||
|
|
||||||
|
4. **[Linode](https://www.linode.com/pricing/)**
|
||||||
|
|
||||||
|
- Pricing: Starts around $5/month for 1 vCPU, 1GB RAM, and 25GB SSD.
|
||||||
|
|
||||||
|
5. **[Hetzner Cloud](https://www.hetzner.com/cloud)**
|
||||||
|
|
||||||
|
- Pricing: Starts around $4.59/month for 2 vCPU, 4GB RAM, and 40GB SSD.
|
||||||
|
|
||||||
|
6. **[UpCloud](https://upcloud.com/pricing/)**
|
||||||
|
|
||||||
|
- Pricing: Starts around $3.30/month for 1 vCPU, 1GB RAM, and 10GB SSD.
|
||||||
|
|
||||||
|
7. **[OVHcloud](https://www.ovhcloud.com/en/vps/)**
|
||||||
|
|
||||||
|
- Pricing: Starts around $5.50/month for 2 vCPU, 2GB RAM, and 40GB SSD.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## General Pricing Overview
|
||||||
|
|
||||||
|
You can find VPS instances starting from **$3 to $6 per month**, depending on the provider and location. While all of the above options are suitable, we recommend choosing a provider with servers close to your user base for optimal performance.
|
|
@ -1,43 +1,43 @@
|
||||||
import {themes as prismThemes} from 'prism-react-renderer';
|
import { themes as prismThemes } from "prism-react-renderer";
|
||||||
import type {Config} from '@docusaurus/types';
|
import type { Config } from "@docusaurus/types";
|
||||||
import type * as Preset from '@docusaurus/preset-classic';
|
import type * as Preset from "@docusaurus/preset-classic";
|
||||||
|
|
||||||
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
|
// This runs in Node.js - Don't use client-side code here (browser APIs, JSX...)
|
||||||
|
|
||||||
const config: Config = {
|
const config: Config = {
|
||||||
title: 'Fossorial Docs',
|
title: "Fossorial Docs",
|
||||||
tagline: 'Adapted for use in burrowing',
|
tagline: "Adapted for use in burrowing",
|
||||||
favicon: 'img/favicon.ico',
|
favicon: "img/favicon.ico",
|
||||||
|
|
||||||
// Set the production url of your site here
|
// Set the production url of your site here
|
||||||
url: 'https://docs.fossorial.io',
|
url: "https://docs.fossorial.io",
|
||||||
// Set the /<baseUrl>/ pathname under which your site is served
|
// Set the /<baseUrl>/ pathname under which your site is served
|
||||||
// For GitHub pages deployment, it is often '/<projectName>/'
|
// For GitHub pages deployment, it is often '/<projectName>/'
|
||||||
baseUrl: '/',
|
baseUrl: "/",
|
||||||
|
|
||||||
// GitHub pages deployment config.
|
// GitHub pages deployment config.
|
||||||
// If you aren't using GitHub pages, you don't need these.
|
// If you aren't using GitHub pages, you don't need these.
|
||||||
organizationName: 'Fossorial', // Usually your GitHub org/user name.
|
organizationName: "Fossorial", // Usually your GitHub org/user name.
|
||||||
projectName: 'docs', // Usually your repo name.
|
projectName: "docs", // Usually your repo name.
|
||||||
|
|
||||||
onBrokenLinks: 'throw',
|
onBrokenLinks: "throw",
|
||||||
onBrokenMarkdownLinks: 'warn',
|
onBrokenMarkdownLinks: "warn",
|
||||||
|
|
||||||
// Even if you don't use internationalization, you can use this field to set
|
// Even if you don't use internationalization, you can use this field to set
|
||||||
// useful metadata like html lang. For example, if your site is Chinese, you
|
// useful metadata like html lang. For example, if your site is Chinese, you
|
||||||
// may want to replace "en" with "zh-Hans".
|
// may want to replace "en" with "zh-Hans".
|
||||||
i18n: {
|
i18n: {
|
||||||
defaultLocale: 'en',
|
defaultLocale: "en",
|
||||||
locales: ['en'],
|
locales: ["en"],
|
||||||
},
|
},
|
||||||
|
|
||||||
presets: [
|
presets: [
|
||||||
[
|
[
|
||||||
'classic',
|
"classic",
|
||||||
{
|
{
|
||||||
docs: {
|
docs: {
|
||||||
sidebarPath: './sidebars.ts',
|
sidebarPath: "./sidebars.ts",
|
||||||
routeBasePath: '/'
|
routeBasePath: "/",
|
||||||
// Please change this to your repo.
|
// Please change this to your repo.
|
||||||
// Remove this to remove the "edit this page" links.
|
// Remove this to remove the "edit this page" links.
|
||||||
// editUrl:
|
// editUrl:
|
||||||
|
@ -60,7 +60,7 @@ const config: Config = {
|
||||||
// onUntruncatedBlogPosts: 'warn',
|
// onUntruncatedBlogPosts: 'warn',
|
||||||
// },
|
// },
|
||||||
theme: {
|
theme: {
|
||||||
customCss: './src/css/custom.css',
|
customCss: "./src/css/custom.css",
|
||||||
},
|
},
|
||||||
} satisfies Preset.Options,
|
} satisfies Preset.Options,
|
||||||
],
|
],
|
||||||
|
@ -68,55 +68,63 @@ const config: Config = {
|
||||||
|
|
||||||
themeConfig: {
|
themeConfig: {
|
||||||
// Replace with your project's social card
|
// Replace with your project's social card
|
||||||
image: 'img/docusaurus-social-card.jpg',
|
image: "img/docusaurus-social-card.jpg",
|
||||||
|
algolia: {
|
||||||
|
// The application ID provided by Algolia
|
||||||
|
appId: "CVXQS7OHYA",
|
||||||
|
// Public API key: it is safe to commit it
|
||||||
|
apiKey: "37f86a9f9a04ab1c0f17339c86566ce5",
|
||||||
|
indexName: "fossorial",
|
||||||
|
contextualSearch: false,
|
||||||
|
},
|
||||||
navbar: {
|
navbar: {
|
||||||
title: 'Fossorial',
|
title: "Fossorial",
|
||||||
logo: {
|
logo: {
|
||||||
alt: 'Fossorial Logo',
|
alt: "Fossorial Logo",
|
||||||
src: 'img/pangolin_orange.svg',
|
src: "img/pangolin_orange.svg",
|
||||||
},
|
},
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
type: 'docSidebar',
|
type: "docSidebar",
|
||||||
sidebarId: 'tutorialSidebar',
|
sidebarId: "tutorialSidebar",
|
||||||
position: 'left',
|
position: "left",
|
||||||
label: 'Docs',
|
label: "Docs",
|
||||||
},
|
},
|
||||||
// {to: '/blog', label: 'Blog', position: 'left'},
|
// {to: '/blog', label: 'Blog', position: 'left'},
|
||||||
{
|
{
|
||||||
href: 'https://github.com/fosrl',
|
href: "https://github.com/fosrl",
|
||||||
label: 'GitHub',
|
label: "GitHub",
|
||||||
position: 'right',
|
position: "right",
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
href: 'https://discord.gg/HCJR8Xhme4',
|
href: "https://discord.gg/HCJR8Xhme4",
|
||||||
label: 'Discord',
|
label: "Discord",
|
||||||
position: 'right',
|
position: "right",
|
||||||
}
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
footer: {
|
footer: {
|
||||||
style: 'dark',
|
style: "dark",
|
||||||
links: [
|
links: [
|
||||||
{
|
{
|
||||||
title: 'Docs',
|
title: "Docs",
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
label: 'Docs',
|
label: "Docs",
|
||||||
to: '/overview',
|
to: "/overview",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'Community',
|
title: "Community",
|
||||||
items: [
|
items: [
|
||||||
// {
|
// {
|
||||||
// label: 'Stack Overflow',
|
// label: 'Stack Overflow',
|
||||||
// href: 'https://stackoverflow.com/questions/tagged/docusaurus',
|
// href: 'https://stackoverflow.com/questions/tagged/docusaurus',
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
label: 'Discord',
|
label: "Discord",
|
||||||
href: 'https://discord.gg/HCJR8Xhme4',
|
href: "https://discord.gg/HCJR8Xhme4",
|
||||||
},
|
},
|
||||||
// {
|
// {
|
||||||
// label: 'X',
|
// label: 'X',
|
||||||
|
@ -125,15 +133,15 @@ const config: Config = {
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
title: 'More',
|
title: "More",
|
||||||
items: [
|
items: [
|
||||||
// {
|
// {
|
||||||
// label: 'Blog',
|
// label: 'Blog',
|
||||||
// to: '/blog',
|
// to: '/blog',
|
||||||
// },
|
// },
|
||||||
{
|
{
|
||||||
label: 'GitHub',
|
label: "GitHub",
|
||||||
href: 'https://github.com/fosrl',
|
href: "https://github.com/fosrl",
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
|
|
@ -1,42 +1,10 @@
|
||||||
import clsx from "clsx";
|
|
||||||
import Link from "@docusaurus/Link";
|
|
||||||
import useDocusaurusContext from "@docusaurus/useDocusaurusContext";
|
|
||||||
import Layout from "@theme/Layout";
|
|
||||||
import HomepageFeatures from "@site/src/components/HomepageFeatures";
|
|
||||||
import Heading from "@theme/Heading";
|
|
||||||
|
|
||||||
import styles from "./index.module.css";
|
|
||||||
import { useEffect } from "react";
|
import { useEffect } from "react";
|
||||||
|
|
||||||
function HomepageHeader() {
|
|
||||||
const { siteConfig } = useDocusaurusContext();
|
|
||||||
return (
|
|
||||||
<header className={clsx("hero hero--primary", styles.heroBanner)}>
|
|
||||||
<div className="container">
|
|
||||||
<Heading as="h1" className="hero__title">
|
|
||||||
{siteConfig.title}
|
|
||||||
</Heading>
|
|
||||||
<p className="hero__subtitle">{siteConfig.tagline}</p>
|
|
||||||
<div className={styles.buttons}>
|
|
||||||
<Link
|
|
||||||
className="button button--secondary button--lg"
|
|
||||||
to="/docs/intro"
|
|
||||||
>
|
|
||||||
Pangolin Tutorial - 5min ⏱️
|
|
||||||
</Link>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</header>
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
export default function Home(): JSX.Element {
|
export default function Home(): JSX.Element {
|
||||||
const { siteConfig } = useDocusaurusContext();
|
|
||||||
|
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
// redirect to /overview
|
// redirect to /overview
|
||||||
window.location.href = "/overview";
|
window.location.href = "/overview";
|
||||||
});
|
});
|
||||||
|
|
||||||
return <></>
|
return <></>;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue