Django Automation Deploy Menggunakan Gitlab + Herokuapp

Muhammad Rasyid
7 min readMay 23, 2021
Sumber: https://www.kangsunu.web.id/2020/03/auto-deploy-codeigniter-dengan-gitlab.html

Everything I do is 100% automation, which means I’m just doing it live. — Bradford Cox

Di era digitalisasi saat ini yang tentu saja sudah terdapat banyak otomisasi yang dilakukan terhadap beberapa aspek/hal penting dalam umat manusia dengan harapan dapat membantu serta mengurangi pekerjaan kita. Mungkin sebagai seorang programmer kita pernah merasakan bagaimana sulitnya melakukan editing file secara satu persatu yang kemudian akan kita update ke dalam sistem aplikasi kita sehingga perubahan yang telah dilakukan dapat terlihat efeknya.

Bagi teman-teman yang sudah membaca artikel yang pernah saya buat sebelumnya mengenai Git mungkin sudah mengetahui dan menggunakannya untuk berbagai keperluan developing aplikasi bersama timnya. Tapi, saat ini sudah banyak programmer yang beralih menggunakan Continuous Integration (CI), Continuous Delivery, dan Continuous Deployment (CD) atau yang biasa disebut dengan istilah CI/CD.

Dengan memanfaatkan fitur CI/CD yang terdapat pada Gitlab ataupun Github, kita dapat dengan mudah membuat code yang telah kita push ke dalam repository agar secara otomatis terintegrasi dengan webserver dan melakukan deployment aplikasi.

CI/CD itu bisa buat bahasa pemrograman apa aja cit?

Nice question! Teknologi CI/CD tidak pernah memiliki batasan terhadap bahasa pemrograman yang digunakan oleh aplikasi kita, hanya saja kita harus memastikan bahwa online repository yang kita gunakan (Gitlab, Github, dll) mendukung CI/CD untuk bahasa pemrograman yang kita gunakan.

Sebagai contoh, terdapat penjelasan dan template yang dapat dibaca secara oleh kita sebagai programmer yang disediakan oleh Gitlab untuk berbagai macam bahasa pemrograman. Kalian dapat mengaksesnya secara langsung pada tautan ini.

Wahh, buat python bisa dong berarti?

Jelas bisa dong :)

Berhubung pada beberapa tutorial sebelumnya kita sudah membahas framework Django yang menggunakan bahasa pemrgoraman python sebagai fondasinya, maka kali ini saya akan memberikan contoh untuk melakukan Automation Deployment Melalui Gitlab dengan menggunakan HerokuApp sebagai penyedia domain dan webserver gratis.

Asik! Gimana tuh tahapannya cit?

Weits, sabar teman-teman. Sebelum kita masuk ke dalam tahapannya, kita harus memastikan bahwa teman-teman sudah menyiapkan beberapa hal yang saya sebutkan di bawah ini agar tutorial ini berjalan dengan lancar ya.

Adapun yang harus teman-teman siapkan antara lain:

  1. Akun Gitlab
  2. Akun Heroku App
  3. Project Django
  4. File .gitlab-ci.yml
  5. File Procfile

Setelah semua hal di atas telah terpenuhi maka kita sudah siap untuk masuk ke tahapan untuk melakukan Automation Deployment dengan memanfaatkan CI/CD pada Gitlab ke Heroku App.

Oke, tahap pertama apa cit?

Udah gasabar banget ya sepertinya hehe :D

Jadi pada saya akan mengelompokan langkah-langkah pada tutorial kali ini menjadi 3 tahapan besar, yaitu:

  1. Pengaturan / Penyesuaian Django Project
  2. Pengaturan Heroku
  3. Pengaturan Gitlab

Setiap pengelompokkan tersebut telah saya urutkan berdasarkan pengalaman saya sejauh ini selama melakukan automation deployment menggunakan Gitlab ke Heroku. Langsung aja kita masuk ke tahap yang pertama, yaitu pengaturan / penyesuaian django project.

1. Pengaturan / Penyesuaian Django Project

Karena pada hal yang harus dipenuhi terdapat Django Project, jadi saya mengasumsikan teman-teman telah menyiapkan django project yang akan digunakan untuk melakukan tutorial ini. Jika teman-teman belum memiliki django project mungkin dapat dibuat terlebih dahulu hingga dapat dijalankan pada local server teman-teman.

Jika django project sudah siap, teman-teman dapat langsung melakukan copy-paste file Procfile dan .gitlab-ci.yml yang telah teman-teman unduh ke dalam folder yang terdapat manage.py di dalamnya.

Copy Paste FIle Procfile dan .gitlab-ci.yml

Perlu diingat, pada contoh ini nama project saya adalah ‘story’ sehingga nantinya teman-teman dapat menyesuaikan dengan nama project yang telah dibuat.

Setelah proses copy-paste berhasil, selanjutnya teman-teman dapat melakukan edit file Procfile dengan mengganti wsgi yang sudah terdapat di dalamnya dengan nama project kalian (disini saya mengganti menjadi story.wsgi). Setelah berhasil maka jangan lupa untuk melakukan save.

