Skip to content
This repository has been archived by the owner on Oct 21, 2024. It is now read-only.

Commit

Permalink
docs: solid container quick start
Browse files Browse the repository at this point in the history
  • Loading branch information
jayair committed Oct 15, 2024
1 parent ec77a08 commit 0ce2c5b
Show file tree
Hide file tree
Showing 23 changed files with 634 additions and 12 deletions.
5 changes: 5 additions & 0 deletions examples/aws-solid-container/.dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
node_modules


# sst
.sst
32 changes: 32 additions & 0 deletions examples/aws-solid-container/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@

dist
.solid
.output
.vercel
.netlify
.vinxi
app.config.timestamp_*.js

# Environment
.env
.env*.local

# dependencies
/node_modules

# IDEs and editors
/.idea
.project
.classpath
*.launch
.settings/

# Temp
gitignore

# System Files
.DS_Store
Thumbs.db

# sst
.sst
23 changes: 23 additions & 0 deletions examples/aws-solid-container/Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
FROM node:lts AS base

WORKDIR /src

# Build
FROM base as build

COPY --link package.json package-lock.json ./
RUN npm install

COPY --link . .

RUN npm run build

# Run
FROM base

ENV PORT=3000
ENV NODE_ENV=production

COPY --from=build /src/.output /src/.output

CMD [ "node", ".output/server/index.mjs" ]
32 changes: 32 additions & 0 deletions examples/aws-solid-container/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
# SolidStart

Everything you need to build a Solid project, powered by [`solid-start`](https://start.solidjs.com);

## Creating a project

```bash
# create a new project in the current directory
npm init solid@latest

# create a new project in my-app
npm init solid@latest my-app
```

## Developing

Once you've created a project and installed dependencies with `npm install` (or `pnpm install` or `yarn`), start a development server:

```bash
npm run dev

# or start the server and open the app in a new browser tab
npm run dev -- --open
```

## Building

Solid apps are built with _presets_, which optimise your project for deployment to different environments.

By default, `npm run build` will generate a Node app that you can run with `npm start`. To use a different preset, add it to the `devDependencies` in `package.json` and specify in your `app.config.js`.

## This project was created with the [Solid CLI](https://solid-cli.netlify.app)
3 changes: 3 additions & 0 deletions examples/aws-solid-container/app.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { defineConfig } from "@solidjs/start/config";

export default defineConfig({});
25 changes: 25 additions & 0 deletions examples/aws-solid-container/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"name": "example-basic",
"type": "module",
"scripts": {
"build": "vinxi build",
"dev": "vinxi dev",
"start": "vinxi start",
"version": "vinxi version"
},
"dependencies": {
"@solidjs/meta": "^0.29.4",
"@solidjs/router": "^0.14.8",
"@solidjs/start": "^1.0.8",
"ioredis": "^5.4.1",
"solid-js": "^1.9.1",
"sst": "latest",
"vinxi": "^0.4.3"
},
"engines": {
"node": ">=18"
},
"overrides": {
"nitropack": "npm:nitropack-nightly@latest"
}
}
Binary file added examples/aws-solid-container/public/favicon.ico
Binary file not shown.
39 changes: 39 additions & 0 deletions examples/aws-solid-container/src/app.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
body {
font-family: Gordita, Roboto, Oxygen, Ubuntu, Cantarell, "Open Sans", "Helvetica Neue", sans-serif;
}

a {
margin-right: 1rem;
}

main {
text-align: center;
padding: 1em;
margin: 0 auto;
}

h1 {
color: #335d92;
text-transform: uppercase;
font-size: 4rem;
font-weight: 100;
line-height: 1.1;
margin: 4rem auto;
max-width: 14rem;
}

p {
max-width: 14rem;
margin: 2rem auto;
line-height: 1.35;
}

@media (min-width: 480px) {
h1 {
max-width: none;
}

p {
max-width: none;
}
}
22 changes: 22 additions & 0 deletions examples/aws-solid-container/src/app.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
import { MetaProvider, Title } from "@solidjs/meta";
import { Router } from "@solidjs/router";
import { FileRoutes } from "@solidjs/start/router";
import { Suspense } from "solid-js";
import "./app.css";

export default function App() {
return (
<Router
root={props => (
<MetaProvider>
<Title>SolidStart - Basic</Title>
<a href="/">Index</a>
<a href="/about">About</a>
<Suspense>{props.children}</Suspense>
</MetaProvider>
)}
>
<FileRoutes />
</Router>
);
}
21 changes: 21 additions & 0 deletions examples/aws-solid-container/src/components/Counter.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
.increment {
font-family: inherit;
font-size: inherit;
padding: 1em 2em;
color: #335d92;
background-color: rgba(68, 107, 158, 0.1);
border-radius: 2em;
border: 2px solid rgba(68, 107, 158, 0);
outline: none;
width: 200px;
font-variant-numeric: tabular-nums;
cursor: pointer;
}

.increment:focus {
border: 2px solid #335d92;
}

.increment:active {
background-color: rgba(68, 107, 158, 0.2);
}
11 changes: 11 additions & 0 deletions examples/aws-solid-container/src/components/Counter.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { createSignal } from "solid-js";
import "./Counter.css";

