Monday

18-08-2025 Vol 19

How to Host a Mongoose-Powered App on Fly.io

Cara Hosting Aplikasi Bertenaga Mongoose di Fly.io

Daftar Isi

  1. Pendahuluan: Apa itu Mongoose, Fly.io, dan Mengapa Menggabungkannya?
  2. Prasyarat: Apa yang Anda Butuhkan Sebelum Memulai
  3. Menyiapkan Aplikasi Mongoose Anda: Struktur dan Konfigurasi
  4. Membuat Akun Fly.io dan Menginstal Flyctl: Langkah Awal
  5. Mengonfigurasi Aplikasi Anda untuk Fly.io: fly.toml dan Dockerfile
  6. Menyediakan Database MongoDB: Fly.io Volumes atau Atlas
  7. Menerapkan Aplikasi Anda ke Fly.io: Proses Langkah demi Langkah
  8. Mengatur Variabel Lingkungan: Koneksi Database dan Kunci Rahasia
  9. Memantau dan Menskalakan Aplikasi Anda: Observabilitas dan Kinerja
  10. Praktik Terbaik dan Tips Pemecahan Masalah: Menjaga Aplikasi Anda Tetap Sehat
  11. Kesimpulan: Langkah Selanjutnya dan Sumber Daya Tambahan

1. Pendahuluan: Apa itu Mongoose, Fly.io, dan Mengapa Menggabungkannya?

Mongoose adalah pustaka Object Data Modeling (ODM) yang elegan dan populer untuk MongoDB dan Node.js. Ini menyediakan solusi berbasis skema untuk memodelkan data aplikasi Anda dan menyertakan validasi bawaan, perantara, dan fitur-fitur berguna lainnya untuk berinteraksi dengan database MongoDB Anda. Mongoose menyederhanakan pengembangan aplikasi Node.js yang bekerja dengan MongoDB, menjadikannya pilihan populer di kalangan pengembang.

Fly.io adalah platform penerapan yang memungkinkan Anda menjalankan aplikasi full-stack di dekat pengguna Anda. Fly.io berfokus pada aplikasi yang membutuhkan latensi rendah dan penempatan global. Ia menggunakan konsep mesin virtual mikro yang berjalan di berbagai wilayah di seluruh dunia, memungkinkan Anda untuk dengan mudah menskalakan aplikasi Anda secara geografis. Fly.io sangat baik untuk hosting aplikasi Node.js, dan menggabungkannya dengan Mongoose untuk backend MongoDB menyediakan solusi yang kuat dan terukur.

Mengapa Menggabungkannya?

  • Skalabilitas Global: Fly.io memungkinkan Anda dengan mudah menyebarkan aplikasi Anda ke beberapa wilayah, memastikan latensi rendah bagi pengguna di mana pun mereka berada.
  • Kemudahan Penggunaan: Fly.io menyediakan CLI yang sederhana dan mudah digunakan untuk mengelola dan menyebarkan aplikasi Anda.
  • Hemat Biaya: Fly.io menawarkan tingkatan gratis dan model harga yang kompetitif, menjadikannya pilihan yang menarik untuk proyek kecil dan besar.
  • Integrasi MongoDB: Menggunakan Mongoose untuk berinteraksi dengan MongoDB memungkinkan Anda untuk membangun aplikasi Node.js yang terstruktur dan terpelihara dengan baik.
  • Pengembangan yang Cepat: Kombinasi Mongoose dan Fly.io mempercepat proses pengembangan dengan menyediakan alat dan infrastruktur yang diperlukan untuk dengan cepat membangun dan menyebarkan aplikasi Anda.

2. Prasyarat: Apa yang Anda Butuhkan Sebelum Memulai

Sebelum kita mulai, pastikan Anda memiliki hal berikut yang terinstal dan dikonfigurasi:

  1. Node.js dan npm (atau Yarn): Anda harus menginstal Node.js dan manajer paketnya (npm atau Yarn). Anda dapat mengunduh Node.js dari situs web resmi: https://nodejs.org/. npm biasanya ikut dengan Node.js. Jika Anda lebih suka Yarn, Anda dapat menginstalnya secara global menggunakan `npm install -g yarn`.
  2. Akun Fly.io: Daftar untuk akun gratis di https://fly.io/. Anda akan memerlukan kartu kredit untuk memverifikasi akun Anda, tetapi Fly.io menawarkan tingkat gratis yang memungkinkan Anda menyebarkan aplikasi kecil tanpa biaya.
  3. Flyctl CLI: Flyctl adalah antarmuka baris perintah untuk berinteraksi dengan Fly.io. Ikuti petunjuk instalasi yang disediakan di dokumentasi Fly.io: https://fly.io/docs/flyctl/.
  4. Docker (Opsional tapi Disarankan): Docker memungkinkan Anda untuk mengemas aplikasi Anda dan semua dependensinya ke dalam wadah, memastikan bahwa ia berjalan secara konsisten di lingkungan apa pun. Meskipun tidak mutlak diperlukan, Docker sangat disarankan untuk menyebarkan aplikasi ke Fly.io. Anda dapat mengunduh Docker Desktop dari https://www.docker.com/products/docker-desktop/.
  5. MongoDB Database: Anda akan membutuhkan instance MongoDB yang berjalan. Anda dapat menggunakan solusi yang di-host seperti MongoDB Atlas, atau Anda dapat menjalankan MongoDB secara lokal (untuk pengembangan) atau di server Anda sendiri. Kami akan membahas opsi ini lebih detail nanti.
  6. Editor Kode: Editor kode seperti Visual Studio Code, Sublime Text, atau Atom akan sangat membantu.

3. Menyiapkan Aplikasi Mongoose Anda: Struktur dan Konfigurasi

Mari kita buat aplikasi Node.js sederhana yang menggunakan Mongoose untuk berinteraksi dengan database MongoDB.

  1. Buat Direktori Proyek: Buat direktori baru untuk proyek Anda dan masuk ke dalamnya:

    
    mkdir mongoose-flyio
    cd mongoose-flyio
          
  2. Inisialisasi Proyek Node.js: Inisialisasi proyek Node.js baru dengan menjalankan:

    
    npm init -y
          

    Ini akan membuat file `package.json` dengan konfigurasi default.

  3. Instal Dependensi: Instal dependensi yang diperlukan: `express` untuk membuat server web, `mongoose` untuk berinteraksi dengan MongoDB, dan `dotenv` untuk mengelola variabel lingkungan.

    
    npm install express mongoose dotenv
          
  4. Struktur Proyek: Atur struktur proyek Anda seperti berikut:

    
    mongoose-flyio/
    ├── node_modules/
    ├── models/
    │   └── Product.js
    ├── routes/
    │   └── productRoutes.js
    ├── .env
    ├── app.js
    ├── package.json
    └── server.js
          
  5. Buat Model Mongoose (models/Product.js): Buat model Mongoose untuk produk:

    
    const mongoose = require('mongoose');
    
    const productSchema = new mongoose.Schema({
      name: {
        type: String,
        required: true
      },
      description: {
        type: String,
        required: true
      },
      price: {
        type: Number,
        required: true
      }
    });
    
    module.exports = mongoose.model('Product', productSchema);
          
  6. Buat Rute (routes/productRoutes.js): Buat rute untuk mengelola produk:

    
    const express = require('express');
    const router = express.Router();
    const Product = require('../models/Product');
    
    // Mendapatkan semua produk
    router.get('/', async (req, res) => {
      try {
        const products = await Product.find();
        res.json(products);
      } catch (err) {
        res.status(500).json({ message: err.message });
      }
    });
    
    // Membuat produk baru
    router.post('/', async (req, res) => {
      const product = new Product({
        name: req.body.name,
        description: req.body.description,
        price: req.body.price
      });
    
      try {
        const newProduct = await product.save();
        res.status(201).json(newProduct);
      } catch (err) {
        res.status(400).json({ message: err.message });
      }
    });
    
    module.exports = router;
          
  7. Buat Server (server.js): Buat file `server.js` untuk mengatur server Express:

    
    const express = require('express');
    const mongoose = require('mongoose');
    const dotenv = require('dotenv');
    const productRoutes = require('./routes/productRoutes');
    
    dotenv.config();
    
    const app = express();
    const port = process.env.PORT || 3000;
    
    app.use(express.json());
    
    mongoose.connect(process.env.DATABASE_URL, {
      useNewUrlParser: true,
      useUnifiedTopology: true
    })
    .then(() => console.log('Terhubung ke database!'))
    .catch(err => console.error('Gagal terhubung ke database:', err));
    
    app.use('/products', productRoutes);
    
    app.listen(port, () => {
      console.log(`Server berjalan di port ${port}`);
    });
          
  8. File .env: Buat file `.env` di direktori root proyek Anda dan tambahkan koneksi database MongoDB Anda. Penting untuk tidak melakukan commit file `.env` ke repository Anda karena berisi informasi sensitif. Tambahkan `.env` ke file `.gitignore` Anda.

    
    DATABASE_URL=mongodb+srv://:@.mongodb.net/?retryWrites=true&w=majority
          

    Pastikan untuk mengganti ``, ``, ``, dan `` dengan detail koneksi MongoDB Anda yang sebenarnya.

  9. Update package.json: tambahkan script `start` agar aplikasi dapat dijalankan oleh Fly.io.

    
    {
      "name": "mongoose-flyio",
      "version": "1.0.0",
      "description": "",
      "main": "server.js",
      "scripts": {
        "start": "node server.js",
        "test": "echo \"Error: no test specified\" && exit 1"
      },
      "keywords": [],
      "author": "",
      "license": "ISC",
      "dependencies": {
        "dotenv": "^16.0.0",
        "express": "^4.18.0",
        "mongoose": "^6.0.0"
      }
    }
          

4. Membuat Akun Fly.io dan Menginstal Flyctl: Langkah Awal

Jika Anda belum melakukannya, Anda perlu membuat akun Fly.io dan menginstal Flyctl.

  1. Buat Akun Fly.io: Kunjungi https://fly.io/ dan daftar untuk sebuah akun. Anda akan diminta untuk memasukkan kartu kredit untuk memverifikasi akun Anda, tetapi Fly.io menawarkan tingkat gratis yang cukup untuk banyak aplikasi kecil.
  2. Instal Flyctl: Flyctl adalah antarmuka baris perintah untuk Fly.io. Anda dapat mengunduhnya dan menginstalnya dengan mengikuti petunjuk di dokumentasi Fly.io: https://fly.io/docs/flyctl/. Instruksi khusus untuk setiap sistem operasi tercantum di tautan ini.
  3. Otentikasi dengan Fly.io: Setelah Flyctl terinstal, Anda perlu mengautentikasi dengan akun Fly.io Anda. Buka terminal Anda dan jalankan perintah berikut:

    
    flyctl auth login
          

    Ini akan membuka browser Anda dan meminta Anda untuk masuk ke akun Fly.io Anda. Setelah Anda masuk, Flyctl akan dikonfigurasi untuk berinteraksi dengan akun Anda.

5. Mengonfigurasi Aplikasi Anda untuk Fly.io: fly.toml dan Dockerfile

Untuk menyebarkan aplikasi Anda ke Fly.io, Anda perlu membuat file `fly.toml` dan `Dockerfile`.

  1. Buat File fly.toml: File `fly.toml` menentukan konfigurasi untuk aplikasi Fly.io Anda. Anda dapat membuatnya secara manual, atau Anda dapat menggunakan perintah `flyctl launch`. Dari direktori proyek Anda, jalankan:

    
    flyctl launch
          

    Flyctl akan menanyakan beberapa pertanyaan tentang aplikasi Anda, seperti nama aplikasi Anda, wilayah yang ingin Anda sebarkan, dan apakah Anda ingin menyiapkan database. Pilih opsi yang sesuai untuk aplikasi Anda. Setelah selesai, Flyctl akan membuat file `fly.toml` di direktori proyek Anda.

    Contoh `fly.toml`:

    
    app = "mongoose-flyio-app"  # Ganti dengan nama aplikasi Anda
    primary_region = "iad"  # Ganti dengan wilayah pilihan Anda
    
    [build]
      dockerfile = "Dockerfile"
    
    [http_service]
      internal_port = 3000
      force_https = true
      auto_stop_machines = true
      auto_start_machines = true
      min_machines_running = 1
      [http_service.concurrency]
        type = "connections"
        hard_limit = 1000
        soft_limit = 500
          
  2. Buat File Dockerfile: Dockerfile adalah teks file yang berisi semua perintah, dalam urutan, yang dapat dipanggil pengguna pada baris perintah untuk merakit sebuah gambar. Buat file bernama `Dockerfile` di direktori root proyek Anda.

    Contoh `Dockerfile`:

    
    FROM node:18-alpine
    
    WORKDIR /app
    
    COPY package*.json ./
    
    RUN npm install
    
    COPY . .
    
    EXPOSE 3000
    
    CMD ["npm", "start"]
          

    Penjelasan:

    • `FROM node:18-alpine`: Menggunakan gambar Node.js berbasis Alpine sebagai gambar dasar. Alpine adalah distribusi Linux yang ringan, sehingga gambar Docker Anda akan kecil.
    • `WORKDIR /app`: Mengatur direktori kerja ke `/app` di dalam wadah.
    • `COPY package*.json ./`: Menyalin file `package.json` dan `package-lock.json` (jika ada) ke direktori kerja.
    • `RUN npm install`: Menginstal dependensi Node.js.
    • `COPY . .`: Menyalin semua file dari direktori proyek Anda ke direktori kerja di dalam wadah.
    • `EXPOSE 3000`: Membuka port 3000.
    • `CMD [“npm”, “start”]`: Menjalankan perintah `npm start` saat wadah dimulai.

6. Menyediakan Database MongoDB: Fly.io Volumes atau Atlas

Anda memiliki dua opsi utama untuk menyediakan database MongoDB untuk aplikasi Anda:

  1. Fly.io Volumes: Anda dapat menggunakan Fly.io Volumes untuk membuat volume penyimpanan persisten untuk database MongoDB Anda. Opsi ini cocok untuk aplikasi yang lebih kecil atau lingkungan pengembangan.
  2. MongoDB Atlas: MongoDB Atlas adalah layanan database cloud yang dikelola sepenuhnya. Ini menyediakan solusi yang terukur dan andal untuk hosting database MongoDB Anda. Opsi ini direkomendasikan untuk aplikasi produksi.

Opsi 1: Fly.io Volumes

Untuk membuat volume Fly.io, jalankan perintah berikut:


flyctl volumes create mongodb_data --size 10 --region iad
  
  • `mongodb_data`: Nama volume.
  • `–size 10`: Ukuran volume dalam GB (sesuaikan sesuai kebutuhan).
  • `–region iad`: Wilayah untuk membuat volume. Pastikan ini sama dengan wilayah aplikasi Anda.

Selanjutnya, Anda perlu memodifikasi file `fly.toml` Anda untuk memasang volume ini ke aplikasi Anda. Tambahkan bagian berikut ke `fly.toml` Anda:


[mounts]
  source = "mongodb_data"
  destination = "/data/db"
  

Ini memasang volume `mongodb_data` ke direktori `/data/db` di dalam wadah Anda. Anda perlu memastikan bahwa MongoDB dikonfigurasi untuk menggunakan direktori ini untuk menyimpan datanya.

Anda juga perlu membuat file Dockerfile untuk menjalankan mongoDB, contoh:


FROM node:18-alpine AS builder

WORKDIR /app

COPY package*.json ./

RUN npm install

COPY . .

RUN npm run build

FROM mongo:latest

COPY --from=builder /app/dist /app/dist

EXPOSE 27017

CMD ["mongod", "--dbpath", "/data/db"]
  

*Penting: Pendekatan ini lebih rumit dan memerlukan penanganan yang cermat untuk database MongoDB. Opsi ini disarankan untuk keperluan pengujian dan pengembangan saja.*

Opsi 2: MongoDB Atlas (Disarankan)

MongoDB Atlas adalah solusi yang lebih andal dan terukur untuk hosting database MongoDB Anda.

  1. Buat Akun MongoDB Atlas: Kunjungi https://www.mongodb.com/atlas/database dan daftar untuk sebuah akun.
  2. Buat Klaster: Ikuti petunjuk untuk membuat klaster MongoDB Atlas. Anda dapat memilih tingkat gratis untuk mulai, tetapi untuk aplikasi produksi, Anda harus mempertimbangkan tingkat berbayar.
  3. Konfigurasi Akses Jaringan: Konfigurasi akses jaringan untuk memungkinkan aplikasi Fly.io Anda terhubung ke klaster Atlas Anda. Anda dapat melakukan ini dengan menambahkan alamat IP aplikasi Fly.io Anda ke daftar putih Atlas atau dengan mengizinkan akses dari semua alamat IP (tidak disarankan untuk produksi).
  4. Dapatkan String Koneksi: Dapatkan string koneksi untuk klaster Atlas Anda. Ini akan terlihat seperti ini:

    
    mongodb+srv://:@.mongodb.net/?retryWrites=true&w=majority
          

    Simpan string koneksi ini, karena Anda akan membutuhkannya nanti.

7. Menerapkan Aplikasi Anda ke Fly.io: Proses Langkah demi Langkah

Sekarang setelah Anda mengonfigurasi aplikasi dan database Anda, Anda siap untuk menerapkannya ke Fly.io.

  1. Terapkan Aplikasi Anda: Dari direktori proyek Anda, jalankan perintah berikut:

    
    flyctl deploy
          

    Ini akan membangun gambar Docker aplikasi Anda dan menerapkannya ke Fly.io. Proses ini mungkin memakan waktu beberapa menit, tergantung pada ukuran aplikasi Anda.

  2. Periksa Log: Setelah penerapan selesai, Anda dapat memeriksa log aplikasi Anda untuk melihat apakah ada kesalahan. Gunakan perintah berikut:

    
    flyctl logs
          

    Ini akan menampilkan log aplikasi Anda secara real-time.

8. Mengatur Variabel Lingkungan: Koneksi Database dan Kunci Rahasia

Penting untuk mengatur variabel lingkungan untuk aplikasi Anda, terutama string koneksi database dan kunci rahasia lainnya. Jangan memasukkan nilai-nilai ini langsung ke dalam kode Anda, karena itu tidak aman dan sulit untuk dikelola.

  1. Atur Variabel Lingkungan dengan Flyctl: Gunakan perintah `flyctl secrets set` untuk mengatur variabel lingkungan untuk aplikasi Anda. Misalnya, untuk mengatur variabel `DATABASE_URL`, jalankan:

    
    flyctl secrets set DATABASE_URL="mongodb+srv://:@.mongodb.net/?retryWrites=true&w=majority"
          

    Ganti ``, ``, ``, dan `` dengan detail koneksi MongoDB Atlas Anda yang sebenarnya.

    Untuk mengatur kunci rahasia lainnya, seperti kunci API, gunakan perintah yang sama:

    
    flyctl secrets set API_KEY="your_secret_api_key"
          
  2. Akses Variabel Lingkungan dalam Kode Anda: Dalam kode Anda, Anda dapat mengakses variabel lingkungan menggunakan objek `process.env`. Misalnya, untuk mengakses variabel `DATABASE_URL`, gunakan:

    
    const databaseUrl = process.env.DATABASE_URL;
          

    Pastikan Anda memiliki pustaka `dotenv` terinstal dan dikonfigurasi dengan benar.

9. Memantau dan Menskalakan Aplikasi Anda: Observabilitas dan Kinerja

Setelah aplikasi Anda diterapkan, penting untuk memantau kinerjanya dan menskalakannya sesuai kebutuhan. Fly.io menyediakan beberapa alat dan fitur untuk membantu Anda dengan ini.

  1. Pantau Aplikasi Anda: Gunakan dasbor Fly.io untuk memantau kesehatan dan kinerja aplikasi Anda. Anda dapat melihat metrik seperti penggunaan CPU, penggunaan memori, dan latensi jaringan. Anda juga dapat melihat log aplikasi Anda dan mengatur pemberitahuan untuk peristiwa penting.
  2. Skala Aplikasi Anda: Jika aplikasi Anda mengalami lalu lintas yang tinggi, Anda mungkin perlu menskalakannya untuk menangani beban. Fly.io memungkinkan Anda untuk menskalakan aplikasi Anda dengan menambahkan lebih banyak mesin. Anda dapat melakukan ini menggunakan perintah `flyctl scale count`:

    
    flyctl scale count 2
          

    Ini akan menskalakan aplikasi Anda ke 2 mesin.

    Anda juga dapat mengonfigurasi penyekalaan otomatis berdasarkan metrik tertentu. Lihat dokumentasi Fly.io untuk informasi lebih lanjut.

  3. Gunakan Alat Pemantauan: Pertimbangkan untuk menggunakan alat pemantauan pihak ketiga seperti Prometheus, Grafana, atau New Relic untuk mendapatkan wawasan yang lebih mendalam tentang kinerja aplikasi Anda. Alat-alat ini dapat membantu Anda mengidentifikasi kemacetan dan mengoptimalkan aplikasi Anda untuk kinerja.

10. Praktik Terbaik dan Tips Pemecahan Masalah: Menjaga Aplikasi Anda Tetap Sehat

Berikut adalah beberapa praktik terbaik dan tips pemecahan masalah untuk membantu Anda menjaga aplikasi Mongoose-powered Anda di Fly.io tetap sehat:

  1. Gunakan Docker: Docker memastikan bahwa aplikasi Anda berjalan secara konsisten di semua lingkungan.
  2. Gunakan Variabel Lingkungan: Jangan memasukkan informasi sensitif langsung ke dalam kode Anda. Gunakan variabel lingkungan.
  3. Pantau Aplikasi Anda: Pantau kesehatan dan kinerja aplikasi Anda secara teratur.
  4. Skala Sesuai Kebutuhan: Skala aplikasi Anda untuk menangani lalu lintas yang tinggi.
  5. Log dengan Benar: Log informasi yang cukup untuk mendiagnosis masalah, tetapi jangan mencatat informasi sensitif.
  6. Tangani Kesalahan dengan Benar: Tangani kesalahan dengan benar dan berikan pesan kesalahan yang bermakna kepada pengguna.
  7. Gunakan Versi Terbaru: Gunakan versi terbaru dari Node.js, Mongoose, dan Flyctl.
  8. Jaga Dependensi Anda Tetap Up-to-Date: Perbarui dependensi Anda secara teratur untuk memperbaiki kerentanan keamanan dan meningkatkan kinerja.
  9. Uji Aplikasi Anda: Uji aplikasi Anda secara menyeluruh sebelum menerapkannya ke produksi.
  10. Gunakan CDN: Gunakan CDN untuk menyajikan aset statis seperti gambar dan stylesheet. Ini dapat meningkatkan kinerja aplikasi Anda.
  11. Pemecahan Masalah:

    • Aplikasi Tidak Mulai: Periksa log aplikasi Anda untuk mencari kesalahan. Pastikan bahwa semua dependensi Anda terinstal dan bahwa variabel lingkungan Anda diatur dengan benar.
    • Koneksi Database Gagal: Pastikan bahwa string koneksi database Anda benar dan bahwa akses jaringan dikonfigurasi dengan benar.
    • Masalah Kinerja: Gunakan alat pemantauan untuk mengidentifikasi kemacetan. Pertimbangkan untuk menskalakan aplikasi Anda atau mengoptimalkan kode Anda.

11. Kesimpulan: Langkah Selanjutnya dan Sumber Daya Tambahan

Selamat! Anda telah berhasil menyebarkan aplikasi Mongoose-powered Anda ke Fly.io. Anda sekarang dapat menikmati manfaat dari platform yang terukur, andal, dan hemat biaya untuk hosting aplikasi Node.js Anda.

Langkah Selanjutnya:

  • Jelajahi Fitur Fly.io Lanjutan: Fly.io menawarkan berbagai fitur lanjutan, seperti penyebaran nol waktu henti, penyekalaan otomatis, dan jaringan pribadi. Luangkan waktu untuk menjelajahi fitur-fitur ini dan lihat bagaimana mereka dapat bermanfaat bagi aplikasi Anda.
  • Optimalkan Aplikasi Anda: Terus optimalkan aplikasi Anda untuk kinerja dan skalabilitas. Gunakan alat pemantauan untuk mengidentifikasi kemacetan dan menerapkan perbaikan.
  • Berkontribusi pada Komunitas: Bagikan pengalaman Anda dengan Fly.io dan Mongoose dengan komunitas. Tulis blog posting, berpartisipasi dalam forum, dan bantu pengembang lain untuk memulai.

Sumber Daya Tambahan:

Semoga panduan ini membantu Anda dalam menyebarkan aplikasi Mongoose ke Fly.io. Selamat berkoding!

“`

omcoding

Leave a Reply

Your email address will not be published. Required fields are marked *