Getting Started with Scribe-Server on Toolforge using Go

muhamad asifmuhamad asif
3 min read

This guide provides a concise walkthrough for deploying a demo instance of the scribe-server (written in Go) on Toolforge. By setting up your own test server—similar to https://testserver-scribe.toolforge.org —you can validate your contributions in a live, Wikimedia-compatible environment.

Fork and Clone the Scribe Server Repository

  • Go to the official repo: Scribe-Server GitHub

  • Click Fork to add it to your GitHub account.

  • Clone your fork locally:

      git clone https://github.com/<your-username>/Scribe-Server.git
      cd Scribe-Server
    

    Create a new branch to work on:

      git checkout -b demo-toolforge-setup
    

Create a Toolforge Account

  • You’ll need to:

    • Create a Wikimedia developer account if you don’t have.

    • Request access to the Toolforge project

  • Membership approval usually takes about a day.

  • Follow the quickstart guide here: Toolforge Quickstart to login toolforge using ssh

If you successfully logged in you’ll see similar interface like this -

Toolforge login interface

Create Tool account and use cmd like to switch the specific tool you want to deploy -

become testserver-scribe           # for testing I use tool name as `testserver-scribe`

now we need to setup the environment first, for this we need to install git, Go

For go1.23.6 or higher setup we can use

wget https://go.dev/dl/go1.23.6.linux-amd64.tar.gz    # Download Go
tar -xzf go1.23.6.linux-amd64.tar.gz -C ~/            # Extract the Tarball
mv ~/go ~/go1.23                                      # Rename the Directory &
                                                        moved it to ~/go1.23 for organization.

echo 'export GOROOT=$HOME/go1.23' >> ~/.bashrc        # Persist the Variables
echo 'export PATH=$PATH:$GOROOT/bin' >> ~/.bashrc     # Persist the Variables

source ~/.bashrc                                      # Apply the changes

go version                                            # Verify Installation

rm go1.23.6.linux-amd64.tar.gz                        # Clean Up tar file

If we ran go run . it’ll run 0.0.0.0:8000 only in toolforge environment.

Also, We can’t use go-sqlite3, as go-sqlite3 requires cgo to work. Also similarly we can’t use make command.

Therefore as there is no Golang in latest supported pre-built images, we are using different method.

🔁 Deploying or Re-deploying Your Scribe Server on Toolforge

Once our Tool is created and you've pushed your changes to Toolforge, follow these steps to build and launch your server:

🛑 1. Stop Any Running Service

toolforge webservice stop

This ensures that your previous service is cleanly shut down before starting a new one.

🏗️ 2. Compile the Go Application

cd ~/scribe-server
go build -o scribe-server

This builds your Go application and outputs the binary as test-scribe-server.

📝 3. Create the Start Script (Only Once)

If you haven’t created it before, make a simple start script to launch the server:

cat > ~/scribe-server/start-script.sh << 'EOF'
#!/bin/bash
cd /data/project/testserver-scribe/scribe-server
export PORT=8000
./scribe-server
EOF

Make it executable:

chmod +x ~/scribe-server/start-script.sh

🚀 4. Start the Service:

toolforge webservice jdk17 start /data/project/testserver-scribe/scribe-server/start-script.sh

✅ Tip: Although we’re using Go, the jdk17 webservice backend is required for ingress routing compatibility. (check out Other / generic web servers)

🔁 Re-deploying After Making Changes?

Just repeat the key steps:

toolforge webservice stop
git pull                          # It will pull the latest changes from the branches 
go build -o test-scribe-server
toolforge webservice jdk17 start /data/project/testserver-scribe/scribe-server/start-script.sh

🌐 Check the Running Domain

To find the URL where your service is live:

kubectl --namespace=tool-testserver-scribe get ingress

Usually something like: testserver-scribe.toolforge.org

✅ Conclusion

By deploying a demo instance of the scribe-server on Toolforge, you gain a deeper understanding of how Scribe operates within a Wikimedia-compatible environment. This setup not only allows you to test and validate your contributions in real-time but also prepares you for working on larger production-level tools in the future.

Whether you're a new contributor or an experienced developer, having your own live test environment is a powerful way to improve both your workflow and the quality of your contributions.

Happy coding—and welcome to the Scribe community!

0
Subscribe to my newsletter

Read articles from muhamad asif directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

muhamad asif
muhamad asif