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