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
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:
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...