Install single-container Sourcegraph with Docker on Google Cloud

This tutorial shows you how to deploy single-container Sourcegraph with Docker to a single node running on Google Cloud.

Deploy to Google Cloud VM

  • Open your Google Cloud console to create a new VM instance and click Create Instance

  • Choose an appropriate machine type (we recommend at least 2 vCPU and 7.5 GB RAM, more depending on team size and number of repositories/languages enabled)

  • Choose Ubuntu 16.04 LTS as your boot disk

  • Check the boxes for Allow HTTP traffic and Allow HTTPS traffic in the Firewall section

  • Open the Management, disks, networking, and SSH keys dropdown section and add the following in the Startup script field:

    #!/usr/bin/env bash
    curl -fsSL | sudo apt-key add -
    sudo add-apt-repository "deb [arch=amd64] $(lsb_release -cs) stable"
    sudo apt-get update
    apt-cache policy docker-ce
    sudo apt-get install -y docker-ce
    mkdir -p /root/.sourcegraph/config
    mkdir -p /root/.sourcegraph/data
    docker run -d --publish 80:7080 --publish 443:7443 --restart unless-stopped --volume /root/.sourcegraph/config:/etc/sourcegraph --volume /root/.sourcegraph/data:/var/opt/sourcegraph sourcegraph/server:5.2.5
  • Create your VM, then navigate to its public IP address.

  • If you have configured a DNS entry for the IP, configure externalURL to reflect that. (Note: externalURL was called appURL in Sourcegraph 2.13 and earlier.)

Update your Sourcegraph version

To update to the most recent version of Sourcegraph (X.Y.Z), SSH into your instance and run the following:

docker ps # get the $CONTAINER_ID of the running sourcegraph/server container
docker rm -f $CONTAINER_ID
docker run -d ... sourcegraph/server:X.Y.Z

Using an external database for persistence

The Docker container has its own internal PostgreSQL and Redis databases. To preserve this data when you kill and recreate the container, you can use external services for persistence, such as Google Cloud's Cloud SQL for PostgreSQL, Cloud Memorystore, and Cloud Storage for storing user uploads.