Monday, July 27, 2020

Setting Layout pada Data Driven di ArcGIS

Setting Layout pada Data Driven di ArcGIS

Pada tulisan sebelumnya saya telah berbagi bagaiman menggunakan data driven page di ArcGIS untuk membuat lembar peta yang banyak dalam satu layout atau proyek ArcMap. Namun terdapat masalah saat kita menampilkan tiap lembar peta, dimana tidak terdapat perbedaan mencolok yang menampilkan data utama yang akan kita tampilkan. 

Untuk mengatasi hal ini kita bisa melakukan sedikit trik di ArcGIS. Sebagai catatan saya mengunakan ArcGIS versi 10.7, jadi mungkin pada versi dibawah ini bisa terdapat perbedaan sehingga cara yang saya lakukan tidak dapat dipraktekan.

Misalkan kita ingin betul-betul fokus pada menampilkan desa yang kita pilih. Silahkan lihat dua gambar di bawah ini.




  • Dari dua gambar tersebut, lokasi desa utama yang kita tampilkan tidak terlalu menonjol dibandingkan dengan desa lain. Dengan demikian akan lebih baik jika desa sekitar yang bukan desa utama warnanya menjadi berwarna lain misalkan putih atau abu. Sehingga kita betul-betul fokus ke desa terpilih.
  • Oke, langkah yang harus dilakukan adalah, copy layer tersebut dan Paste layer
  • Klik kanan di layer yang baru ditambahkan tersebut lalu pilih Properties, kemudian pilih tab Definition Query. Kemudian klik button Page Definition..., setelah tampil window Page Definition Query ceklis Enable dan isi Page Name Field sesuai field yang kita definisikan di Data Driven Page sebelumnya, lalu pilih Don't Match yang artinya field polygon yang tidak sama / match dengan data driven akan ditampilkan
  • Rubah simbol layer yang baru kita copy, tersebut dengan memberikan satu warna yang sama untuk desa di Kabupaten Majalengka tersebut, sehingga ketika nanti kita pilih desa tertentu di data driven page maka desa yang tidak terpilih menjadi warna yang sama.
  • Silahkan coba kembali pada toolbar data driven page dengan memilih desa, maka kan menampilkan tampilan desa yang tidak terpilih menjadi satu warna. Dengan demikian kita bisa melihat lembar peta kita bisa fokus dan lebih baik dalam menmapilkan desa tepilih.


Oke, kita berhasil melakukan trik bagaimana merubah tampilan field yang tidak aktif menjadi satu warna. Dan trik ini sangat bermanfaat sekali jika kita kan membuat lembar peta yang sangat banyak namun tetap eye catching sangat cepat.

Dengan teknik data driven ini bisa menghemat waktu yang sangat besar sekali dengan satu layout kita bisa membuat lembar peta tematik yang sangat banyak. Semoga bermanfaat. @wawanhn

Jika ingin mendownload tulisan tersebut silahkan klik disini.



Membuat Banyak Lembar Peta Menggunakan Satu Layout dengan Data Driven di ArcGIS

Membuat Banyak Lembar Peta Menggunakan Satu Layout dengan Data Driven di ArcGIS

Data driven merupakan salah satu tool di ArcGIS yang dapat digunakan untuk membuat output peta atau lembar peta yang banyak dari satu layout peta. Hal ini sangat membantu saat kita ingin membuat lempar peta tematik per desa untuk satu kabupaten/propinsi.Bisa dibayangkan untuk membuat lembar peta per desa dalam satu kabupaten/propinsi jika kita buat manual sangat merepotkan karena karena harus buat ratusan project layout.

