Collect Earth · Open Foris

Collect Earth › Guides

Your own server

Run your own copy of Collect Earth Cloud, so the data never leaves your organisation. On Google Cloud it takes one button, one command and about 20 minutes, and a typical project costs about 10 US$ a month.

Is it for you?

A private server is the same Collect Earth Cloud that FAO runs at cloud.collectearth.org: the web dashboard, the sync service Collect Earth talks to, and a database with nightly backups. Coordinators and interpreters work exactly as on the shared server. The difference is where it runs and who controls it.

If your data may be kept on FAO's server, the free Collect Earth Cloud needs no installation at all. You can also start there and move later (see Moving a project to your server).

What it costs

You pay Google for what the server uses, every month, on your billing account. Almost all of it is the database, which runs day and night; the server itself runs only while someone uses it, and usually stays within Google's monthly free allowance.

about10 US$a month

One project with up to 10 interpreters, on the smallest database, in Belgium (europe-west1), which is what the install script sets up by default. Iowa, South Carolina and Johannesburg cost the same.

Where the 10 US$ go

WhatWhat it isUS$ a month
Database machineCloud SQL db-f1-micro (shared CPU, 0.6 GB of memory), running all the time7.67
Database disk10 GB SSD, which grows by itself if needed1.70
Backups7 nightly copies, about 2 GB in all for a project this size0.16
ServerCloud Run, running only while someone uses it: about 2.70 US$ of use, inside the free allowance0.00
Data sent to usersPages, plot files and downloads, about 2 GB0.24
Building and storing versions, secretsCloud Build, Artifact Registry and Secret Manager, nearly all within their free allowances0.05
Totalabout 10

By region and size

The database machine is the choice that matters most: the default db-f1-micro suits one or a few projects; a busier server needs a bigger one, chosen when the database is created (see below). Prices also differ between regions.

RegionSmall
1 project, ~10 interpreters, db-f1-micro
National team
~40 interpreters, db-g1-small
Many projects
~150 interpreters, 1 dedicated vCPU
Belgium, Iowa, South Carolina
europe-west1, us-central1, us-east1
103279
Johannesburg africa-south1103380
Mexico northamerica-south1 *113584
Mumbai asia-south1123891
Jakarta asia-southeast2 *1345108
Singapore asia-southeast11447111
São Paulo southamerica-east11551120

US$ a month. The install script offers the regions without an asterisk; the others, and any region with Cloud Run and Cloud SQL, work with --region. Choose the region nearest to the people who will use the server: the cheapest regions are usually close enough for a team on another continent.

Optional extras

OptionWhat it adds, US$ a month
High availability: a standby database in a second zone (not set up by the script)Doubles the database and its disk: about +9 for a small server, +29 for a national team
An always-on server (instance-based billing), so quality figures and AI reviews go on with the page closedAbout 0 to 2 at light use, up to about 45 with one instance always up
AI assistant on the Quality tab (Gemini 3.8 Flash on Vertex AI), off by defaultAt the default limit of 2 million tokens per project: about 2 per project until 31 December 2026, about 4 from 1 January 2027. Less when used less
Weekly emails and "Forgot your password?"Cloud Scheduler is free for the first 3 jobs of a billing account (this needs one), plus your mail provider
Your own address, like cloud.example.orgFree on Google's side; you pay only for the domain name
More disk0.17 per GB of SSD in Belgium. The disk grows by itself and never shrinks

What is free

Keeping the bill low

How these figures were worked out

Google's on-demand list prices of 11 November 2026, in US dollars before tax, with 730 hours a month: Cloud SQL Enterprise edition (shared-core machines per hour, dedicated machines per vCPU and per GB of memory, SSD and backups per GB), Cloud Run request-based billing (Tier 1 regions 0.000024 US$ per vCPU-second and 0.0000025 per GiB-second; Tier 2, such as Singapore, Jakarta and São Paulo, 0.0000336 and 0.0000035; 0.40 per million requests), internet data transfer at 0.12 US$ per GB (0.15 to Africa, 0.19 to South America and Indonesia), and the free allowances above.

Use: interpreters at work 5 to 6 hours a day, 22 days a month. Collect Earth sends saved plots every 30 seconds and checks in every 10 minutes, about 70 requests an hour each, counted at 0.2 seconds of server time per request with no overlap (on the safe side); each coordinator adds 1,200 dashboard requests and 30 minutes of computing a working day. Small: 10 interpreters, 2 coordinators, 10 GB of disk, 2 GB of backups, 2 GB sent. National team: 40 interpreters, 4 coordinators, db-g1-small, 1 GiB of server memory, 20 GB of disk, 8 GB of backups, 10 GB sent. Many projects: 150 interpreters, 10 coordinators, db-custom-1-3840 (1 vCPU, 3.75 GB), 50 GB of disk, 30 GB of backups, 40 GB sent.

