Iman Sugirman
Iman Sugirman
Fullstack Developer, Software Engineer, Frontend Developer

Deploy Mongodb dengan Debian Bullseye di Fly.io

16 Desember 2022

Tutorial Deploy Mongodb di server Fly.io menggunakan Docker dan mengamankan menggunakan authentication agar lebih aman dan tenang, mari kita mulai dengan image Docker debian bullse eye.

FROM debian:bullseye

Lalu sekarang kita akan install dependencies untuk menginstall mongodb

RUN apt-get update; apt install -y curl wget sudo gnupg systemd gnupg2

Sekarang kita install apt-key dan simpan di file /etc/apt/sources.list.d/mongodb-org-6.0.list seperti ini :

RUN wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - RUN echo "deb http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list

Dan sekarang saatnya update debian kita dengan memasukan :

RUN sudo apt-get update RUN sudo apt-get install -y mongodb-org

Untuk file config berada di folder /etc dan dengan nama file mongod.conf nah kita akan mengedit bindIp agar mongodb kita bisa di akses remote oleh mongodb compass, jika anda belum punya Aplikasi Mongodb Compass silahkan download terlebih dahulu Di sini

Untuk memasukan ke Config Mongodb kita bisa memasukan :

RUN sed -i "s,\\(^[[:blank:]]_bindIp:\\) ._,\\1 0.0.0.0," /etc/mongod.conf

Lalu masukan beberapa config yang mana seperti di sarankan oleh mongodb :

RUN echo "mongodb-org hold" | sudo dpkg --set-selections RUN echo "mongodb-org-database hold" | sudo dpkg --set-selections RUN echo "mongodb-org-server hold" | sudo dpkg --set-selections RUN echo "mongodb-mongosh hold" | sudo dpkg --set-selections RUN echo "mongodb-org-mongos hold" | sudo dpkg --set-selections RUN echo "mongodb-org-tools hold" | sudo dpkg --set-selections

Terakhir baru kita bisa masukan Entrypointnya dan Expose port 27017 :

ARG PORT 27017 EXPOSE 27017 ENTRYPOINT ["/usr/bin/mongod", "-f", "/etc/mongod.conf"]

Dan Berikut versi lengkap Dockerfile nya seperti dibawah ini :

FROM debian:bullseye RUN apt-get update; apt install -y curl wget sudo gnupg systemd gnupg2 RUN wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - RUN echo "deb http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list RUN sudo apt-get update RUN sudo apt-get install -y mongodb-org RUN sed -i "s,\\(^[[:blank:]]*bindIp:\\) .*,\\1 0.0.0.0," /etc/mongod.conf RUN echo "mongodb-org hold" | sudo dpkg --set-selections RUN echo "mongodb-org-database hold" | sudo dpkg --set-selections RUN echo "mongodb-org-server hold" | sudo dpkg --set-selections RUN echo "mongodb-mongosh hold" | sudo dpkg --set-selections RUN echo "mongodb-org-mongos hold" | sudo dpkg --set-selections RUN echo "mongodb-org-tools hold" | sudo dpkg --set-selections ARG PORT 27017 EXPOSE 27017 ENTRYPOINT ["/usr/bin/mongod", "-f", "/etc/mongod.conf"]

Jika anda belum membuat apps di fly bisa masukan perintah :

fly launch

Setelah itu bisa kita deploy dengan pengaturan fly.toml diubah menjadi seperti ini :

# fly.toml file generated for mongoresta on 2022-12-16T08:38:15+07:00 app = "applicationmu" kill_signal = "SIGINT" kill_timeout = 5 processes = [] [env] PORT = "27017" [experimental] allowed_public_ports = [] auto_rollback = true [[services]] internal_port = 27017 processes = ["app"] protocol = "tcp" [services.concurrency] hard_limit = 25 soft_limit = 20 type = "connections" [[services.ports]] port = 27017 [[services.tcp_checks]] # grace_period = "1s" interval = 1000 # restart_limit = 0 timeout = 2000

Sekarang kita buat volume docker dengan menggunakan perintah :

## Silahkan ubah angka 1 untuk menentukan storage db nya fly volumes create db_storage --size 1 --region sin

Nah sekarang kita akan ubah fly.toml atau menambahkan volume tersebut :

[[mounts]] ## Lokasi Storage db nya disini destination = "/var/lib/mongodb" ## Nama volume yang kita buat tadi source = "db_storage"

Jadi Untuk file fly.toml kita akan menjadi seperti ini :

app = "applicationmu" kill_signal = "SIGINT" kill_timeout = 5 processes = [] [env] PORT = "27017" [experimental] allowed_public_ports = [] auto_rollback = true [[services]] internal_port = 27017 processes = ["app"] protocol = "tcp" [services.concurrency] hard_limit = 25 soft_limit = 20 type = "connections" [[services.ports]] port = 27017 [[services.tcp_checks]] # grace_period = "1s" interval = 1000 # restart_limit = 0 timeout = 2000 [[mounts]] ## Lokasi Storage db nya disini destination = "/var/lib/mongodb" ## Nama volume yang kita buat tadi source = "db_storage"

Oke sekarang kita deploy ke Server Fly dengan memasukan perintah seperti ini :

fly deploy --config=fly.toml --no-cache

Buat Database untuk Authentication

Untuk membuat Authentication dan mengamankan Mongodb kita, Kita harus membuat username dan password anda harus masuk ke console server aplikasi yang tadi kita buat terlebih dahulu :

fly ssh console --app applicationmu

Setelah login sekarang kita masuk ke Shell Mongo dengan memasukan perintah mongosh :

mongosh test > show dbs

Buat user dan password di db admin :

use admin admin > db.createUser({ user: "admin", pwd: "changepasswordme", roles: [{ role: "userAdminAnyDatabase", db: "admin"}, "readWriteAnyDatabase"]})

Jika sudah selesai sekarang kita akan ubah file Docker kita untuk mengamankan akses dengan authentication:

Proteksi Mongodb dengan Authentication

Untuk mengamankan maka kita akan buat konfigurasi untuk mongod.conf seperti ini kita buat file mongd.conf:

# mongod.conf systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log storage: dbPath: /var/lib/mongodb processManagement: timeZoneInfo: /usr/share/zoneinfo net: port: 27017 bindIp: 0.0.0.0 security: authorization: enabled

Nah sekarang akan kita masukan konfigurasi kita ke Docker file agar nanti otomatis menggunakan konfig yang kita buat:

FROM debian:bullseye RUN apt-get update; apt install -y curl wget sudo gnupg systemd gnupg2 RUN wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add - RUN echo "deb http://repo.mongodb.org/apt/debian bullseye/mongodb-org/6.0 main" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list RUN sudo apt-get update RUN sudo apt-get install -y mongodb-org ## Non Aktifkan RUN seed dibawah ini # RUN sed -i "s,\\(^[[:blank:]]*bindIp:\\) .*,\\1 0.0.0.0," /etc/mongod.conf ## Tambahkan 2 baris ini RUN rm -rf /etc/mongod.conf COPY mongod.conf /etc/mongod.conf RUN echo "mongodb-org hold" | sudo dpkg --set-selections RUN echo "mongodb-org-database hold" | sudo dpkg --set-selections RUN echo "mongodb-org-server hold" | sudo dpkg --set-selections RUN echo "mongodb-mongosh hold" | sudo dpkg --set-selections RUN echo "mongodb-org-mongos hold" | sudo dpkg --set-selections RUN echo "mongodb-org-tools hold" | sudo dpkg --set-selections ARG PORT 27017 EXPOSE 27017 ENTRYPOINT ["/usr/bin/mongod", "-f", "/etc/mongod.conf"]

Lalu deploy ulang Mongodb kita di fly

fly deploy --config=fly.toml --no-cache

dan selesai, Demikian tutorial dari saya tentang Deploy Mongodb dengan Debian Bullseye di Fly.io, semoga bermanfaat. Happy Coding...