aboutsummaryrefslogtreecommitdiffstats
path: root/docs/source/siteadmin/deploying.rst
diff options
context:
space:
mode:
Diffstat (limited to 'docs/source/siteadmin/deploying.rst')
-rw-r--r--docs/source/siteadmin/deploying.rst349
1 files changed, 232 insertions, 117 deletions
diff --git a/docs/source/siteadmin/deploying.rst b/docs/source/siteadmin/deploying.rst
index 3f4a59cd..80b60642 100644
--- a/docs/source/siteadmin/deploying.rst
+++ b/docs/source/siteadmin/deploying.rst
@@ -17,25 +17,37 @@
Deploying MediaGoblin
=====================
-GNU MediaGoblin is fairly new and so at the time of writing, there
-aren't easy package-manager-friendly methods to install MediaGoblin.
-However, doing a basic install isn't too complex in and of itself.
+GNU MediaGoblin is fairly new, and so at the time of writing there aren't
+easy package-manager-friendly methods to install it. However, doing a basic
+install isn't too complex in and of itself. Following this deployment guide
+will take you step-by-step through setting up your own instance of MediaGoblin.
-There's an almost infinite way to deploy things... for now, we'll keep
-it simple with some assumptions and use a setup that combines
-mediagoblin + virtualenv + fastcgi + nginx on a .deb or .rpm based
-GNU/Linux distro.
+Of course, when it comes to setting up web applications like MediaGoblin,
+there's an almost infinite way to deploy things, so for now, we'll keep it
+simple with some assumptions. We recommend a setup that combines MediaGoblin +
+virtualenv + FastCGI + Nginx on a .deb- or .rpm-based GNU/Linux distro.
+
+Other deployment options (e.g., deploying on FreeBSD, Arch Linux, using
+Apache, etc.) are possible, though! If you'd prefer a different deployment
+approach, see our
+`Deployment wiki page <http://wiki.mediagoblin.org/Deployment>`_.
.. note::
These tools are for site administrators wanting to deploy a fresh
- install. If instead you want to join in as a contributor, see our
+ install. If you want to join in as a contributor, see our
`Hacking HOWTO <http://wiki.mediagoblin.org/HackingHowto>`_ instead.
- There are also many ways to install servers... for the sake of
- simplicity, our instructions below describe installing with nginx.
- For more recipes, including Apache, see
- `our wiki <http://wiki.mediagoblin.org/Deployment>`_.
+.. note::
+
+ Throughout the documentation we use the ``sudo`` command to indicate that
+ an instruction requires elevated user privileges to run. You can issue
+ these commands as the ``root`` user if you prefer.
+
+ If you need help configuring ``sudo``, see the
+ `Debian wiki <https://wiki.debian.org/sudo/>`_ or the
+ `Fedora Project wiki <https://fedoraproject.org/wiki/Configuring_Sudo/>`_.
+
Prepare System
--------------
@@ -45,25 +57,32 @@ Dependencies
MediaGoblin has the following core dependencies:
-- Python 2.6 or 2.7
+- Python 2.7 or Python 3.4+
- `python-lxml <http://lxml.de/>`_
- `git <http://git-scm.com/>`_
- `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/>`_
+- `nodejs <https://nodejs.org>`_
-On a DEB-based system (e.g Debian, gNewSense, Trisquel, Ubuntu, and
+On a DEB-based system (e.g Debian, gNewSense, Trisquel, *buntu, and
derivatives) issue the following command::
sudo apt-get install git-core python python-dev python-lxml \
- python-imaging python-virtualenv
+ python-imaging python-virtualenv npm nodejs-legacy automake \
+ nginx
On a RPM-based system (e.g. Fedora, RedHat, and derivatives) issue the
following command::
- yum install python-paste-deploy python-paste-script \
+ sudo yum install python-paste-deploy python-paste-script \
git-core python python-devel python-lxml python-imaging \
- python-virtualenv
+ python-virtualenv npm automake nginx
+
+(Note: MediaGoblin now officially supports Python 3. You may instead
+substitute from "python" to "python3" for most package names in the
+Debian instructions and this should cover dependency installation.
+These instructions have not yet been tested on Fedora.)
Configure PostgreSQL
~~~~~~~~~~~~~~~~~~~~
@@ -75,31 +94,54 @@ Configure PostgreSQL
For medium to large deployments we recommend PostgreSQL.
- If you don't want/need postgres, skip this section.
+ If you don't want/need PostgreSQL, skip this section.
-These are the packages needed for Debian Wheezy (stable)::
+These are the packages needed for Debian Jessie (stable)::
sudo apt-get install postgresql postgresql-client python-psycopg2
+These are the packages needed for an RPM-based system::
+
+ sudo yum install postgresql postgresql-server python-psycopg2
+
+An rpm-based system also requires that you initialize and start the
+PostgreSQL database with a few commands. The following commands are
+not needed on a Debian-based platform, however::
+
+ sudo /usr/bin/postgresql-setup initdb
+ sudo systemctl enable postgresql
+ sudo systemctl start postgresql
+
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
+which will have privileges sufficient to manage the database. We will create a
+new database user with restricted privileges 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::
+We'll add these entities by first switching to the *postgres* account::
+
+ sudo su - postgres
- sudo -u postgres createuser -A -D mediagoblin
+This will change your prompt to a shell prompt, such as *-bash-4.2$*. Enter
+the following *createuser* and *createdb* commands at that prompt. We'll
+create the *mediagoblin* database user first::
-then create the database all our MediaGoblin data should be stored in::
+ # this command and the one that follows are run as the ``postgres`` user:
+ createuser -A -D mediagoblin
- sudo -u postgres createdb -E UNICODE -O mediagoblin mediagoblin
+Then we'll create the database where all of our MediaGoblin data will be stored::
+
+ createdb -E UNICODE -O mediagoblin mediagoblin
where the first ``mediagoblin`` is the database owner and the second
``mediagoblin`` is the database name.
+Type ``exit`` to exit from the 'postgres' user account.::
+
+ exit
+
.. caution:: Where is the password?
These steps enable you to authenticate to the database in a password-less
@@ -118,35 +160,37 @@ Drop Privileges for MediaGoblin
MediaGoblin does not require special permissions or elevated
access to run. As such, the preferred way to run MediaGoblin is to
create a dedicated, unprivileged system user for the sole purpose of running
-MediaGoblin. Running MediaGoblin processes under an unpriviledged system user
+MediaGoblin. Running MediaGoblin processes under an unprivileged system user
helps to keep it more secure.
The following command (entered as root or with sudo) will create a
system account with a username of ``mediagoblin``. You may choose a different
-username if you wish.::
-
- adduser --system mediagoblin
+username if you wish.
-No password will be assigned to this account, and you will not be able
-to log in as this user. To switch to this account, enter either::
+If you are using a Debian-based system, enter this command::
- sudo -u mediagoblin /bin/bash # (if you have sudo permissions)
+ sudo useradd -c "GNU MediaGoblin system account" -d /var/lib/mediagoblin -m -r -g www-data mediagoblin
-or::
+If you are using an RPM-based system, enter this command::
- su mediagoblin -s /bin/bash # (if you have to use root permissions)
+ sudo useradd -c "GNU MediaGoblin system account" -d /var/lib/mediagoblin -m -r -g nginx mediagoblin
-You may get a warning similar to this when entering these commands::
+This will create a ``mediagoblin`` user and assign it to a group that is
+associated with the web server. This will ensure that the web server can
+read the media files (images, videos, etc.) that users upload.
- warning: cannot change directory to /home/mediagoblin: No such file or directory
-
-You can disregard this warning. To return to your regular user account after
-using the system account, just enter ``exit``.
+We will also create a ``mediagoblin`` group and associate the mediagoblin
+user with that group, as well::
+
+ sudo groupadd mediagoblin && sudo usermod --append -G mediagoblin mediagoblin
+
+No password will be assigned to this account, and you will not be able
+to log in as this user. To switch to this account, enter::
-.. note::
+ sudo su mediagoblin -s /bin/bash
- Unless otherwise noted, the remainder of this document assumes that all
- operations are performed using this unpriviledged account.
+To return to your regular user account after using the system account, type
+``exit``.
.. _create-mediagoblin-directory:
@@ -156,73 +200,74 @@ Create a MediaGoblin Directory
You should create a working directory for MediaGoblin. This document
assumes your local git repository will be located at
``/srv/mediagoblin.example.org/mediagoblin/``.
-Substitute your prefered local deployment path as needed.
+Substitute your preferred local deployment path as needed.
Setting up the working directory requires that we first create the directory
-with elevated priviledges, and then assign ownership of the directory
-to the unpriviledged system account.
+with elevated privileges, and then assign ownership of the directory
+to the unprivileged system account.
-To do this, enter either of the following commands, changing the defaults
-to suit your particular requirements::
+To do this, enter the following command, changing the defaults to suit your
+particular requirements. On a Debian-based platform you will enter this::
- sudo mkdir -p /srv/mediagoblin.example.org && sudo chown -hR mediagoblin:mediagoblin /srv/mediagoblin.example.org
+ sudo mkdir -p /srv/mediagoblin.example.org && sudo chown -hR mediagoblin:www-data /srv/mediagoblin.example.org
-or (as the root user)::
+On an RPM-based distribution, enter this command::
- mkdir -p /srv/mediagoblin.example.org && chown -hR mediagoblin:mediagoblin /srv/mediagoblin.example.org
+ sudo mkdir -p /srv/mediagoblin.example.org && sudo chown -hR mediagoblin:nginx /srv/mediagoblin.example.org
+.. note::
-Install MediaGoblin and Virtualenv
-----------------------------------
+ Unless otherwise noted, the remainder of this document assumes that all
+ operations are performed using this unprivileged account.
-.. note::
- 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.
+Install MediaGoblin and Virtualenv
+----------------------------------
-We will now clone the MediaGoblin source code repository and setup and
-configure the necessary services. Modify these commands to
-suit your own environment. As a reminder, you should enter these
-commands using your unpriviledged system account.
+We will now switch to our 'mediagoblin' system account, and then set up
+our MediaGoblin source code repository and its necessary services.
+You should modify these commands to suit your own environment.
Change to the MediaGoblin directory that you just created::
- cd /srv/mediagoblin.example.org
+ sudo su mediagoblin -s /bin/bash # to change to the 'mediagoblin' account
+ $ cd /srv/mediagoblin.example.org
Clone the MediaGoblin repository and set up the git submodules::
- git clone git://gitorious.org/mediagoblin/mediagoblin.git
- cd mediagoblin
- git submodule init && git submodule update
+ $ git clone git://git.savannah.gnu.org/mediagoblin.git -b stable
+ $ cd mediagoblin
+ $ git submodule init && git submodule update
+.. note::
-And set up the in-package virtualenv::
+ The MediaGoblin repository used to be on gitorious.org, but since
+ gitorious.org shut down, we had to move. We are presently on
+ Savannah. You may need to update your git repository location::
- (virtualenv --system-site-packages . || virtualenv .) && ./bin/python setup.py develop
+ $ git remote set-url origin git://git.savannah.gnu.org/mediagoblin.git
-.. note::
+Set up the hacking environment::
+
+ $ ./bootstrap.sh && ./configure && make
- We presently have an **experimental** make-style deployment system. if
- you'd like to try it, instead of the above command, you can run::
+(Note that if you'd prefer to run MediaGoblin with Python 3, pass in
+`--with-python3` to the `./configure` command.)
- ./experimental-bootstrap.sh && ./configure && make
+Create and set the proper permissions on the ``user_dev`` directory.
+This directory will be used to store uploaded media files::
- This also includes a number of nice features, such as keeping your
- viratualenv up to date by simply running `make update`.
+ $ mkdir user_dev && chmod 750 user_dev
- Note: this is liable to break. Use this method with caution.
+Assuming you are going to deploy with FastCGI, you should also install
+flup::
-.. ::
+ $ ./bin/easy_install flup
- (NOTE: Is this still relevant?)
+(Note, if you're running Python 2, which you probably are at this
+point in MediaGoblin's development, you'll need to run:)
- If you have problems here, consider trying to install virtualenv
- with the ``--distribute`` or ``--no-site-packages`` options. If
- your system's default Python is in the 3.x series you may need to
- run ``virtualenv`` with the ``--python=python2.7`` or
- ``--python=python2.6`` options.
+ $ ./bin/easy_install flup==1.0.3.dev-20110405
The above provides an in-package install of ``virtualenv``. While this
is counter to the conventional ``virtualenv`` configuration, it is
@@ -230,26 +275,36 @@ more reliable and considerably easier to configure and illustrate. If
you're familiar with Python packaging you may consider deploying with
your preferred method.
-Assuming you are going to deploy with FastCGI, you should also install
-flup::
-
- ./bin/easy_install flup
-
-(Sometimes this breaks because flup's site is flakey. If it does for
-you, try)::
-
- ./bin/easy_install https://pypi.python.org/pypi/flup/1.0.3.dev-20110405
+.. note::
-This concludes the initial configuration of the development
+ What if you don't want an in-package ``virtualenv``? Maybe you
+ have your own ``virtualenv``, or you are building a MediaGoblin
+ package for a distribution. There's no need necessarily for the
+ virtualenv produced by ``./configure && make`` by default other
+ than attempting to simplify work for developers and people
+ deploying by hiding all the virtualenv and bower complexity.
+
+ If you want to install all of MediaGoblin's libraries
+ independently, that's totally fine! You can pass the flag
+ ``--without-virtualenv`` which will skip this step.
+ But you will need to install all those libraries manually and make
+ sure they are on your ``PYTHONPATH`` yourself! (You can still use
+ ``python setup.py develop`` to install some of those libraries,
+ but note that no ``./bin/python`` will be set up for you via this
+ method, since no virtualenv is set up for you!)
+
+This concludes the initial configuration of the MediaGoblin
environment. In the future, when you update your
codebase, you should also run::
- git submodule update && ./bin/python setup.py develop --upgrade && ./bin/gmg dbupdate
+ $ git submodule update && ./bin/python setup.py develop --upgrade && ./bin/gmg dbupdate
-Note: If you are running an active site, depending on your server
-configuration, you may need to stop it first or the dbupdate command
-may hang (and it's certainly a good idea to restart it after the
-update)
+.. note::
+
+ Note: If you are running an active site, depending on your server
+ configuration, you may need to stop it first or the dbupdate command
+ may hang (and it's certainly a good idea to restart it after the
+ update)
Deploy MediaGoblin Services
@@ -259,23 +314,24 @@ Edit site configuration
~~~~~~~~~~~~~~~~~~~~~~~
A few basic properties must be set before MediaGoblin will work. First
-make a copy of ``mediagoblin.ini`` for editing so the original config
-file isn't lost::
+make a copy of ``mediagoblin.ini`` and ``paste.ini`` for editing so the original
+config files aren't lost (you likely won't need to edit the paste configuration,
+but we'll make a local copy of it just in case)::
- cp mediagoblin.ini mediagoblin_local.ini
+ $ cp -av mediagoblin.ini mediagoblin_local.ini && cp -av paste.ini paste_local.ini
-Then:
+Then edit mediagoblin_local.ini:
- Set ``email_sender_address`` to the address you wish to be used as
the sender for system-generated emails
- Edit ``direct_remote_path``, ``base_dir``, and ``base_url`` if
your mediagoblin directory is not the root directory of your
- vhost.
+ site.
Configure MediaGoblin to use the PostgreSQL database
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-If you are using postgres, edit the ``[mediagoblin]`` section in your
+If you are using PostgreSQL, edit the ``[mediagoblin]`` section in your
``mediagoblin_local.ini`` and put in::
sql_engine = postgresql:///mediagoblin
@@ -289,7 +345,7 @@ Update database data structures
Before you start using the database, you need to run::
- ./bin/gmg dbupdate
+ $ ./bin/gmg dbupdate
to populate the database with the MediaGoblin data structures.
@@ -300,20 +356,25 @@ Test the Server
At this point MediaGoblin should be properly installed. You can
test the deployment with the following command::
- ./lazyserver.sh --server-name=broadcast
+ $ ./lazyserver.sh --server-name=broadcast
You should be able to connect to the machine on port 6543 in your
browser to confirm that the service is operable.
+The next series of commands will need to be run as a privileged user. Type
+exit to return to the root/sudo account.::
+
+ exit
+
.. _webserver-config:
FastCGI and nginx
~~~~~~~~~~~~~~~~~
-This configuration example will use nginx, however, you may
+This configuration example will use Nginx, however, you may
use any webserver of your choice as long as it supports the FastCGI
-protocol. If you do not already have a web server, consider nginx, as
+protocol. If you do not already have a web server, consider Nginx, as
the configuration files may be more clear than the
alternatives.
@@ -321,13 +382,22 @@ Create a configuration file at
``/srv/mediagoblin.example.org/nginx.conf`` and create a symbolic link
into a directory that will be included in your ``nginx`` configuration
(e.g. "``/etc/nginx/sites-enabled`` or ``/etc/nginx/conf.d``) with
-one of the following commands (as the root user)::
+one of the following commands.
- ln -s /srv/mediagoblin.example.org/nginx.conf /etc/nginx/conf.d/
- ln -s /srv/mediagoblin.example.org/nginx.conf /etc/nginx/sites-enabled/
+On a DEB-based system (e.g Debian, gNewSense, Trisquel, *buntu, and
+derivatives) issue the following commands::
+
+ sudo ln -s /srv/mediagoblin.example.org/nginx.conf /etc/nginx/sites-enabled/
+ sudo systemctl enable nginx
+
+On a RPM-based system (e.g. Fedora, RedHat, and derivatives) issue the
+following commands::
-Modify these commands and locations depending on your preferences and
-the existing configuration of your nginx instance. The contents of
+ sudo ln -s /srv/mediagoblin.example.org/nginx.conf /etc/nginx/conf.d/
+ sudo systemctl enable nginx
+
+You can modify these commands and locations depending on your preferences and
+the existing configuration of your Nginx instance. The contents of
this ``nginx.conf`` file should be modeled on the following::
server {
@@ -344,7 +414,7 @@ this ``nginx.conf`` file should be modeled on the following::
gzip on;
gzip_min_length 1024;
gzip_buffers 4 32k;
- gzip_types text/plain text/html application/x-javascript text/javascript text/xml text/css;
+ gzip_types text/plain application/x-javascript text/javascript text/xml text/css;
#####################################
# Mounting MediaGoblin stuff
@@ -387,25 +457,43 @@ this ``nginx.conf`` file should be modeled on the following::
fastcgi_pass 127.0.0.1:26543;
include /etc/nginx/fastcgi_params;
- # our understanding vs nginx's handling of script_name vs
+ # our understanding vs Nginx's handling of script_name vs
# path_info don't match :)
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SCRIPT_NAME "";
}
}
-Now, nginx instance is configured to serve the MediaGoblin
-application. Perform a quick test to ensure that this configuration
-works. Restart nginx so it picks up your changes, with a command that
-resembles one of the following (as the root user)::
+The first four ``location`` directives instruct Nginx to serve the
+static and uploaded files directly rather than through the MediaGoblin
+process. This approach is faster and requires less memory.
+
+.. note::
+
+ The user who owns the Nginx process, normally ``www-data`` or ``nginx``,
+ requires execute permission on the directories ``static``,
+ ``public``, ``theme_static`` and ``plugin_static`` plus all their
+ parent directories. This user also requires read permission on all
+ the files within these directories. This is normally the default.
+
+Nginx is now configured to serve the MediaGoblin application. Perform a quick
+test to ensure that this configuration works::
+
+ nginx -t
+
+If you encounter any errors, review your Nginx configuration files, and try to
+resolve them. If you do not encounter any errors, you can start your Nginx
+server with one of the following commands (depending on your environment)::
sudo /etc/init.d/nginx restart
sudo /etc/rc.d/nginx restart
+ sudo systemctl restart nginx
Now start MediaGoblin. Use the following command sequence as an
example::
cd /srv/mediagoblin.example.org/mediagoblin/
+ su mediagoblin -s /bin/bash
./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
@@ -426,6 +514,29 @@ Instructions and scripts for running MediaGoblin on an Apache server
can be found on the `MediaGoblin wiki <http://wiki.mediagoblin.org/Deployment>`_.
+Should I Keep Open Registration Enabled?
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+Unfortunately, in this current release of MediaGoblin we are suffering
+from spammers registering to public instances en masse. As such, you
+may want to either:
+
+a) Disable registration on your instance and just make
+ accounts for people you know and trust (eg via the `gmg adduser`
+ command). You can disable registration in your mediagoblin.ini
+ like so::
+
+ [mediagoblin]
+ allow_registration = false
+
+b) Enable a CAPTCHA plugin. But unfortunately, though some CAPTCHA
+ plugins exist, for various reasons we do not have any general
+ recommendations we can make at this point.
+
+We hope to have a better solution to this situation shortly. We
+apologize for the inconvenience in the meanwhile.
+
+
Security Considerations
~~~~~~~~~~~~~~~~~~~~~~~
@@ -439,3 +550,7 @@ Security Considerations
and restart the server, so that it creates a new secret key.
All previous sessions will be invalidated.
+..
+ Local variables:
+ fill-column: 70
+ End: