Categories Tutorials

Install Wagtail on CentOS 7

In this blog post we will show you how to install Wagtail on a Centos VPS with Nginx and uWSGI. Wagtail is open source flexible Django content management system focused on flexibility and user experience. This guide should work on other Linux VPS systems as well but was tested and written for a Centos 7 VPS.

Login to your VPS via SSH

ssh root@vps

Install the EPEL repository

To install the EPEL repository on your CentOS VPS, just run:

[root]$ rpm -Uvh http://dl.fedoraproject.org/pub/epel/7/x86_64/e/epel-release-7-8.noarch.rpm

Update the system and install necessary packages

[root]$ yum -y update
[root]$ yum -y install python-pip python-virtualenv pcre-devel python-imaging python-devel libjpeg-turbo-devel make gcc

Create a new system user

Create a new user for Wagtail:

[root]$ adduser --comment 'Wagtail User' --home-dir /home/wagtail wagtail
[root]$ chmod 755 /home/wagtail

Install wagtail and

[root]$ pip install wagtail

Create a python virtual environment and your Wagtail project

The following commands are run as wagtail user. To switch to wagtail user run:

[root]$ su - wagtail

Create a new Wagtail project

[wagtail]$ wagtail start mysite

Create a new virtualenv using the following command

[wagtail]$ virtualenv wagtail-env

Switch to the new virtualenv

[wagtail]$ source ~/wagtail-env/bin/activate

Install all dependencies with pip:

(wagtail-env)[wagtail]$ cd mysite
(wagtail-env)[wagtail]$ pip install -r requirements.txt

Create a new SQLite database

(wagtail-env)[wagtail]$ python manage.py migrate

Create an admin user

(wagtail-env)[wagtail]$ python manage.py createsuperuser

Install and configure Nginx and uWSGI

Nginx is not available by default in CentOS 7 so we will use the official Nginx repository:

[root]$ rpm -Uvh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el7.ngx.noarch.rpm

To install Nginx run:

[root]$ yum -y install nginx

Next, create a new Nginx server block:

[root]$ nano /etc/nginx/conf.d/YOUR_WAGTAIL_DOMAIN.conf
server {
    server_name YOUR_WAGTAIL_DOMAIN;
    client_body_in_file_only clean;
    client_body_buffer_size 64K;
    client_max_body_size 40M;
    sendfile on;
    send_timeout 300s;

    error_log /var/log/nginx/mywagtailsite_error.log;
    access_log /var/log/nginx/mywagtailsite_access.log;

    location / {
        uwsgi_pass      unix:/home/wagtail/mysite/mysite/wagtail.socket;
        include         /etc/nginx/uwsgi_params;
        uwsgi_param     UWSGI_SCHEME $scheme;
        uwsgi_param     SERVER_SOFTWARE    nginx/$nginx_version;

Install uWSGI using pip

pip install --upgrade uwsgi

Create uwsgi configuration file for Wagtail:

[root]$ mkdir /etc/uwsgi.d/
[root]$ nano /etc/uwsgi.d/wagtail.ini
chmod-socket = 666
virtualenv = /home/wagtail/wagtail-env
mount  = /=wsgi:application
chdir  = /home/wagtail/mysite/
wsgi-file = mysite/wsgi.py
socket = /home/wagtail/mysite/mysite/%n.socket
stats  = /home/wagtail/mysite/mysite/%n.stats.socket
logto  = /home/wagtail/mysite/mysite/%n.log
workers = 4
uid = wagtail
gid = wagtail
limit-as = 512

Open your editor of choice and create a new systemd service for Wagtail:

[root]$ nano /etc/systemd/system/uwsgi.service

and add the following code lines:

Description=uWSGI Emperor Service

ExecStart=/usr/bin/uwsgi --master --die-on-term --emperor /etc/uwsgi.d
ExecReload=/bin/kill -HUP $MAINPID


Start and enable uWSGI at boot:

[root]$ systemctl enable uwsgi
[root]$ systemctl start uwsgi

Start and enable Nginx at boot:

[root]$ systemctl enable nginx
[root]$ systemctl start nginx

That’s it. You have successfully installed your Wagtail. To access it, open http://YOUR_WAGTAIL_DOMAIN/ in your browser. For more information about Wagtail, please refer to the official Wagtail website.

Of course you don’t have to do any of this if you use one of our Linux VPS Hosting services, in which case you can simply ask our expert Linux admins to setup this for you. They are available 24×7 and will take care of your request immediately.

PS. If you liked this post please share it with your friends on the social networks using the buttons on the left or simply leave a reply below. Thanks.