Hosting

The Sites Service in the Fleek Platform CLI let users upload and easily maintain static sites powered by Web3 protocols, such as Fleek Network.

Set up a site

When planning to deploy a site, you must first set up a Fleek Site. If you have followed the quick start, this should be familiar.

For this example we are using a Next.js application that you can find in the template repository.

We can clone the repository to our local file system. Firstly, switch to a location of your preference and run the command:

git clone https://github.com/fleekxyz/nextjs-template.git

Change directory to the nextjs-template directory. If you’ve provided a different clone directory, change accordingly.

Here, we’re sticking with the default relative location.

cd nextjs-template

Initialize the Fleek site

Run the sites init command to initialise the process:

fleek sites init

You’ll be prompted to create a new Fleek Site or use an existing one.

? Choose one of the existing sites or create a new one. ›
Create a new site

We’ll create a new one by providing a name. For our example, we’ll name it “my-first-site”.

Choose one of the existing sites or create a new one. Create a new site
Type name of you new site. my-first-site

With the site name in place, you will have to input the directory where the build files will be stored. In this example, we are using a Next.js application thus the output directory is out.

After defining the Fleek Site name, you must specify the build directory for the static files to be deployed.

In the context of a Next.js application, the output directory is “out”.

Specify the dist directory from where the site will be uploaded from > out

Then you’ll be asked to configure the build command that will be executed in the process to output the necessary static assets to the directory you have specified in the previous step.

In this case we’ll declare the command:

npm run build

The prompt should be similar to:

Do you want to include the optional "build" command? yes
Specify `build` command  npm run build

Next, you’ll pick the format for your configuration file. If you opt for the Typescript option, make sure the Fleek SDK is part of your project dependencies to prevent deployment issues.

For most use-cases the json format is preferred.

? Select a format how the site's configuration will be saved: ›
>    JSON (fleek.config.json)

For simplicity, we’ve selected the JSON format and receive a confirmation message.

Success! The Fleek configuration file has been successfully saved

Great, your site is ready to deploy!

Fleek site configuration file

The Fleek Site configuration file contains important deployment configuration settings for your project.

If you version control your projects, it is advised to checkout and keep track of configuration file changes.

You can open the file in your favourite text editor and make any changes you might find necessary, such as updating the build command.

For our example, the original JSON content is based on our choices:

{
  "sites": [
    {
      "slug": "large-apple-screeching",
      "distDir": ".",
      "buildCommand": "npm run build"
    }
  ]
}

If we imagine a scenario, where our package manager tool changes from npm to pnpm or yarn, we’d change it to:

{
  "sites": [
    {
      "slug": "large-apple-screeching",
      "distDir": ".",
      "buildCommand": "pnpm build"
    }
  ]
}

Deploy a site

Deploying your site is straightforward; simply run the sites deploy command in the directory where you initialized the site.

fleek sites deploy

As the deployment starts, you’ll be given the option to create a new site or use an existing one. First, the process will carry out the build command outlined in the fleek.json file and subsequently upload the build directory to the designated storage.

If sucessfully, you’ll get a confirmation message.

> Site IPFS Content Identifier (CID): QmbAwexQq1wqk9XZEzZs6CycbARDEp42ZRg5tUHp1XW2RQ
💡 You can access it through the gateway:
🔗 https://<SLUG>.on-fleek.app

The site is available at the gateway described in the output message. Visit it by open it in your browser!

Optionally, you can learn to create a custom gateway of your liking and control.

Continuous integration (CI)

To set up Continuous Integration (CI), use the fleek sites ci command. This command generates a new workflow file in your repository, which you can customize according to your needs.

Currently we only support Github Actions. So, selecting GitHub Actions as your CI solution allows you to set up an action that triggers automatic deployments of your site via Fleek Platform.

You can run the command in the root of your project as follows:

> fleek sites ci
? Select the provider you prefer for building and deploying your sites: ›
GitHub Actions
    GitHub Actions YAML file generator

Next, you’ll have to answer the prompt questions, e.g. provide the install command, lockfile or the location where the workflow should be stored.

The workflow configuration will be saved in: ~/MySite/.github/workflows/fleek-deploy.yaml. Would you like to choose a different path? no
Warning! The .github/workflows directory cannot be found.
Warning! Generating the .github/workflows directory.

Success! The GitHub Actions workflow has been saved to the ~/MySite/.github/workflows/fleek-deploy.yaml file.

🤖 Configure the following secrets in your GitHub repository settings:

Name              Value
-------------------------------------------
FLEEK_TOKEN       ***
FLEEK_PROJECT_ID  ***

It’s critical to declare the secrets in your GitHub repository settings. So, make sure this is set up correctly to avoid disappointment.

The generate GitHub Workflow can be customized to your needs. If you version control your project, it’s advised to checkout and track the file changes.

Open the file in your favourite text editor. It should be similar to:

name: Deploy site via Fleek
on: push
jobs:
    deploy-to-fleek:
    runs-on: ubuntu-latest
    env:
        FLEEK_TOKEN: ${{ secrets.FLEEK_TOKEN }}
        FLEEK_PROJECT_ID: ${{ secrets.FLEEK_PROJECT_ID }}
    steps:
        - name: Checkout
        uses: actions/checkout@v3
        - name: Install Node.js
        uses: actions/setup-node@v3
        with:
            node-version: 16
        - name: Install Fleek CLI
        run: npm i -g @fleek-platform/cli
        - name: Build & deploy sites
        run: fleek sites deploy

Again, take note of the two secrets secrets.FLEEK_TOKEN and secrets.FLEEK_PROJECT_ID. These details are presented at the end of the process and require configuration in your GitHub Repository.

To learn how to set up the secrets in GitHub visit the documentation here.