@platform/react.ssr
Version:
A lightweight SSR (server-side-rendering) system for react apps bundled with ParcelJS and hosted on S3.
118 lines (71 loc) ⢠2.64 kB
Markdown

[](https://opensource.org/licenses/MIT)
[](https://www.npmjs.com/package/@platform/react.ssr)

A lightweight SSR (server-side-rendering) system for react apps bundled with ParcelJS and hosted on S3.
<p> <p>
#### Live Demo:
https://ssr.platform.uiharness.com
<p> <p>
#### Highlights:
- Store assets on [S3](https://aws.amazon.com/s3/) (or Digital Ocean [Spaces](https://www.digitalocean.com/products/spaces/)).
- Serve entry HTML from server (immediate load from "server-side-render").
- `307` redirect all other assets to S3/CDN (geo-edge cache).
- Manage lifecycle with simple command-line tools:
- Bundle and push to S3 via command-line.
- Manage versioned releases (with simple roll-backs) across multiple sites/environments.
(eg. `dev`, `staging`, `prod`)
<p> <p>

## Setup
yarn add @platform/react.ssr
<p> <p>
## Workflow
- Develop UI components on local dev-server within the [UIHarness](https://uiharness.com) or anything that can produce a javascript bundle (eg [ParcelJS](https://parceljs.org)):
- Ensure the UI module has a `bundle` script within it's `package.json`.
- Create an `ssr.yml` configuration file for the server.
## Sample
The `/sample/now` and `/sample/server` are expecting a `.env` file with your S3 account information:
```
#
# Digital Ocean "SPACES" or AWS "S3" connection secrets.
#
SPACES_KEY="..."
SPACES_SECRET="..."
```
These are referenced within the `ssr.yml` config file.
#### Example sequence:
```bash
š¼
cd sample/ui
yarn start
```
Bundle a version and push it to S3:
```bash
š³
cd sample/server
yarn ssr bundle
```
Release bundled version by updating manifest:
```bash
š³
cd sample/server
yarn ssr release
```
Start local SSR server to test the bundle:
```bash
š¼
cd sample/server
yarn start
```
Open in `http://localhost` browser (address/port exposed in server startup log).
<p> <p>
## Routes
The following system routes are exposed for examining meta-data about the current state and configuration of the server.
```
https://domain.com/.manifest
https://domain.com/.manifest/summary
https://domain.com/.manifest/summary/<site>
```
<p> <p>
<p> <p>