5.5 KiB
Create a remote Zulip dev server
This guide is for mentors who want to help create remote Zulip dev servers for hackathon, GCI, or sprint participants.
The machines (droplets) have been generously provided by Digital Ocean to help Zulip contributors get up and running as easily as possible. Thank you Digital Ocean!
The create.py
create uses the Digital Ocean API to quickly create new virtual
machines (droplets) with the Zulip dev server already configured.
Step 1: Join Zulip Digital Ocean team
We have created a team on Digital Ocean for Zulip mentors. Ask Rishi or Tim to be added. You need access to the team so you can create your Digital Ocean API token.
Step 2: Create your Digital Ocean API token
Once you've been added to the Zulip team, login to the Digital Ocean control panel and create your personal API token. Make sure you create your API token under the Zulip team. (It should look something like this).
Copy the API token and store it somewhere safe. You'll need it in the next step.
Step 3: Configure create.py
In tools/droplets/
there is a sample configuration file conf.ini-template
.
Copy this file to conf.ini
:
$ cd tools/droplets/
$ cp conf.ini-template conf.ini
Now edit the file and replace APITOKEN
with the personal API token you
generated earlier.
[digitalocean]
api_token = APITOKEN
Now you're ready to use the script.
Usage
create.py
takes two arguments
- GitHub username
- Tags (Optional argument)
$ python3 create.py <username>
$ python3 create.py <username> --tags <tag>
$ python3 create.py <username> --tags <tag1> <tag2> <tag3>
Assigning tags to droplets like GCI
can be later useful for
listing all the droplets created during GCI.
Tags
may contain letters, numbers, colons, dashes, and underscores.
You'll need to run this from the Zulip development environment (e.g. in Vagrant).
In order for the script to work, the GitHub user must have:
- forked the zulip/zulip repository, and
- created an ssh key pair and added it to their GitHub account.
(Share this link with students if they need to do these steps.)
The script will stop if it can't find the user's fork or ssh keys.
The script will also stop if a droplet has already been created for the user. If you need to re-create a droplet, login to Digital Ocean with your browser and delete both the droplet and its dns entry.
Once the droplet is created, you will see something similar to this message:
Your remote Zulip dev server has been created!
- Connect to your server by running
`ssh zulipdev@<username>.zulipdev.org` on the command line
(Terminal for macOS and Linux, Bash for Git on Windows).
- There is no password; your account is configured to use your ssh keys.
- Once you log in, you should see `(zulip-venv) ~$`.
- To start the dev server, `cd zulip` and then run `./tools/run-dev.py`.
- While the dev server is running, you can see the Zulip server in your browser
at http://<username>.zulipdev.org:9991.
See [Developing
remotely](http://zulip.readthedocs.io/en/latest/dev-remote.html) for tips on
using the remote dev instance and [Git & GitHub
Guide](http://zulip.readthedocs.io/en/latest/git-guide.html) to learn how to
use Git with Zulip.
Copy and paste this message to the user via Zulip chat. Be sure to CC the user so they are notified.
Updating the base image
Rough steps:
- Get the
ssh
key forbase.zulipdev.org
from Christie or Rishi. - Power up the
base.zulipdev.org
droplet from the digitalocean UI. You probably have to be logged in in the Zulip organization view, rather than via your personal account. ssh zulipdev@base.zulipdev.org
git pull upstream master
tools/provision
git clean -f
, in case things were added/removed from.gitignore
./srv/zulip-py3-venv/bin/activate
(added after PyCon 2017, I forget why this was needed.)tools/run-dev.py
, let it run to completion, and then Ctrl-C (to clear out anything in the Rabbit MQ queue, load messages, etc).tools/run-dev.py
, and check thatbase.zulipdev.org:9991
is up and running.history -c
to clear any command line history, if you made a typo (to reduce chance of confusing new contributors).sudo shutdown -h now
- Go to the Images tab on DigitalOcean, and "Take a Snapshot".
- Wait for several minutes.
- Make sure to add the appropriate regions via More -> "Add to region" in the Snapshots section.
- Do something like
curl -X GET -H "Content-Type: application/json" -u <API_KEY>: "https://api.digitalocean.com/v2/images?page=5" | grep --color=always base.zulipdev.org
(maybe with a different page number, and replace your API_KEY). - Replace
template_id
increate.py
in this directory with the appropriateid
, and region with the appropriate region. - Test that everything works.
- Open a PR with the updated template_id in zulip/zulip!