From ee5c6186ce93b83fa5ea2ddb4f51a08ec9ecb508 Mon Sep 17 00:00:00 2001 From: Matias Capeletto Date: Thu, 26 Nov 2020 22:48:57 +0100 Subject: [PATCH] docs: port deploy instructions for common services from vuepress --- docs/guide/deploy.md | 212 +++++++++++++++++++++++++++ docs/images/vercel-configuration.png | Bin 0 -> 24311 bytes 2 files changed, 212 insertions(+) create mode 100644 docs/images/vercel-configuration.png diff --git a/docs/guide/deploy.md b/docs/guide/deploy.md index 2119f0aa..588f12e8 100644 --- a/docs/guide/deploy.md +++ b/docs/guide/deploy.md @@ -47,3 +47,215 @@ You may configure the port of the server py passing `--port` flag as an argument ``` Now the `docs:serve` method will launch the server at http://localhost:8080. + +## GitHub Pages + +1. Set the correct `base` in `docs/.vitepress/config.js`. + + If you are deploying to `https://.github.io/`, you can omit `base` as it defaults to `"/"`. + + If you are deploying to `https://.github.io//`, for example your repository is at `https://github.com//`, then set `base` to `"//"`. + +2. Inside your project, create `deploy.sh` with the following content (with highlighted lines uncommented appropriately), and run it to deploy: + +```bash{13,20,23} +#!/usr/bin/env sh + +# abort on errors +set -e + +# build +npm run docs:build + +# navigate into the build output directory +cd docs/.vitepress/dist + +# if you are deploying to a custom domain +# echo 'www.example.com' > CNAME + +git init +git add -A +git commit -m 'deploy' + +# if you are deploying to https://.github.io +# git push -f git@github.com:/.github.io.git master + +# if you are deploying to https://.github.io/ +# git push -f git@github.com:/.git master:gh-pages + +cd - +``` + +::: tip +You can also run the above script in your CI setup to enable automatic deployment on each push. +::: + +### GitHub Pages and Travis CI + +1. Set the correct `base` in `docs/.vitepress/config.js`. + + If you are deploying to `https://.github.io/`, you can omit `base` as it defaults to `"/"`. + + If you are deploying to `https://.github.io//`, for example your repository is at `https://github.com//`, then set `base` to `"//"`. + +2. Create a file named `.travis.yml` in the root of your project. + +3. Run `yarn` or `npm install` locally and commit the generated lockfile (that is `yarn.lock` or `package-lock.json`). + +4. Use the GitHub Pages deploy provider template, and follow the [Travis CI documentation](https://docs.travis-ci.com/user/deployment/pages/). + +```yaml +language: node_js +node_js: + - lts/* +install: + - yarn install # npm ci +script: + - yarn docs:build # npm run docs:build +deploy: + provider: pages + skip_cleanup: true + local_dir: docs/.vitepress/dist + github_token: $GITHUB_TOKEN # A token generated on GitHub allowing Travis to push code on you repository. Set in the Travis settings page of your repository, as a secure variable + keep_history: true + on: + branch: master +``` + +### GitLab Pages and GitLab CI + +1. Set the correct `base` in `docs/.vitepress/config.js`. + + If you are deploying to `https://.gitlab.io/`, you can omit `base` as it defaults to `"/"`. + + If you are deploying to `https://.gitlab.io//`, for example your repository is at `https://gitlab.com//`, then set `base` to `"//"`. + +2. Set `dest` in `.vitepress/config.js` to `public`. + +3. Create a file called `.gitlab-ci.yml` in the root of your project with the content below. This will build and deploy your site whenever you make changes to your content: + +```yaml +image: node:10.22.0 +pages: + cache: + paths: + - node_modules/ + + script: + - yarn install # npm install + - yarn docs:build # npm run docs:build + artifacts: + paths: + - public + only: + - master +``` + +## Netlify + +1. On [Netlify](https://netlify.com), setup up a new project from GitHub with the following settings: + +- **Build Command:** `vitepress build docs` or `yarn docs:build` or `npm run docs:build` +- **Publish directory:** `docs/.vitepress/dist` + +2. Hit the deploy button. + +## Google Firebase + +1. Make sure you have [firebase-tools](https://www.npmjs.com/package/firebase-tools) installed. + +2. Create `firebase.json` and `.firebaserc` at the root of your project with the following content: + +`firebase.json`: + +```json +{ + "hosting": { + "public": "./docs/.vitepress/dist", + "ignore": [] + } +} +``` + +`.firebaserc`: + +```js +{ + "projects": { + "default": "" + } +} +``` + +3. After running `yarn docs:build` or `npm run docs:build`, deploy using the command `firebase deploy`. + +## Surge + +1. First install [surge](https://www.npmjs.com/package/surge), if you haven’t already. + +2. Run `yarn docs:build` or `npm run docs:build`. + +3. Deploy to surge by typing `surge docs/.vitepress/dist`. + +You can also deploy to a [custom domain](http://surge.sh/help/adding-a-custom-domain) by adding `surge docs/.vitepress/dist yourdomain.com`. + +## Heroku + +1. Install [Heroku CLI](https://devcenter.heroku.com/articles/heroku-cli). + +2. Create a Heroku account by [signing up](https://signup.heroku.com). + +3. Run `heroku login` and fill in your Heroku credentials: + + ```bash + heroku login + ``` + +4. Create a file called `static.json` in the root of your project with the below content: + + `static.json`: + + ```json + { + "root": "./docs/.vitepress/dist" + } + ``` + +This is the configuration of your site; read more at [heroku-buildpack-static](https://github.com/heroku/heroku-buildpack-static). + +5. Set up your Heroku git remote: + +```bash +# version change +git init +git add . +git commit -m "My site ready for deployment." + +# creates a new app with a specified name +heroku apps:create example + +# set buildpack for static sites +heroku buildpacks:set https://github.com/heroku/heroku-buildpack-static.git +``` + +6. Deploy your site: + +```bash +# publish site +git push heroku master + +# opens a browser to view the Dashboard version of Heroku CI +heroku open +``` + +## Vercel + +To deploy your VitePress app with a [Vercel for Git](https://vercel.com/docs/git), make sure it has been pushed to a Git repository. + +Go to https://vercel.com/import/git and import the project into Vercel using your Git of choice (GitHub, GitLab or BitBucket). Follow the wizard to select the project root with the project's `packaje.json` and override the build step using `yarn docs:build` or `npm run docs:build` and the output dir to be `./docs/.vitepress/dist` + +![Override Vercel Configuration](../images/vercel-configuration.png) + +After your project has been imported, all subsequent pushes to branches will generate Preview Deployments, and all changes made to the Production Branch (commonly "main") will result in a Production Deployment. + +Once deployed, you will get a URL to see your app live, such as the following: https://vitepress.vercel.app diff --git a/docs/images/vercel-configuration.png b/docs/images/vercel-configuration.png new file mode 100644 index 0000000000000000000000000000000000000000..af57313f6d94520af885ef7674b1e6fe91414121 GIT binary patch literal 24311 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