diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b69e321b1da0325aec31b16885a13a0d6f259c92..1937daf05a2e8bb85b01f979193dc46f2464df61 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -3,6 +3,9 @@ variables:
   POSTGRES_USER: $DB_USER
   POSTGRES_PASSWORD: $DB_PASSWORD
   POSTGRES_HOST_AUTH_METHOD: $DB_HOST_AUTH_METHOD
+  AWS_ACCESS_KEY_ID: $AWS_ACCESS_KEY_ID
+  AWS_SECRET_ACCESS_KEY: $AWS_SECRET_ACCESS_KEY
+  AWS_STORAGE_BUCKET_NAME: $AWS_STORAGE_BUCKET_NAME
 
 services:
   - postgres:12.2-alpine
diff --git a/Dockerfile b/Dockerfile
index 043521d9765e799814e2d86f46db22fc42253659..8bdb85164f3b6994790405beafa2ed8f1bd99a29 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,18 +1,15 @@
 FROM python:latest
 
-WORKDIR /opt/pplbackend
-RUN mkdir -p /opt/pplbackend
+ENV PYTHONDONTWRITEBYTECODE 1
+ENV PYTHONUNBUFFERED 1
 
-ADD . /opt/pplbackend
+WORKDIR /app
+RUN mkdir -p /app
 
-ENV HTTP_PROXY="http://proxy.cs.ui.ac.id:8080"
-ENV http_proxy="http://proxy.cs.ui.ac.id:8080"
-ENV HTTPS_PROXY="http://proxy.cs.ui.ac.id:8080"
-ENV https_proxy="http://proxy.cs.ui.ac.id:8080"
+RUN pip install --upgrade pip
+COPY ./requirements.txt /app/
+RUN pip install -r requirements.txt
 
-RUN\
- python3 -m pip install -r requirements.txt --no-cache-dir
+COPY .env .env.production
 
-RUN chmod +x /opt/pplbackend/docker_start.sh
-
-EXPOSE 80
+COPY . /app/
\ No newline at end of file
diff --git a/informasi_fasilitas/views.py b/informasi_fasilitas/views.py
index 86c452a6b04072316c2595ff158cf99ffa6b5368..30d7ad82a0810907ccdea247d6d64e1fec378b25 100644
--- a/informasi_fasilitas/views.py
+++ b/informasi_fasilitas/views.py
@@ -200,13 +200,25 @@ def update_fasilitas(request, nama_lokasi, id):
             user_creator = fasilitas.user
             desc = fasilitas.deskripsi
             tag = fasilitas.tag
+            jumlah = fasilitas.jumlah
+            image = fasilitas.image
+            disabilitas = fasilitas.disabilitas
             if user_creator == request.user:
                 if 'deskripsi' in request.data.keys():
                     desc = request.data['deskripsi']
                 if 'tag' in request.data.keys():
                     tag = request.data['tag'].split()
+                if 'jumlah' in request.data.keys():
+                    jumlah = request.data['jumlah']
+                if 'image' in request.data.keys():
+                    image = request.data['image']
+                if 'disabilitas' in request.data.keys():
+                    disabilitas = request.data['disabilitas']
                 fasilitas.deskripsi = desc
                 fasilitas.tag = tag
+                fasilitas.jumlah = jumlah
+                fasilitas.image = image
+                fasilitas.disabilitas = disabilitas
                 fasilitas.save()
                 return JsonResponse({'response': '{} in fasilitas edited'.format(str(request.data.keys())), },
                                     status=HTTPStatus.ACCEPTED)
diff --git a/media/fasilitas/Screen_Shot_2020-12-26_at_20.34.57.png b/media/fasilitas/Screen_Shot_2020-12-26_at_20.34.57.png
new file mode 100644
index 0000000000000000000000000000000000000000..8899eddbe1d61a6b5b7eebfd0e00b0b42be09aff
Binary files /dev/null and b/media/fasilitas/Screen_Shot_2020-12-26_at_20.34.57.png differ
diff --git a/media/lokasi/Screen_Shot_2020-12-29_at_01.48.32.png b/media/lokasi/Screen_Shot_2020-12-29_at_01.48.32.png
new file mode 100644
index 0000000000000000000000000000000000000000..e86cecd01b112be4890d34681c33f125c0dfd154
Binary files /dev/null and b/media/lokasi/Screen_Shot_2020-12-29_at_01.48.32.png differ
diff --git a/pplbackend/settings.py b/pplbackend/settings.py
index ac8ecb9375c08f69d444fef7462e2c49948723a4..f7c2992bf270c98baed451374023615d56cd9039 100644
--- a/pplbackend/settings.py
+++ b/pplbackend/settings.py
@@ -22,13 +22,14 @@ BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
 # See https://docs.djangoproject.com/en/3.0/howto/deployment/checklist/
 
 #Security keys
-SECRET_KEY = os.getenv('SECRET_KEY', 'akua')
+SECRET_KEY = os.getenv("SECRET_KEY", 'akua')
 
 
 # SECURITY WARNING: don't run with debug turned on in production!
 DEBUG = True
 
-ALLOWED_HOSTS = ['localhost','127.0.0.1','poipole-staging.herokuapp.com','34.101.147.63','www.poipole.com']
+ALLOWED_HOSTS = ['localhost', '127.0.0.1', 'poipole-staging.herokuapp.com',
+                 '34.101.147.63', 'www.poipole.com']
 
 
 # Application definition
@@ -67,7 +68,6 @@ MIDDLEWARE = [
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware',
-    'whitenoise.middleware.WhiteNoiseMiddleware',
 ]
 
 ROOT_URLCONF = 'pplbackend.urls'
@@ -154,14 +154,19 @@ USE_TZ = True
 # Static files (CSS, JavaScript, Images)
 # https://docs.djangoproject.com/en/3.0/howto/static-files/
 
-STATIC_ROOT = os.path.join(BASE_DIR, 'static')
+AWS_ACCESS_KEY_ID = os.getenv("AWS_ACCESS_KEY_ID")
+AWS_SECRET_ACCESS_KEY = os.getenv("AWS_SECRET_ACCESS_KEY")
+AWS_STORAGE_BUCKET_NAME = os.getenv("AWS_STORAGE_BUCKET_NAME")
+AWS_S3_OBJECT_PARAMETERS = {
+    'CacheControl': 'max-age=86400',
+}
+AWS_S3_CUSTOM_DOMAIN = '%s.s3.amazonaws.com' % os.getenv("AWS_STORAGE_BUCKET_NAME")
+AWS_LOCATION = 'static'
 
-STATIC_URL = '/static/'
+STATIC_URL = 'https://%s/%s/' % (AWS_S3_CUSTOM_DOMAIN, AWS_LOCATION)
 
-STATIC_DIRS = [
-    os.path.join(BASE_DIR, 'static'),
-]
-STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'
+STATICFILES_STORAGE = 'storages.backends.s3boto3.S3Boto3Storage'
+DEFAULT_FILE_STORAGE = 'pplbackend.storage_backends.MediaStorage'
 
 #Rest API Settings
 SITE_ID = 1
@@ -215,8 +220,6 @@ EMAIL_HOST_PASSWORD = os.getenv("EMAIL_HOST_PASSWORD")
 EMAIL_PORT = 587
 EMAIL_USE_TLS = True
 
-MEDIA_URL = '/media/'
-MEDIA_ROOT = os.path.join(BASE_DIR, "media")
 GOOGLE_OAUTH2_CLIENT_ID = os.getenv("GOOGLE_OAUTH2_CLIENT_ID")
 GOOGLE_OAUTH2_CLIENT_SECRET = os.getenv("GOOGLE_OAUTH_CLIENT_SECRET")
 
diff --git a/pplbackend/storage_backends.py b/pplbackend/storage_backends.py
new file mode 100644
index 0000000000000000000000000000000000000000..4325cbff40824d43ef9bfcea51b3537a55587c0c
--- /dev/null
+++ b/pplbackend/storage_backends.py
@@ -0,0 +1,5 @@
+from storages.backends.s3boto3 import S3Boto3Storage
+
+class MediaStorage(S3Boto3Storage):
+    location = 'media'
+    file_overwrite = False
\ No newline at end of file
diff --git a/pplbackend/urls.py b/pplbackend/urls.py
index 07f9a9dd7199deacea0941b9c552f50febc07a39..52c2c5c86c84c324998876dc89b4c94f93b96266 100644
--- a/pplbackend/urls.py
+++ b/pplbackend/urls.py
@@ -43,4 +43,4 @@ urlpatterns = [
     #path('api-token-auth/', views.obtain_auth_token, name='api-token-auth'),
     path('informasi-fasilitas/', include('informasi_fasilitas.urls')),
     path('layanan-khusus/', include('layanan_khusus.urls'))
-] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)
+]
diff --git a/requirements.txt b/requirements.txt
index eb545bb16e5dedde61c4a5b6883f07624a790e63..bb254eb64fea2a92a60ee43eec6e0282be5eff83 100644
--- a/requirements.txt
+++ b/requirements.txt
@@ -1,12 +1,21 @@
+asgiref==3.3.1
+astroid==2.4.2
+boto3==1.16.36
+botocore==1.19.36
+cachetools==4.1.1
+certifi==2020.11.8
+chardet==3.0.4
 coverage==4.4.1
+defusedxml==0.6.0
 dj-database-url==0.4.2
-Django==2.1.5
+Django==2.2
 django-allauth==0.41.0
 django-cors-middleware==1.5.0
 django-environ==0.4.4
 django-multiselectfield==0.1.12
 django-oauth-toolkit==1.3.2
 django-rest-auth==0.9.5
+django-storages==1.11.1
 djangorestframework==3.11.0
 djangorestframework-simplejwt==4.4.0
 google-api-python-client==1.7.11
@@ -16,11 +25,11 @@ gunicorn==19.7.1
 httplib2==0.17.0
 idna==2.6
 isort==4.2.15
+jmespath==0.10.0
 lazy-object-proxy==1.4.3
 mccabe==0.6.1
 oauthlib==3.1.0
 Pillow==7.0.0
-pip==20.0.2
 psycopg2-binary==2.8.5
 pyasn1==0.4.8
 pyasn1-modules==0.2.8
@@ -28,18 +37,22 @@ pycparser==2.19
 PyJWT==1.7.1
 pylint==2.5.0
 pylint-django==2.0.15
+pylint-plugin-utils==0.6
+python-dateutil==2.8.1
 python3-openid==3.1.0
 pytz==2017.2
-requests==2.18.4
+requests==2.24.0
 requests-oauthlib==1.3.0
 rsa==4.0
+s3transfer==0.3.3
 selenium==3.5.0
-setuptools==40.8.0
 six==1.12.0
 social-auth-app-django==3.1.0
 social-auth-core==3.2.0
+sqlparse==0.4.1
+toml==0.10.2
 typed-ast==1.4.1
 uritemplate==3.0.1
-urllib3==1.22
+urllib3==1.25.8
 whitenoise==3.3.0
-wrapt==1.12.1
\ No newline at end of file
+wrapt==1.12.1