aboutsummaryrefslogtreecommitdiffstats
path: root/docs/source
diff options
context:
space:
mode:
Diffstat (limited to 'docs/source')
-rw-r--r--docs/source/_static/goblin.png (renamed from docs/source/goblin.png)bin47763 -> 47763 bytes
-rw-r--r--docs/source/_static/snugglygoblin.png (renamed from docs/source/snugglygoblin.png)bin163754 -> 163754 bytes
-rw-r--r--docs/source/conf.py4
-rw-r--r--docs/source/index.rst55
-rw-r--r--docs/source/pluginwriter/foreward.rst43
-rw-r--r--docs/source/pluginwriter/quickstart.rst189
-rw-r--r--docs/source/siteadmin/about.rst (renamed from docs/source/about.rst)23
-rw-r--r--docs/source/siteadmin/codebase.rst (renamed from docs/source/codebase.rst)15
-rw-r--r--docs/source/siteadmin/configuration.rst (renamed from docs/source/configuration.rst)0
-rw-r--r--docs/source/siteadmin/deploying.rst (renamed from docs/source/deploying.rst)112
-rw-r--r--docs/source/siteadmin/foreword.rst (renamed from docs/source/foreword.rst)14
-rw-r--r--docs/source/siteadmin/help.rst (renamed from docs/source/help.rst)0
-rw-r--r--docs/source/siteadmin/media-types.rst (renamed from docs/source/media-types.rst)30
-rw-r--r--docs/source/siteadmin/plugins.rst137
-rw-r--r--docs/source/siteadmin/production-deployments.rst (renamed from docs/source/production-deployments.rst)18
-rw-r--r--docs/source/siteadmin/relnotes.rst52
-rw-r--r--docs/source/siteadmin/theming.rst (renamed from docs/source/theming.rst)0
17 files changed, 603 insertions, 89 deletions
diff --git a/docs/source/goblin.png b/docs/source/_static/goblin.png
index e20265e6..e20265e6 100644
--- a/docs/source/goblin.png
+++ b/docs/source/_static/goblin.png
Binary files differ
diff --git a/docs/source/snugglygoblin.png b/docs/source/_static/snugglygoblin.png
index f325ae4b..f325ae4b 100644
--- a/docs/source/snugglygoblin.png
+++ b/docs/source/_static/snugglygoblin.png
Binary files differ
diff --git a/docs/source/conf.py b/docs/source/conf.py
index aafcf128..41cf2529 100644
--- a/docs/source/conf.py
+++ b/docs/source/conf.py
@@ -48,9 +48,9 @@ copyright = u'2011, 2012 GNU MediaGoblin contributors'
# built documents.
#
# The short X.Y version.
-version = '0.3.0'
+version = '0.3.1'
# The full version, including alpha/beta/rc tags.
-release = '0.3.0-dev'
+release = '0.3.1.dev'
# The language for content autogenerated by Sphinx. Refer to documentation
# for a list of supported languages.
diff --git a/docs/source/index.rst b/docs/source/index.rst
index 444ed688..569eda14 100644
--- a/docs/source/index.rst
+++ b/docs/source/index.rst
@@ -11,28 +11,52 @@
Dedication along with this software. If not, see
<http://creativecommons.org/publicdomain/zero/1.0/>.
-.. GNU MediaGoblin documentation master file, created by
- sphinx-quickstart on Thu Apr 7 20:10:27 2011.
- You can adapt this file completely to your liking, but it should at least
- contain the root `toctree` directive.
+===========================================
Welcome to GNU MediaGoblin's documentation!
===========================================
-Table of Contents:
+GNU MediaGoblin is a platform for sharing photos, video and other media
+in an environment that respects our freedom and independence.
+
+This is a Free Software project. It is built by contributors for all
+to use and enjoy. If you're intrested in contributing, see `the wiki
+<http://wiki.mediagoblin.org/>`_ which has pages that talk about the
+ways someone can contribute.
+
+
+Part 1: Site Administrator's Guide
+==================================
+
+This guide covers installing, configuring, deploying and running a GNU
+MediaGoblin website. It is written for site administrators.
+
+.. toctree::
+ :maxdepth: 1
+
+ siteadmin/foreword
+ siteadmin/about
+ siteadmin/deploying
+ siteadmin/production-deployments
+ siteadmin/configuration
+ siteadmin/media-types
+ siteadmin/help
+ siteadmin/relnotes
+ siteadmin/theming
+ siteadmin/plugins
+ siteadmin/codebase
+
+
+Part 2: Plugin Writer's Guide
+=============================
+
+This guide covers writing new GNU MediaGoblin plugins.
.. toctree::
- :maxdepth: 2
+ :maxdepth: 1
- foreword
- about
- deploying
- production-deployments
- configuration
- media-types
- help
- theming
- codebase
+ pluginwriter/foreward
+ pluginwriter/quickstart
Indices and tables
@@ -43,3 +67,4 @@ Indices and tables
.. * :ref:`modindex`
+This guide was built on |today|.
diff --git a/docs/source/pluginwriter/foreward.rst b/docs/source/pluginwriter/foreward.rst
new file mode 100644
index 00000000..fd3a0c22
--- /dev/null
+++ b/docs/source/pluginwriter/foreward.rst
@@ -0,0 +1,43 @@
+.. MediaGoblin Documentation
+
+ Written in 2011, 2012 by MediaGoblin contributors
+
+ To the extent possible under law, the author(s) have dedicated all
+ copyright and related and neighboring rights to this software to
+ the public domain worldwide. This software is distributed without
+ any warranty.
+
+ You should have received a copy of the CC0 Public Domain
+ Dedication along with this software. If not, see
+ <http://creativecommons.org/publicdomain/zero/1.0/>.
+
+========
+Foreword
+========
+
+About the Plugin Writer's Guide
+===============================
+
+This guide covers writing plugins for GNU MediaGoblin. It's very much
+a work in progress partially because we just started writing it and
+partially because the plugin API is currently in flux.
+
+
+Improving the Plugin Writer's Guide
+===================================
+
+There are a few ways---please pick whichever method is convenient for
+you!
+
+1. Write up a bug report in the bug tracker
+2. Tell someone on IRC ``#mediagoblin`` on Freenode.
+3. Write an email to the devel mailing list.
+
+Information about the bugtracker, IRC and the mailing list is all on
+the `join page`_.
+
+.. _join page: http://mediagoblin.org/join/
+
+Patches are the most helpful, but even feedback on what you think
+could be improved and how to improve it is also helpful.
+
diff --git a/docs/source/pluginwriter/quickstart.rst b/docs/source/pluginwriter/quickstart.rst
new file mode 100644
index 00000000..73531381
--- /dev/null
+++ b/docs/source/pluginwriter/quickstart.rst
@@ -0,0 +1,189 @@
+.. MediaGoblin Documentation
+
+ Written in 2011, 2012 by MediaGoblin contributors
+
+ To the extent possible under law, the author(s) have dedicated all
+ copyright and related and neighboring rights to this software to
+ the public domain worldwide. This software is distributed without
+ any warranty.
+
+ You should have received a copy of the CC0 Public Domain
+ Dedication along with this software. If not, see
+ <http://creativecommons.org/publicdomain/zero/1.0/>.
+
+
+===========
+Quick Start
+===========
+
+This is a quick start. It's not comprehensive, but it walks through
+writing a basic plugin called "sampleplugin" which logs "I've been
+started!" when ``setup_plugin()`` has been called.
+
+.. todo: Rewrite this to be a useful plugin
+
+
+Step 1: Files and directories
+=============================
+
+GNU MediaGoblin plugins are Python projects at heart. As such, you should
+use a standard Python project directory tree::
+
+ sampleplugin/
+ |- README
+ |- LICENSE
+ |- setup.py
+ |- sampleplugin/
+ |- __init__.py
+
+
+The outer ``sampleplugin`` directory holds all the project files.
+
+The ``README`` should cover what your plugin does, how to install it,
+how to configure it, and all the sorts of things a README should
+cover.
+
+The ``LICENSE`` should have the license under which you're
+distributing your plugin.
+
+The inner ``sampleplugin`` directory is the Python package that holds
+your plugin's code.
+
+The ``__init__.py`` denotes that this is a Python package. It also
+holds the plugin code.
+
+
+Step 2: README
+==============
+
+Here's a rough ``README``. Generally, you want more information
+because this is the file that most people open when they want to learn
+more about your project.
+
+::
+
+ README
+ ======
+
+ This is a sample plugin. It logs a line when ``setup__plugin()`` is
+ run.
+
+
+Step 3: LICENSE
+===============
+
+GNU MediaGoblin plugins must be licensed under the AGPLv3 or later. So
+the LICENSE file should be the AGPLv3 text which you can find at
+`<http://www.gnu.org/licenses/agpl-3.0.html>`_
+
+
+Step 4: setup.py
+================
+
+This file is used for packaging and distributing your plugin.
+
+We'll use a basic one::
+
+ from setuptools import setup, find_packages
+
+ setup(
+ name='sampleplugin',
+ version='1.0',
+ packages=find_packages(),
+ include_package_data=True,
+ install_requires=[],
+ license='AGPLv3',
+ )
+
+
+See `<http://docs.python.org/distutils/index.html#distutils-index>`_
+for more details.
+
+
+Step 5: the code
+================
+
+The code for ``__init__.py`` looks like this:
+
+.. code-block:: python
+ :linenos:
+ :emphasize-lines: 8,19
+
+ import logging
+ from mediagoblin.tools.pluginapi import Plugin, get_config
+
+
+ _log = logging.getLogger(__name__)
+
+
+ class SamplePlugin(Plugin):
+ """
+ This is a sample plugin class. It automatically registers itself
+ with MediaGoblin when this module is imported.
+
+ The setup_plugin method prints configuration for this plugin if
+ there is any.
+ """
+ def __init__(self):
+ pass
+
+ def setup_plugin(self):
+ _log.info("I've been started!")
+ config = get_config('sampleplugin')
+ if config:
+ _log.info('%r' % config)
+ else:
+ _log.info('There is no configuration set.')
+
+
+Line 8 defines a class called ``SamplePlugin`` that subclasses
+``Plugin`` from ``mediagoblin.tools.pluginapi``. When the class is
+defined, it gets registered with MediaGoblin and MediaGoblin will then
+call ``setup_plugin`` on it.
+
+Line 19 defines ``setup_plugin``. This gets called when MediaGoblin
+starts up after it's registered all the plugins. This is where you can
+do any initialization for your plugin.
+
+
+Step 6: Installation and configuration
+======================================
+
+To install the plugin for development, you need to make sure it's
+available to the Python interpreter that's running MediaGoblin.
+
+There are a couple of ways to do this, but we're going to pick the
+easy one.
+
+Use ``python`` from your MediaGoblin virtual environment and do::
+
+ python setup.py develop
+
+Any changes you make to your plugin will be available in your
+MediaGoblin virtual environment.
+
+Then adjust your ``mediagoblin.ini`` file to load the plugin::
+
+ [plugins]
+
+ [[sampleplugin]]
+
+
+Step 7: That's it!
+==================
+
+When you launch MediaGoblin, it'll load the plugin and you'll see
+evidence of that in the log file.
+
+That's it for the quick start!
+
+
+Where to go from here
+=====================
+
+See the documentation on the plugin API for code samples and other
+things you can use when building your plugin.
+
+See `Hitchhiker's Guide to Packaging
+<http://guide.python-distribute.org/>`_ for more information on
+packaging your plugin.
diff --git a/docs/source/about.rst b/docs/source/siteadmin/about.rst
index 7a6aa510..f9602397 100644
--- a/docs/source/about.rst
+++ b/docs/source/siteadmin/about.rst
@@ -19,8 +19,8 @@
:local:
-What is GNU MediaGoblin
-=======================
+What is GNU MediaGoblin?
+========================
In 2008, a number of free software developers and activists gathered
at the FSF to attempt to answer the question "What should software
@@ -36,15 +36,16 @@ freedom look like on the participatory web?" Their answer, the
Identi.ca and Libre.fm address the need for micro-blogging and music
sharing services and software that respect users' freedom and
-autonomy. GNU MediaGoblin emerges from this milieu to create a
-platform for us to share photos in an environment that respects our
-freedom and independence. In the future MediaGoblin will include
-support other media, like video, and provide tools to facilitate
+autonomy.
+
+GNU MediaGoblin emerges from this milieu to create a platform for us to share
+photos, video and other media in an environment that respects our freedom and
+independence. In the future MediaGoblin will provide tools to facilitate
collaboration on media projects.
-Why Build GNU MediaGoblin
-=========================
+Why Build GNU MediaGoblin?
+==========================
The Internet is designed---and works best---as a complex and endlessly
resilient network. When key services and media outlets are
@@ -62,8 +63,8 @@ make these kinds of services possible. We hope you'll join us, both
as users and as contributors.
-Who Contributes to the Project
-==============================
+Who Contributes to the Project?
+===============================
You do!
@@ -89,7 +90,7 @@ GNU MediaGoblin software is released under an AGPLv3 license.
See the ``COPYING`` file in the root of the source for details.
-Is MedaGobilin an official GNU project? What does that mean?
+Is MediaGoblin an official GNU project? What does that mean?
=============================================================
MediaGoblin is an official GNU project! This status means that we the
diff --git a/docs/source/codebase.rst b/docs/source/siteadmin/codebase.rst
index e784c9e5..3ef91290 100644
--- a/docs/source/codebase.rst
+++ b/docs/source/siteadmin/codebase.rst
@@ -55,8 +55,9 @@ Software Stack
* Data storage
- * `MongoDB <http://www.mongodb.org/>`_: the document database backend
- for storage
+ * `SQLAlchemy <http://sqlalchemy.org/>`_: SQL ORM and database
+ interaction library for Python. Currently we support sqlite and
+ postgress as backends.
* Web application
@@ -80,14 +81,6 @@ Software Stack
* `Celery <http://celeryproject.org/>`_: for task queuing (resizing
images, encoding video, ...)
- * `MongoKit <http://namlook.github.com/mongokit/>`_: the lightweight
- ORM for MongoDB we're using which will make it easier to define
- structures and all that (will be swapped out soon...)
-
- * `SQLAlchemy <http://sqlalchemy.org/>`_: SQL ORM and database
- interaction library for Python. We'll be moving to this in the
- upcoming move to SQL.
-
* `Babel <http://babel.edgewall.org>`_: Used to extract and compile
translations.
@@ -151,7 +144,7 @@ Here are some interesting files and what they do:
:routing.py: maps url paths to views
:views.py: views handle http requests
-:models.py: holds the mongodb schemas---these are the data structures
+:models.py: holds the sqlalchemy schemas---these are the data structures
we're working with
You'll notice that there are several sub-directories: tests,
diff --git a/docs/source/configuration.rst b/docs/source/siteadmin/configuration.rst
index a3dafa4c..a3dafa4c 100644
--- a/docs/source/configuration.rst
+++ b/docs/source/siteadmin/configuration.rst
diff --git a/docs/source/deploying.rst b/docs/source/siteadmin/deploying.rst
index ce39dc4e..788b06d7 100644
--- a/docs/source/deploying.rst
+++ b/docs/source/siteadmin/deploying.rst
@@ -11,6 +11,8 @@
Dedication along with this software. If not, see
<http://creativecommons.org/publicdomain/zero/1.0/>.
+.. _deploying-chapter:
+
=====================
Deploying MediaGoblin
=====================
@@ -41,49 +43,75 @@ MediaGoblin has the following core dependencies:
- Python 2.6 or 2.7
- `python-lxml <http://lxml.de/>`_
- `git <http://git-scm.com/>`_
-- `MongoDB <http://www.mongodb.org/>`_
+- `SQLite <http://www.sqlite.org/>`_/`PostgreSQL <http://www.postgresql.org/>`_
- `Python Imaging Library <http://www.pythonware.com/products/pil/>`_ (PIL)
- `virtualenv <http://www.virtualenv.org/>`_
On a DEB-based system (e.g Debian, gNewSense, Trisquel, Ubuntu, and
-derivatives) issue the following command: ::
+derivatives) issue the following command::
- sudo apt-get install mongodb git-core python python-dev python-lxml \
+ sudo apt-get install git-core python python-dev python-lxml \
python-imaging python-virtualenv
On a RPM-based system (e.g. Fedora, RedHat, and derivatives) issue the
-following command: ::
+following command::
- yum install mongodb-server python-paste-deploy python-paste-script \
+ yum install python-paste-deploy python-paste-script \
git-core python python-devel python-lxml python-imaging \
python-virtualenv
-Configure MongoDB
-~~~~~~~~~~~~~~~~~
+Configure PostgreSQL
+~~~~~~~~~~~~~~~~~~~~
+
+.. note::
+
+ MediaGoblin currently supports PostgreSQL and SQLite. The default is a
+ local SQLite database. This will "just work" for small deployments.
+
+ For medium to large deployments we recommend PostgreSQL.
+
+ If you don't want/need postgres, skip this section.
+
+These are the packages needed for Debian Wheezy (testing)::
+
+ sudo apt-get install postgresql postgresql-client python-psycopg2
+
+The installation process will create a new *system* user named ``postgres``,
+it will have privilegies sufficient to manage the database. We will create a
+new database user with restricted privilegies and a new database owned by our
+restricted database user for our MediaGoblin instance.
+
+In this example, the database user will be ``mediagoblin`` and the database
+name will be ``mediagoblin`` too.
+
+To create our new user, run::
+
+ sudo -u postgres createuser mediagoblin
+
+then answer NO to *all* the questions::
+
+ Shall the new role be a superuser? (y/n) n
+ Shall the new role be allowed to create databases? (y/n) n
+ Shall the new role be allowed to create more new roles? (y/n) n
-After installing MongoDB some preliminary database configuration may
-be necessary.
+then create the database all our MediaGoblin data should be stored in::
-Ensure that MongoDB `journaling
-<http://www.mongodb.org/display/DOCS/Journaling>`_ is enabled. Journaling
-is enabled by default in version 2.0 and later 64-bit MongoDB instances.
-Check your deployment, and consider enabling journaling if you're running
-32-bit systems or earlier version.
+ sudo -u postgres createdb -E UNICODE -O mediagoblin mediagoblin
-.. warning::
+where the first ``mediagoblin`` is the database owner and the second
+``mediagoblin`` is the database name.
- Running MongoDB without journaling risks general data corruption
- and raises the possibility of losing data within a 60-second
- window when the server restarts.
+.. caution:: Where is the password?
- MediaGoblin recommends enabling MongoDB's journaling feature by
- adding a ``--journal`` flag to the command line or a "``journal:
- true``" option to the configuration file.
+ These steps enable you to authenticate to the database in a password-less
+ manner via local UNIX authentication provided you run the MediaGoblin
+ application as a user with the same name as the user you created in
+ PostgreSQL.
-MongoDB can take a lot of space by default. If you're planning on
-running a smaller instance, consider the `scaling down guide
-<http://wiki.mediagoblin.org/Scaling_Down>`_ for some appropriate
-tradeoffs to conserve space.
+ More on this in :ref:`Drop Privileges for MediaGoblin <drop-privileges-for-mediagoblin>`.
+
+
+.. _drop-privileges-for-mediagoblin:
Drop Privileges for MediaGoblin
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
@@ -101,7 +129,7 @@ assumes your local git repository will be located at
Substitute your prefer ed local deployment path as needed.
This document assumes that all operations are performed as this
-user. To drop privileges to this user, run the following command: ::
+user. To drop privileges to this user, run the following command::
su - [mediagoblin]
@@ -113,7 +141,7 @@ Install MediaGoblin and Virtualenv
.. note::
- As of |version|, MediaGoblin has a rapid development pace. As a result
+ MediaGoblin is still developing rapidly. As a result
the following instructions recommend installing from the ``master``
branch of the git repository. Eventually production deployments will
want to transition to running from more consistent releases.
@@ -128,7 +156,7 @@ Clone the MediaGoblin repository::
git clone git://gitorious.org/mediagoblin/mediagoblin.git
-And setup the in-package virtualenv::
+And set up the in-package virtualenv::
cd mediagoblin
(virtualenv --system-site-packages . || virtualenv .) && ./bin/python setup.py develop
@@ -153,14 +181,36 @@ flup::
./bin/easy_install flup
This concludes the initial configuration of the development
-environment. In the future, if at any point you want update your
+environment. In the future, you want update your
codebase, you should also run::
- ./bin/python setup.py develop --upgrade && ./bin/gmg migrate.
+ ./bin/python setup.py develop --upgrade && ./bin/gmg dbupdate
Deploy MediaGoblin Services
---------------------------
+Configure MediaGoblin to use the PostgreSQL database
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+If you are using postgres, edit the ``[mediagoblin]`` section in your
+``mediagoblin_local.ini`` and put in::
+
+ sql_engine = postgresql:///mediagoblin
+
+if you are running the MediaGoblin application as the same 'user' as the
+database owner.
+
+
+Update database data structures
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Before you start using the database, you need to run::
+
+ ./bin/gmg dbupdate
+
+to populate the database with the MediaGoblin data structures.
+
+
Test the Server
~~~~~~~~~~~~~~~
@@ -260,7 +310,7 @@ example::
./lazyserver.sh --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543
Visit the site you've set up in your browser by visiting
-<http://mediagobilin.example.org>. You should see MediaGoblin!
+<http://mediagoblin.example.org>. You should see MediaGoblin!
.. note::
diff --git a/docs/source/foreword.rst b/docs/source/siteadmin/foreword.rst
index be0c84b8..4c425f8d 100644
--- a/docs/source/foreword.rst
+++ b/docs/source/siteadmin/foreword.rst
@@ -15,12 +15,12 @@
Foreword
========
-About the MediaGoblin Manual
-============================
+About the Site Administrator's Guide
+====================================
-This is the site administrator manual for MediaGoblin. It covers how
-to set up and configure MediaGoblin and the kind of information that
-someone running MediaGoblin would need to know.
+This is the site administrator manual for GNU MediaGoblin. It covers
+how to set up and configure MediaGoblin and the kind of information
+that someone running MediaGoblin would need to know.
We have other documentation at:
@@ -28,8 +28,8 @@ We have other documentation at:
* http://wiki.mediagoblin.org/ for our contributor/developer-focused wiki
-Improving the MediaGobiin Manual
-================================
+Improving the Site Administrator's Guide
+========================================
There are a few ways---please pick whichever method is convenient for
you!
diff --git a/docs/source/help.rst b/docs/source/siteadmin/help.rst
index 4b584ac1..4b584ac1 100644
--- a/docs/source/help.rst
+++ b/docs/source/siteadmin/help.rst
diff --git a/docs/source/media-types.rst b/docs/source/siteadmin/media-types.rst
index ec068422..1cf7f30c 100644
--- a/docs/source/media-types.rst
+++ b/docs/source/siteadmin/media-types.rst
@@ -18,7 +18,8 @@ Enabling Media Types
====================
In the future, there will be all sorts of media types you can enable,
-but in the meanwhile there's only one additional media type: video.
+but in the meanwhile there are two additional media type: video and
+ascii art.
First, you should probably read ":doc:`configuration`" to make sure
you know how to modify the mediagoblin config file.
@@ -30,21 +31,27 @@ To enable video, first install gstreamer and the python-gstreamer
bindings (as well as whatever gstremaer extensions you want,
good/bad/ugly). On Debianoid systems::
- sudo apt-get install python-gst0.10
+ sudo apt-get install python-gst0.10 gstreamer0.10-plugins-{base,bad,good,ugly} \
+ gstreamer0.10-ffmpeg
Next, modify (and possibly copy over from ``mediagoblin.ini``) your
-``mediagoblin_local.ini``. Uncomment this line in the ``[mediagoblin]``
-section::
+``mediagoblin_local.ini``. In the ``[mediagoblin]`` section, add
+``mediagoblin.media_types.video`` to the ``media_types`` list.
+
+For example, if your system supported image and video media types, then
+the list would look like this::
media_types = mediagoblin.media_types.image, mediagoblin.media_types.video
Now you should be able to submit videos, and mediagoblin should
transcode them.
-Note that you almost certainly want to separate Celery from the normal
-paste process or your users will probably find that their connections
-time out as the video transcodes. To set that up, check out the
-":doc:`production-deployments`" section of this manual.
+.. note::
+
+ You almost certainly want to separate Celery from the normal
+ paste process or your users will probably find that their connections
+ time out as the video transcodes. To set that up, check out the
+ ":doc:`production-deployments`" section of this manual.
Ascii art
@@ -58,8 +65,11 @@ library, which is necessary for creating thumbnails of ascii art::
Next, modify (and possibly copy over from ``mediagoblin.ini``) your
-``mediagoblin_local.ini``. Uncomment or add to the media_types line
-'mediagoblin.media_types.ascii' like so::
+``mediagoblin_local.ini``. In the ``[mediagoblin]`` section, add
+``mediagoblin.media_types.ascii`` to the ``media_types`` list.
+
+For example, if your system supported image and ascii art media types, then
+the list would look like this::
media_types = mediagoblin.media_types.image, mediagoblin.media_types.ascii
diff --git a/docs/source/siteadmin/plugins.rst b/docs/source/siteadmin/plugins.rst
new file mode 100644
index 00000000..41f2970f
--- /dev/null
+++ b/docs/source/siteadmin/plugins.rst
@@ -0,0 +1,137 @@
+=========
+ Plugins
+=========
+
+GNU MediaGoblin supports plugins that allow you to augment MediaGoblin's
+behavior.
+
+This chapter covers discovering, installing, configuring and removing
+plugins.
+
+
+Discovering plugins
+===================
+
+MediaGoblin comes with core plugins. Core plugins are located in the
+``mediagoblin.plugins`` module of the MediaGoblin code. Because they
+come with MediaGoblin, you don't have to install them, but you do have
+to add them to your config file if you're interested in using them.
+
+You can also write your own plugins and additionally find plugins
+elsewhere on the Internet. Once you find a plugin you like, you need
+to first install it, then add it to your configuration.
+
+.. todo: how do you find plugins on the internet?
+
+
+Installing plugins
+==================
+
+Core plugins
+------------
+
+MediaGoblin core plugins don't need to be installed because they come
+with MediaGoblin. Further, when you upgrade MediaGoblin, you will also
+get updates to the core plugins.
+
+
+Other plugins
+-------------
+
+If the plugin is available on the `Python Package Index
+<http://pypi.python.org/pypi>`_, then you can install the plugin with pip::
+
+ pip install <plugin-name>
+
+For example, if we wanted to install the plugin named
+"mediagoblin-restrictfive", we would do::
+
+ pip install mediagoblin-restrictfive
+
+.. Note::
+
+ If you're using a virtual environment, make sure to activate the
+ virtual environment before installing with pip. Otherwise the
+ plugin may get installed in a different environment than the one
+ MediaGoblin is installed in.
+
+Once you've installed the plugin software, you need to tell
+MediaGoblin that this is a plugin you want MediaGoblin to use. To do
+that, you edit the ``mediagoblin.ini`` file and add the plugin as a
+subsection of the plugin section.
+
+For example, say the "mediagoblin-restrictfive" plugin had the Python
+package path ``restrictfive``, then you would add ``restrictfive`` to
+the ``plugins`` section as a subsection::
+
+ [plugins]
+
+ [[restrictfive]]
+
+
+Configuring plugins
+===================
+
+Configuration for a plugin goes in the subsection for that plugin. Core
+plugins are documented in the administration guide. Other plugins
+should come with documentation that tells you how to configure them.
+
+Example 1: Core MediaGoblin plugin
+
+If you wanted to use the core MediaGoblin flatpages plugin, the module
+for that is ``mediagoblin.plugins.flatpages`` and you would add that
+to your ``.ini`` file like this::
+
+ [plugins]
+
+ [[mediagoblin.plugins.flatpages]]
+ # configuration for flatpages plugin here!
+ directory = /srv/mediagoblin/flatpages
+
+Example 2: Plugin that is not a core MediaGoblin plugin
+
+If you installed a hypothetical restrictfive plugin which is in the
+module ``restrictfive``, your ``.ini`` file might look like this (with
+comments making the bits clearer)::
+
+ [plugins]
+
+ [[restrictfive]]
+ # configuration for restrictfive here!
+
+Check the plugin's documentation for what configuration options are
+available.
+
+
+Removing plugins
+================
+
+To remove a plugin, use ``pip uninstall``. For example::
+
+ pip uninstall mediagoblin-restrictfive
+
+.. Note::
+
+ If you're using a virtual environment, make sure to activate the
+ virtual environment before uninstalling with pip. Otherwise the
+ plugin may get installed in a different environment.
+
+
+Upgrading plugins
+=================
+
+Core plugins
+------------
+
+Core plugins get upgraded automatically when you upgrade MediaGoblin
+because they come with MediaGoblin.
+
+
+Other plugins
+-------------
+
+For plugins that you install with pip, you can upgrade them with pip::
+
+ pip install -U <plugin-name>
+
+The ``-U`` tells pip to upgrade the package.
diff --git a/docs/source/production-deployments.rst b/docs/source/siteadmin/production-deployments.rst
index 1e6631db..356fab7f 100644
--- a/docs/source/production-deployments.rst
+++ b/docs/source/siteadmin/production-deployments.rst
@@ -85,8 +85,22 @@ Use an Init Script
Look in your system's ``/etc/init.d/`` or ``/etc/rc.d/`` directory for
examples of how to build scripts that will start, stop, and restart
MediaGoblin and Celery. These scripts will vary by
-distribution/operating system. In the future, MediaGoblin will provide
-example scripts as examples.
+distribution/operating system.
+
+These are scripts provided by the MediaGoblin community:
+
+Debian
+ * `GNU MediaGoblin init scripts
+ <https://github.com/jwandborg/mediagoblin-init-scripts>`_
+ by `Joar Wandborg <http://wandborg.se>`_
+
+Arch Linux
+ * `MediaGoblin - ArchLinux rc.d scripts
+ <http://whird.jpope.org/2012/04/14/mediagoblin-archlinux-rcd-scripts>`_
+ by `Jeremy Pope <http://jpope.org/>`_
+ * `Mediagoblin init script on Archlinux
+ <http://chimo.chromic.org/2012/03/01/mediagoblin-init-script-on-archlinux/>`_
+ by `Chimo <http://chimo.chromic.org/>`_
.. TODO insert init script here
.. TODO are additional concerns ?
diff --git a/docs/source/siteadmin/relnotes.rst b/docs/source/siteadmin/relnotes.rst
new file mode 100644
index 00000000..2efded73
--- /dev/null
+++ b/docs/source/siteadmin/relnotes.rst
@@ -0,0 +1,52 @@
+.. MediaGoblin Documentation
+
+ Written in 2012 by MediaGoblin contributors
+
+ To the extent possible under law, the author(s) have dedicated all
+ copyright and related and neighboring rights to this software to
+ the public domain worldwide. This software is distributed without
+ any warranty.
+
+ You should have received a copy of the CC0 Public Domain
+ Dedication along with this software. If not, see
+ <http://creativecommons.org/publicdomain/zero/1.0/>.
+
+=============
+Release Notes
+=============
+
+This chapter has important information for releases in it.
+If you're upgrading from a previous release, please read it
+carefully, or at least skim over it.
+
+
+0.3.0
+=====
+
+This release has one important change. You need to act when
+upgrading from a previous version!
+
+This release changes the database system from MongoDB to
+SQL(alchemy). If you want to setup a fresh instance, just
+follow the instructions in the deployment chapter. If on
+the other hand you want to continue to use one instance,
+read on.
+
+To convert your data from MongoDB to SQL(alchemy), you need
+to follow these steps:
+
+1. Make sure your MongoDB is still running and has your
+ data, it's needed for the conversion.
+
+2. Configure the ``sql_engine`` URI in the config to represent
+ your target database (see: :ref:`deploying-chapter`)
+
+3. You need an empty database.
+
+4. Then run the following command::
+
+ bin/gmg [-cf mediagoblin_config.ini] convert_mongo_to_sql
+
+5. Start your server and investigate.
+
+6. That's it.
diff --git a/docs/source/theming.rst b/docs/source/siteadmin/theming.rst
index 7584b688..7584b688 100644
--- a/docs/source/theming.rst
+++ b/docs/source/siteadmin/theming.rst