Deployment: Difference between revisions

From GNU MediaGoblin Wiki
Jump to navigation Jump to search
(added apache config sample using fcgi)
(Removed cruft, added fcgi script)
Line 2: Line 2:


See also: http://docs.mediagoblin.org/deploying.html (some of which may belong here)
See also: http://docs.mediagoblin.org/deploying.html (some of which may belong here)

= Use Virtualenv =

Our [[Development quick start]] guide recommends using [http://buildout.org zc.buildout], but this system is somewhat problematic for actual deployments (if a buildout goes badly, buildout removes all your packaging setup and your scripts in bin/ and other things... yuck :\). Use [http://www.virtualenv.org/ Virtualenv] instead. In the future, all our docs will bet set up to recommend using Virtualenv.


= MongoDB setup =
= MongoDB setup =
Line 18: Line 14:
* speed is more important than reliability, and journaling is off by default (apparently that’s not true anymore, at least in 2.0, [http://www.mongodb.org/display/DOCS/Journaling journaling is on and will preallocate ''gigabytes'' for the journal files], unless you [[Scaling Down|enable the “smallfiles” option]]).)
* speed is more important than reliability, and journaling is off by default (apparently that’s not true anymore, at least in 2.0, [http://www.mongodb.org/display/DOCS/Journaling journaling is on and will preallocate ''gigabytes'' for the journal files], unless you [[Scaling Down|enable the “smallfiles” option]]).)


= FCGI script =
= Running MediaGoblin's web server and Celery separately =

This works great with the apache config example below :)

<pre>#!/path/to/mediagoblin/bin/python

# Written in 2011 by Christopher Allan Webber
#
# 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/>.

from paste.deploy import loadapp
from flup.server.fcgi import WSGIServer

CONFIG_PATH = '/path/to/mediagoblin/paste.ini'


def launch_fcgi():
ccengine_wsgi_app = loadapp('config:' + CONFIG_PATH)
WSGIServer(ccengine_wsgi_app).run()



if __name__ == '__main__':
./lazyserver.sh is all good and well for debugging, but probably not for deployments. Instead, you should probably run
launch_fcgi()</pre>


= Apache Config Example =
= Apache Config Example =

Revision as of 22:31, 13 December 2011

This page could use a lot of work. For now, a few smaller deployment tips!

See also: http://docs.mediagoblin.org/deploying.html (some of which may belong here)

MongoDB setup

You should almost certainly run MongoDB with Journaling on if you have a new enough version of MongoDB. (If you don't, maybe you should get a newer version!) Without journaling there's some risk you could lose data that isn't yet written to disk if MongoDB is shut down incorrectly. But read about disk space below.

Also, keep in mind the following assumptions MongoDB makes about your deployment environment

FCGI script

This works great with the apache config example below :)

#!/path/to/mediagoblin/bin/python

# Written in 2011 by Christopher Allan Webber
#
# 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/>.

from paste.deploy import loadapp
from flup.server.fcgi import WSGIServer

CONFIG_PATH = '/path/to/mediagoblin/paste.ini'


def launch_fcgi():
    ccengine_wsgi_app = loadapp('config:' + CONFIG_PATH)
    WSGIServer(ccengine_wsgi_app).run()


if __name__ == '__main__':
    launch_fcgi()

Apache Config Example

This configuration example uses mod_fastcgi.

To install and enable mod_fastcgi on a Debian/Ubuntu based system:

# apt-get install libapache2-mod-suexec libapache2-mod-fastcgi
# a2enmod suexec
# a2enmod fastcgi

Sample configuration:

<VirtualHost *:80>
ServerName mediagoblin.yourdomain.tld
ServerAdmin webmaster@yourdoimain.tld
DocumentRoot /var/www/
# Custom log files
CustomLog /var/log/apache2/mediagobling_access.log combined
ErrorLog /var/log/apache2/mediagoblin_error.log

# Serve static and media files via alias
Alias /mgoblin_static/ /path/to/mediagoblin/mediagoblin/static/
Alias /mgoblin_media/ /path/to/mediagoblin/user_dev/media/public/

# Rewrite all URLs to fcgi, except for static and media urls
RewriteEngine On
RewriteRule ^(mgoblin_static|mgoblin_media)($|/) - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^/(.*)$ /mg.fcgi/$1 [QSA,L]

# Allow access to static and media directories
<Directory /path/to/mediagoblin/mediagoblin/static>
  Order allow,deny
  Allow from all
</Directory>
<Directory /path/to/mediagoblin/mediagoblin/user_dev/media/public>
  Order allow,deny
  Allow from all
</Directory>

# Connect to fcgi server
FastCGIExternalServer /var/www/mg.fcgi -host 127.0.0.1:26543
</VirtualHost>

Then, you need to make sure mediagoblin is running in fcgi mode:

cd /path/to/mediagoblin
./lazyserver.sh --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543

Note: there may be several ways to improve this configuration