Your bill depends on your own use: after the first month, open Billing › Reports to see it. Google changes its prices from time to time; the current ones are on Cloud SQL pricing, Cloud Run pricing and the pricing calculator.

Before you start

  1. A Google account. Any Gmail or Google Workspace account. If your organisation uses Google Workspace, use your work account, so that the server belongs to the organisation and not to a person.
  2. Google Cloud. Open console.cloud.google.com with that account and accept the terms the first time.
  3. A billing account: how Google charges you, with a payment card. Create one at console.cloud.google.com/billing, or ask whoever manages Google Cloud in your organisation to link theirs to your project.
  4. A new project, just for this server, so its cost is easy to see and everything can be deleted at once. The install panel helps you create it. You need the Owner role on it.
  5. Choose the region, the place where the server will run: the one nearest to the people who will use it, keeping the price differences in mind. It cannot be changed afterwards without moving the data.
In large organisations, Google Cloud policies sometimes block public web services or new service accounts. If the script stops with a message about an organisation policy, ask your Google Cloud administrator to exempt the project; the message says which policy it is.

Install it on Google Cloud

Press the button. It opens Cloud Shell, a terminal in your browser provided by Google for free and already signed in with your account, with the Collect Earth code and a step-by-step panel on the right.

Open in Cloud Shell

  1. Trust the repository. Cloud Shell asks whether you trust it: tick Trust repo and press Confirm. Without this the terminal has no access to your Google account and the installation cannot work.
  2. Pick the project in the panel on the right (or create one there), and check that billing is on. The panel shows a command that tells the terminal which project to use: copy it and press Enter.
  3. Authorize. When the first command runs, Google may ask you to let the terminal act with your account: press Authorize.
  4. Run the installation:
    bash deploy/gcp/deploy.sh
  5. Choose the region from the list (Belgium, Iowa, South Carolina, São Paulo, Johannesburg, Mumbai or Singapore), or press Enter for Belgium. Any other region works with --region, for example bash deploy/gcp/deploy.sh --region asia-southeast2. The script then shows what it will do and asks Continue?: press Enter.
  6. Wait. It works through 8 steps and prints each one: billing, Google services, the database (10 to 15 minutes), the passwords and setup code, the server's own account, the place for server versions, building the server (3 to 6 minutes) and starting it. Keep the tab open; you can do something else meanwhile.
  7. Write down the two things it prints at the end: the dashboard address, like https://collect-earth-cloud-123456789.europe-west1.run.app, and the setup code, like K7QX-M3TB-WN.
If a step fails, the script stops, says in plain words what went wrong and what to do, and leaves the rest as it was. Fix the cause (often billing is off, or your account is not Owner of the project) and run the same command again: it carries on where it stopped and never recreates or wipes anything.

What it creates

Everything is in your project, with names starting with ce:

WhatSettings
The database (Cloud SQL, ce-cloud-db)PostgreSQL 16, db-f1-micro, 10 GB SSD growing by itself, a backup every night at 02:00 UTC keeping 7, recovery to any minute of the last 7 days, protection against deletion
The server (Cloud Run, collect-earth-cloud)1 vCPU and 512 MiB per instance, 0 to 4 instances as needed, running only while it is used
Passwords and the setup code (Secret Manager)Generated by the script and never shown, except the setup code. The server runs as a database role bound by row-level security, so each request reaches only its own project's data
The server's own account (ce-cloud-run)Allowed only to connect to the database and to read its three secrets
Server versions (Artifact Registry, ce)The 5 newest builds are kept, older ones deleted after 30 days

Every command is listed in DEPLOY.md. To see them without changing anything, run bash deploy/gcp/deploy.sh --dry-run.