export default function Counter() {
const [count, setCount] = createSignal(0);
return (
<button class="increment" onClick={() => setCount(count() + 1)} type="button">
Clicks: {count()}
</button>
);
}
4 changes: 4 additions & 0 deletions examples/aws-solid-container/src/entry-client.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
// @refresh reload
import { mount, StartClient } from "@solidjs/start/client";

mount(() => <StartClient />, document.getElementById("app")!);
21 changes: 21 additions & 0 deletions examples/aws-solid-container/src/entry-server.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
// @refresh reload
import { createHandler, StartServer } from "@solidjs/start/server";

export default createHandler(() => (
<StartServer
document={({ assets, children, scripts }) => (
<html lang="en">
<head>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<link rel="icon" href="/favicon.ico" />
{assets}
</head>
<body>
<div id="app">{children}</div>
{scripts}
</body>
</html>
)}
/>
));
1 change: 1 addition & 0 deletions examples/aws-solid-container/src/global.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/// <reference types="@solidjs/start/env" />
19 changes: 19 additions & 0 deletions examples/aws-solid-container/src/routes/[...404].tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
import { Title } from "@solidjs/meta";
import { HttpStatusCode } from "@solidjs/start";

export default function NotFound() {
return (
<main>
<Title>Not Found</Title>
<HttpStatusCode code={404} />
<h1>Page Not Found</h1>
<p>
Visit{" "}
<a href="https://start.solidjs.com" target="_blank">
start.solidjs.com
</a>{" "}
to learn how to build SolidStart apps.
</p>
</main>
);
}
10 changes: 10 additions & 0 deletions examples/aws-solid-container/src/routes/about.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
import { Title } from "@solidjs/meta";

export default function Home() {
return (
<main>
<Title>About</Title>
<h1>About</h1>
</main>
);
}
30 changes: 30 additions & 0 deletions examples/aws-solid-container/src/routes/index.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
import { Resource } from "sst";
import { Cluster } from "ioredis";
import { createAsync, cache } from "@solidjs/router";

const getCounter = cache(async () => {
"use server";
const redis = new Cluster(
[{ host: Resource.MyRedis.host, port: Resource.MyRedis.port }],
{
dnsLookup: (address, callback) => callback(null, address),
redisOptions: {
tls: {},
username: Resource.MyRedis.username,
password: Resource.MyRedis.password,
},
}
);

return await redis.incr("counter");
}, "counter");

export const route = {
load: () => getCounter(),
};

export default function Page() {
const counter = createAsync(() => getCounter());

return <h1>Hit counter: {counter()}</h1>;
}
25 changes: 25 additions & 0 deletions examples/aws-solid-container/sst-env.d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
/* This file is auto-generated by SST. Do not edit. */
/* tslint:disable */
/* eslint-disable */
import "sst"
export {}
declare module "sst" {
export interface Resource {
"MyRedis": {
"host": string
"password": string
"port": number
"type": "sst.aws.Redis"
"username": string
}
"MyService": {
"service": string
"type": "sst.aws.Service"
"url": string
}
"MyVpc": {
"bastion": string
"type": "sst.aws.Vpc"
}
}
}
26 changes: 26 additions & 0 deletions examples/aws-solid-container/sst.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
/// <reference path="./.sst/platform/config.d.ts" />

export default $config({
app(input) {
return {
name: "aws-solid-container",
removal: input?.stage === "production" ? "retain" : "remove",
home: "aws",
};
},
async run() {
const vpc = new sst.aws.Vpc("MyVpc", { bastion: true });
const redis = new sst.aws.Redis("MyRedis", { vpc });
const cluster = new sst.aws.Cluster("MyCluster", { vpc });

cluster.addService("MyService", {
link: [redis],
public: {
ports: [{ listen: "80/http", forward: "3000/http" }],
},
dev: {
command: "npm run dev",
},
});
}
});
19 changes: 19 additions & 0 deletions examples/aws-solid-container/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"compilerOptions": {
"target": "ESNext",
"module": "ESNext",
"moduleResolution": "bundler",
"allowSyntheticDefaultImports": true,
"esModuleInterop": true,
"jsx": "preserve",
"jsxImportSource": "solid-js",
"allowJs": true,
"strict": true,
"noEmit": true,
"types": ["vinxi/types/client"],
"isolatedModules": true,
"paths": {
"~/*": ["./src/*"]
}
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
2 changes: 1 addition & 1 deletion www/src/content/docs/docs/start/aws/astro.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ npm install

Select the defaults and pick **AWS**. This'll create a `sst.config.ts` file in your project root.

It'll also ask you to update your `astro.config.mjs` but we'll instead use the [**Node.js adapter**](https://docs.astro.build/en/guides/integrations-guide/node/) since we're deploying it through a container.
It'll also ask you to update your `astro.config.mjs`. But we'll instead use the [**Node.js adapter**](https://docs.astro.build/en/guides/integrations-guide/node/) since we're deploying it through a container.

```bash
npx astro add node
Expand Down
Loading

0 comments on commit 0ce2c5b

Please sign in to comment.