aboutsummaryrefslogtreecommitdiffstats
path: root/docs/source/siteadmin
diff options
context:
space:
mode:
Diffstat (limited to 'docs/source/siteadmin')
-rw-r--r--docs/source/siteadmin/production-deployments.rst187
1 files changed, 157 insertions, 30 deletions
diff --git a/docs/source/siteadmin/production-deployments.rst b/docs/source/siteadmin/production-deployments.rst
index 839d3ce5..0443f079 100644
--- a/docs/source/siteadmin/production-deployments.rst
+++ b/docs/source/siteadmin/production-deployments.rst
@@ -19,15 +19,139 @@ This document contains a number of suggestions for deploying
MediaGoblin in actual production environments. Consider
":doc:`deploying`" for a basic overview of how to deploy MediaGoblin.
-Deploy with Paste
+Deploy with paste
-----------------
The MediaGoblin WSGI application instance you get with ``./lazyserver.sh`` is
not ideal for a production MediaGoblin deployment. Ideally, you should be able
-to use an "init" or "control" script to launch and restart the MediaGoblin
-process.
+to use a systemd "service file" or an "init script" to launch and restart the
+MediaGoblin process.
-Use the following command as the basis for such a script:
+We will explore setting up MediaGoblin systemd service files or init scripts,
+but first we need to create the directory that will store the logs that result
+from the MediaGoblin-related process.
+
+.. _create-log-file-dir:
+
+Create the directory for your log file:
+---------------------------------------
+
+Production logs for the MediaGoblin application are kept in the
+``/var/log/mediagoblin`` directory. Create the directory and give it the
+proper permissions::
+
+ sudo mkdir -p /var/log/mediagoblin && sudo chown -hR mediagoblin:mediagoblin /var/log/mediagoblin
+
+
+.. _systemd-service-files:
+
+Use systemd service files
+-------------------------
+
+If your operating system uses systemd, you can use systemd ``service files``
+to manage both the Celery and Paste processes. Place the following service
+files in the ``/etc/systemd/system/`` directory.
+
+The first file should be named ``mediagoblin-celeryd.service". Be sure to
+modify it to suit your environment's setup:
+
+.. code-block:: bash
+
+ # Set the WorkingDirectory, Environment and ExecStart values to match your environment.
+ # If using Debian/Ubuntu, mkdir and chown are located in /bin/mkdir and /bin/chown, respectively.
+ # If using Fedora/CentOS/Red Hat, mkdir and chown are located in /usr/bin/mkdir and /usr/bin/chown, respectively.
+
+ [Unit]
+ Description=Mediagoblin Celeryd
+
+ [Service]
+ User=mediagoblin
+ Group=mediagoblin
+ Type=simple
+ WorkingDirectory=/srv/mediagoblin.example.org/mediagoblin
+ # Create directory for PID (if needed) and set ownership
+ ExecStartPre=/usr/bin/mkdir -p /run/mediagoblin
+ ExecStartPre=/usr/bin/chown -hR mediagoblin:mediagoblin /run/mediagoblin
+ # Celery process will run as the `mediagoblin` user ater start.
+ Environment=MEDIAGOBLIN_CONFIG=/srv/mediagoblin.example.org/mediagoblin/mediagoblin_local.ini \
+ CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery
+ ExecStart=/srv/mediagoblin.example.org/mediagoblin/bin/celery worker \
+ --logfile=/var/log/mediagoblin/celery.log \
+ --loglevel=INFO
+ PIDFile=/run/mediagoblin/mediagoblin-celeryd.pid
+
+ [Install]
+ WantedBy=multi-user.target
+
+
+The second file should be named ``mediagoblin-paster.service":
+
+.. code-block:: bash
+
+ # Set the WorkingDirectory, Environment and ExecStart values to match your environment.
+ # If using Debian/Ubuntu, mkdir and chown are located in /bin/mkdir and /bin/chown, respectively.
+ # If using Fedora/CentOS/Red Hat, mkdir and chown are located in /usr/bin/mkdir and /usr/bin/chown, respectively.
+ [Unit]
+ Description=Mediagoblin
+
+ [Service]
+ Type=forking
+ User=mediagoblin
+ Group=mediagoblin
+ Environment=CELERY_ALWAYS_EAGER=false
+ WorkingDirectory=/srv/mediagoblin.example.org/mediagoblin
+ # Start mg-paster process as root, then switch to mediagoblin user/group
+ PermissionsStartOnly=true
+ ExecStartPre=-/usr/bin/mkdir -p /var/run/mediagoblin
+ ExecStartPre=/usr/bin/chown -R mediagoblin:mediagoblin /var/run/mediagoblin/
+
+ ExecStart=/srv/mediagoblin.example.org/mediagoblin/bin/paster serve \
+ /srv/mediagoblin.example.org/mediagoblin/paste_local.ini \
+ --pid-file=/var/run/mediagoblin/mediagoblin.pid \
+ --log-file=/var/log/mediagoblin/mediagoblin.log \
+ --daemon \
+ --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543
+ ExecStop=/srv/mediagoblin.example.org/mediagoblin/bin/paster serve \
+ --pid-file=/var/run/mediagoblin/mediagoblin.pid \
+ /srv/mediagoblin.example.org/mediagoblin/paste_local.ini stop
+ PIDFile=/var/run/mediagoblin/mediagoblin.pid
+
+ [Install]
+ WantedBy=multi-user.target
+
+
+Enable these processes to start at boot by entering::
+
+ sudo systemctl enable mediagoblin-celeryd.service && sudo systemctl enable mediagoblin-paster.service
+
+
+Start the processes for the current session with:
+
+ sudo systemctl start mediagoblin-celeryd.service && sudo systemctl start mediagoblin-paster.service
+
+
+If either command above gives you an error, you can investigate the cause of
+the error by entering::
+
+ sudo systemctl status mediagoblin-celeryd.service or
+ sudo systemctl status mediagoblin-paster.service
+
+The above ``systemctl status`` command is also useful if you ever want to
+confirm that a process is still running. If you make any changes to the service
+files, you can reload the service files by entering:
+
+ sudo systemctl daemon-reload
+
+After entering that command, you can attempt to start the Celery or Paste
+processes again.
+
+.. _init-script:
+
+Use an init script
+------------------
+
+If your system does not use systemd, you can use the following command as the
+basis for an init script:
.. code-block:: bash
@@ -53,7 +177,30 @@ as the basis for your script:
--pid-file=/var/run/mediagoblin.pid \
--server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543
-Separate Celery
+
+Members of the MediaGoblin community have provided init scripts for the
+following GNU/Linux distributions:
+
+Debian
+ * `GNU MediaGoblin init scripts
+ <https://github.com/joar/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/>`_
+
+You can reference these scripts to create an init script for your own operating
+system. Similar scripts will be in your system's ``/etc/init.d/``
+or ``/etc/rc.d/`` directory, but the specifics of an init script will vary from
+one distribution to the next.
+
+
+Separate celery
---------------
MediaGoblin uses `Celery`_ to handle heavy and long-running tasks. Celery can
@@ -91,6 +238,11 @@ To launch Celery separately from the MediaGoblin WSGI application:
CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd
+If you use our example systemd ``service files``, Celery will be set to the
+"CELERY_ALWAYS_EAGER=false" value by default. This will provide your users
+with the best user experience, as all media processing will be done in the
+background.
+
.. _sentry:
Set up sentry to monitor exceptions
@@ -102,31 +254,6 @@ documentation.
.. _`raven`: http://raven.readthedocs.org
-.. _init-script:
-
-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.
-
-These are scripts provided by the MediaGoblin community:
-
-Debian
- * `GNU MediaGoblin init scripts
- <https://github.com/joar/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 ?
.. Other Concerns