# Django 3.2 LTS Generated on 15 Oct 2021 from [the Django 3.2 LTS catalog page](https://marketplace.digitalocean.com/apps/django-3-2-lts) Django is a high-level Python web framework that encourages rapid development and clean, pragmatic design. Built by experienced developers, it takes care of much of the hassle of Web development, so you can focus on writing your app without having to reinvent the wheel. It’s free and open source. ## Software Included | Package | Version | License | |---|---|---| | Django | [3.2.4](https://docs.djangoproject.com/en/3.2/releases/3.2.4/) | [3-clause BSD](https://github.com/django/django/blob/main/LICENSE.python) | | Nginx | 1.18.0 | [2-clause BSD](https://nginx.org/en/) | | Gunicorn | 20.0.4 | [MIT](https://github.com/benoitc/gunicorn/blob/master/NOTICE#L6) | | Postgres | 12.7 | [The PostgreSQL Licence](https://www.postgresql.org/about/licence/) | | Python | 3.8.5 | [PSF License](https://docs.python.org/3/license.html) | | Pip (for Python3) | 20.0.2 | [MIT](https://github.com/pypa/pip/blob/main/LICENSE.txt) | | Certbot | 0.40.0 | [Apache 2](https://raw.githubusercontent.com/certbot/certbot/master/LICENSE.txt) | ## Creating an App using the Control Panel Click the **Deploy to DigitalOcean** button to create a Droplet based on this 1-Click App. If you aren’t logged in, this link will prompt you to log in with your DigitalOcean account. [![Deploy to DO](https://www.deploytodo.com/do-btn-blue.svg)](https://cloud.digitalocean.com/droplets/new?image=greendeployhq-django32lts-20-04) ## Creating an App using the API In addition to creating a Droplet from the Django 3.2 LTS 1-Click App using the control panel, you can also use the [DigitalOcean API](https://docs.digitalocean.com/reference/api). As an example, to create a 4GB Django 3.2 LTS Droplet in the SFO2 region, you can use the following `curl` command. You need to either save your [API access token](https://docs.digitalocean.com/reference/api/create-personal-access-token/index.html.md) to an environment variable or substitute it in the command below. ```shell curl -X POST -H 'Content-Type: application/json' \ -H 'Authorization: Bearer '$TOKEN'' -d \ '{"name":"choose_a_name","region":"sfo2","size":"s-2vcpu-4gb","image":"greendeployhq-django32lts-20-04"}' \ "https://api.digitalocean.com/v2/droplets" ``` ## Getting Started After Deploying Django 3.2 LTS After you created a Droplet, you can navigate to its public IPv4 address to see the sample application live. To learn how to make modifications or get your code onto your Droplet, here are the steps. You can also follow the sample application for the instructions. **Step 1: Access to your Droplet** Open a terminal on your computer to access your Droplet as the root user using the following command: ``` ssh root@your_droplet_public_ipv4 ``` You will then be prompted to enter a password. If you created your Droplet with a root user password, enter this in the terminal. If you created your Droplet with an ssh key, enter the passphrase associated with your key. **Step 2: Get your code on here** Note the login message, it has important details for connecting to your Postgres database, among other things! Clone your Django code onto the droplet, anywhere you like. Note: If you’re not using a source control, you can directly upload the files to your droplet using SFTP. You can try to reuse this project, located in `/home/django/django_project`, or start fresh in a new location and edit Gunicorn’s configuration to point to it at `/etc/systemd/system/gunicorn.service`. You can also change how nginx is routing traffic by editing `/etc/nginx/sites-enabled/default` Cd into the directory where your Django code lives, and install any dependencies. (For example, if you have a `requirements.txt` file, run `pip install -r requirements.txt`.) That’s it! Whenever you make code changes, reload Gunicorn like so: ``` PID=$(systemctl show --value -p MainPID gunicorn.service) && kill -HUP $PID ``` **Step 3: Play in the admin area** The standard Django admin area is accessible at `/admin`. The login and password are stored in the `DJANGO_USER*` values you see when you call `cat /root/.digitalocean_passwords` while logged in over SSH. **Step 4: Get production-ready** There’s a lot you’ll want to do to make sure you’re production-ready. Here are the popular things that people will do. **Firewall:** Review your firewall settings by calling sudo ufw status, and make any changes you need. By default, only SSH/SFTP (port 22), HTTP (port 80), and HTTPS (port 443) are open. You can also disable this firewall by calling sudo ufw disable and use a DigitalOcean cloud firewall instead, if you like (they’re free). **Domain:** Register a custom domain **Storage:** You can mount a volume (up to 16TB) to this server to expand the filesystem, provision a database cluster (that runs MySQL, Redis, or PostgreSQL), or use a Space, which is an S3-compatible bucket for storing objects. **HTTPS:** You use certbot To use Certbot, you’ll need a registered domain name and two DNS records: - An A record from the domain (e.g., `example.com`) to the server’s IP address - An A record from a domain prefaced with www (e.g., [www.example.com](http://www.example.com/)) to the server’s IP address Additionally, if you’re using a server block file, you’ll need to make sure the server name directive in the Nginx server block (e.g., `server_name example.com`) is correctly set to the domain. Once the DNS records and, optionally, the server block files are set up, you can generate the SSL certificate. Make sure to substitute the domain in the command. ``` certbot --nginx -d example.com -d www.example.com ``` For a more detailed walkthrough, you can follow [How to Secure Nginx with Let’s Encrypt](https://www.digitalocean.com/community/tutorials/how-to-secure-nginx-with-let-s-encrypt-on-ubuntu-18-04) or view [Certbot’s official documentation](https://certbot.eff.org/docs/using.html). You can serve files from the web server by adding them to the web root (`/var/www/html`) using [SFTP](https://www.digitalocean.com/community/tutorials/how-to-use-sftp-to-securely-transfer-files-with-a-remote-server) or other tools.