Untuk mengatasi masalah tersebut, ketika kita bekerja di ArcGIS kita bisa menggunakan toolbar data driven. Dengan menggunakan toolbar ini, kita hanya cukup satu layout / project ArcGIS untuk semua lembar peta desa. Oke langsung saja bagaimana caramem buatnya ikuti langkah berikut:

  • Siapkan data shap, misal dalam hal ini saya menggunakan data desa Kabupaten Majalengka dari BIG, bisa didownload disini.
  • Buka ArcMap, dan tambahkan layer shp kecamatan dengan tipe polygon tersebut. Lalu ubah tampilan menjadi Layout view.

  • Kemudian tampilkan toolbar data driven, dengan cara klik kanan di menu atas Customize -> Toolbars -> Data Driven Pages
  • Klik menu Data Driven Page Setup pada toolbar Data Driven Pages, kemudian lakukan seting 
          - Ceklis Enable Data Driven Pages
          - Data Frame: Layers
          - Layer: pilih layer yang akan di buat data driven
          - start soft: pilih field/kolom yang menunjukan urutan lembar peta
          Untuk Optional fields biarkan none

  • Lalu klik tab Extent untuk menetukan tampilan saat kita membuat data driven page, dalam hal iin pada bagian Map Extent pilih Best Fit 125% supaya field/kolom polgon desa yang dipilih tampil besar. Lalu klik OK

  • Ubah simbol layer tersebut menurut jenis kategori nama desa dimana dalam layer ini namanya NAMOBJ
  • Kemudian tes hasil set data driven page, dengan melakukan klik tanda panah kiri dan kanan yang menunjukan urutan dari lembar layout peta tematik menurut desa di Kabupaten Majalengka. Misal saya pilih Desa Sangkahurip. 

  • Pada menu Page text klik menu Data Driven Page Attribute kemudian pilih field yang akan menampilkan atribut dalam hal ini saya pilih NAMOBJ  atau bisa juga pilih Data driven page name yang akan otomatis menampilkan nama field yang tadi pilih saat buat data driven yaitu menampilkan nama desa. Adapun ada beberapa menu lain diantaranya:
          Data driven page number : menampilkan urutan peta kita menurut nilai field FID
          Data driven page with count : menampilkan nomor urutan lembar peta dari jumlah lembar
          Data driven page Expression : menampilkan expresi yang sudah ditentukan pada layer
  • Jika sudah diset maka silahkan atur judul peta, skala, grid, peta indeks dan sebagainya, lalu silahkan simpan setiap lembar peta tersebut ke dalam format png/jpg/pdf.


Dengan teknik data driven ini bisa menghemat waktu yang sangat besar sekali dengan satu layout kita bisa membuat lembar peta tematik yang sangat banyak. Semoga bermanfaat.

Demikianlah tulisan tentang penggunan data driven di ArcGIS untuk membuat lembar peta yang banyak dalam satu layout, semoga bermafaat dan terimakasih sudah menyimak.

Jika ingin mendownload tulisan tersebut silahkan klik disini.


       



Mengenal Aplikasi Sistem Informasi Geografi QGIS

Mengenal Aplikasi Sistem Informasi Geografi QGIS

QGIS biasa sebelumnya dikenal sebagai Quantum GIS adalah aplikasi sistem informasi geografis (SIG) desktop yang bersifat open-source (gratis) dan lintas platform (mampu dijalankan di berbagai sistem operasi) yang menyediakan pernagkat untuk menampilkan, mengolah, dan analisis data spasial. Perkembangan QGIS saat ini sangat pesat dalam pengolahan data spasial di berbagai belahan dunia, hal ini didorong oleh kemudahan, kehandalan, dan tentu saja karena gratis untuk digunakan. Dengan perkembangan teknologi kedepan tidak menutup kemungkinan software SIG ini akan dapat menyaingi software berbayar seperti ArcGIS dimasa depan.

Dalam tulisan ini saya akan mencoba berbagi mengenai aplikasi Sistem Informasi Geografi terkhusus aplikasi QGIS, diharapkan dengan membaca tulisan ini akan membantu mempermudah kita untuk memahami dan mampu menggunakan aplikasi yang open-source untuk mendukung kegiatan pekerjaan sehari-hari. Dengan menggunakna aplikasi open-source kita mendapat keuntungan menjadi tidak tergantung dengan aplikasi berbayar yang membutuhkan pengeluran besar untuk mendukung pekerjaan kita.

