SSD Nodes Learn 🎉 VPS mulai $5.50/bln
Panduan Matt ConnorOleh Matt Connor · Diperbarui 2026-08-13

Perbandingan Alternatif Calendly yang Di-host Sendiri

Bandingkan Cal.com, Easy!Appointments, Rallly, dan DayOtter di VPS Anda berdasarkan sinkronisasi kalender dua arah dan kemampuan mengirim email keluar.

Jawaban singkat

Alternatif Calendly yang di-host sendiri harus melakukan satu hal yang tidak pernah dilakukan tool internal pada VPS Anda: melayani publik. Halaman pemesanan adalah produknya. Halaman ini memerlukan nama domain dan TLS (transport layer security) yang valid sejak hari pertama, serta harus dapat mengirim email kepada orang yang belum pernah mendengar tentang server Anda.

Empat proyek mencakup pilihan yang realistis. Cal.com paling mendekati Calendly dan menjadi pilihan default untuk konsultan yang bekerja sendiri. Easy!Appointments adalah pilihan ringan berbasis PHP dan MySQL yang dapat berjalan baik pada VPS 1 GB. Rallly adalah tool jajak pendapat grup dan sama sekali tidak memiliki halaman pemesanan. DayOtter adalah pendatang terbaru, yaitu platform penjadwalan berlisensi AGPLv3 dengan asisten konfirmasi terlebih dahulu di depannya.

Dua pertanyaan menentukan opsi yang benar-benar dapat Anda jalankan. Apakah aplikasi tersebut dapat melakukan sinkronisasi dua arah dengan kalender yang selama ini Anda gunakan? Dan apakah aplikasi tersebut dapat mengirim email? Pertanyaan kedua adalah titik kegagalan yang paling sering terjadi secara diam-diam pada setup pemesanan yang di-host sendiri, sehingga dibahas terlebih dahulu.

Surat keluar adalah bagian yang gagal

Konfirmasi pemesanan masuk ke kotak masuk orang yang tidak dikenal. Itulah email transaksional yang masuk ke Gmail atau Microsoft 365. Penerima tersebut menilai Anda berdasarkan alamat IP pengirim dan catatan DNS Anda.

Mengirim langsung dari VPS hampir tidak pernah berhasil. Sebagian besar provider memblokir port TCP outbound 25 pada akun baru, sehingga koneksi menggantung lalu mengalami timeout. Meskipun port 25 terbuka, alamat VPS yang masih baru belum memiliki riwayat pengiriman. Penerima besar menganggap alamat dari rentang hosting yang tidak dikenal sebagai sesuatu yang mencurigakan. Pemesanan tercatat di database, halaman menampilkan status terkonfirmasi, tetapi tidak ada yang menerima email. Tidak ada yang tampak rusak dari sisi server. Karena itu, masalah ini biasanya baru ditemukan beberapa minggu kemudian oleh klien yang tidak pernah datang.

Gunakan relay. Provider email transaksional apa pun dapat digunakan. Aplikasi hanya memerlukan hostname, port, user, dan password. Periksa apakah port dapat dijangkau sebelum mengubah konfigurasi aplikasi:

nc -vz -w 5 "$SMTP_HOST" 587

Baris succeeded berarti jalurnya terbuka. Koneksi yang menggantung atau Connection refused berarti port diblokir pada tingkat jaringan. Mengubah .env tidak akan memperbaikinya. Relay menggunakan port 587 atau 465 karena port 25 sering diblokir.

