Back End
Cloudflare R2 Object Storage
We will be using Cloudflare to store public media and documents.
Cloudflare Worker
Little friend that will be serving our files through public URL.
We will use: https://seed-r2-worker.seedworker.workers.dev/<BUCKET_NAME>/<FILE_NAME>
Init
npm create cloudflare@latest -- seed-r2-worker
cd seed-r2-worker
For setup, select the following options:
- For "What would you like to start with?", choose "Hello World example".
- For "Which template would you like to use?", choose "Worker only".
- For "Which language do you want to use?", choose "JavaScript".
- For "Do you want to use git for version control?", choose "Yes".
- For "Do you want to deploy your application?", choose "No (we will be making some changes before deploying)".
Create bucket
npx wrangler r2 bucket create <YOUR_BUCKET_NAME>
Bind bucket to worker
{ "r2_buckets": [ { "binding": "MY_BUCKET", "bucket_name": "<YOUR_BUCKET_NAME>" } ] }
Simple worker
export default { async fetch(request, env) { const url = new URL(request.url); const key = url.pathname.slice(1); switch (request.method) { // case 'PUT': // await env.MY_BUCKET.put(key, request.body); // return new Response(`Put ${key} successfully!`); case 'GET': const object = await env.MY_BUCKET.get(key); if (object === null) { return new Response('Object Not Found', { status: 404 }); } const headers = new Headers(); object.writeHttpMetadata(headers); headers.set('etag', object.httpEtag); return new Response(object.body, { headers, }); // case 'DELETE': // await env.MY_BUCKET.delete(key); // return new Response('Deleted!'); default: return new Response('Method Not Allowed', { status: 405, headers: { Allow: 'GET', }, }); } }, };
We can test locally with:
npx wrangler dev
And deploy:
npx wrangler deploy
Dev Docs
The website is available at https://www.seed.computer/devdocs/
Hugo
Initialize the docs website project:
hugo new site docs
Basic hugo config:
baseURL = "/devdocs/" languageCode = "en-us" title = "Seed Website Dev Docs" theme = "PaperMod"
Build into our project's public folder:
hugo -s docs -d ../public/devdocs