ente/web/docs/deploy.md

116 lines
4.9 KiB
Markdown
Raw Normal View History

2024-03-08 10:08:06 +00:00
# Deploying
2024-02-20 05:52:22 +00:00
2024-03-08 10:08:06 +00:00
The various web apps and static sites in this repository are deployed on
Cloudflare Pages.
2024-02-20 05:52:22 +00:00
2024-03-08 10:08:06 +00:00
* Production deployments are triggered by pushing to the `deploy/*` branches.
2024-02-20 05:52:22 +00:00
2024-03-08 10:08:06 +00:00
* [help.ente.io](https://help.ente.io) gets deployed whenever a PR that changes
anything inside `docs/` gets merged to `main`.
2024-02-20 05:52:22 +00:00
2024-03-08 10:08:06 +00:00
* Every night, all the web apps get automatically deployed to a nightly preview
2024-03-08 10:59:35 +00:00
URLs using the current code in main.
Use the various `yarn deploy:*` commands to help with production deployments.
For example, `yarn deploy:photos` will open a PR to merge the current `main`
onto `deploy/photos`, which'll trigger the deployment workflow, which'll build
and publish to [web.ente.io](https://web.ente.io).
> When merging these deployment PRs, remember to use rebase and merge so that
> their HEAD is a fast forward of `main` instead of diverging from it because of
> the merge commit.
2024-02-20 05:52:22 +00:00
2024-03-08 10:59:35 +00:00
## Deployments
2024-03-08 10:08:06 +00:00
Here is a list of all the deployments, whether or not they are production
2024-03-08 10:59:35 +00:00
deployments, and the action that triggers them:
2024-02-20 05:52:22 +00:00
2024-03-08 10:08:06 +00:00
| URL | Type |Deployment action |
|-----|------|------------------|
| [web.ente.io](https://web.ente.io) | Production | Push to `deploy/photos` |
| [photos.ente.io](https://photos.ente.io) | Production | Alias of [web.ente.io](https://web.ente.io) |
| [auth.ente.io](https://auth.ente.io) | Production | Push to `deploy/auth` |
| [accounts.ente.io](https://accounts.ente.io) | Production | Push to `deploy/accounts` |
| [cast.ente.io](https://cast.ente.io) | Production | Push to `deploy/cast` |
| [help.ente.io](https://help.ente.io) | Production | Push to `main` + changes in `docs/` |
2024-03-08 11:06:06 +00:00
| [accounts.ente.sh](https://accounts.ente.sh) | Preview | Nightly deploy of `main` |
| [auth.ente.sh](https://auth.ente.sh) | Preview | Nightly deploy of `main` |
| [cast.ente.sh](https://cast.ente.sh) | Preview | Nightly deploy of `main` |
| [photos.ente.sh](https://photos.ente.sh) | Preview | Nightly deploy of `main` |
2024-02-20 05:52:22 +00:00
2024-03-08 10:08:06 +00:00
### Other subdomains
2024-02-20 05:52:22 +00:00
2024-03-08 10:08:06 +00:00
Apart from this, there are also some other deployments:
2024-02-24 11:31:07 +00:00
- `albums.ente.io` is a CNAME alias to the production deployment
(`web.ente.io`). However, when the code detects that it is being served from
`albums.ente.io`, it redirects to the `/shared-albums` page (Enhancement:
serve it as a separate app with a smaller bundle size).
- `payments.ente.io` and `family.ente.io` are currently in a separate
repositories (Enhancement: bring them in here).
2024-03-08 10:08:06 +00:00
---
2024-03-08 10:59:35 +00:00
## Details
2024-03-08 10:08:06 +00:00
The rest of the document describes details about how things were setup. You
likely don't need to know them to be able to deploy.
## First time preparation
Create a new Pages project in Cloudflare, setting it up to use [Direct
Upload](https://developers.cloudflare.com/pages/get-started/direct-upload/).
> [!NOTE]
>
> Direct upload doesn't work for existing projects tied to your repository using
> the [Git
> integration](https://developers.cloudflare.com/pages/get-started/git-integration/).
>
> If you want to keep the pages.dev domain from an existing project, you should
> be able to delete your existing project and recreate it (assuming no one
> claims the domain in the middle). I've not seen this documented anywhere, but
> it worked when I tried, and it seems to have worked for [other people
> too](https://community.cloudflare.com/t/linking-git-repo-to-existing-cf-pages-project/530888).
There are two ways to create a new project, using Wrangler
[[1](https://github.com/cloudflare/pages-action/issues/51)] or using the
Cloudflare dashboard
[[2](https://github.com/cloudflare/pages-action/issues/115)]. Since this is one
time thing, the second option might be easier.
The remaining steps are documented in [Cloudflare's guide for using Direct
Upload with
CI](https://developers.cloudflare.com/pages/how-to/use-direct-upload-with-continuous-integration/).
As a checklist,
- Generate `CLOUDFLARE_API_TOKEN`
- Add `CLOUDFLARE_ACCOUNT_ID` and `CLOUDFLARE_API_TOKEN` to the GitHub secrets
- Add your workflow. e.g. see `docs-deploy.yml`.
This is the basic setup, and should already work.
## Deploying multiple sites
2024-03-06 06:14:09 +00:00
2024-03-08 10:08:06 +00:00
However, we wish to deploy multiple sites from this same repository, so the
standard Cloudflare conception of a single "production" branch doesn't work for
us.
2024-02-24 11:31:07 +00:00
2024-03-08 10:08:06 +00:00
Instead, we tie each deployment to a branch name. Note that we don't have to
actually create the branch or push to it, this branch name is just used as the
the `branch` parameter that gets passed to `cloudflare/pages-action`.
2024-02-24 11:31:07 +00:00
2024-03-08 10:08:06 +00:00
Since our root pages project is `ente.pages.dev`, so a branch named `foo` would
be available at `foo.ente.pages.dev`.
2024-02-24 11:31:07 +00:00
2024-03-08 10:08:06 +00:00
Finally, we create CNAME aliases using a [Custom Domain in
Cloudflare](https://developers.cloudflare.com/pages/how-to/custom-branch-aliases/)
to point to these deployments from our user facing DNS names.
2024-02-20 05:52:22 +00:00
2024-03-08 10:08:06 +00:00
As a concrete example, the GitHub workflow that deploys `docs/` passes "help" as
the branch name. The resulting deployment is available at "help.ente.pages.dev".
Finally, we add a custom domain to point to it from
[help.ente.io](https://help.ente.io).
2024-02-20 05:52:22 +00:00