Setiap project menggunakan relay dengan cara masing-masing. Cal.com membaca EMAIL_FROM, EMAIL_SERVER_HOST, EMAIL_SERVER_PORT, EMAIL_SERVER_USER, dan EMAIL_SERVER_PASSWORD. Cal.com juga menerima RESEND_API_KEY sebagai alternatif. Perhatikan pengaturan tersebut. .env.example yang disertakan mengarahkan EMAIL_SERVER_HOST ke localhost pada port 1025. Itu adalah mailbox untuk pengembangan lokal. Jika nilai default dibiarkan, aplikasi mengirim email ke tempat yang tidak ada tanpa menampilkan error. Rallly menggunakan SMTP_HOST, SMTP_PORT, SMTP_USER, dan SMTP_PWD. DayOtter menggunakan pengaturan SMTP atau key Resend. Easy!Appointments mengirim notifikasinya dari aplikasi. Arahkan aplikasi tersebut ke relay yang sama melalui halaman pengaturannya sebelum menerima pemesanan sungguhan.

Berikutnya, publikasikan catatan DNS yang diberikan oleh relay Anda. Catatan SPF (sender policy framework) menyatakan server mana yang boleh mengirim untuk domain Anda. Key DKIM (domainkeys identified mail) menandatangani setiap pesan agar penerima dapat membuktikan bahwa pesan tersebut tidak diubah. Tambahkan kebijakan DMARC (domain-based message authentication, reporting and conformance) setelah keduanya lolos pemeriksaan. Kirim pemesanan uji coba ke alamat sungguhan pada provider besar, buka header pesan, lalu pastikan baris autentikasinya menunjukkan pass. Halaman pemesanan yang tidak dapat mengirim email lebih buruk daripada tidak memiliki halaman pemesanan, karena kegagalannya tidak terlihat.

Backend kalender mana yang benar-benar mendukung sinkronisasi dua arah

Sinkronisasi memiliki dua arah, dan keduanya dapat gagal secara terpisah. Arah baca menunjukkan ketersediaan: aplikasi harus dapat melihat blok waktu sibuk yang sudah ada, atau aplikasi akan memberikan slot yang sebenarnya sudah Anda gunakan. Arah tulis adalah proses pemesanan: event yang sudah dikonfirmasi harus muncul di kalender yang benar-benar Anda gunakan, bukan hanya di dalam alat pemesanan.

Google Calendar dan Microsoft 365 mendukung kedua arah tersebut, dengan satu syarat pada instalasi self-hosted. Anda harus membuat klien OAuth (otorisasi terbuka) sendiri karena client ID milik produk hosted tidak tersedia di source code. Untuk Cal.com, konfigurasi tersebut berada di GOOGLE_API_CREDENTIALS dalam .env, yang berisi JSON yang Anda unduh dari konsol Google Cloud. DayOtter menggunakan kredensial OAuth Google dan Microsoft dengan cara yang sama.

Ada dua hal yang dapat menyebabkan masalah di sini, dan keduanya perlu diketahui sebelum Anda mulai. Pertama, redirect URI yang didaftarkan harus sama persis dengan URL publik Anda, termasuk scheme dan path terakhir jika ada. Jika tidak, Google akan menghentikan koneksi dengan redirect_uri_mismatch pada layar persetujuan. Kedua, project Google yang masih menggunakan status publikasi Testing akan menerbitkan refresh token yang kedaluwarsa setelah tujuh hari. Sinkronisasi akan berfungsi selama seminggu, lalu berhenti. Log aplikasi akan menampilkan invalid_grant pada proses refresh berikutnya. Ubah layar persetujuan menjadi In production, atau lakukan koneksi ulang secara manual setiap hari Senin.

CalDAV (ekstensi kalender untuk WebDAV) adalah opsi terbuka, tetapi dukungannya lebih terbatas. Cal.com menyediakan aplikasi CalDAV yang masih berstatus beta dan telah diverifikasi pada server seperti Baikal, Radicale, Nextcloud, dan Kerio Connect. Apple iCloud dapat digunakan melalui aplikasi yang sama, tetapi memerlukan app-specific password, bukan password Apple ID Anda. DayOtter mencantumkan Apple melalui CalDAV bersama Google dan Microsoft 365.

Feed ICS bukan sinkronisasi. URL .ics yang dilanggan bersifat read-only secara desain. URL tersebut dapat memblokir waktu pada halaman pemesanan, tetapi tidak pernah dapat menerima pemesanan. Jika sebuah alat hanya menyediakan ICS untuk kalender Anda, berarti Anda hanya memiliki separuh mekanisme dan tetap harus menyalin event secara manual.

