A simple demonstration of how a django-based website can be set up for local development with microk8s

Overview

Django with MicroK8s

Start Building Your Project

This project provides a Django web app running as a single node Kubernetes cluster in microk8s. It is meant to make it as easy as possible to begin building a project with a minimum of initial configuration.

This is both a reference and an actual github template that can be used to quickly start development. After installing prerequisites and downloading this repository, only one command is needed to have a working, browsable application.

Provided Tools

Prerequisites

You'll need to install the following software:

Note that the system has only been tested on Ubuntu 18+, but should theoretically work for any host OS on which Microk8s and docker can be installed.

Initial Operation

  1. Install pre-requisites.

  2. Download the repository:

    git clone [email protected]:bluemoo/django-with-microk8s.git
    
  3. Install pre-commit hooks:

    pre-commit install
    
  4. Start Microk8s and enable required add-ons:

    microk8s.start
    microk8s enable helm3 dns storage registry host-access ingress
    
  5. Start the system:

    ./dev.sh start
    
  6. Check for successful startup with:

    ./dev.sh status
    
  7. Navigate to http://localhost:8000 and you should see Django tell you it was installed successfully!

Example System Start

$ microk8s.start
Started.

$ microk8s enable helm3 dns storage registry host-access ingress
Enabling Helm 3
Fetching helm version v3.5.0.
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100 11.7M  100 11.7M    0     0  8430k      0  0:00:01  0:00:01 --:--:-- 8430k
Helm 3 is enabled
Addon dns is already enabled.
Addon storage is already enabled.
Addon registry is already enabled.
Addon host-access is already enabled.
Addon ingress is already enabled.


$ ./dev.sh start
Checking microk8s configuration
Build image
Sending build context to Docker daemon  7.146MB
<-- Snipped Steps -->
Successfully built aeb2100b9b07
Successfully tagged server:development-server
Pushing image to registry
The push refers to repository [localhost:32000/server]
<-- Snip Pushing Image -->
Setting up Secrets
<-- Snip -->
Installing database
<-- Snip -->
Wait for database to be ready
pod/postgres-statefulset-0 condition met
Installing server
<-- Snip -->
Configuring Ingress
configmap/nginx-ingress-tcp-microk8s-conf unchanged
daemonset.apps/nginx-ingress-microk8s-controller unchanged

$ ./dev.sh status
NAME                                  READY   STATUS      RESTARTS   AGE
development-server-7f5c56ff54-wmgf5   1/1     Running     0          9s
migration-job-gqd65                   0/1     Completed   0          13s
postgres-statefulset-0                1/1     Running     0          18s
redis-statefulset-0                   1/1     Running     0          9s

$ wget http://localhost:8000/
2021-05-11 20:07:00 (84,3 MB/s) - ‘index.html’ saved [10697/10697]

$ grep "The install worked successfully! Congratulations!" index.html 
        <title>The install worked successfully! Congratulations!</title>
        <h1>The install worked successfully! Congratulations!</h1>

$ ./dev.sh test
.System check identified no issues (0 silenced).
..
----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK

Development Workflows

dev.sh

The project comes with a shell script dev.sh that contains helpful commands to interact with the running system. In particular, it has options to install/uninstall the system, run django management commands, and run django tests. For a full set of options, simply type: ./dev.sh help

Hot code reloading

The development server mounts files directly from your file system, so any changes to python files will be automatically noticed and result in the server automatically reloading the code:

$ ./dev.sh server-logs
10.1.97.1 - - [11/May/2021 18:33:12] "GET / HTTP/1.1" 200 -
10.1.97.1 - - [11/May/2021 18:33:12] "GET / HTTP/1.1" 200 -
 * Detected change in '/opt/project/server/appsecrets.py', reloading
 * Restarting with stat
Performing system checks...

System check identified no issues (0 silenced).

