Vaultwarden di Fly.io: Deploy dan Nikmati

{{< callout emoji=“💡” >}}
Untuk deploy yang lebih mudah, cek postingan v2 saya, post ini sebagai riwayat saja ;)
{{< /callout >}}
Dari alternatif yang saya dapatkan kemarin, saya memeriksa satu per satu dan ternyata hanya fly.io yang menyediakan layanan untuk men-deploy Docker ‘on-the-fly’. Tidak hanya itu, fly.io juga memberikan IP anycast untuk setiap aplikasi yang diunggah. Jadi, kita dapat dengan mudah menggunakan domain yang kita punya supaya lebih keren.
Jujur sebagai pemula, awalnya saya bingung bagaimana caranya menggunakan layanan dari fly.io, meskipun mereka memberikan dokumentasi, ternyata tidak mudah dipahami oleh awam seperti saya. Namun, pada akhirnya sekarang saya sudah bisa melakukan deploy dan menggunakannya.
Oke langsung lanjut ke tutorialnya saja:
Persiapan
Install flyctl
tutorial bisa kamu lihat dari website Fly.io
berikut.
Login dengan fly auth login
(Kamu juga bisa mendaftar
terlebih dahulu, apabila punya akun GitHub akan lebih mudah).
Lakukan clone Vaultwarden
git clone https://github.com/dani-garcia/vaultwarden.git
Inisialisasi project ke
flyctl
Masuk ke dalam folder vaultwarden dan ketik fly launch
,
flyctl
akan mendeteksi bahwa folder
vaultwarden
kita berupa Docker
.
Kamu akan diminta untuk memberikan nama projectnya. Sama seperti di Heroku, nama project fly.io harus unik. Atau bisa juga langsung kamu enter untuk menggunakan nama yang auto-generated.
Bagian Select organization
, cuma ada pilihan personal,
skip.
Bagian ‘Region’ tentu pilih lokasi server yang paling dekat dengan Indonesia, yaitu ‘Singapore’.
flyctl
menuliskan pengaturan deploynya ke file
fly.toml
. Setelah itu, kita akan ditanya apakah ingin
deploy langsung atau tidak. Kebetulan secara default tidak, jadi kita
bisa langsung pencet enter untuk lanjut ke langkah berikutnya.
Membuat
persistent storage
di fly
Menurut dokumentasi Vaultwarden, Vaultwarden secara default (dan disarankan) akan menggunakan database jenis SQLite. Menurut saya, database ini sudah cukup karena kita tidak perlu mengurus server MySQL/PostgreSQL. Meskipun fly.io juga menyediakan PostgreSQL, mengingat ada fitur send di Vaultwarden, saya pikir database jenis SQLite sudah OK.
Perintah untuk trial account friendly adalah berikut :
fly volumes create vaultdata --region sin --size 1
Penjelasannya :
vaultdata
: nama volumenya, silahkan diganti.
--region sin
: kode region Singapore, terdekat dengan
Indonesia.
--size 1
: untuk akun free, fly.io hanya memberikan
gratis 1 GB saja. Dimana kalau untuk ukuran database passoword saja
sudah lebih dari cukup. Sedangkan yang sudah menambahkan CC, bisa
mengubah angkanya menjadi 3.
Sama seperti ketika menginisialisasi proyek, kamu akan dimintai data nama volume dan lokasi server. Yang perlu diperhatikan menurut dokumentasi dari fly.io:
Volumes are, by default, created with encryption-at-rest enabled for additional protection of the data on the volume. Use –no-encryption to instead create an unencrypted volume for improved performance at deployment and runtime.
Silahkan bagi kamu yang ingin mengamankan volumenya, kalau tidak
berarti kamu harus menambahkan --no-encryption
setelah
command diatas.
Setelah jadi, kita perlu menambahkan beberapa baris berikut ke
fly.toml
[mounts]
source="vaultdata"
destination="/data"
Secara default, vaultwarden akan menyimpan datanya ke
/data
, jadi kita tinggal sesuaikan saja. Jika ingin
menggunakan direktori lain, kamu bisa cek dokumentasi dari vaultwarden.
Dari sini, volume sudah siap digunakan.
Persiapan deploy
Yang kurang dari langkah ini hanyalah, env
yang
dibutuhkan di Vaultwarden dan atur Dockerfile
.
Untuk docker file saya, isinya hanya
FROM vaultwarden/server:latest
. Sedangkan dari
fly.toml
tambahan isinya mount
di atas, dan
beberapa env
untuk vaultwarden. Setting minimal yang kamu
butuhkah adalah untuk mengatur ADMIN_TOKEN
(bagi yang ingin
punya halaman admin), lebih baiknya ADMIN_TOKEN
diatur di
secrets, tapi untuk
kali ini saya masukkan ke dalam fly.toml saja. secret
nya
besok ketika upgrade vaultwarden saja.
Kurang lebih isi dari fly.toml
akan seperti ini
[env]
ADMIN_TOKEN="Vy2VyYTTsKPv8W5aEOWUbB/Bt3DEKePbHmI4m9VcemUMS2rEviDowNAFqYi1xjmp" # contoh token dari github
Jika sudah simpan dan kamu sudah siap, langsung saja panggil
fly deploy
Proses deploy.
Proses deploy tidaklah lama, hanya sekitar 3 menit, jika dibandingkan dengan menggunakan Heroku dengan repo dari sini yang memakan waktu sekitar 15 menit. Build pun dilakukan on-the-fly, tapi jika di perangkat kalian ada Docker, maka akan dibangun di lokal.
Setelah deploy, mesin dari fly.io akan mentransfer hasilnya ke dalam project kita, melakukan checking, dan memberikan subdomain, IPv4 maupun IPv6. Sungguh murah hati sekali fly.io ini. Selesai!
Dari sini, kamu bisa langsung menggunakan vaultwarden dari fly.io dan tentunya loadnya sangat cepat dibanding dengan heroku yang harus cold booting dyno nya.
Untuk tutorial mengganti domain (sebenarnya kita tidak bisa mengganti domain, cuma menggunakan domain lain ya, pointing saja) akan saya tuliskan di post berikutnya. Selamat mencoba!