Dalam tulisan ini rencananya akan membahas:


  • Persiapan Aplikasi QGIS
  • Pengenalan Sisitem Informasi Geografi
  • Mengenal Interface QGIS
  • Menggunakan data vektor
  • Menggunakan data raster
  • Layout Peta
Persiapan Aplikasi QGIS

Beberapa hal yang harus dipersiapkan yaitu:

1. Download aplikasi QGIS dengan link dibawah ini, untuk versi yang akan kita gunakan adalah versi stabil 3.10 64 bit (dengan catatan windows komputer Anda versi 64 bit, jika windows anda 32 bit silahkan disesuaikan).

    QGIS versi 3.14 64 bit disini 
    QGIS versi 3.10 64 bit stabil disini
    Atau jika windows anda versi 32 bit silahkan download QGIS versi lain disini

2. Kemudian install aplikasi QGIS, langkahnya sebagai berikut:
  • Klik kanan atau klik dua kali pada aplikasi qgis yang sudah di download
  • Setelah tampil Setup Wizard, klik Next

  • Kemudian tampil window License Agreemnet klik i Agree

  • Lalu jika menampilkan untuk menentukan tempat kita menginstal QGIS, biarkan sesuai dengan bawaannya, kemudian tampil window Choose Componets yang memberikan kita pilihan untuk menginstal komponen apa dan sampel data. Kita pilih QGIS saja tanpa install data contoh.

  • Tunggu sampai selesai instal, dan jika berhasil maka akan menampilkan window seperti di bawah.

    • Demikian cara instal QGIS di windows, untuk membuka aplikasi tersebut klik start program lalu klik QGIS Desktop 3.10.8, maka akan menampilkan aplikasi QGIS sperti gambar di bawah.

    Selamat kita sudah berhasil menginstal aplikasi QGIS Desktop pdi komputer kita. Silahkan dicoba di lihat berbagai menu yang ada di QGIS tersebut. Selanjutnya nanti saya akan coba bahas tentang Pengenalan Sistem Informasi Geografis.


    Semoga bermanfaat. @wawanhn
Untuk mendowload tulisan ini silahkan download disini

Referensi: https://www.qgis.org/

Sunday, July 26, 2020

Membuat Aplikasi Mengirim Link Aktivasi ke Email Menggunakan Django

Membuat Aplikasi Mengirim Link Aktivasi ke Email Menggunakan Django

Django merupakan salah satu framework berbasis python yang paling populer, dengan dukungan komunitas yang besar dan penggunaan yang sangat banyak tidak heran framework ini menjadi salah satu framework terbaik saat ini dan mungkin di masa depan yang berbasis python.

Saat ini saya akan berbagi bagaimana mengirim email menggunakan django. Langkah yang dilakukan adalah sebagai berikut:
  • Install django.
  • Buat project dan aplikasi. 
  • Pada file settings.py di folder project masukan seting untuk email
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'  
MAILER_EMAIL_BACKEND = EMAIL_BACKEND  
EMAIL_HOST = 'smtp.gmail.com'  
EMAIL_HOST_PASSWORD = '<Password>'  
EMAIL_HOST_USER = '<user gmail>'  
EMAIL_PORT = 587
EMAIL_USE_SSL = True  
DEFAULT_FROM_EMAIL = EMAIL_HOST_USER
  • Kemudian buka shell python
