forked from emre/www_projectmycelium_com
		
	
		
			
				
	
	
		
			139 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
			
		
		
	
	
			139 lines
		
	
	
		
			5.1 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
import { Container } from '../../components/Container'
 | 
						|
import { Eyebrow, SectionHeader, P, Small } from '../../components/Texts'
 | 
						|
 | 
						|
type Step = {
 | 
						|
  number: string
 | 
						|
  title: string
 | 
						|
  description: string
 | 
						|
  bullets: string[]
 | 
						|
  codes?: string[]
 | 
						|
}
 | 
						|
 | 
						|
const steps: Step[] = [
 | 
						|
  {
 | 
						|
    number: '01',
 | 
						|
    title: 'Account Setup',
 | 
						|
    description: 'Create and prepare your Mycelium Cloud account.',
 | 
						|
    bullets: [
 | 
						|
      'Sign up through the Mycelium Cloud portal and verify your email.',
 | 
						|
      'Add credits in the dashboard so resources can be provisioned.',
 | 
						|
      'Upload your SSH public key to enable secure node access.',
 | 
						|
    ],
 | 
						|
  },
 | 
						|
  {
 | 
						|
    number: '02',
 | 
						|
    title: 'Deploy Your First Cluster',
 | 
						|
    description:
 | 
						|
      'Use the dashboard to define topology, resources, and deployment targets.',
 | 
						|
    bullets: [
 | 
						|
      'Open the Deploy Cluster workflow from your dashboard.',
 | 
						|
      'Choose CPU, memory, and storage for master and worker nodes.',
 | 
						|
      'Select ThreeFold Grid nodes that match your residency policies.',
 | 
						|
      'Review the configuration and launch the cluster.',
 | 
						|
    ],
 | 
						|
  },
 | 
						|
  {
 | 
						|
    number: '03',
 | 
						|
    title: 'Access Your Cluster',
 | 
						|
    description:
 | 
						|
      'Connect through kubeconfig and the Mycelium mesh to manage workloads.',
 | 
						|
    bullets: [
 | 
						|
      'Download the kubeconfig from the Clusters view and export `KUBECONFIG`.',
 | 
						|
      'Validate connectivity with `kubectl get nodes`.',
 | 
						|
      'Install the Mycelium client and join the provided peer list.',
 | 
						|
      'SSH directly to each node over its assigned Mycelium IP address.',
 | 
						|
    ],
 | 
						|
    codes: [
 | 
						|
      `export KUBECONFIG=/path/to/config
 | 
						|
kubectl get nodes`,
 | 
						|
      `wget https://github.com/threefoldtech/mycelium/releases/latest/download/mycelium-private-x86_64-unknown-linux-musl.tar.gz
 | 
						|
tar -xzf mycelium-private-x86_64-unknown-linux-musl.tar.gz
 | 
						|
sudo chmod +x mycelium-private
 | 
						|
sudo mv mycelium-private /usr/local/bin/mycelium`,
 | 
						|
      `sudo mycelium --peers \\
 | 
						|
  tcp://188.40.132.242:9651 \\
 | 
						|
  tcp://136.243.47.186:9651 \\
 | 
						|
  tcp://185.69.166.7:9651 \\
 | 
						|
  tcp://185.69.166.8:9651 \\
 | 
						|
  tcp://65.21.231.58:9651 \\
 | 
						|
  tcp://65.109.18.113:9651 \\
 | 
						|
  tcp://209.159.146.190:9651 \\
 | 
						|
  tcp://5.78.122.16:9651 \\
 | 
						|
  tcp://5.223.43.251:9651 \\
 | 
						|
  tcp://142.93.217.194:9651`,
 | 
						|
    ],
 | 
						|
  },
 | 
						|
]
 | 
						|
 | 
						|
export function CloudGettingStarted() {
 | 
						|
  return (
 | 
						|
    <section
 | 
						|
      id="getting-started"
 | 
						|
      className="relative overflow-hidden bg-gray-900 py-24 sm:py-32"
 | 
						|
    >
 | 
						|
      <div className="absolute inset-0 bg-[radial-gradient(circle_at_top,_rgba(34,211,238,0.12),_transparent_60%)]" />
 | 
						|
      <Container className="relative">
 | 
						|
        <div className="mx-auto max-w-3xl text-center">
 | 
						|
          <Eyebrow className="tracking-[0.32em] uppercase text-cyan-300">
 | 
						|
            Getting Started
 | 
						|
          </Eyebrow>
 | 
						|
          <SectionHeader as="h2" color="light" className="mt-6">
 | 
						|
            Launch, connect, and operate in three steps.
 | 
						|
          </SectionHeader>
 | 
						|
          <P color="lightSecondary" className="mt-6">
 | 
						|
            Follow the workflow from account creation to mesh connectivity.
 | 
						|
            You’ll have a production-ready K3s cluster running on the
 | 
						|
            ThreeFold Grid in minutes.
 | 
						|
          </P>
 | 
						|
        </div>
 | 
						|
        <div className="mt-16 grid gap-10 lg:grid-cols-3">
 | 
						|
          {steps.map((step) => (
 | 
						|
            <div
 | 
						|
              key={step.title}
 | 
						|
              className="flex h-full flex-col rounded-3xl border border-white/10 bg-white/[0.03] p-8 backdrop-blur-sm transition hover:-translate-y-1 hover:border-cyan-300/50 hover:bg-white/[0.06]"
 | 
						|
            >
 | 
						|
              <div className="flex items-center justify-between">
 | 
						|
                <Small className="text-xs uppercase tracking-[0.4em] text-cyan-300">
 | 
						|
                  {step.number}
 | 
						|
                </Small>
 | 
						|
                <span className="inline-flex size-10 items-center justify-center rounded-full border border-cyan-300/40 text-sm font-semibold uppercase tracking-[0.25em] text-cyan-200">
 | 
						|
                  Go
 | 
						|
                </span>
 | 
						|
              </div>
 | 
						|
              <h3 className="mt-6 text-xl font-semibold text-white">
 | 
						|
                {step.title}
 | 
						|
              </h3>
 | 
						|
              <p className="mt-4 text-sm leading-relaxed text-gray-300">
 | 
						|
                {step.description}
 | 
						|
              </p>
 | 
						|
              <ul className="mt-6 space-y-3 text-sm text-gray-300">
 | 
						|
                {step.bullets.map((bullet) => (
 | 
						|
                  <li
 | 
						|
                    key={bullet}
 | 
						|
                    className="flex items-start gap-3 rounded-2xl border border-cyan-500/10 bg-cyan-500/5 p-3 leading-relaxed"
 | 
						|
                  >
 | 
						|
                    <span className="mt-1 inline-block size-2 rounded-full bg-cyan-300" />
 | 
						|
                    <span>{bullet}</span>
 | 
						|
                  </li>
 | 
						|
                ))}
 | 
						|
              </ul>
 | 
						|
              {step.codes && (
 | 
						|
                <div className="mt-6 space-y-4">
 | 
						|
                  {step.codes.map((code) => (
 | 
						|
                    <pre
 | 
						|
                      key={code}
 | 
						|
                      className="overflow-x-auto rounded-2xl border border-white/10 bg-black/70 p-4 text-xs text-cyan-100"
 | 
						|
                    >
 | 
						|
                      <code>{code}</code>
 | 
						|
                    </pre>
 | 
						|
                  ))}
 | 
						|
                </div>
 | 
						|
              )}
 | 
						|
            </div>
 | 
						|
          ))}
 | 
						|
        </div>
 | 
						|
      </Container>
 | 
						|
    </section>
 | 
						|
  )
 | 
						|
}
 |