SlideShare a Scribd company logo
The story and tech
 of Read the Docs




                   Eric Holscher
        http://ericholscher.com
               Djangocon 2011
What this talk is


» Talk about the history of Read the Docs

» Technology Involved

» Interesting outcomes of openness

» Lessons learned
Who am I



» I come from Django

» Work at Urban Airship

» Like automating systems
Why I’m here


» Feedback

» Ideas

» Hopefully you’ll learn something too!

» Shameless self-promotion
The story
2010 Django Dash
Charles Leifer
Bobby Grace (Design)
        Me
Doc Hosting Sucks



» packages.python.org

» Github Pages

» Your own janky cronjobs
`
Sphinx




» Standard documentation tool for python

» Uses reStructured Text
The story and tech of Read the Docs
Had a workable site in 48 hours
Fully Open Source
Fully Open Source



» github.com/rtfd/readthedocs.org

» github.com/ericholscher/chef-django-example

» ericholscher.com/tag/chef-series/
The story and tech of Read the Docs
Officially Hosted

» Celery

» Fabric

» Nose, py.test

» Virtualenv, Pip

» Django CMS

» Django Grapelli/Floppyforms/Sentry

» mod_wsgi (woo!)
DEMO
What makes it tick
Features
Git, Hg, Bzr, Svn
Post commit hooks
Custom Theme
Full-text search
Tags & Branches = Versions
PDF Generation
Virtualenvs
rtfd.org
Tech
Subdomains
CNAME Support
Cname Support


» Request for docs.fabfile.org

» docs.fabfile.org -> fabric.readthedocs.org

» In middleware, resolve CNAME and determine
  docs to serve.
» Cache it.
Architecture
                       +-----------+
                       |      |
                 +-----| Varnish |------+
                 |     +-----------+        |
                 |                  |
             +---------+               +---------+
+-------------+          |     |          |      | +--------------+
|        |-----| Nginx |              | Nginx |----|        |
| File    |     +---------+              +---------+ | File     |
| System    |         |                |      | System   |
+-------------+          +---------+ +--------+ +---------+ +--------------+
     | |      |       | |     | |       |     | |
     | +---------|Gunicorn |--|Postgres|--|Gunicorn |--------+ |
     |       +---------+ +--------+ +---------+                 |
     |                     |                    |
     |                     |                    |
     |              +------------------+                 |
     |              |             |             |
     +---------------------| Build Server |-------------------+
                    |             |
                    +------------------+
Haystack & Solr
Chef
Nagios & Munin
Upstart
REST API
CoffeeScript
CLI
Open Source Outcomes
Patches
Known architecture information
Slow Loris
Trust
People Writing Docs
Lessons
Think about your URLs.
     Really hard.
Lay your project out sanely
Write tests!
Build around a standard tool
Passing data through systems is
              hard
Serving static files is annoying
Log. Everything.
Promote (Hi!)
Find a designer!
Follow the Unix Philosophy
Have a mission
Thanks
Revsys
PSF
Mozilla
Divio
Pyladies
Questions?


» readthedocs.org / rtfd.org

» #readthedocs on Freenode

» github.com/rtfd/readthedocs.org

» eric@ericholscher.com

More Related Content

PDF
Read the Docs: A completely open source Django project
KEY
Read the Docs
PDF
How to ReadTheDocs
PDF
Making the most of your Test Suite
ODP
Tool it Up! - Session #1 - Xhprof
PDF
Scrapy workshop
PDF
Playground 11022017 user_monitoring
PDF
Deploying on the cutting edge
Read the Docs: A completely open source Django project
Read the Docs
How to ReadTheDocs
Making the most of your Test Suite
Tool it Up! - Session #1 - Xhprof
Scrapy workshop
Playground 11022017 user_monitoring
Deploying on the cutting edge

What's hot (20)

PDF
A.I. Exercise.
PPTX
CouchDB Day NYC 2017: Core HTTP API
PDF
Webscraping with asyncio
PDF
Puppetconf 2015 - Puppet Reporting with Elasticsearch Logstash and Kibana
PDF
Concurrency in Python
PPTX
Webinar - Managing Files with Puppet
PDF
Graph-Tool in Practice
PDF
Frequently asked questions answered frequently - but now for the last time
PPTX
Parse, scale to millions
PDF
WordPress Plugin Unit Tests (FR - WordCamp Paris 2015)
PPTX
Webinar - Windows Application Management with Puppet
PDF
Application Logging With The ELK Stack
PPTX
Build javascript in private environment
PDF
Docker for Developers: Dev, Test, Deploy @ BucksCo Devops at MeetMe HQ
PDF
Docker worshop @Twitter - How to use your own private registry
PDF
CP3108B (Mozilla) Sharing Session on Add-on SDK
PPTX
There's Nothing so Permanent as Temporary
PDF
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
PPTX
Maven Plugins
PPTX
Visualizing ORACLE performance data with R @ #C16LV
A.I. Exercise.
CouchDB Day NYC 2017: Core HTTP API
Webscraping with asyncio
Puppetconf 2015 - Puppet Reporting with Elasticsearch Logstash and Kibana
Concurrency in Python
Webinar - Managing Files with Puppet
Graph-Tool in Practice
Frequently asked questions answered frequently - but now for the last time
Parse, scale to millions
WordPress Plugin Unit Tests (FR - WordCamp Paris 2015)
Webinar - Windows Application Management with Puppet
Application Logging With The ELK Stack
Build javascript in private environment
Docker for Developers: Dev, Test, Deploy @ BucksCo Devops at MeetMe HQ
Docker worshop @Twitter - How to use your own private registry
CP3108B (Mozilla) Sharing Session on Add-on SDK
There's Nothing so Permanent as Temporary
PHP Conference Argentina 2013 - Independizate de tu departamento IT - Habilid...
Maven Plugins
Visualizing ORACLE performance data with R @ #C16LV
Ad

Similar to The story and tech of Read the Docs (20)

PDF
Storing metrics at scale with Gnocchi
PDF
忙しい人のためのSphinx 入門 demo
PDF
Lessons learned while building Omroep.nl
PPTX
CoreOS in anger : firing up wordpress across a 3 machine CoreOS cluster
PDF
Lessons learned while building Omroep.nl
PDF
MySQL Cookbook: Recipes for Developers
PDF
MySQL Cookbook: Recipes for Developers, Alkin Tezuysal and Sveta Smirnova - P...
PDF
Hvordan sette opp en OAI-PMH metadata-innhøster
PDF
SciPy 2025 - Packaging a Scientific Python Project
PPTX
RediSearch Mumbai Meetup 2020
PDF
How to build and run oci containers
PPTX
¡El mejor lenguaje para automatizar pruebas!
PDF
Abusing Erlang compilation pipeline for Fun and Profit
PDF
What is MariaDB Server 10.3?
PDF
MariaDB with SphinxSE
PDF
Cloudy with a Chance of Fireballs: Provisioning and Certificate Management in...
PPTX
What's new in Docker - InfraKit - Docker Meetup Berlin 2016
PDF
Streaming ETL - from RDBMS to Dashboard with KSQL
PDF
Qcon beijing 2010
PDF
Quick and Dirty GUI Applications using GUIDeFATE
Storing metrics at scale with Gnocchi
忙しい人のためのSphinx 入門 demo
Lessons learned while building Omroep.nl
CoreOS in anger : firing up wordpress across a 3 machine CoreOS cluster
Lessons learned while building Omroep.nl
MySQL Cookbook: Recipes for Developers
MySQL Cookbook: Recipes for Developers, Alkin Tezuysal and Sveta Smirnova - P...
Hvordan sette opp en OAI-PMH metadata-innhøster
SciPy 2025 - Packaging a Scientific Python Project
RediSearch Mumbai Meetup 2020
How to build and run oci containers
¡El mejor lenguaje para automatizar pruebas!
Abusing Erlang compilation pipeline for Fun and Profit
What is MariaDB Server 10.3?
MariaDB with SphinxSE
Cloudy with a Chance of Fireballs: Provisioning and Certificate Management in...
What's new in Docker - InfraKit - Docker Meetup Berlin 2016
Streaming ETL - from RDBMS to Dashboard with KSQL
Qcon beijing 2010
Quick and Dirty GUI Applications using GUIDeFATE
Ad

Recently uploaded (20)

PDF
A comparative study of natural language inference in Swahili using monolingua...
PDF
August Patch Tuesday
PDF
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
PDF
Assigned Numbers - 2025 - Bluetooth® Document
PDF
Getting Started with Data Integration: FME Form 101
PPTX
SOPHOS-XG Firewall Administrator PPT.pptx
PDF
gpt5_lecture_notes_comprehensive_20250812015547.pdf
PDF
Spectral efficient network and resource selection model in 5G networks
PDF
Univ-Connecticut-ChatGPT-Presentaion.pdf
PPTX
OMC Textile Division Presentation 2021.pptx
PDF
NewMind AI Weekly Chronicles - August'25-Week II
PPTX
cloud_computing_Infrastucture_as_cloud_p
PDF
Approach and Philosophy of On baking technology
PDF
Network Security Unit 5.pdf for BCA BBA.
PPTX
Digital-Transformation-Roadmap-for-Companies.pptx
PDF
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
PDF
Per capita expenditure prediction using model stacking based on satellite ima...
PDF
Machine learning based COVID-19 study performance prediction
PDF
A comparative analysis of optical character recognition models for extracting...
PDF
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf
A comparative study of natural language inference in Swahili using monolingua...
August Patch Tuesday
Architecting across the Boundaries of two Complex Domains - Healthcare & Tech...
Assigned Numbers - 2025 - Bluetooth® Document
Getting Started with Data Integration: FME Form 101
SOPHOS-XG Firewall Administrator PPT.pptx
gpt5_lecture_notes_comprehensive_20250812015547.pdf
Spectral efficient network and resource selection model in 5G networks
Univ-Connecticut-ChatGPT-Presentaion.pdf
OMC Textile Division Presentation 2021.pptx
NewMind AI Weekly Chronicles - August'25-Week II
cloud_computing_Infrastucture_as_cloud_p
Approach and Philosophy of On baking technology
Network Security Unit 5.pdf for BCA BBA.
Digital-Transformation-Roadmap-for-Companies.pptx
Video forgery: An extensive analysis of inter-and intra-frame manipulation al...
Per capita expenditure prediction using model stacking based on satellite ima...
Machine learning based COVID-19 study performance prediction
A comparative analysis of optical character recognition models for extracting...
Blue Purple Modern Animated Computer Science Presentation.pdf.pdf

The story and tech of Read the Docs

Editor's Notes