Adventures in Machine Learning

Streamline Your Server Configuration with Automation Tools and Sanity Checks

Setting Up and Configuring Server: A Beginner’s Guide

For many web developers and administrators trying to get their head around server configuration and automation processes can seem like a daunting task. In this beginner’s guide, we will cover the necessary steps to set up and configure a basic server through the use of Ansible, Nginx, PostgreSQL, and Django.

Part 1: Setting up the Server

Fabric Setup

Fabric is a deployment tool written in Python that can help automate your server configuration. It uses SSH keys as well as passwords to access your server.

It requires the installation of dependencies such as Python3, and Ansible which we will cover later. Using Fabric streamlines the process of setting up servers making it faster and more efficient.

Ansible Primer

Ansible is an open-source software tool that allows you to automate software provisioning, configuration management, and application deployment tasks. It uses Playbooks which are Ansible’s configuration, deployment, and orchestration language to define the steps that it will take to set up your server.

The language is based on YAML and does not require a significant amount of programming experience to use.

Playbook Setup

Playbooks contain instructions to Ansible on the necessary steps to take to set up your server. The first thing you want to do is create a new playbook and configure the necessary roles.

Start by creating a new YAML file, name the host, add roles, and specify IP addresses. Also, define the directory structure where the code will live.

Part 2: Playbook Roles

Once you have created the necessary playbook template, you must now create the roles to define the actions that Ansible needs to take to configure your server. 01_server.yml

This playbook contains the necessary steps that Ansible takes to create a non-root user, install the necessary dependencies, update the server, and configure iptables.


This playbook defines how Ansible accesses your Git repository and calls the necessary commands to pull that code into your server. 03_postgres.yml

This playbook specifies how Ansible installs PostgreSQL, creates the necessary database, defines a user account, modifies the appropriate configuration files, and ensures everything is working correctly.


This playbook installs any required dependencies, creates a new virtual environment and installs the necessary Python packages. 05_migrations.yml

This playbook runs all the necessary database migration commands to sync the data models from the Django codebase to the PostgreSQL database.


This playbook installs Nginx, creates the necessary Nginx configuration file, and sets up SSL on your server. This playbook helps to ensure that your website is secure and that communication between servers is secure.


This playbook installs Gunicorn and creates the necessary configuration file necessary to run the Django application through Gunicorn. 08_systemd.yml

This playbook creates a new systemd service file for Gunicorn and installs the necessary packages.

It also configures all the settings of DjangoBootstrap and Gunicorn, ensuring that they run correctly. 09_fix-502.yml

This last playbook fixes any issues that might arise with accessing the application via Nginx.

It is an efficient way to fix the issue of a 502 bad gateway error when accessing your application.


In conclusion, setting up and configuring a server can be simplified with the use of Ansible, Nginx, PostgreSQL, and Django. These tools provided in this guide will enable developers and administrators to automate the necessary steps needed to get a website up and running smoothly without having to spend countless hours on server configuration.

Using Fabric, defining playbooks, and defining your necessary roles will streamline your automation process, saving you time and money, and getting your website online as quickly and efficiently as possible.

3) Sanity Check

After you’ve gone through the process of setting up and configuring your server with Ansible and other tools, it’s now time to perform a sanity check. You want to ensure that everything is working as it should, and all the necessary steps were taken during the server configuration.

Here are some critical steps to perform a sanity check for your server:

SSH Login

To test if you can log in to your server, use the SSH command to access your server’s command line. Enter your username and password, and if everything goes well, you should land on the server’s command line.

This step is essential because without this; all the other tests you plan to run on the server will not be possible.

User Creation

Once you’ve logged in as a non-root user, you want to check if the user creation worked. You can do this by running the `sudo cat /etc/passwd` command and look for the user in the output.

You can also check if the user’s home directory and permission specs are correct. This step is essential because creating a non-root user adds another layer of security on your server.

Successful Deployment

Next, you want to check if the deployment was successful. You should be able to load your application when you visit a URL of your site.

You can run a sanity check that does just that, using an HTTP GET command to your server and ensure that the response code is 200. This step is crucial because validating that your application is successfully deployed and accessible ensures your efforts in setting up the server are fruitful.



In conclusion, automation tools like Fabric and Ansible save you time and resources by helping you configure production servers. Playbooks make it easy to set up your server’s applications by defining a set of roles that Ansible can execute.

This approach frees up the administrative team from tedious and time-consuming tasks such as server configuration. When using these tools, ensuring a good sanity check is critical to ensuring a smooth deployment process.

It enables you to check if the necessary steps were taken and helps you catch any issues that might pop up in the deployment process. In summary, employ these tools in your server configuration process, and always remember to run a sanity check on your servers.

This article provided a beginner’s guide to setting up and configuring a server using Ansible, Nginx, PostgreSQL, and Django, with the use of automation tools like Fabric, Playbooks, and creating necessary roles being critical to ensure the process remains streamlined. The article highlighted the grave importance of sanity checking, such as SSH login, user creation, and confirming successful deployment, to ensure that the necessary and correct steps were taken into consideration during server configuration.

By using these automation tools and ensuring proper sanity checks, server configuration can be made more efficient, with fewer errors, and more secure. Ultimately, following the steps highlighted in this article can save time, improve efficiency, and reduce administrative errors in server configuration.