First steps on your server

  1. Create the administrator. Open the dashboard address. The setup page asks for the setup code (capitals, spaces and dashes don't matter) and for the user name and password of the server administrator: you. The code works only once; afterwards you log in with that name and password. Lost the code before using it? bash deploy/gcp/deploy.sh --show-setup-code shows it again.
  2. Server settings. Open Server. Leave Anyone can create an account off, so people only get an account through an invitation to a project. Choose Who can create projects: only server administrators, or everyone who has an account. You can also give the server a name, a contact email shown on every page, and limits per account.
  3. Your first project. My projects › New project, then follow the checklist: the project file, the plot files, invitations, who collects each file. From here on it works exactly as in Running a cloud project.
  4. Invite the team. Each invitation link carries your server's address, so interpreters never type it: they choose File › Join cloud project... in Collect Earth and paste the link.

The server administrator sees no project's data unless they are also a member of the project: their Server page shows totals only, with projects by number.

Optional: address, emails, AI, size

Your own address

Google's address works and is secure. For an address of your organisation, such as https://cloud.example.org, prove once that you own the domain with gcloud domains verify example.org, then run:

bash deploy/gcp/deploy.sh --domain cloud.example.org

The script prints the DNS records to add where the domain was bought. This works in Belgium, Iowa, South Carolina and Singapore among others; in other regions, such as Johannesburg, Mumbai or São Paulo, the script says so, and a load balancer or another proxy is needed in front (DEPLOY.md, "Your own address").

Emails

Without email the server works fully; you make password reset links yourself (Server › Accounts › Make a reset link). With a mail provider that sends for your domain, people can use Forgot your password? and ask for a weekly summary. You give the server the provider's details (SMTP_URL), a sender address, the server's address and a signing secret; the commands are in DEPLOY.md, "Weekly emails (optional)".

The AI assistant

Off unless you set it up. It needs the Vertex AI service turned on in your project, then Allow the AI assistant on this server in the server settings, and each coordinator who wants it turns it on in their project. It sends Google's Gemini the choice and number answers, the questions and the quality figures, never coordinates, plot ids, comments or names. Limits per project (by default 5 reviews a day and 2 million tokens a month) keep the cost small. Steps: DEPLOY.md, "AI assistant (optional)".

A bigger database, more memory

Looking after it

Updating

When there is a new version, press Open in Cloud Shell again and run the same command, bash deploy/gcp/deploy.sh. It fetches the latest code, rebuilds the server and switches to it in about 5 minutes, without asking the questions again. The data stays: the database is never recreated, and people working at that moment don't notice.

Backups and restoring

The database is backed up every night, the last 7 copies are kept, and it can be put back as it was at any minute of the last 7 days. To restore, open the Cloud SQL console, the database ce-cloud-db, then Backups (Google's guide). Restoring replaces all current data, so download each project's data first. Try a restore once before the real work starts, so you know it works.

For a copy outside Google Cloud, download each project's data from its Data tab now and then: a spreadsheet, or a Collect Earth backup that can start the project again anywhere.

Security checklist

When something goes wrong

The server's own log shows what it did (use your region):

gcloud run services logs read collect-earth-cloud --region europe-west1 --limit 50

Ask in the Open Foris user forum or the Collect Earth issues, with the messages from the terminal and the dashboard address.

Moving a project to your server

A project that started on cloud.collectearth.org, or on a computer, moves with its survey and its plots:

  1. On the old project's Data tab, take a Collect Earth backup. From a computer, export XML (compressed) instead.
  2. On your server, My projects › New project › From a Collect Earth backup. The survey and the plots already assessed come in; those plots go into a plot file of their own, ending in _done.csv, to leave out when you give out plots.
  3. Add the plot files for the remaining work, invite the team again, and give out the plots. Interpreters join the new project with its link, as the first time.
  4. When everything is there, delete the old project (its Settings tab).

On any other host, with Docker

Collect Earth Cloud is one container and a PostgreSQL database, so it also runs on your own servers or any other cloud. This route is for a system administrator.

What you need

Install

  1. Build the image:
    git clone https://github.com/openforis/collect-earth
    cd collect-earth/collect-earth-cloud
    docker build -t collect-earth-cloud .
  2. Run the server. Choose a setup code, such as K7QX-M3TB-WN, or leave SETUP_CODE out and read the one the server prints in its log (docker logs ce-cloud):
    docker run -d --name ce-cloud --restart unless-stopped -p 127.0.0.1:8080:8080 \
      -e STORE_BACKEND=postgres \
      -e MIGRATION_DATABASE_URL='postgres://ce:OWNER_PASSWORD@db-host:5432/collect_earth_cloud' \
      -e DATABASE_URL='postgres://ce_app:APP_PASSWORD@db-host:5432/collect_earth_cloud' \
      -e MIGRATE_ON_BOOT=true \
      -e SETUP_CODE='YOUR-SETUP-CODE' \
      -e PUBLIC_BASE_URL='https://cloud.example.org' \
      collect-earth-cloud
  3. Put HTTPS in front. With Caddy, which gets the certificate by itself, the whole configuration is:
    cloud.example.org {
        reverse_proxy 127.0.0.1:8080
    }
    Behind two proxies, such as a load balancer in front of Caddy, add -e TRUST_PROXY_HOPS=2.
  4. Check it: https://cloud.example.org/health answers, and /v1/server-info says needsSetup until you have created the administrator. Then continue with First steps on your server.

To update: fetch the code again (git pull), build the image, and replace the container with the same docker run; the database is updated when the server starts. Every setting, including email and the AI assistant, is in DEPLOY.md. The docker-compose.yml in the folder is a database for trying things out only, not for real work.

Removing it

To stop all costs on Google Cloud, delete the project. This deletes the server and the database with all the data collected, so download each project's data first.

  1. Open Manage resources, select the project, press Delete and type its ID. Or, in Cloud Shell: gcloud projects delete YOUR-PROJECT-ID.
  2. Billing stops at once. Google keeps the project for 30 days in case you change your mind, then removes it for good.