Deployment: Difference between revisions
(Add Deployment on Dreamhost section) |
|||
Line 145: | Line 145: | ||
If you want a simpler setup and don't want to deploy celery separately, consider either turning CELERY_ALWAYS_EAGER to true in the paste init script described above, or check out [http://chimo.chromic.org/2012/03/01/mediagoblin-init-script-on-archlinux/ Chimo's guide]. |
If you want a simpler setup and don't want to deploy celery separately, consider either turning CELERY_ALWAYS_EAGER to true in the paste init script described above, or check out [http://chimo.chromic.org/2012/03/01/mediagoblin-init-script-on-archlinux/ Chimo's guide]. |
||
== Running on Dreamhost.com == |
|||
===Set up your python virtualenv=== |
|||
# Download the latest virtualenv: http://pypi.python.org/packages/source/v/virtualenv/XXX |
# Download the latest virtualenv: http://pypi.python.org/packages/source/v/virtualenv/XXX |
||
Line 166: | Line 166: | ||
:You have now a local python installation that you can use, and easy_install will work with your local installation. |
:You have now a local python installation that you can use, and easy_install will work with your local installation. |
||
===Install mediagoblin as a site package=== |
|||
# Check out mediagoblin from git to e.g. ~/mediagoblin |
# Check out mediagoblin from git to e.g. ~/mediagoblin |
||
Line 179: | Line 179: | ||
:looking for errors. |
:looking for errors. |
||
===Set up an WSGI environment on Dreamhost=== |
|||
# Enable the mod_passenger setting for ruby/python in the domains web panel |
# Enable the mod_passenger setting for ruby/python in the domains web panel |
Revision as of 11:09, 28 November 2012
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)
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 2 Config with fcgid
Note that the libapache2-mod-fcgi in Debian is in the nonfree section, and MediaGoblin users will want to avoid that. Instead, libapache2-mod-fcgid can be used, but requires a slightly different configuration.
<VirtualHost *:80> ServerName media.example.com ServerAlias www.media.example.com DocumentRoot /path/to/mediagoblin 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 /mgoblin_static> Order allow,deny Allow from all </Directory> <Directory /mgoblin_media> Order allow,deny Allow from all </Directory> <Directory /path/to/mediagoblin/> SetHandler fcgid-script Options +ExecCGI FcgidWrapper /path/to/mediagoblin/mg.fcgi order allow,deny allow from all </Directory> </VirtualHost>
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
Juju
There is a juju charm available for deploying mediagoblin into EC2 or on your local box. juju is available in Ubuntu 11.10 and later, though it is recommended that you pull it from the juju PPA, which includes backported packages going back to Ubuntu 11.10. To use the juju charm, install juju and configure either the local provider or one of the cloud API providers, currently the EC2 provider is the best supported and works not only with Amazon Web Services but also OpenStack clouds. There is also a newer native OpenStack API provider which is known to support HP Cloud.
# if you have not bootstrapped juju bootstrap mkdir ~/charms bzr init-repo ~/charms/precise bzr branch lp:~clint-fewbar/charms/precise/mediagoblin/trunk ~/charms/precise/mediagoblin juju deploy --repository ~/charms local:mediagoblin juju expose mediagoblin
Currently the charm is volatile, deploying from trunk, and deploys a single-server version of MediaGoblin only. It will eventually relate to the existing juju charms for other supported data stores to allow one to scale out their MediaGoblin instance.
ArchLinux init scripts
Jeremy Pope has written a nice blogpost on how to add init scripts to deploy MediaGoblin with both the python paste http server and the celery deployments separated.
If you want a simpler setup and don't want to deploy celery separately, consider either turning CELERY_ALWAYS_EAGER to true in the paste init script described above, or check out Chimo's guide.
Running on Dreamhost.com
Set up your python virtualenv
- Download the latest virtualenv: http://pypi.python.org/packages/source/v/virtualenv/XXX
- Download the latest python: http://python.org/ftp/python/XXX/Python-XXX.tar.bz2
- Unpack both
- Compile and install python locally:
./configure --prefix=$HOME/local make make install
- This will install python (I used 2.7.3) into /home/spaetz/local/... (e.g. .../bin/python)
- Install the virtualenv:
~/local/bin/python ~/virtualenv-1.8/virtualenv.py $HOME/local/virtenv
- You will now have: ~/local/virtenv/bin/python
- In ~/.bash_profile add:
PATH=~/local/virtenv/bin:~/local/bin:${PATH}
- so that your local python will be preferred.
- Log out, log in again and test python" to see which version will be invoked. It should be the new python. Check "which easy_install" to see if the one in local/virtenv would be executed.
- You have now a local python installation that you can use, and easy_install will work with your local installation.
Install mediagoblin as a site package
- Check out mediagoblin from git to e.g. ~/mediagoblin
- Install MediaGoblin and all dependencies for MediaGoblin with easy_install.
- In the mediagoblin directory issue:
python setup.py
- You will also need to: easy_install lxml
- Python-image was trickier to install:
easy_install --find-links http://www.pythonware.com/products/pil/ Imaging
- test by leaving the mediagoblin directory and see if you can import it:
python<ENTER>import mediagoblin<CTRL-D>
- looking for errors.
Set up an WSGI environment on Dreamhost
- Enable the mod_passenger setting for ruby/python in the domains web panel
- cd into the domain directory (e.g. ~/media.sspaeth.de for me)
- Copy mediagoblin.ini and paste.ini from the ~/mediagoblin directory here
- Create passenger_wsgi.py in your domain directory (e.g. ~/media.sspaeth.de for me):
import sys, os INTERP = "/home/<username>/local/virtenv/bin/python" #INTERP is present twice so that the new python interpreter knows the actual executable path if sys.executable != INTERP: os.execl(INTERP, INTERP, *sys.argv) from paste.deploy import loadapp application = loadapp('config:/home/mediagoblin/media.sspaeth.de/paste.ini') #If in case of errors, all you get are mysterious error 500, you can set debug=true in paste.ini to see stack traces # Otherwise, add this: #from paste.exceptions.errormiddleware import ErrorMiddleware #application = ErrorMiddleware(application, debug=True)
- Set up the database by issueing:
gmg dbupdate
- (optional but recommended) Serve the static files directly from the webserver.
- In paste.ini in this section: [composite:routing] comment out the static files:
#/mgoblin_static/ = mediagoblin_static #/theme_static/ = theme_static
- and symlink the mediagobin/mediagoblin/static directoy to public/mgoblin_static
- and mediagoblin/mediagoblin/themes to public/theme_static
- so it is displayed directly. This step might be different depending on your web server configuration. There is no reason that static
- files need to go through all the python indirection when they can be served directly by nginx/apache/...
- In case you want to delete your git checkout after the installation (you don't need it, since you installed the mediagoblin package to ~/local/virtenv/lib/python2.7/mediagoblin... you should do the symlinking from there.