(venv) E:\Python\py_movie_api>python manage.py shell
Python 3.8.5 (tags/v3.8.5:580fbb0, Jul 20 2020, 15:57:54) [MSC v.1924 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from django.core.mail import send_mail
>>> send_mail('subject', 'here is the message.', 'okuselatan2020@gmail.com',['wawanhn@gmail.com'],fail_silently=False,)
1


  • Pada gambar di atas terlihat satus setelah kita mengirim email adalah 1, yang artinya kita sukses mengirim email. Silahkan cek email dan pastikan pesan sudah diterima.
  • Buat folder templates/accounts di folder project kita, lalu buat file signup.html
<!DOCTYPE html>  
    <html lang="en">  
    <head>  
        <title>Signup</title>  
        <meta charset="utf-8">  
        <meta name="viewport" content="width=device-width, initial-scale=1">  
        <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css">  
    </head>  
    <body><div class="container" style="margin-top: 50px;">  
        <div class="row justify-content-center">  
            <div class="col-md-5 shadow-sm p-3 mb-5 bg-white rounded">  
                <h2>Signup</h2>  
                <form method="post">  
                    {% csrf_token %}  
                    <div class="form-group">  
                        <label for="first_name">First Name:</label>  
                        <input type="text" class="form-control" id="first_name" placeholder="Enter first name"  
      name="first_name">  
                    </div>  
                    <div class="form-group">  
                        <label for="last_name">Last Name:</label>  
                        <input type="text" class="form-control" id="last_name" placeholder="Enter last name"  
      name="last_name">  
                    </div>  
                    <div class="form-group">  
                        <label for="username">Username:</label>  
                        <input type="text" class="form-control" id="username" placeholder="Enter username" name="username">  
                    </div>  
                    <div class="form-group">  
                        <label for="email">Email:</label>  
                        <input type="email" class="form-control" id="email" placeholder="Enter email" name="email">  
                    </div>  
                    <div class="form-group">  
                        <label for="pwd1">Password:</label>  
                        <input type="password" class="form-control" id="pwd1" placeholder="Enter password" name="password1">  
                    </div>  
                    <div class="form-group">  
                        <label for="pwd2">Confirm Password:</label>  
                        <input type="password" class="form-control" id="pwd2" placeholder="Reenter password"  
      name="password2">  
                    </div>  
                    <button type="submit" class="btn btn-primary">Submit</button>  
                </form>  
            </div>  
        </div>  
    </div>
</body>  
</html>
  • Buat file baru acc_active_email.html dalam forlder templates/accounts
{% autoescape off %}  
Hallo {{ user.username }},  
Silahkan konfirmasi link pendaftaran di email Anda,http://{{ domain }}{% url 'activate' uidb64=uid token=token %}  
Jika ini bukan amda, silahkan abaikan email ini.  
{% endautoescape %}
  • Masukan kode ini di file urls.py di folder aplikasi
from django.urls import path  
from accounts import viewsurlpatterns = [  
        path('signup/', views.signup, name="signup"),  
        path('activate/<uidb64>/<token>/',views.activate, name='activate'),  
]
  • Buat file forms.py di folder aplikasi
from django.contrib.auth.forms import UserCreationForm  
from django.contrib.auth.models import Userclass SignUpForm(UserCreationForm):  
        class Meta:  
            model = User  
            fields = ('email', 'first_name', 'last_name', 'username')
  • Buat file tokens.py di folder aplikas. Dengan catatan perintah from django.utils import six jika menggunakan django versi 3 keatas dibuat komentar, namun jika menggunakan django versi 2 komentarnya dibuang
from django.contrib.auth.tokens import PasswordResetTokenGenerator
#from django.utils import six
class AccountActivationTokenGenerator(PasswordResetTokenGenerator):
def _make_hash_value(self, user, timestamp):
return (
six.text_type(user.pk) + six.text_type(timestamp) +
six.text_type(user.is_active)
)
account_activation_token = AccountActivationTokenGenerator()
  • Masukan kode kedalam file views.py di folder aplikasi
from django.contrib.auth import get_user_model
from django.contrib.auth.models import User
from django.contrib.auth.tokens import default_token_generator
from django.contrib.sites.shortcuts import get_current_site
from django.core.mail import EmailMessage
from django.http import HttpResponse
from django.shortcuts import render
from django.template.loader import render_to_string
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode, urlsafe_base64_decode

UserModel = get_user_model()
from .forms import SignUpForm
from .tokens import account_activation_token


def signup(request):
if request.method == 'GET':
return render(request, 'accounts/signup.html')
if request.method == 'POST':
form = SignUpForm(request.POST)
# print(form.errors.as_data())
if form.is_valid():
user = form.save(commit=False)
user.is_active = False
user.save()
current_site = get_current_site(request)
mail_subject = 'Activate your account.'
message = render_to_string('accounts/acc_active_email.html', {
'user': user,
'domain': current_site.domain,
'uid': urlsafe_base64_encode(force_bytes(user.pk)),
'token': default_token_generator.make_token(user),
})
to_email = form.cleaned_data.get('email')
email = EmailMessage(
mail_subject, message, to=[to_email]
)
email.send()
return HttpResponse('Please confirm your email address to complete the registration')
else:
form = SignUpForm()
return render(request, 'accounts/signup.html', {'form': form})


def activate(request, uidb64, token):
try:
uid = urlsafe_base64_decode(uidb64).decode()
user = UserModel._default_manager.get(pk=uid)
except(TypeError, ValueError, OverflowError, User.DoesNotExist):
user = None
if user is not None and default_token_generator.check_token(user, token):
user.is_active = True
user.save()
return HttpResponse('Thank you for your email confirmation. Now you can login your account.')
else:
return HttpResponse('Activation link is invalid!')
  • Set direktori untuk templates di file settings.py
TEMPLATES = [
    {
        'BACKEND''django.template.backends.django.DjangoTemplates',
        'DIRS': [
            os.path.join(BASE_DIR, 'templates'),
        ],
        'APP_DIRS'True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]
  • Silahkan buka web anda, dengan alamat <website>/signup/. maka akan tampil halaman untuk signup

  • Setelah sign up, jika kita masukan data dengan benar maka akan mengirim link aktivasi ke email.
  • Silahkan cek email lalu klik link aktivasi, dan coba login ke dalam aplikasi anda lagi.

Selamat kita sudah bisa buat aplikasi django yang mengirim email link aktivasi saat pendaftaran dalam web kita... Terima kasih semoga bermanfaat. @wawanhn

Jika ingin mendapatkan tulisan ini dalam bentuk pdf, silahkan klik disini

Referensi:


Thursday, July 23, 2020

Deploy Aplikasi Django di AWS EC2 Bagian 1


Amazon Elastic Compute Cloud (Amazon EC2) adalah layanan web yang memberikan kapasitas komputasi yang aman dan berukuran fleksibel di cloud. Amazon EC2 dirancang untuk membuat komputasi cloud berskala web lebih mudah bagi pengembang. Antarmuka layanan web sederhana Amazon EC2 memungkinkan Anda mendapatkan dan mengonfigurasi kapasitas dengan friksi minimal. Amazon EC2 memberikan Anda kendali penuh sumber daya komputasi dan memungkinkan Anda bekerja di lingkungan komputasi Amazon yang telah terbukti [1].

Pada tulisan ini saya akan mencoba berbagi untuk melakukan deploy aplikasi django dengan menggunakan EC2 di AWS. Langkah yang dilakukan adalah sebagai berikut:


  • Buka website AWS dan masuk ke halaman untuk membuat instance dengan EC2 dihalaman ini dan lakukan login, sampai tampil halaman seperti di bawah kemudian klik Launch instance.

  • Pilih Amazon Machine Image (AMI). misal dalam contoh ini saya akan menggunakan Ubuntu Server 18.04 LTS (HVM), SSD Volume Type. kemudian klik button select.

  • Pilih Instance Type, saya pilih t2.micro, lalu klik Review and Launch
  • Tampil halaman Review Instance Launc, pada tahap ini kita selesai melakukan setting secara default untuk instance EC2, langkash selanjutnya klik Launch.  
  • Kemudian tampil halaman untuk memilih atau membuat key pair. Pilih Create a new key pair, isi Key pair name, lalu klik Download Key Pair dan simpan di komputer kita dan klik Launch instances.
  • Setelah itu maka akan menampilkan instance yang sudah dibuat barusan. Saat pertama kali dibuat maka instance state pending, tunggu sampai status menjadi active. Pada halaman ini kita bisa melihat type instance, Public DNS, IP Public dsb. Lalu kita bisa merubah nama instance kita dengan cara klik dibawah kolom name sesuaikan dengan nama instance aplikasi kita. Misal key-django-ec2-1.

Konek ke ec2 dengan menggunakan SSH

Selanjutnya kita akan lakukan konek ke ec2 dengan menggunakan SSH. Langkahnya adalah:
  • Pada halaman seperti gambar diatas pili/chek instance kita lalu klik button Connect yang akan menampilkan alamat keneksi melalui SSH dengan menggunakan PuTTy atau menggunakan Git bash.
          Download PuTTy untuk Windows 10 64 bit disini atau versi lain disini.

          Download Git Bash untuk Windows 10 64 disini atau versi lain disini.

  • Misal dalam contoh kali ini saya menggunakan Git Bash, setelah kita install Git, kemudian kita buka Git masuk ke folder tempat dimana file key pair berada. dan ketikan perintah:
          chmod 400 key-django-ec2-1.pem
  • Kemudian konek ke DNS Public kita dengan perintah:
          ssh -i key-django-ec2-1 ubuntu@<DNS Public>.compute.amazonaws.com
  • Jika koneksi berhasil maka kita bisa masuk ke server ec2 kita dan melakukan konfigurasi seperti ditampilkan pada gambar dibawah ini.
  • Selanjtnya kita lakukan update terhdapat ubuntu server kita dengan perintah
          sudo apt-get update
     
  • sudo apt-get upgrade -y
  • Selanjutnya cek apakah sudah ada python, jika belum maka install python3 dengan perintah

    ubuntu@ip-172-31-5-17:~$ python3 --version

    ubuntu@ip-172-31-5-17:~$ python --version

    ubuntu@ip-172-31-5-17:~$ sudo apt-get install python3
  • Install pip
         ubuntu@ip-172-31-5-17:~$ sudo apt-get install python3-pip 
  • Install Virtual environment
         ubuntu@ip-172-31-5-17:~$ sudo apt-get install python3-venv
  • Buat folder django1
          ubuntu@ip-172-31-5-17:~$ mkdir django1
  • Masuk ke folder django1
          ubuntu@ip-172-31-5-17:~$ cd django1
  • Buat virtualenv dengan nama venv misalnya
    ubuntu@ip-172-31-5-17:~$ python3 -m venv venv
  • Jalankan virtualenv
          ubuntu@ip-172-31-5-17:~$ source venv/bin/activate
          (venv) ubuntu@ip-172-31-5-17:~/django1$
  • Install python
          (venv) ubuntu@ip-172-31-5-17:~/django1$ pip3 install django
  • Selajutnya kita siapkan project django yang disimpan di Github, dan kita akan melakukan clone project kita yang ada di Github
          (venv) ubuntu@ip-172-31-5-17:~/django1$ git clone <alamat github>
  • Install psycopg2, untuk koneksi ke database PostgreSQL
            (venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ sudo apt-get install libpq-dev python-dev

          (venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ sudo apt-get install python3-psycopg2

           coba cek masuk ke python console, dan ketikan perintah import psycopg2, untuk mengeceka apakah library terseut sudah berhasil diinstal, jika belum ketikan perintah

(venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ sudo apt-get install psycopg2
  • Install Django-leaflet, untuk menampikan WebGIS
       (venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ pip3 install django-leaflet
  • Install GDAL dan OGR
Keluar dari virtualenv

ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ sudo add-apt-repository ppa:ubuntugis/ppa

ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ sudo apt-get update

ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ sudo apt-get install gdal-bin

ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ ogrinfo --version
GDAL 2.4.2, released 2019/06/28

ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ sudo apt-get install libgdal-dev

ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ export CPLUS_INCLUDE_PATH=/usr/include/gdal
ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ export C_INCLUDE_PATH=/usr/include/gdal

ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ ogrinfo --version
GDAL 2.4.2, released 2019/06/28
ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ pip3 install GDAL==2.4.2

Cek hasil installan library tersebut

ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ python
Python 2.7.17 (default, Jul 20 2020, 15:37:01)
[GCC 7.5.0] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gdal
>>> exit()

  • Install pillow, untuk pengelola image
    (venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ pip3 install pillow

  • Install gunicorn 
          (venv) ubuntu@ip-172-31-5-17:~/django1$ pip3 install gunicorn
  • Install nginx
    (venv) ubuntu@ip-172-31-5-17:~/django1$ sudo apt-get install -y nginx
  • Jalankan nginx
          (venv) ubuntu@ip-172-31-5-17:~/django1$ sudo nginx
  • Dalam gambar di atas terdapat error, untuk memperbaiki hal tersebut maka, kembali lihat halaman instance kita, dan klik kanan di instance tersebut dan pilih Networking - > Change Security Groups
  • Maka tampil halaman yang manampilkan security group instance kita seperti terlihat dalam gambar dibawah dan perhatikan nama security group tersebut
  • Selanjutnya kembali ke halaman instance sebelumnya, pilih menu Security Group. Pilih atau check security group lalu pilih button Actions dan pilih Edit inbound rules

  • Selanjutnya tambahkan rules dengan memilih Add rule, pilih Type dengan HTTP lalu pilih Source dan pilih Anywhere, lalu klik Save rules. Dan yang jangan lupa tambahkan satu lagi Type isi dengan Custom HTTP, masukan port 8000 (bisa dirubah sesuai dengan nomor port yang kan digunakan oleh django).
  • Selanjutnya kembali ke halaman instance, dan copy alamat Public DNS (IPv4), lalu buka di browser sehingga menampilkan halaman seperti gambar di bawah
Setting gunicorn

Masuk ke folder dimana terdapat file wsgi.py


(venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ ls

db.sqlite3  django1  djangoapp1  manage.py

(venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ cd django1

(venv) ubuntu@ip-172-31-7-166:~/django1/geodjango1-okus$ ls
README.md    app.sock    django1     manage.py  staticfiles  wsgi.py
__init__.py  db.sqlite3  djangoapp1  static     templates


(venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ gunicorn --bind 0.0.0.0:8000 django1.wsgi:application
[2020-07-22 18:22:30 +0000] [27551] [INFO] Starting gunicorn 20.0.4
[2020-07-22 18:22:30 +0000] [27551] [INFO] Listening at: http://0.0.0.0:8000 (27551)
[2020-07-22 18:22:30 +0000] [27551] [INFO] Using worker: sync
[2020-07-22 18:22:30 +0000] [27554] [INFO] Booting worker with pid: 27554

  • Silahkan cek ke alamat PUBLIC DNS kita dan lihat hasilnya, dan jika berhasil maka akan menampilkan halaman django seperti di bawah ini

Selamat kita telah bisa menjalankan django dengan menggunakan AWS ec2. Kalau masih belum tampil seperti di atas coba cek mungkin ada langkah atau konfigurasi yang keliru.

Install supervisor
  • Install supervisor
          (venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ sudo apt-get install -y supervisor


  • Buat file konfigurasi
     
    (venv) ubuntu@ip-172-31-5-17:~/django1/geodjango1-okus$ cd /etc/supervisor/conf.d/
(venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ ls

    (venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ sudo touch gunicorn.conf

    (venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ ls
gunicorn.conf

    (venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ mkdir /var/log/gunicorn

          (venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ sudo nano gunicorn.conf

  • Cek lokasi gunicorn, untuk menentukan lokasi command pada file gunicorn.conf
(venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ whereis gunicorn
gunicorn: /home/ubuntu/django1/venv/bin/gunicorn
  • Masukan kedalam file gunicorn.conf
[program:gunicorn]
directory=/home/ubuntu/django1/geodjango1-okus
command=/home/ubuntu/django1/venv/bin/gunicorn --workers 3 --bind unix:/home/ubuntu/django1/geodjango1-okus/app.sock django1.wsgi:application
autostart=true
autorestart=true
stderr_logfile=/var/log/gunicorn/gunicorn.err.log
stdout_logfile=/var/log/gunicorn/gunicorn.out.log

[group:guni]
programs:gunicorn

  • Set supervisor
          (venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ sudo supervisorctl reread

    guni: available

    (venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ sudo supervisorctl update
    guni: added process group
    
    (venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ sudo supervisorctl status
    guni:gunicorn        RUNNING   pid 29381, uptime 0:00:29

    (venv) ubuntu@ip-172-31-5-17:/etc/supervisor/conf.d$ cd

    (venv) ubuntu@ip-172-31-5-17:~$ cd /etc/nginx/sites-available/
          
    ((venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ ls
    default

    ((venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ cat default

    (venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ sudo touch django.conf

    (venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ sudo nano django.conf

  • Masukan kode program ke file django.conf

server {
listen 80;
server_name <ALAMAT PUBLIC DNS/IP>;
location / {
include proxy_params;
proxy_pass http://unix:/home/ubuntu/django1/geodjango1-okus/app.sock;
}
}

  • Test nginx, setelah dilakukan konfigurasi tadi
    (venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful


    (venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ sudo ln django.conf /etc/nginx/sites-enabled/

(venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ sudo nginx -t
nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 64

  • Pada saat saya coba sudo nginx -t, terdapat error nginx: [emerg] could not build server_names_hash, you should increase server_names_hash_bucket_size: 64, hal ini karena nama dns public kita terlalu panjang mak harus dirubah menjadi server_names_hash_bucket_size: 64.Makan perbaikan yang saya lakukan adalah rubah file nginx.conf. langkahnya adalah
         (venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ cd ..

         (venv) ubuntu@ip-172-31-5-17:/etc/nginx$ ls
conf.d        fastcgi_params  koi-win     modules-available  nginx.conf    scgi_params      sites-enabled  uwsgi_params
fastcgi.conf  koi-utf         mime.types  modules-enabled    proxy_params  sites-available  snippets       win-utf

         (venv) ubuntu@ip-172-31-5-17:/etc/nginx$ sudo nano nginx.conf

  • Kemudian pada bahian http, hapus komentar untuk perintah server_names_hash_bucket_size 64 menjadi 128;

http {

        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        server_names_hash_bucket_size 128;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##

        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##

  • Cek kembali nginx
         (venv) ubuntu@ip-172-31-5-17:/etc/nginx$ cd sites-available/

        (venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

  • Restart service nginx, samapi tidak ada error
         (venv) ubuntu@ip-172-31-5-17:/etc/nginx/sites-available$ sudo service nginx restart

  • Terakhir cek halam web kita dengan alamat PUBLLIC DNS tanpa nomor Port, jika berhasil maka tampil halaman web django kita

Selamat kita sudah setting django dan server nginx dan gunicorn, sehingga aplikasi web django kita sudah erbhasil di deploy di server AWS ec2. Jika saat mencoba masih ada yang error silahkan di perhatikan lebih detail langkah-langkah diatas.

Jika ingin mendownload tulisan ini silahkan download disini.

Sekian dulu nanti dilanjut untuk tulisan Deploy Aplikasi Django di AWS EC2 Bagian 2. Terimakasih sudah menyimak semoga bermanfaat. @wawanhn

Referensi: