Skip to content

emka.web.id

Menu
  • Home
  • Indeks Artikel
  • Tutorial
  • Tentang Kami
Menu

Cara Membuat Server Flask dengan Nginx, MongoDB dan Docker

Posted on November 12, 2019 by Syauqi Wiryahasana
Flask bagi yang belum tahu adalah web framework berbasis bahasa pemrograman python. Salah satu framework populer ini memang sangat mudah digunakan. Pada tutorial kali ini, kita akan menginstall Flask Framework dengan Docker. Docker sendiri memungkinkan kita membuat lingkungan development yang sama pengalamannya dan mudah pengalamannya. Syarat:
  • punya akun root atau akun non-root dengan kemampuan sudo,
  • sudah terinstall docker dan docker compose
  • koneksi internet

Langkah 1: Buat file Docker Compose

Buat sebuah folder dengan nama flaskapp misalnya, lalu buat file docker-compose.yml dengan konten seperti ini: [sourcecode] version: '3' services: flask: build: context: app dockerfile: Dockerfile container_name: flask image: digitalocean.com/flask-python:3.6 restart: unless-stopped environment: APP_ENV: "prod" APP_DEBUG: "False" APP_PORT: 5000 MONGODB_DATABASE: flaskdb MONGODB_USERNAME: flaskuser MONGODB_PASSWORD: your_mongodb_password MONGODB_HOSTNAME: mongodb volumes: - appdata:/var/www depends_on: - mongodb networks: - frontend - backend mongodb: image: mongo:4.0.8 container_name: mongodb restart: unless-stopped command: mongod --auth environment: MONGO_INITDB_ROOT_USERNAME: mongodbuser MONGO_INITDB_ROOT_PASSWORD: your_mongodb_root_password MONGO_INITDB_DATABASE: flaskdb MONGODB_DATA_DIR: /data/db MONDODB_LOG_DIR: /dev/null volumes: - mongodbdata:/data/db networks: - backend webserver: build: context: nginx dockerfile: Dockerfile image: digitalocean.com/webserver:latest container_name: webserver restart: unless-stopped environment: APP_ENV: "prod" APP_NAME: "webserver" APP_DEBUG: "true" SERVICE_NAME: "webserver" ports: - "80:80" - "443:443" volumes: - nginxdata:/var/log/nginx depends_on: - flask networks: - frontend networks: frontend: driver: bridge backend: driver: bridge volumes: mongodbdata: driver: local appdata: driver: local nginxdata: driver: local [/sourcecode]

Langkah 2: Bikin Template Server Flask dengan Dockerfile

Pada folder diatas tadi, silakan bikin folder app lalu bikin file Dockerfile dengan konten: [sourcecode] FROM python:3.6.8-alpine3.9 LABEL MAINTAINER="FirstName LastName <example@domain.com>" ENV GROUP_ID=1000 \ USER_ID=1000 WORKDIR /var/www/ ADD . /var/www/ RUN pip install -r requirements.txt RUN pip install gunicorn RUN addgroup -g $GROUP_ID www RUN adduser -D -u $USER_ID -G www www -s /bin/sh USER www EXPOSE 5000 CMD [ "gunicorn", "-w", "4", "--bind", "0.0.0.0:5000", "wsgi"] [/sourcecode] pada folder /flaskapp buat folder nginx, kemudian file Dockerfile: [sourcecode] FROM digitalocean.com/alpine:latest LABEL MAINTAINER="FirstName LastName <example@domain.com>" RUN apk --update add nginx && \ ln -sf /dev/stdout /var/log/nginx/access.log && \ ln -sf /dev/stderr /var/log/nginx/error.log && \ mkdir /etc/nginx/sites-enabled/ && \ mkdir -p /run/nginx && \ rm -rf /etc/nginx/conf.d/default.conf && \ rm -rf /var/cache/apk/* COPY conf.d/app.conf /etc/nginx/conf.d/app.conf EXPOSE 80 443 CMD ["nginx", "-g", "daemon off;"] [/sourcecode] lalu buat Reverse Proxy dengan Nginx. buat folder /flaskapp/nginx/conf.d/. buat file app.conf. [sourcecode] upstream app_server { server flask:5000; } server { listen 80; server_name _; error_log /var/log/nginx/error.log; access_log /var/log/nginx/access.log; client_max_body_size 64M; location / { try_files $uri @proxy_to_app; } location @proxy_to_app { gzip_static on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; proxy_set_header Host $http_host; proxy_buffering off; proxy_redirect off; proxy_pass http://app_server; } } [/sourcecode]

Langkah 3: Contoh Aplikasi Flask

Contoh bikin sebuah file bernama /app/app.py dengan contoh: [sourcecode language="python"] import os from flask import Flask, request, jsonify from flask_pymongo import PyMongo application = Flask(__name__) application.config["MONGO_URI"] = 'mongodb://' + os.environ['MONGODB_USERNAME'] + ':' + os.environ['MONGODB_PASSWORD'] + '@' + os.environ['MONGODB_HOSTNAME'] + ':27017/' + os.environ['MONGODB_DATABASE'] mongo = PyMongo(application) db = mongo.db @application.route('/') def index(): return jsonify( status=True, message='Welcome to the Dockerized Flask MongoDB app!' ) @application.route('/todo') def todo(): _todos = db.todo.find() item = {} data = [] for todo in _todos: item = { 'id': str(todo['_id']), 'todo': todo['todo'] } data.append(item) return jsonify( status=True, data=data ) @application.route('/todo', methods=['POST']) def createTodo(): data = request.get_json(force=True) item = { 'todo': data['todo'] } db.todo.insert_one(item) return jsonify( status=True, message='To-do saved successfully!' ), 201 if __name__ == "__main__": ENVIRONMENT_DEBUG = os.environ.get("APP_DEBUG", True) ENVIRONMENT_PORT = os.environ.get("APP_PORT", 5000) application.run(host='0.0.0.0', port=ENVIRONMENT_PORT, debug=ENVIRONMENT_DEBUG) [/sourcecode] lalu buat file wsgi.py dengan konten: [sourcecode] from app import application if __name__ == "__main__": application.run() [/sourcecode]

Langkah 4: Build Container dan Coba

Pastikan semua langkah diatas sudah di ikuti, lalu jalankan docker-compose untuk membuat stack server Nginx, Flask/Python, dan MongoDB. [sourcecode]docker-compose up -d[/sourcecode] dan coba dengan: [sourcecode]curl -i http://your_server_ip/todo[/sourcecode]
Seedbacklink

Recent Posts

TENTANG EMKA.WEB>ID

EMKA.WEB.ID adalah blog seputar teknologi informasi, edukasi dan ke-NU-an yang hadir sejak tahun 2011. Kontak: kontak@emka.web.id.

©2024 emka.web.id Proudly powered by wpStatically