<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Akash Shivram</title>
    <description>The latest articles on DEV Community by Akash Shivram (@syashakash).</description>
    <link>https://dev.to/syashakash</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F171098%2F628ef736-9676-4148-9fc6-e15db391a699.jpg</url>
      <title>DEV Community: Akash Shivram</title>
      <link>https://dev.to/syashakash</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/syashakash"/>
    <language>en</language>
    <item>
      <title>How to set headers to a request dynamically in Postman</title>
      <dc:creator>Akash Shivram</dc:creator>
      <pubDate>Tue, 18 Aug 2020 16:36:54 +0000</pubDate>
      <link>https://dev.to/syashakash/how-to-set-headers-to-a-request-dynamically-in-postman-3bp6</link>
      <guid>https://dev.to/syashakash/how-to-set-headers-to-a-request-dynamically-in-postman-3bp6</guid>
      <description>&lt;p&gt;I came across a situation where I wanted to set a cookie in headers of a request dynamically using the current timestamp. I use Postman, and found that it already has newly introduced a way to modify request before sending it. &lt;/p&gt;

&lt;p&gt;Pre-request scripts are really helpful when you want to dynamically set your request attributes. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://learning.postman.com/docs/writing-scripts/script-references/postman-sandbox-api-reference/"&gt;Their Sandbox&lt;/a&gt; is  a great tool to make web development easier.&lt;/p&gt;

&lt;p&gt;So, coming back to the challenge, setting headers dynamically in postman.&lt;/p&gt;

&lt;p&gt;First let's start with looking at the way we can get headers of a request.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get headers
&lt;/h2&gt;

&lt;p&gt;It is simple, from their docs:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm.request.headers
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This code would return a list of headers in key-value pairs.&lt;br&gt;
Now, how do we set a header, use&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;pm.request.headers.upsert({key: yourKeyName, value: yourValueName})
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;That's it. &lt;code&gt;upsert&lt;/code&gt; is better than using &lt;code&gt;add&lt;/code&gt;, as &lt;code&gt;add&lt;/code&gt; would just add header key but now the vaue, &lt;code&gt;upsert&lt;/code&gt; adds the key value pair, but also if the key is already present, it would update the value for that key withe the newly provided one in &lt;code&gt;pm.request.headers.upsert&lt;/code&gt; method.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to get timestamp
&lt;/h2&gt;



&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var date = new Date();
var tStamp = date.getTime();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;now combining both code snippets to set headers, we have:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;var tStamp = date.getTime();