Easy!Appointments hanya mendukung sinkronisasi dengan Google Calendar. Rallly sama sekali tidak membaca ketersediaan. Aplikasi tersebut mengumpulkan suara untuk sekumpulan tanggal yang diusulkan. Ini adalah alat yang tepat untuk pertanyaan "kapan kita berenam dapat bertemu" dan alat yang tidak tepat untuk "pesan 30 menit dengan saya".

Halaman pemesanan bersifat publik, jadi TLS harus didahulukan

Sebagian besar layanan yang di-host sendiri bersifat privat. Wiki, board, dan dashboard dapat ditempatkan di balik VPN atau login SSO sehingga tidak pernah diakses dari Internet publik. Tautan pemesanan tidak dapat diperlakukan demikian. Siapa pun yang menerima tautan tersebut harus dapat membukanya. Hal ini mengubah konfigurasi dalam tiga hal konkret.

Anda memerlukan nama domain dengan A record yang diarahkan ke VPS sebelum memasang apa pun. Anda memerlukan sertifikat sejak hari pertama karena browser menandai formulir HTTP biasa sebagai tidak aman, sementara klien Anda mengetikkan nama dan alamat emailnya di formulir tersebut. Anda juga harus menetapkan URL publik aplikasi dengan benar di konfigurasinya. Nilai tersebut disertakan dalam tautan pada email keluar dan URI pengalihan OAuth. Tetapkan NEXT_PUBLIC_WEBAPP_URL di Cal.com, DOMAIN di Rallly, BASE_URL di Easy!Appointments, atau DAYOTTER_DOMAIN saat instalasi, lalu tetapkan nilainya ke alamat https:// yang benar-benar akan Anda gunakan.

Rallly dan DayOtter menangani TLS untuk Anda. Stack bawaan Rallly menyertakan Traefik dan menerbitkan sertifikat Let's Encrypt menggunakan alamat di ACME_EMAIL. Installer DayOtter menjalankan Caddy dengan HTTPS otomatis. Cal.com dan Easy!Appointments tidak menyediakan fitur tersebut. Karena itu, tempatkan nginx di depannya dan terbitkan sertifikat sendiri, dengan cara yang sama seperti saat menggunakan sertifikat Let's Encrypt pada nginx dengan Certbot. Bind container aplikasi ke 127.0.0.1 agar satu-satunya akses masuk melalui proxy yang Anda kendalikan. Jika server yang sama sudah menjalankan alternatif Trello yang di-host sendiri untuk board internal Anda, tetap letakkan layanan tersebut di balik autentikasi yang sudah ada dan berikan server block publik hanya untuk host pemesanan.

Cal.com di VPS Anda

Konfigurasi Docker berada di repositori tersendiri, dan image-nya sudah dibuat sebelumnya di Docker Hub. Jadi, Anda cukup melakukan pull, bukan build.

git clone --recursive https://github.com/calcom/cal.diy.git
cd cal.diy
cp .env.example .env
openssl rand -base64 32
openssl rand -base64 24
docker compose pull
docker compose up -d

Masukkan nilai acak pertama ke NEXTAUTH_SECRET dan nilai acak kedua ke CALENDSO_ENCRYPTION_KEY. Keduanya wajib diisi. Atur DATABASE_URL dan arahkan NEXT_PUBLIC_WEBAPP_URL ke alamat publik Anda. Stack bawaan ini terdiri atas aplikasi web, PostgreSQL, dan Prisma Studio. Dokumentasi menyediakan docker compose up -d calcom untuk menjalankan aplikasi saja menggunakan database yang Anda host di tempat lain. Gunakan opsi tersebut setelah instalasi stabil.

Lakukan pull image. Jangan melakukan build di VPS. Petunjuk resmi proyek meminta Anda mengekspor NODE_OPTIONS="--max-old-space-size=16384" saat melakukan build dari source. Nilai tersebut menggunakan heap sebesar 16 GB hanya untuk Node. Pada perangkat keras ARM, tambahkan suffix -arm ke tag image. Proyek ini tidak memublikasikan nilai minimum untuk menjalankan image yang sudah dibuat sebelumnya. Jadi, gunakan 2 GB untuk aplikasi dan PostgreSQL sebagai perkiraan operasional, bukan sebagai nilai yang didokumentasikan. Pantau penggunaan memori selama minggu pertama.

Periksa apakah layanan berhasil berjalan:

docker compose ps
docker compose logs -f calcom
curl -sI https://cal.example.com | head -n 1

Perintah curl tersebut seharusnya mencetak HTTP/2 200. Jika nginx mengembalikan 502 Bad Gateway saat container terlihat sedang berjalan, biasanya boot pertama masih menerapkan migrasi database. Tunggu beberapa menit dan baca log sebelum menyimpulkan bahwa layanan rusak. Webhook Cal.com dipicu setiap kali pemesanan dikonfirmasi. Jadi, pemesanan dapat menjalankan otomatisasi yang sudah Anda gunakan, misalnya instance n8n yang dapat dijangkau melalui HTTPS di VPS Anda.

Komponen intinya menggunakan AGPLv3. Sebagian fitur disediakan dalam direktori enterprise dengan lisensi komersial terpisah. Baca lisensi tersebut sebelum membangun proses bisnis berbayar yang menggunakan fitur tim.

Easy!Appointments pada server 1 GB

Persyaratannya adalah Apache atau Nginx, PHP 8.2 atau yang lebih baru, dan MySQL. Tersedia image resmi di alextselegidis/easyappointments.

Perhatikan satu hal terlebih dahulu. docker-compose.yml di repository adalah lingkungan pengembangan. Anda diharuskan membuka shell di dalam container lalu menjalankan npm install && composer install && npm start. Itu bukan deployment. Gunakan image yang dipublikasikan sebagai gantinya:

services:
  easyappointments:
    image: alextselegidis/easyappointments  # pin the current tag from Docker Hub
    environment:
      - BASE_URL=https://book.example.com
      - DB_HOST=mysql
      - DB_NAME=easyappointments
      - DB_USERNAME=easyapp
      - DB_PASSWORD=change-me
    ports:
      - '127.0.0.1:8080:80'
    depends_on:
      - mysql
  mysql:
    image: mysql:8.0
    environment:
      - MYSQL_ROOT_PASSWORD=change-me-too
      - MYSQL_DATABASE=easyappointments
      - MYSQL_USER=easyapp
      - MYSQL_PASSWORD=change-me
    volumes:
      - ./mysql:/var/lib/mysql

BASE_URL harus berupa alamat HTTPS publik. Jika salah, tautan pemesanan di dalam email konfirmasi akan mengarah ke host yang tidak dapat dijangkau klien Anda. Image ini menyediakan HTTP biasa pada port 80 tanpa sertifikat sendiri. Karena itu, port tersebut di-bind ke 127.0.0.1 dan nginx melakukan terminasi TLS di depannya. Jika sintaks compose masih baru bagi Anda, mulai dengan Dasar-dasar Docker Compose pada VPS, lalu kembali ke bagian ini.

Ini adalah opsi paling ringan di sini. Dua container, yaitu aplikasi PHP dan MySQL, dapat berjalan dengan nyaman pada VPS 1 GB. Konsekuensinya adalah jangkauan yang terbatas: Google Calendar merupakan satu-satunya backend kalender, dan antarmukanya berupa panel admin tradisional, bukan alur pemesanan modern. Jika kalender Anda menggunakan Microsoft 365, Fastmail, atau Nextcloud, opsi ini tidak sesuai sejak awal.

Rallly untuk jajak pendapat grup

Rallly menjawab kebutuhan yang berbeda. Aplikasi ini tidak memublikasikan ketersediaan waktu Anda. Aplikasi ini menampilkan beberapa waktu kandidat kepada sekelompok orang dan mengumpulkan suara. Fitur tersebut cocok untuk rapat dewan, tetapi tidak berguna untuk tautan pemesanan klien.

curl -fsSL https://get.rallly.co | bash

Baca setiap script sebelum menyalurkannya ke shell. Ganti bash dengan less, baca fungsinya, lalu jalankan. Jalur manual melakukan pekerjaan yang sama dalam beberapa langkah yang dapat Anda periksa:

git clone https://github.com/lukevella/rallly-selfhosted.git
cd rallly-selfhosted
./rallly.sh setup
./rallly.sh start

Persyaratan yang didokumentasikan adalah RAM minimal 2 GB, Docker 19.03 atau yang lebih baru dengan Compose v2, port 80 dan 443 yang tidak digunakan, serta domain yang diarahkan ke server. Stack bawaan terdiri atas Traefik untuk HTTPS, aplikasi web, PostgreSQL, dan Garage untuk object storage yang kompatibel dengan S3. Atur DOMAIN, SECRET_PASSWORD dengan panjang minimal 32 karakter, SUPPORT_EMAIL, dan INITIAL_ADMIN_EMAIL. Jika Anda sudah menjalankan reverse proxy, atur PROXY_MODE=external dan WEB_PORT agar Traefik tidak mengganggu. Jika Anda sudah menjalankan object store self-hosted yang kompatibel dengan S3 menggunakan MinIO, arahkan variabel S3_* ke sana dan hapus container Garage.

SMTP wajib digunakan di sini karena proses sign-in memakai magic link. Tanpa relay yang berfungsi, tidak ada yang dapat login, termasuk akun admin yang baru saja Anda buat. Ini adalah bentuk kegagalan email yang lebih baik: proses berhenti sebelum akses diberikan, bukan menyebabkan pemesanan klien hilang tiga minggu kemudian.

DayOtter, pendatang terbaru

DayOtter adalah platform penjadwalan berlisensi AGPLv3 dengan asisten terintegrasi. Instalasi produksi cukup dilakukan dengan satu perintah:

curl -fsSL https://raw.githubusercontent.com/Dayotter/dayotter/main/deploy/install.sh \
  | sudo DAYOTTER_DOMAIN=cal.example.com bash

Baca perintah tersebut sebelum menjalankannya, seperti pada bagian sebelumnya. Installer menyiapkan Docker, membuat secret, dan menjalankan seluruh stack: aplikasi web Next.js, background worker yang menangani pengingat, sinkronisasi kalender, dan webhook, PostgreSQL, Redis, serta Caddy dengan HTTPS otomatis.

Dukungan kalendernya paling luas di antara keempat platform. Layanan yang didukung mencakup Google, Microsoft 365, Apple melalui CalDAV, dan feed ICS, dengan catatan tentang ICS yang dijelaskan di atas. Semua integrasi lain bersifat opsional melalui environment variable, termasuk SMTP atau Resend untuk email, ANTHROPIC_API_KEY untuk asisten, Twilio untuk SMS, dan Stripe untuk pembayaran. Asisten menggunakan mekanisme konfirmasi terlebih dahulu: asisten mengusulkan tindakan, Anda menyetujuinya, dan tidak ada apa pun yang masuk ke kalender tanpa persetujuan eksplisit. Jika API key dibiarkan kosong, bagian produk tersebut tidak akan berjalan.

Lisensinya jelas bagi pengguna yang melakukan self-hosting. Komponen inti menggunakan AGPLv3, sedangkan direktori ee/ berisi lisensi komersial khusus cloud yang tetap tidak aktif kecuali DAYOTTER_CLOUD=1 disetel. Dengan demikian, fitur tim yang pada paket hosted ditagihkan sebesar $9 per seat setiap bulan, per Agustus 2026, dapat digunakan di server Anda sendiri.

Stack ini juga paling berat dan proyeknya paling baru di antara semuanya. Jalankan di samping link pemesanan Anda yang sudah ada selama dua minggu, terima pemesanan nyata melalui keduanya, dan baca log worker sebelum memindahkan klien Anda ke platform ini.

Biaya sebenarnya setiap stack

Jumlah container adalah indikator yang paling jujur untuk memperkirakan beban stack pada VPS kecil, karena setiap service memiliki kebutuhan memori minimumnya sendiri. Jumlah berikut berasal dari Docker stack yang dipublikasikan oleh masing-masing proyek, berdasarkan pemeriksaan pada Agustus 2026.

ChartServices in each project's documented Docker stack
The data behind this chart
[
  {
    "tool": "Easy!Appointments",
    "containers": 2,
    "database": "MySQL"
  },
  {
    "tool": "Cal.com",
    "containers": 3,
    "database": "PostgreSQL"
  },
  {
    "tool": "Rallly",
    "containers": 4,
    "database": "PostgreSQL"
  },
  {
    "tool": "DayOtter",
    "containers": 5,
    "database": "PostgreSQL and Redis"
  }
]

Mudah! Easy!Appointments memerlukan 2 container dan dapat berjalan pada 1 GB. Stack bawaan Rallly berisi 4 container, dan dokumentasinya meminta 2 GB. Installer DayOtter menjalankan 5 container, sehingga aplikasi ini memerlukan VPS terbesar dalam 4 pilihan di sini. Cal.com dan DayOtter sama sekali tidak mencantumkan angka minimum memori, jadi saya menggunakan 2 GB sebagai titik awal untuk keduanya, bukan sebagai angka yang didukung secara resmi.

Dua jumlah tersebut dapat berkurang jika Anda sudah menjalankan infrastruktur terkait. Container Traefik dan Garage milik Rallly tidak diperlukan jika Anda mengarahkannya ke proxy dan object storage milik sendiri. Prisma Studio milik Cal.com adalah alat pengembangan yang sebaiknya tidak dibiarkan berjalan pada server publik.

Alternatif Calendly self-hosted mana yang sebaiknya dipilih

Konsultan independen sebaiknya menggunakan Cal.com. Hanya proyek ini yang menggabungkan halaman pemesanan yang mudah dikenali, image siap pakai sehingga VPS Anda tidak perlu melakukan build Node, serta dukungan CalDAV bagi pengguna yang tidak menyimpan kalender di Google atau Microsoft. Satu database PostgreSQL dan satu container aplikasi merupakan beban pemeliharaan yang dapat Anda tangani selama bertahun-tahun. Sediakan waktu satu sore untuk menyiapkan OAuth client dan mail relay. Perhatikan bahwa aplikasi CalDAV masih dalam tahap beta, jadi uji satu pemesanan nyata dari awal hingga akhir sebelum membagikan tautannya.

Tim kecil sebaiknya mempertimbangkan DayOtter. Weighted round robin dan collective booking tersedia di dalam core AGPLv3, sehingga self-hosting memberi Anda fitur yang biasanya dikenai biaya per seat pada layanan hosted. Proses worker juga dirancang untuk reminder dan webhook yang benar-benar digunakan oleh tim. Konsekuensinya adalah tingkat kematangan. Ini merupakan proyek terbaru dalam daftar ini, jadi jalankan terlebih dahulu secara paralel. Pertahankan tautan lama sampai Anda mengamati pemesanan selama satu bulan penuh.

Ada dua kasus yang lebih khusus. Jika yang Anda perlukan hanya poll untuk menemukan waktu ketika grup dapat bertemu, install Rallly dan berhenti di situ. Jika Anda memiliki VPS 1 GB, menggunakan Google Calendar, dan menginginkan aplikasi terkecil yang dapat menerima pemesanan, Easy!Appointments akan bertahan lebih lama daripada opsi lain yang lebih kompleks yang dapat Anda pasang pada server tersebut. Untuk pertanyaan yang lebih luas tentang aplikasi lain yang layak ditempatkan pada server yang sama, lihat apa yang layak di-self-host pada 2026.

FAQ

Dapatkah saya menjalankan halaman pemesanan yang di-host sendiri tanpa nama domain?

Tidak. Semua aplikasi ini menulis URL publiknya ke dalam tautan pada email konfirmasi. Google dan Microsoft juga mencocokkan URI pengalihan OAuth dengan nilai yang sama. Karena itu, alamat IP tanpa domain akan menghasilkan redirect_uri_mismatch pada layar persetujuan. Let’s Encrypt juga tidak akan menerbitkan sertifikat untuk alamat IP. Akibatnya, halaman dimuat melalui HTTP biasa dan browser menandai formulir sebagai tidak aman. Beli domain terlebih dahulu, arahkan A record ke VPS, lalu lakukan instalasi.

Mengapa email konfirmasi pemesanan saya tidak pernah sampai?

Hampir selalu karena server mencoba mengirim email secara langsung. Sebagian besar penyedia VPS memblokir port keluar 25 pada akun baru. Akibatnya, koneksi terhenti. Kalaupun port tersebut terbuka, alamat baru belum memiliki reputasi pengiriman, sehingga penerima besar menolaknya. Arahkan aplikasi ke relay email transaksional pada port 587. Pastikan port tersebut dapat dijangkau dengan nc -vz -w 5 "$SMTP_HOST" 587. Kemudian, publikasikan record SPF dan DKIM yang diberikan oleh relay. Jika Anda menjalankan Cal.com, pastikan Anda mengganti nilai default EMAIL_SERVER_HOST=localhost dan EMAIL_SERVER_PORT=1025 yang disertakan. Nilai tersebut mengarah ke kotak surat pengembangan lokal.

Apakah Cal.com yang di-host sendiri dapat disinkronkan dengan CalDAV, atau hanya Google?

Keduanya, tetapi tingkat kematangannya berbeda. Aplikasi CalDAV berstatus beta dan telah diverifikasi pada server seperti Baikal, Radicale, Nextcloud, dan Kerio Connect. Apple iCloud juga dapat digunakan melalui aplikasi tersebut dengan kata sandi khusus aplikasi. Google Calendar dan Microsoft 365 dapat melakukan sinkronisasi dua arah. Namun, pada instalasi yang di-host sendiri, Anda harus membuat klien OAuth sendiri dan memasoknya melalui GOOGLE_API_CREDENTIALS, karena kredensial layanan yang di-host tidak tersedia dalam kode sumber.

Mengapa sinkronisasi Google Calendar berhenti berfungsi setelah satu minggu?

Karena status publikasi proyek Google Cloud masih Testing. Google menerbitkan token penyegaran untuk aplikasi dalam status tersebut, tetapi token itu kedaluwarsa setelah tujuh hari. Akibatnya, koneksi awalnya berfungsi, lalu berhenti pada penyegaran token berikutnya, dan log aplikasi menampilkan invalid_grant. Pindahkan layar persetujuan OAuth ke In production, lalu hubungkan kembali kalender satu kali. Menghubungkan kembali tanpa mengubah status hanya memberi Anda tujuh hari tambahan.

Aplikasi mana yang dapat berjalan pada VPS 1 GB?

Easy!Appointments dapat berjalan karena merupakan aplikasi PHP dengan MySQL. Rallly mendokumentasikan kebutuhan minimum 2 GB, dan stack bawaannya menjalankan empat service. Cal.com dan DayOtter tidak menetapkan kebutuhan minimum. Namun, aplikasi Next.js dengan PostgreSQL, serta Redis dan proses worker pada DayOtter, berarti Anda sebaiknya menyiapkan 2 GB atau lebih. Jangan pernah membangun Cal.com dari kode sumber pada server kecil. Petunjuk build proyek tersebut meminta heap Node sebesar 16 GB. Gunakan image yang telah dibangun sebelumnya.

#scheduling#calendly#cal-com#self-hosted#booking