diff options
Diffstat (limited to 'docs/source/siteadmin/deploying.rst')
-rw-r--r-- | docs/source/siteadmin/deploying.rst | 144 |
1 files changed, 81 insertions, 63 deletions
diff --git a/docs/source/siteadmin/deploying.rst b/docs/source/siteadmin/deploying.rst index dad489c5..e4042617 100644 --- a/docs/source/siteadmin/deploying.rst +++ b/docs/source/siteadmin/deploying.rst @@ -45,25 +45,26 @@ Dependencies MediaGoblin has the following core dependencies: -- Python 2.6 or 2.7 +- Python 2.7 - `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 derivatives) issue the following command:: - sudo apt-get install git-core python python-dev python-lxml \ - python-imaging python-virtualenv + # apt-get install git-core python python-dev python-lxml \ + python-imaging python-virtualenv npm automake On a RPM-based system (e.g. Fedora, RedHat, and derivatives) issue the following command:: - yum install 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 + python-virtualenv npm automake Configure PostgreSQL ~~~~~~~~~~~~~~~~~~~~ @@ -79,27 +80,54 @@ Configure PostgreSQL These are the packages needed for Debian Wheezy (stable):: - sudo apt-get install postgresql postgresql-client python-psycopg2 + # apt-get install postgresql postgresql-client python-psycopg2 + +These are the packages needed for an RPM-based system:: + + # yum install postgresql postgresql-server python-psycopg2 + +An RPM-based system also requires that you initialize the PostgresSQL database +with this command. The following command is not needed on a Debian-based +platform, however:: + + # /usr/bin/postgresql-setup initdb The installation process will create a new *system* user named ``postgres``, -it will have privilegies sufficient to manage the database. We will create a +which 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:: +We'll add these entities by first switching to the *postgres* account:: + + # 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:: + $ 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 return to the *root* user prompt. From here we just need to +set the Postgres database to start on boot, and also start it up for this +particular session. If you're on a platform that does not use *systemd*, you +can enter:: + + # chkconfig postgresql on && service postgresql start + +Whereas users of *systemd*-based systems will need to enter:: + + # systemctl enable postgresql && systemctl start postgresql + .. caution:: Where is the password? These steps enable you to authenticate to the database in a password-less @@ -125,14 +153,10 @@ 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 + # useradd --system --user-group 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 either:: - - sudo -u mediagoblin /bin/bash # (if you have sudo permissions) - -or:: +to log in as this user. To switch to this account, enter:: su mediagoblin -s /bin/bash # (if you have to use root permissions) @@ -143,11 +167,6 @@ You may get a warning similar to this when entering these commands:: You can disregard this warning. To return to your regular user account after using the system account, just enter ``exit``. -.. note:: - - Unless otherwise noted, the remainder of this document assumes that all - operations are performed using this unpriviledged account. - .. _create-mediagoblin-directory: Create a MediaGoblin Directory @@ -165,37 +184,35 @@ to the unpriviledged system account. To do this, enter either of the following commands, changing the defaults to suit your particular requirements:: - sudo mkdir -p /srv/mediagoblin.example.org && sudo chown -hR mediagoblin: /srv/mediagoblin.example.org + # mkdir -p /srv/mediagoblin.example.org && sudo chown -hR mediagoblin: /srv/mediagoblin.example.org -or (as the root user):: +.. note:: - mkdir -p /srv/mediagoblin.example.org && chown -hR mediagoblin: /srv/mediagoblin.example.org + Unless otherwise noted, the remainder of this document assumes that all + operations are performed using this unpriviledged account. Install MediaGoblin and Virtualenv ---------------------------------- -.. 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. - 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. +suit your own environment. + +.. note:: + + As a reminder, you should enter these commands using your unpriviledged + *mediagoblin* system account. Change to the MediaGoblin directory that you just created:: - cd /srv/mediagoblin.example.org + $ cd /srv/mediagoblin.example.org Clone the MediaGoblin repository and set up the git submodules:: - git clone git://git.savannah.gnu.org/mediagoblin.git -b stable - 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:: @@ -205,21 +222,9 @@ Clone the MediaGoblin repository and set up the git submodules:: git remote set-url origin git://git.savannah.gnu.org/mediagoblin.git -And set up the in-package virtualenv:: - - (virtualenv --python=python2 --system-site-packages . || virtualenv --python=python2 .) && ./bin/python setup.py develop - -.. note:: - - We presently have an **experimental** make-style deployment system. if - you'd like to try it, instead of the above command, you can run:: +Set up the hacking environment:: - ./experimental-bootstrap.sh && ./configure && make - - This also includes a number of nice features, such as keeping your - viratualenv up to date by simply running `make update`. - - Note: this is liable to break. Use this method with caution. + $ ./bootstrap.sh && ./configure && make The above provides an in-package install of ``virtualenv``. While this is counter to the conventional ``virtualenv`` configuration, it is @@ -230,23 +235,20 @@ 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 + $ ./bin/easy_install flup This concludes the initial configuration of the development 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:: -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: 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 @@ -391,6 +393,18 @@ this ``nginx.conf`` file should be modeled on the following:: } } +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``, + 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. + 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 @@ -436,3 +450,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: |