pm.request.headers.upsert({
    key: "time_stamp",
    value: tStamp
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;And it is done, now the request would have header &lt;code&gt;time_stamp&lt;/code&gt; set with the request's timestamp set as value.&lt;br&gt;
To check if the headers are set correctly, just console out the headers as &lt;code&gt;pm.request.headers&lt;/code&gt;.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>postman</category>
      <category>prerequestscripts</category>
    </item>
    <item>
      <title>Setting up Django, Gunicorn and Nginx in Vagrant virtual machine</title>
      <dc:creator>Akash Shivram</dc:creator>
      <pubDate>Sun, 16 Feb 2020 14:14:20 +0000</pubDate>
      <link>https://dev.to/syashakash/setting-up-django-gunicorn-and-nginx-in-vagrant-virtual-machine-55en</link>
      <guid>https://dev.to/syashakash/setting-up-django-gunicorn-and-nginx-in-vagrant-virtual-machine-55en</guid>
      <description>&lt;p&gt;This post explains setting up a Django app deployed by Gunicorn behind Nginx server in a Ubuntu 16.04 virtual machine set up via Vagrant.&lt;/p&gt;

&lt;h2&gt;
  
  
  These are broader steps that you would need to take:
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;Setting up an Ubuntu 16.04 VM using Vagrant.&lt;/li&gt;
&lt;li&gt;Setting up python and virtual environment.&lt;/li&gt;
&lt;li&gt;Setting up Gunicorn systemd file.&lt;/li&gt;
&lt;li&gt;Setting up Nginx to proxy pass Gunicorn.&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  1. Creating an Ubuntu 16.04 VM using Vagrant
&lt;/h3&gt;

&lt;p&gt;Installing Vagrant is pretty simple step.&lt;/p&gt;

&lt;p&gt;But first you would need to install Virtual Box or any other VM provider. Virtual Box is popular choice and even easier option amongst the providers to install. &lt;br&gt;
Just go to the Virtual Box's &lt;a href="https://www.virtualbox.org/wiki/Downloads"&gt;downloads page&lt;/a&gt; and select respective host depending on your system's operating system.&lt;/p&gt;

&lt;p&gt;If you select OSX host, a .dmg package is downloaded, open it and follow steps. While installing in OSX if you get an error something like &lt;strong&gt;Your Instalation Failed&lt;/strong&gt;, follow &lt;a href="http://osxdaily.com/2018/12/31/install-run-virtualbox-macos-install-kernel-fails/"&gt;this blog&lt;/a&gt; to troubleshoot.&lt;/p&gt;

&lt;p&gt;Once Virtual Box is installed you can move on to installing Vagrant.&lt;/p&gt;

&lt;p&gt;Go to Vagrant's &lt;a href="https://www.vagrantup.com/downloads.html"&gt;download page&lt;/a&gt; and download installation image as per your OS. &lt;/p&gt;

&lt;p&gt;Check if vagrant is installed. Open terminal and type &lt;code&gt;vargant&lt;/code&gt;. The output should be something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ vagrant
Usage: vagrant [options] &amp;lt;command&amp;gt; [&amp;lt;args&amp;gt;]

    -v, --version                    Print the version and exit.
    -h, --help                       Print this help.

#...
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Once installation is complete, open terminal shell and go to directory where you want to setup your virtual machine. For example, create directory called &lt;em&gt;virtualmachines/&lt;/em&gt;,here you would have all the virtual machines you want to setup. So, for Ubuntu 16.04, create a directory &lt;em&gt;ubuntu16_04/&lt;/em&gt;. Go inside the directory&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;mkdir ./virtualmachines &amp;amp;&amp;amp; cd virtualmachines
mkdir ubuntu16_04 &amp;amp;&amp;amp; cd ubuntu16_04
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now is the time create a VM box. You can create a VM from scratch using command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ vagrant init hashicorp/xenial64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;or setup a base image of OS called a box by executing command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ vagrant box add hashicorp/xenial64
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If you want to install any other flavour of Ubuntu replace &lt;em&gt;xenial&lt;/em&gt; with the flavour's first name. &lt;em&gt;64&lt;/em&gt; in &lt;em&gt;xenial64&lt;/em&gt; means the guest OS would be a 64-bit OS. You can find the list of available OS &lt;a href="https://app.vagrantup.com/boxes/search"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you execute &lt;code&gt;ls&lt;/code&gt; command, you would find a file called &lt;em&gt;VagrantFile&lt;/em&gt; present in the directory. This is the source file that is used to configure the VM. Every time that you want to start the VM, the configurations would be set as per this file.&lt;/p&gt;

&lt;p&gt;Make sure to un-comment line declaring &lt;code&gt;forwarded_port&lt;/code&gt; for guest and host OS.&lt;br&gt;
The &lt;code&gt;guest&lt;/code&gt; is your virtual machine and the &lt;code&gt;host&lt;/code&gt; is your local machine.&lt;br&gt;
Also, if it is commented, un-comment this block:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;config.vm.provider "virtualbox" do |vb|
    vb.gui = false
    vb.memory = 2048
    vb.cpus = 2
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;and specify &lt;code&gt;vb.gui&lt;/code&gt;, &lt;code&gt;vb.memory&lt;/code&gt; and &lt;code&gt;vb.cpus&lt;/code&gt;.&lt;br&gt;
You can find sample &lt;em&gt;VagrantFile&lt;/em&gt; in this &lt;a href="https://gist.github.com/syashakash/cc28f9774498cecb27d79b6f95cfcd2d"&gt;gist&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Now to start the VM run :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ vagrant up
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This would boot your environment, and in less than a minute you would have Ubuntu running in a virtual machine. There would be no output visible, as Vagrant runs the VM without UI. To access Ubuntu you would require ssh. Run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ vagrant ssh
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This would start a full-fledged SSH session.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Setting up python and virtual environment for Django app
&lt;/h3&gt;

&lt;p&gt;Now that you are inside Ubuntu, it is time to install all necessary packages/modules.&lt;/p&gt;

&lt;p&gt;Install python and pip using command&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo apt install python python-pip
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;This would install python2.7. For python3 use:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo apt install pyhton3 python-pip3
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Now install virtualenv:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pip install virtualenv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Create a directory called &lt;em&gt;webapps/&lt;/em&gt;, this is going to contain all the Django projects created henceforth. You can directly clone your git repository here or start a project (remember to create a directory inside which you should start your project).&lt;br&gt;
Such that your &lt;em&gt;webapps/&lt;/em&gt; directory tree looks like this :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt; * webapps/
 | 
 ---- * your_project_parent_directory
      |
      ---- * your_project
           |
           ---- * your_app
           ---- * your_project
                |
                ---- * your_project.wsgi
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Your project should have virtualenv set up and activated. Make sure you have a .wsgi file in it. Change directory and get inside your project.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Setting up Gunicorn systemd file
&lt;/h3&gt;

&lt;p&gt;Now its time to install Gunicorn:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ pip install gunicorn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Once gunicorn is installed, run command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ gunicorn &amp;lt;your_project_name&amp;gt;.wsgi:application --bind 0.0.0.0:8000
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If the server starts, your gunicorn setup is working. Though there is a robust way of gunicorn interacting with django project.&lt;/p&gt;

&lt;p&gt;Create and open a systemd service file for Gunicorn with sudo privileges in your text editor:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo nano /etc/systemd/system/gunicorn.service
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Your &lt;em&gt;gunicorn.service&lt;/em&gt; file should look something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;[Unit]
Description=gunicorn service
After=network.target

[Service]
WorkingDirectory=/home/vagrant/webapps/your_project_parent_dir/project_name
ExecStart=/home/vagrant/webapps/your_project_parent_dir/env/bin/gunicorn --access-logfile - --bind \ 
unix:/home/vagrant/webapps/your_project_parent_dir/your_project/your_project.sock \
your_project.wsgi:application

[Install]
WantedBy=multi-user.target
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The &lt;code&gt;[Unit]&lt;/code&gt; and &lt;code&gt;[Install]&lt;/code&gt; remain as they are. In the &lt;code&gt;WorkingDirectory&lt;/code&gt;, you need to provide absolute path to your project. In &lt;code&gt;ExecStart&lt;/code&gt;, you specify command to run &lt;em&gt;gunicorn&lt;/em&gt;, but instead using &lt;code&gt;gunicorn&lt;/code&gt; command directly, you need to specify &lt;code&gt;which gunicorn&lt;/code&gt;, hence, you provide the path to gunicorn, if it is installed globally, you would need to specify the absolute path to global command file, like  &lt;code&gt;/usr/local/bin/gunicorn&lt;/code&gt; followed by parameters &lt;code&gt;--access-logfile&lt;/code&gt; and &lt;code&gt;--bind&lt;/code&gt;, after &lt;code&gt;unix:&lt;/code&gt; specify absolute path to &lt;em&gt;your_project.sock&lt;/em&gt;&lt;br&gt;
Now we would have to start this service.&lt;/p&gt;

&lt;p&gt;Run command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo systemctl start gunicorn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Check status of the service:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo systemctl status gunicorn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You can confirm that the operation was successful by checking for the socket file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ ls your_project_parent_dir/your_project/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You should find a file called &lt;em&gt;your_project.sock&lt;/em&gt; here.&lt;/p&gt;

&lt;p&gt;If not, check for the service configurations or status of it.&lt;br&gt;
To check for errors look up in the journal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo journalctl -u gunicorn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Other reasons could be :&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The owner is &lt;strong&gt;root&lt;/strong&gt; and not &lt;strong&gt;sudo&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;WorkingDirectory&lt;/code&gt; path does not point to the project directory.&lt;/li&gt;
&lt;li&gt;The path given for configuration for gunicorn service in &lt;code&gt;ExceStart&lt;/code&gt; directive is incorrect. Check these:

&lt;ul&gt;
&lt;li&gt;The path to the &lt;em&gt;gunicorn&lt;/em&gt; binary points to the actual location of the binary within the virtual environment.&lt;/li&gt;
&lt;li&gt;The &lt;code&gt;--bind&lt;/code&gt; directive defines a file to create within a directory that Gunicorn can access.&lt;/li&gt;
&lt;li&gt;The &lt;em&gt;your_project.wsgi&lt;/em&gt; should be immediate child to &lt;em&gt;your_project directory&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Remember a reload of daemon service would be required if the file is edited :&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo systemctl daemon-reload
$ sudo systemctl restart gunicorn
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;h3&gt;
  
  
  4. Setting up nginx
&lt;/h3&gt;

&lt;p&gt;Install Nginx in your guest, type this command in terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo apt-get install nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Check if nginx is successfully installed:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You should not see &lt;code&gt;command not found&lt;/code&gt; error.&lt;/p&gt;

&lt;p&gt;Now we need to create and start a new server block in &lt;code&gt;/etc/nginx/sites-available&lt;/code&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo nano /etc/nginx/sites-available/you_project
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Here specify something like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;server {
    listen 8000;
    server_name 0.0.0.0;
    location = /favicon.ico { access_log off; log_not_found off; }
    location / {
        include proxy_params;
        proxy_pass http://unix:/home/vagrant/webapps/project-name/project-name.sock;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;The argument to &lt;code&gt;listen&lt;/code&gt; is the port of guest that would be exposed, you should mention this port in &lt;code&gt;forwarded_port&lt;/code&gt; and map it to some host port in &lt;em&gt;VagrantFile&lt;/em&gt;.&lt;br&gt;
The &lt;code&gt;server_name&lt;/code&gt; is the IP location or DNS location of your server, here it is localhost so we provide &lt;code&gt;server_name&lt;/code&gt; as 0.0.0.0.&lt;br&gt;
In &lt;code&gt;proxy_pass&lt;/code&gt; after &lt;code&gt;unix:&lt;/code&gt; specify absolute path to &lt;em&gt;your_project.sock&lt;/em&gt; file.&lt;/p&gt;

&lt;p&gt;If you have static files you would need to add these extra lines&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;location /static/ {
        root /home/vagrant/webapps/your_project_parent_dir/your_project;
    }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;inside &lt;code&gt;server&lt;/code&gt; object.&lt;/p&gt;

&lt;p&gt;Save and close the file when you are finished. Now, you can enable the file by linking it to the sites-enabled directory:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo ln -s /etc/nginx/sites-available/your_project /etc/nginx/sites-enabled/
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;Test your nginx for syntax errors:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo nginx -t
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;If the test is ok, you would require to restart the &lt;em&gt;nginx&lt;/em&gt; now and check its status.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ sudo systemctl restart nginx
$ sudo systemctl status nginx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;



&lt;p&gt;You are all set. Hit &lt;em&gt;0.0.0.0:host_port&lt;/em&gt; on browser to view your Django projects app page.&lt;/p&gt;

&lt;h3&gt;
  
  
  References:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Digital Ocean's &lt;a href="https://www.digitalocean.com/community/tutorials/how-to-set-up-django-with-postgres-nginx-and-gunicorn-on-ubuntu-16-04"&gt;How To Set Up Django with Postgres, Nginx, and Gunicorn on Ubuntu 16.04&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;OSX Daily's &lt;a href="http://osxdaily.com/2018/12/31/install-run-virtualbox-macos-install-kernel-fails/"&gt;How to Install VirtualBox in MacOS Mojave if Installation Fails or Shows Kernel Driver Errors&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>vagrant</category>
      <category>gunicorn</category>
      <category>nginx</category>
      <category>django</category>
    </item>
  </channel>
</rss>
