Mediagoblin
a quick and dirty guide, better docs and maybe puppet config later
Installation
- follow Deploying guide using python3, up to the FastCGI and Nginx part where you stop, because flup doesn't work on python3 and uWSGI is better.
- Set up uWSGI with Nginx as you see in this guide.
Make sure to install nginx-full
on Debian/Ubuntu, or nginx-all-modules
on CentOS. Then add the following as stated in this guide:
/etc/nginx/uWSGI_params
uwsgi_param QUERY_STRING $query_string; uwsgi_param REQUEST_METHOD $request_method; uwsgi_param CONTENT_TYPE $content_type; uwsgi_param CONTENT_LENGTH $content_length; uwsgi_param REQUEST_URI $request_uri; uwsgi_param PATH_INFO $document_uri; uwsgi_param DOCUMENT_ROOT $document_root; uwsgi_param SERVER_PROTOCOL $server_protocol; uwsgi_param REMOTE_ADDR $remote_addr; uwsgi_param REMOTE_PORT $remote_port; uwsgi_param SERVER_ADDR $server_addr; uwsgi_param SERVER_PORT $server_port; uwsgi_param SERVER_NAME $server_name;
Though actually, instead of the config seen in the guide, use this one (since the guide has a typo for uwsgi_pass, and puts the site under domain.com/mediagoblin/
, which is not what we want.)
/etc/nginx/conf.d/mediagoblin.conf
location / { include uWSGI_params; uwsgi_pass 127.0.0.1:26543; # our understanding vs nginx's handling of script_name vs # path_info don't match :) uwsgi_param SCRIPT_NAME ""; uwsgi_modifier1 30; }
uWSGI Emperor Config
It is a good idea to run the uWSGI apps as vassals to the uWSGI Emperor service. Install it with:
sudo yum install uwsgi uwsgi-plugin-python3
Then create a uwsgi config file for mediagoblin:
/etc/uwsgi.d/mediagoblin.ini
[uwsgi] plugin=python3 uid=mediagoblin gid=nginx socket=127.0.0.1:26543 virtualenv=/srv/www/mediagoblin chdir=/srv/www/mediagoblin ini-paste=/srv/www/mediagoblin/paste.ini logto=/srv/www/mediagoblin/mg.log
Most importantly, chown it to mediagoblin:nginx so that uwsgi will run the service with those permissions.
sudo chown mediagoblin:nginx /etc/uwsgi.d/mediagoblin.ini
Finally, run the uwsgi Emperor service.
sudo systemctl start uwsgi
If sudo systemctl restart uwsgi
shows you that [emperor] vassal mediagoblin.ini is ready to accept requests
, then enable the uwsgi service on boot:
sudo systemctl enable uwsgi
Notes
- If you have SELinux, see this guide to make it allow uWSGI sockets.