Edit wsgi di Procfile

Setelah itu, kamu juga perlu memastikan telah melakukan perubahan penamaan dengan segala sesautu yg berkaitan dengan static (img, jss, css).

Penamaan File Static

Selain itu, kamu juga perlu menambahkan {% load static %} di setiap halaman html km agar file static di dalamnya dapat ditampilkan melalui folder static yang sudah ada.

Load Static

Kamu harus melakukan instalasi beberapa package yang diperlukan agar deployment dapat berjalan dengan baik. Kamu dapat melakukannya dengan mengetikkan command :

>> pip install dj-database-url gunicorn psycopg2-binary coverage selenium

yang kemudian harus ditulis kembali ke dalam file requirements.txt agar dapat terinstall saat proses deploy.

>> pip freeze > requirements.txt
  • Settings.py

import os di dalam settings.py

import os
import dj_database_url
# ...

Agar dapat dideploy, seluruh file static harus dikumpulkan oleh whitenoise, untuk menambahkan whitenoise kita harus menambahkan whitenoise.middleware.WhiteNoiseMiddleware di settings.py bagian middleware (dibawah django middleware agar menjadi prioritas).

MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'whitenoise.middleware.WhiteNoiseMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
# ...
]

Ubah ALLOWED_HOSTS di settings.py seperti dibawah ini:

ALLOWED_HOSTS = ['*']

Dengan begitu, apapun domain kita nanti akan dapat mengakses / melakukan pemanggilan fungsi di dalam project kita.

Tambahkan STATIC_ROOT di baris paling bawah settings.py

STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

Tambahkan code di bawah ini ke dalam bagian DATABASES agar os dapat menjalankan db yang akan digunakan.

DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

PRODUCTION = os.environ.get('DATABASE_URL') is not None
if PRODUCTION:
# KALAU SUDAH BERJALAN, kamu bisa uncomment bagian DEBUG, ALLOWED_HOSTS, dan DATABASES.
# For increased security.
#DEBUG = False
#ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'NAMA_APP.herokuapp.com']
#DATABASES['default'] = dj_database_url.config()
SECURE_SSL_REDIRECT = True

2. Pengaturan Heroku

Setelah melakukan settings pada Django Project yang kita miliki, maka langkah selanjutnya adalah melakukan settings pada Heroku App kita.

Create New App

Karena kalian sudah memiliki akun heroku, maka setelah berhasil login kalian hanya perlu membuat app baru pada heroku. Kalian dapat menemukan tombol new di dashboard yg berada di kanan atas dan pilih create new app.

Create New App

Tulis nama yg ingin kalian inginkan. (nama app adalah nama domain yang kemudian akan kita akses nantinya, jadi coba dipikirkan baik-baik ya :D)

Create New App on Heroku

Setelah terdapat tanda bahwa nama app dapat digunakan, selanjutnya klik button create app untuk membuat app tersebut.

Setelah app terbuat, kalian harus menyimpan Api Key untuk akun kalian dengan membuka halaman account settings pada heroku kalian.

Heroku Api Key

Copy dan simpan key tersebut karena pada tahap selanjutnya kita akan menggunakannya saat melakukan pengaturan pada Gitlab.

3. Pengaturan Gitlab

Baik, langkah terakhir adalah melakukan pengaturan pada Gitlab sebagai repository yang akan menyimpan django project kita. Pastikan teman-teman telah membuat repository terlebih dahulu.

Selanjutnya kita harus melakuakn setting CI/CD yang ada di gitlab, caranya dengan membuka halaman settings pada repository (ada di bawah side bar > CI/CD)

Settings -> CI/CD

Lalu klik button expand pava variables untuk menambahkan variabel heroku. Tambahkan 3 variabel dengan key dan value sebagai berikut

HEROKU_APIKEY — (paste API-KEY yang telah di copy pada langkah sebelumnya).

HEROKU_APPNAME — NAMA-APP

HEROKU_APP_HOST — NAMA-APP.herokuapp.com

dengan hasil akhir sebagai berikut:

Setting Variabel CI/CD Gitlab

FINAL STEP

Setelah melalui perjalanan yang cukup panjang itu kita hanya perlu melakukan push django project kita ke dalam repository tersebut dengan menggunakan command:

git remote add origin [LINK-REPOSITORY]
git add .
git commit -m "deployment setting, atau pesannya sabeb"
git push origin master
Push to Gitlab

Tunggu beberapa saat. Jika berhasil (checklist hijau pada pipeline,) maka website dapat langsung dibuka lewat di NAMA_APP.herokuapp.com. Buka Gitlab untuk melihat proses-nya berlangsung.

Nah mungkin itu saja teman-teman yang bisa saya sampaikan pada kali ini, semoga dapat bermanfaat bagi kalian semua. Jangan lupa nantikan artikel lainnya dari saya yang tentunya akan jauh lebih menarik lagi bahasanya.

Tak lupa, jika terdapat kesalahan, kritik, dan saran dapat teman-teman sampaikan melalui linkedin saya atau komen di postingan ini.

Terima Kasih :)

--

--