The following instructions are from our old quickstart guide before we had sg setup guiding new users through the setup process.
This guide is kept here until we're sure that sg setup is stable.
Sourcegraph has the following dependencies:
- Git (v2.18 or higher)
- Go (see current version in
.tool-versions) - Node JS (see current recommended version in .nvmrc)
- make
- Docker (v18 or higher)
- For macOS we recommend using Docker for Mac instead of
docker-machine
- For macOS we recommend using Docker for Mac instead of
- PostgreSQL (v12 or higher)
- Redis (v5.0.7 or higher)
- Yarn (v1.10.1 or higher)
- SQLite tools
- Comby (v0.11.3 or higher)
Below are instructions to install these dependencies:
- macOS
- Ubuntu
- Optional: asdf for an alternate way of managing dependencies, especially different versions of programming languages.
NOTE: You can choose to install and run Redis and/or PostgreSQL with or without Docker. The following instructions will describe both options. What's the better option?
- Running within a container provides some advantages such as storing the data separately from the container, you do not need to run it as a system service and its easy to use different database versions or multiple databases.
- Running as system services might yield better performance, especially on macOS.
- No matter which option you choose, docker is required because the development server starts additional docker containers.
-
Install Homebrew.
-
Install Docker for Mac.
Alternatively, you can install it via
brewbrew install --cask docker -
Install Go, Yarn, Git, Comby, SQLite tools, and jq with the following command:
brew install go yarn git gnu-sed comby pcre sqlite jq -
Choose to run Postgres and Redis manually (Option a.) or via Docker (Option b.)
a. Install PostgreSQL and Redis Without Docker
-
Install PostgreSQL and Redis with the following commands:
brew install postgresql brew install redis -
(optional) Start the services (and configure them to start automatically):
brew services start postgresql brew services start redis(You can stop them later by calling
stopinstead ofstartabove. -
Ensure
psql, the PostgreSQL command line client, is on your$PATH.hash psqlIf this command emits no output, you are free to move to the next step. Otherwise, you installed a Homebrew recipe that does not modify your
$PATHby default. Homebrew gives you the command to run to insertpsqlin your path in the "Caveats" section ofbrew info postgresql. Alternatively, you can use the command below. It might need to be adjusted depending on your Homebrew prefix (/usr/localbelow) and shell (bash below).hash psql || { echo 'export PATH="/usr/local/opt/postgresql/bin:$PATH"' >> ~/.bash_profile } source ~/.bash_profile -
Open a new Terminal window to ensure
psqlis now on your$PATH.
b. With Docker
Nothing to do here, since you already installed Docker for Mac.
We provide a docker compose file at
dev/redis-postgres.ymlto make it easy to run Redis and PostgreSQL as Docker containers, with docker compose. -
-
Install the Node Version Manager (
nvm) using:NVM_VERSION="$(curl https://api.github.com/repos/nvm-sh/nvm/releases/latest | jq -r .name)" curl -L https://raw.githubusercontent.com/nvm-sh/nvm/"$NVM_VERSION"/install.sh -o install-nvm.sh sh install-nvm.shAfter the install script is finished, re-source your shell profile (e.g.,
source ~/.zshrc) or restart your terminal session to pick up thenvmdefinitions. Re-running the install script will update the installation.NOTE:
nvmis implemented as a shell function, so it may not show up in the output ofwhich nvm. Usetype nvmto verify whether it is set up. There is also a Homebrew package fornvm, but it is unsupported by thenvmmaintainers.-
For fish shell users, you will want to install
basswhich you can get viaomf:curl -L https://get.oh-my.fish | fish omf install bass -
Then add the following to your
config.fish:function nvm bass source ~/.nvm/nvm.sh --no-use ';' nvm $argv end set -x NVM_DIR ~/.nvm
-
-
Install the current recommended version of Node JS by running the following in the
sourcegraph/sourcegraphrepository clone (See Get the code for cloning the repository):nvm install nvm use --delete-prefixAfter doing this,
node -vshould show the same version mentioned in.nvmrcat the root of the sourcegraph repository.NOTE: Although there is a Homebrew package for Node, we advise using
nvminstead, to ensure you get a Node version compatible with the current state of the sourcegraph repository.
-
Add package repositories:
# Go sudo add-apt-repository ppa:longsleep/golang-backports # Docker curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" # Yarn curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list -
Update repositories:
sudo apt-get update -
Install dependencies:
sudo apt install -y make git-all libpcre3-dev libsqlite3-dev pkg-config golang-go docker-ce docker-ce-cli containerd.io yarn jq libnss3-tools # Install comby curl -L https://github.com/comby-tools/comby/releases/download/0.11.3/comby-0.11.3-x86_64-linux.tar.gz | tar xvz # The extracted binary must be in your $PATH available as `comby`. # Here's how you'd move it to `/usr/local/bin` (which is most likely in your `$PATH`): chmod +x comby-*-linux mv comby-*-linux /usr/local/bin/comby # Install nvm (to manage Node.js) NVM_VERSION="$(curl https://api.github.com/repos/nvm-sh/nvm/releases/latest | jq -r .name)" curl -L https://raw.githubusercontent.com/nvm-sh/nvm/"$NVM_VERSION"/install.sh -o install-nvm.sh sh install-nvm.sh # In sourcegraph repository directory: install current recommendend version of Node JS nvm install -
Choose to run Postgres and Redis manually (Option a.) or via Docker (Option b.)
a. Without Docker
-
Install PostgreSQL and Redis with the following commands:
sudo apt install -y redis-server sudo apt install -y postgresql postgresql-contrib -
(optional) Start the services (and configure them to start automatically):
sudo systemctl enable --now postgresql sudo systemctl enable --now redis-server.service
b. With Docker
We provide a docker compose file at
dev/redis-postgres.ymlto make it easy to run Redis and PostgreSQL as docker containers.NOTE: Although Ubuntu provides a
docker-composepackage, we recommend to install the latest version viapipso that it is compatible with our compose file.See the official docker compose documentation for more details on different installation options.
-
asdf is a CLI tool that manages runtime versions for a number of different languages and tools. It can be likened to a language-agnostic version of nvm or pyenv.
We use asdf in buildkite to lock the versions of the tools that we use on a per-commit basis.
See the installation instructions on the official asdf documentation.
sourcegraph/sourcegraph uses the following plugins:
asdf plugin add golangasdf plugin add nodejs
# Import the Node.js release team's OpenPGP keys to main keyring
bash ~/.asdf/plugins/nodejs/bin/import-release-team-keyring
# Have asdf read .nvmrc for auto-switching between node version
## Add the following to $HOME/.asdfrc:
legacy_version_file = yesasdf plugin add yarnasdf uses versions specified in .tool-versions whenever a command is run from one of sourcegraph/sourcegraph's subdirectories.
You can install the all the versions specified in .tool-versions by running asdf install.
Run the following command in a folder where you want to keep a copy of the code. Command will create a new sub-folder (sourcegraph) in this folder.
git clone https://github.com/sourcegraph/sourcegraph.gitIn order to run the local development environment as a Sourcegraph employee, you'll need to clone another repository: sourcegraph/dev-private. It contains convenient preconfigured settings and code host connections.
It needs to be cloned into the same folder as sourcegraph/sourcegraph, so they sit alongside each other. To illustrate:
/dir
|-- dev-private
+-- sourcegraph
NOTE: Ensure that you periodically pull the latest changes from
sourcegraph/dev-privateas the secrets are updated from time to time.
This is the easy way - just launch Docker.app and wait for it to finish loading.
The Docker daemon should be running in the background, which you can test by
running docker ps. If you're on OS X and using docker-machine instead of
Docker for Mac, you may have to run:
docker-machine start default
eval $(docker-machine env)The docker daemon might already be running, but if necessary you can use the following commands to start it:
# as a system service
sudo systemctl enable --now docker
# manually
dockerdIf you have issues running Docker, try adding your user to the docker group, and/or updating the socket file permissions, or try running these commands under sudo.
The Sourcegraph server reads PostgreSQL connection configuration from the PG* environment variables.
The development server startup script as well as the docker compose file provide default settings, so it will work out of the box.
To initialize your database, you may have to set the appropriate environment variables before running the createdb command:
createdb --host=localhost --user=sourcegraph --owner=sourcegraph --encoding=UTF8 --template=template0 sourcegraphYou can also use the PGDATA_DIR environment variable to specify a local folder (instead of a volume) to store the database files. See the dev/redis-postgres.yml file for more details.
This can also be spun up using sg run redis-postgres, with the following sg.config.override.yaml:
env:
PGHOST: localhost
PGPASSWORD: sourcegraph
PGUSER: sourcegraphYou need a fresh Postgres database and a database user that has full ownership of that database.
-
Create a database for the current Unix user
# For Linux users, first access the postgres user shell sudo su - postgres # For Mac OS users sudo su - _postgrescreatedb -
Create the Sourcegraph user and password
createuser --superuser sourcegraph psql -c "ALTER USER sourcegraph WITH PASSWORD 'sourcegraph';" -
Create the Sourcegraph database
createdb --owner=sourcegraph --encoding=UTF8 --template=template0 sourcegraph -
Configure database settings in your environment
The Sourcegraph server reads PostgreSQL connection configuration from the
PG*environment variables.Our
sgconfiguration insg.config.yamlsets values that work with the setup described here, but if you want to use differnt values you can overwrite them insg.config.overwite.yaml, like this:env: PGPORT=5432 PGHOST=localhost PGUSER=sourcegraph PGPASSWORD=sourcegraph PGDATABASE=sourcegraph PGSSLMODE=disable
For more information about data storage, read our full PostgreSQL page.
Migrations are applied automatically.
Sourcegraph's development environment ships with a Caddy 2 HTTPS reverse proxy that allows you to access your local sourcegraph instance via https://sourcegraph.test:3443 (a fake domain with a self-signed certificate that's added to /etc/hosts).
If you'd like Sourcegraph to be accessible under https://sourcegraph.test (port 443) instead, you can set up authbind and set the environment variable SOURCEGRAPH_HTTPS_PORT=443.
In order to configure the HTTPS reverse-proxy, you'll need to edit /etc/hosts and initialize Caddy 2.
sourcegraph.test needs to be added to /etc/hosts as an alias to 127.0.0.1. There are two main ways of accomplishing this:
- Manually append
127.0.0.1 sourcegraph.testto/etc/hosts - Use the provided
./dev/add_https_domain_to_hosts.shconvenience script (sudo may be required).
> ./dev/add_https_domain_to_hosts.sh
--- adding sourcegraph.test to '/etc/hosts' (you may need to enter your password)
Password:
Adding host(s) "sourcegraph.test" to IP address 127.0.0.1
--- printing '/etc/hosts'
...
127.0.0.1 localhost sourcegraph.test
...Caddy 2 automatically manages self-signed certificates and configures your system so that your web browser can properly recognize them. The first time that Caddy runs, it needs root/sudo permissions to add
its keys to your system's certificate store. You can get this out the way after installing Caddy 2 by running the following command and entering your password if prompted:
./dev/caddy.sh trustNote: If you are using Firefox and have a master password set, the following prompt will come up first:
Enter Password or Pin for "NSS Certificate DB":
Enter your Firefox master password here and proceed. See this issue on GitHub for more information.
You might need to restart your web browsers in order for them to recognize the certificates.
If you chose to run PostgreSQL and Redis without Docker they should already be running. You can jump the next section.
If you chose to run Redis and PostgreSQL with Docker to then we need to configure sg so it can connect to them.
-
In the
sourcegraphfolder, create asg.config.overwrite.yamlfile with the following contents (don't worry,sg.config.overwrite.yamlfiles are ignored bygitand serve as a place for your local configuration):env: POSTGRES_HOST: localhost PGPASSWORD: sourcegraph PGUSER: sourcegraph -
Start the databases:
sg run redis-postgres
Keep this process running in a terminal window to keep the databases running. Follow the rest of the instructions in another terminal.
If you are a Sourcegraph employee: start the local development server for Sourcegraph Enterprise with the following command:
sg start
If you are not a Sourcegraph employee and don't have access to the dev-private repository: you want to start Sourcegraph OSS, do this:
sg start oss
This will continuously compile your code and live reload your locally running instance of Sourcegraph.
Navigate your browser to https://sourcegraph.test:3443 to see if everything worked.
If sg exits with errors or outputs errors, take a look at Troubleshooting or ask in the #dev-experience Slack channel.
If you want to run the server in different configurations (with the monitoring stack, with code insights enabled, Sourcegraph OSS, ...), run the following:
sg start -help
That prints a list of possible configurations which you can start with sg start.
For example, you can start Sourcegraph in the mode it uses on Sourcegraph.com by running the following in one terminal window
sg start dotcom
and then, in another terminal window, start the monitoring stack:
sg start monitoring
Congratulations on making it to the end of the quickstart guide! Here are some additional resources to help you go further: