Django and Elastic Beanstalk, a Great Combination
This post shows a working example such that you can launch your Django application on Amazon servers using Elastic Beanstalk. The only things you need is a Django application, Python 3 and an Amazon account. Before we start, make sure you have installed the Amazon CLI. Let’s start!
In this mini-tutorial, I have a Django application named “myapp”. This should be replaced with the name of your Django application.
- Start a terminal (often CTRL+T on Linux).
- Change the current directory to the directory containing your app. In my case I executed:cd ~/myapp
- Initialize Elastic Beanstalk inside this directory by executing the following command:eb initYou get a bunch of questions about the server(s) that will be initialized. Answer them regarding your own needs. During the questions, I created a new application named “myapp”. It also recognized that I used Python.
- Now we will create some configuration that is executed whenever code is deployed.mkdir .ebextensions
Now, create the following file: “.ebextensions/python.config” and use this boilerplate code:
container_commands: 00_setup_database: command: "touch db.sqlite3 && chmod 0777 db.sqlite3" 00_setup_static: command: "mkdir static && chmod 0777 static && chmod 0777 ." 01_collectstatic: command: "django-admin.py collectstatic --noinput" 03_translation: command: "django-admin.py compilemessages --locale nl" 04_migrate: command: "django-admin.py migrate --noinput" leader_only: true 05_wsgipass: command: 'echo "WSGIPassAuthorization On" >> ../wsgi.conf' option_settings: "aws:elasticbeanstalk:application:environment": DJANGO_SETTINGS_MODULE: "myapp.settings" PYTHONPATH: "$PYTHONPATH" "aws:elasticbeanstalk:container:python": WSGIPath: "myapp/wsgi.py"
This is useful for updating the database automatically or for updating translations or for doing other automated tasks.
- You need an environment to deploy your changes to. For this, you should execute the following command:eb create my-envHere, “my-env” can be replaced with a name of your choice. Common environment names are “production”, “test” and “development”. It takes a while before the environment is created. A perfect time for a coffee break :-). The simplest case is to have one environment. One could also have one environment per branch, such that you can deploy your changes on a “development” branch to a test server and you can deploy changes on the “master” branch to the production server.
- Now, every time you have changes you’d like to commit, simply execute:eb deploy
- If you wish to view the application online, you can execute:eb open
That’s it! If you have any questions or remarks, feel free to post them in the comment section below.