I recently visited the website random.org, which is a free/fee-based generator of random numbers. It's been around for a long time - since 1998. It made me revisit the concept of randomness and how oddly hard it is to achieve. Why is randomness important? It's amazing how many things rely…
DevOps + SysAdmin
Read about the cross-disciplinary practice of DevOps (development and operations) dedicated to building, evolving and operating collaboratively. DevOps topics include culture, measurement, automation, and sharing and the use of toolkits like Saltstack and Ansible for configuration management, code repositories (GitHub), application monitoring (i.e. Nagios, Sentry), and scripting languages (i.e. Bash and Python). Posts also address SysAdmin (systems administration) common practices for installing and configuring systems, hardware and software, establishing and managing user accounts, upgrading software and backup and recovery tasks.
Implementing dependency management with Python Poetry
One of the biggest issues with Python (our preferred development language) is dependency management. Any individual deployment can result in minor differences in the versions of the files and libraries which make up the application. And these minor variations introduce uncertainty and randomness into our deployment process. So, we've investigated…
Two very important (and overlooked) requirements for a new website vendor relationship
In the world of web development, particularly open source web development, there are two fundamental requirements that you should ask of any new web development vendor – code isolation and server isolation. Whenever possible, you must insist that the underlying code that runs your website is isolated and under your...
Guide to Ansible/NGINX/uWSGI/Django, Part 2: Getting uWSGI Working with NGINX and Django
In Part 1 of this post, I described the trials, tribulations and ultimate success of running Ansible to provision a cloud server, which we do often here at Imaginary Landscape. Part 2 concludes the post by describing the process for getting uWSGI working with NGINX and Django. When I first tested the...
Guide to Ansible/NGINX/uWSGI/Django, Part 1: Running the Ansible Scripts
Here at Imaginary Landscape, we are frequently tasked with spinning up new cloud servers for our clients. Once a new server is online, we usually follow up by provisioning it with useful software. To automate that process, we began using Ansible a few years ago, and have had a lot...
Step-by-Step Guide to Setting up Django-RQ
Modern websites are complicated pieces of machinery. The requests they initiate can be intensive and take more time to complete than a typical HTTP request-response cycle. This is typically refererd to as a blocking request, in that the browser (and user) waits until the response is received. If the request...
Continuous Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx - Part 3
Django Web Development, Django Web Framework, Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx
Free and Auto-Renewing SSL Certificates: Letsencrypt Quick Setup (2017 Edition)
You may have have heard of Letsencrypt, which is a new SSL certificate authority that provides free SSL certificates that are supported in all modern browsers. This service is also designed to help automate the issuance of SSL certificates. The following describes how to use Letsencrypt to configure auto-renewing SSL certificates...
Continuous Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx - Part 2
The Introduction This is the second part of a multi-part tutorial covering a simple(ish) setup of a continuous integration/deployment pipeline using Drone.io. Since Part 1, I’ve added a GitHub project outlining a simple Django application that you can use as a reference. In Part 2, we will be adding a publish step...
Let's Encrypt with Alternative ACME Client
I recently was tasked with installing Let’s Encrypt on a server running an old version of Debian (Squeeze) which was due to have its certificate expire. Unfortunately, this meant following the path of setting up certbot and a cron job as outlined in Let's Encrypt Quick Setup -- which basically follows the...
Continuous Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx - Part 1
Integration and Deployment with Drone, Docker, Django, Gunicorn and Nginx
Free and Auto-Renewing SSL Certificates: Letsencrypt Quick Setup
You may have have heard of Letsencrypt, which is a new SSL certificate authority that provides free SSL certificates that are supported in all modern browsers. This service is also designed to help automate the issuance of SSL certificates. The following describes how to use Letsencrypt to configure auto-renewing SSL certificates...
New Django Server Setup: Part 2
In Part 1 of this article, we discussed our choice of typical server stack and the general packages that we find useful upon an initial installation. Part 2 will focus on setting up the site environment and configuring the system services. As mentioned before, at Imaginary, this setup process is normally automated...
New Django Server Setup: Part 1
A core challenge of setting up a Django project is creating a production-worthy server environment and project setup. At Imaginary Landscape, we've put a lot of thought into how to accomplish this task in an intuitive and flexible way. The goal of this article is to detail the default setup...
Upgrades: Django Old to Django New
Sometimes we are faced with the challenge of upgrading old Django-based projects. The task can be daunting, as a lot has happened in Django within the last few years. Since Django 1.1.1, Django has been through 15 micro releases and 4 minor releases. The term "minor" seems deceptive as a...
Rackspace Temporary URLs with django-cumulus
We love Rackspace at Imaginary Landscape. Recently, we needed to store a number of large files securely, and for logistical reasons, we chose to store them via Rackspace’s Cloud Files. Rackspace provides the ability to create temporary URLs for files stored via their service. This allows temporary access to privately...
Multiple File Uploads in Django
Here is a quick example of how to add a multiple file form to your Django application. Most multiple-upload front-ends were created without Django in mind, so interfacing with tools is not always straightforward as it might be with a different language. Thankfully, there are a couple of Django libraries...
Managing multiple SSH identities
Here at Imaginary we maintain our own git repositories internally with the help of the invaluable utility, Gitolite. This works well for us. However, in some cases, our clients have their own repositories that we must interact with. The problem arises when the client repositories reside on a third-party service, usually Github. As you likely know,...
Sewing Success with Fabric
I wanted to share a quick practical example of how Fabric, can make your development life easier. If you're unfamiliar with Fabric I recommend checking out its tutorial which describes Fabric thusly; Fabric is a Python (2.5 or higher) library and command-line tool for streamlining the use of SSH for application deployment...
Our Django Server Setup: How and Why
One of the most important decisions you make in the process of building a new Django application is what software stack you use to serve it to the world. You're not lacking for options: people run Django on Apache, lighty, nginx, and Cherokee. You also need to decide how to...
Permission Based File Serving
One issue I've run into a couple times while working with Django is the need to serve files to users based on permissions. The first situation occurred with a store we were building that would allow for electronic versions of books to be sold. These books would typically be distributed...
Who controls your domain name?
Every domain name must be registered. Network Solutions, GoDaddy and examples of domain name registrars. The owner of a domain name is referred to as the Registrant. To check your domain name registration, go to the WHOIS page at Network Solutions. Network Solutions will report on all domains regardless of...