Django version 3.2.2, using settings 'settings'
Development server is running at http://0.0.0.0:8000/
Using the Werkzeug debugger (http://werkzeug.pocoo.org/)
Quit the server with CONTROL-C.

Thus, you can edit, save, and see your changes in your app very quickly.

Database migrations

As this is a development environment, migrations are automatically applied on system start up, so you'll have an empty django database schema from the beginning. You can perform all other database interactions as you would normally via the Django manage command provided by dev.sh:

$ ./dev.sh manage makemigrations
No changes detected

$ ./dev.sh manage migrate
Operations to perform:
  Apply all migrations: admin, auth, contenttypes, sessions
Running migrations:
  No migrations to apply.

Testing

While django tests can be run via the manage command, the dev.sh file provides a small shortcut, allowing you to simply use ./dev.sh test. You can also pass one or more test labels:

$ ./dev.sh test
...
----------------------------------------------------------------------
Ran 3 tests in 0.001s

OK
System check identified no issues (0 silenced).
$ ./dev.sh test tests.test_appsecrets.AppSecretsIntegrationTest
.
----------------------------------------------------------------------
System check identified no issues (0 silenced).
Ran 1 test in 0.000s

OK

Next steps

This development environment should server you well until you're ready to actually deploy your app to production. However, if you're new to Django, you can easily pick up the tutorial from Creating the Polls app. Just remember that instead of typing python manage.py startapp polls you should use ./dev.sh manage startapp polls instead. Good luck!

Notes

If you want to run docker as non-root user then you need to add it to the docker group. https://stackoverflow.com/questions/48957195/how-to-fix-docker-got-permission-denied-issue

Owner
Noah Jacobson
Noah Jacobson
Quick example of a todo list application using Django and HTMX

django-htmx-todo-list Quick example of a todo list application using Django and HTMX Background Modified & expanded from https://github.com/jaredlockh

Jack Linke 54 Dec 10, 2022
Forgot password functionality build in Python / Django Rest Framework

Password Recover Recover password functionality with e-mail sender usign Django Email Backend How to start project. Create a folder in your machine Cr

alexandre Lopes 1 Nov 03, 2021
wagtail_tenants is a Django/Wagtail app to provide multitenancy to your wagtail project.

wagtail-tenants wagtail_tenants is a Django/Wagtail app to provide multitenancy to your wagtail project. You are able to run a main Wagtail Site and f

<bbr> 11 Nov 20, 2022
Django Advance DumpData

Django Advance Dumpdata Django Manage Command like dumpdata but with have more feature to Output the contents of the database from given fields of a m

EhsanSafir 7 Jul 25, 2022
React.JS - Django Application Template

OTS React.JS - DJango Web Application (UNTESTED) This repository servers as a template for creating React.JS - Django Web Applications. Note that the

Darryl See Wei Shen 5 Aug 19, 2022
Logan is a toolkit for building standalone Django applications

Logan Logan is a toolkit for running standalone Django applications. It provides you with tools to create a CLI runner, manage settings, and the abili

David Cramer 206 Jan 03, 2023
Auto-detecting the n+1 queries problem in Python

nplusone nplusone is a library for detecting the n+1 queries problem in Python ORMs, including SQLAlchemy, Peewee, and the Django ORM. The Problem Man

Joshua Carp 837 Dec 29, 2022
Python CSS/Javascript minifier

Squeezeit - Python CSS and Javascript minifier Copyright (C) 2011 Sam Rudge This program is free software: you can redistribute it and/or modify it un

Smudge 152 Apr 03, 2022
Mobile Detect is a lightweight Python package for detecting mobile devices (including tablets).

Django Mobile Detector Mobile Detect is a lightweight Python package for detecting mobile devices (including tablets). It uses the User-Agent string c

Botir 6 Aug 31, 2022
webfest Django project @innovaccer

inno-doctor webfest Django project @innovaccer setup guide create new directory for project clone the repo with url into the directory make sure pytho

Rohit sahu 6 Oct 28, 2022
Radically simplified static file serving for Python web apps

WhiteNoise Radically simplified static file serving for Python web apps With a couple of lines of config WhiteNoise allows your web app to serve its o

Dave Evans 2.1k Dec 15, 2022
✋ Auto logout a user after specific time in Django

django-auto-logout Auto logout a user after specific time in Django. Works with Python 🐍 ≥ 3.7, Django 🌐 ≥ 3.0. ✔️ Installation pip install django-a

Georgy Bazhukov 21 Dec 26, 2022
Boilerplate Django Blog for production deployments!

CFE Django Blog THIS IS COMING SOON This is boilerplate code that you can use to learn how to bring Django into production. TLDR; This is definitely c

Coding For Entrepreneurs 26 Dec 09, 2022
Per object permissions for Django

django-guardian django-guardian is an implementation of per object permissions [1] on top of Django's authorization backend Documentation Online docum

3.3k Jan 04, 2023
A simple demonstration of integrating a sentiment analysis tool in a django project

sentiment-analysis A simple demonstration of integrating a sentiment analysis tool in a django project (watch the video .mp4) To run this project : pi

2 Oct 16, 2021
A simple plugin to attach a debugger in Django on runserver command.

django-debugger A simple plugin to attach a debugger in Django during runserver Installation pip install django-debugger Usage Prepend django_debugger

Sajal Shrestha 11 Nov 15, 2021
Neighbourhood - A python-django web app to help the residence of a given neighborhood know their surrounding better

Neighbourhood A python-django web app to help the residence of a given neighborh

Levy Omolo 4 Aug 25, 2022
Exploit Discord's cache system to remote upload payloads on Discord users machines

Exploit Discord's cache system to hide payloads PoC Remote upload embedded payload from image using EOF to Discord users machines through cache. Depen

cs 169 Dec 20, 2022
A handy tool for generating Django-based backend projects without coding. On the other hand, it is a code generator of the Django framework.

Django Sage Painless The django-sage-painless is a valuable package based on Django Web Framework & Django Rest Framework for high-level and rapid web

sageteam 51 Sep 15, 2022
A Django app for working with BTCPayServer

btcpay-django A Django app for working with BTCPayServer Installation pip install btcpay-django Developers Release To cut a release, run bumpversion,

Crawford 3 Nov 20, 2022