Setiap kali saya melihat insinyur menulis tentang tumpukan teknologi mereka, saya penasaran ingin belajar alat baru. Terutama ketika Anda menjalankan sesuatu sendirian, Anda selalu mencari cara untuk belajar dari pengalaman orang lain.
Pada tahun 2015, saya merasa frustrasi dengan level pengelola kata sandi yang ada saat itu, terutama karena tidak ada yang layak untuk pengguna yang menjalankan server pribadi. Saya mulai mengerjakan Psono, pengelola kata sandi sumber terbuka dengan tingkat enkripsi yang layak dan opsi berbagi yang aman. Psono tidak pernah dimaksudkan untuk dijalankan sebagai SaaS, jika tidak, saya mungkin akan memberikan dukungan untuk banyak penyewa sejak awal.
Untuk memberi Anda gambaran tentang skala Psono, Psono saat ini diinstal secara lokal di sekitar 70 negara, dengan lebih dari 4000 instalasi. Psono SaaS sendiri saat ini digunakan oleh lebih dari 15.000 orang, kebanyakan dari mereka menggunakan edisi komunitas gratis dari Psono yang berjalan pada tumpukan teknologi yang sama dengan produk Enterprise berbayar kami.
Tumpukan instalasi Psono yang khas terdiri dari basis data, server, dua klien web (satu untuk pengguna reguler dan satu untuk administrator), aplikasi untuk iOS dan Android, ekstensi browser untuk Chrome dan Firefox. Pelanggan dapat menginstal gateway LDAP atau server file di atas itu.
Selain itu, saya memiliki lebih banyak infrastruktur yang ada. Mulai dari situs web untuk mendukung beranda perusahaan dan halaman produk, saya memiliki server lisensi untuk produk perusahaan kami, sistem ERP pusat untuk menangani penawaran dan faktur, toko tempat orang dapat membeli Psono SaaS dan mengelola instalasi mereka, dan layanan autentikasi dengan OIDC.
Sepanjang artikel ini, Anda akan melihat bahwa saya lebih memilih teknologi yang lama dan stabil.
Bahasa Pemrograman
- Python: Semua kode backend ditulis dalam Python. Keuntungan terbesar dari Python adalah ekosistemnya yang kaya. Kurangnya tipe (banyak orang menganggap ini sebagai kekurangan) membuatnya sangat cepat untuk menulis layanan web Anda yang mana sebagai startup adalah salah satu aspek utama yang harus Anda perhatikan dalam bahasa pemrograman.
- Javascript: Oh tidak... siapa yang menyangka... Sejak awal, sulit untuk membuat situs web tanpa Javascript, bahkan pada tahun 2015. ;)
Python adalah bahasa favorit saya untuk layanan web. (Saya tidak akan membahas di sini mengapa XY tidak lebih baik dari Python, karena itu akan membutuhkan artikel blog lain.) Ada satu kelemahan yang harus Anda atasi dan itu adalah kemungkinan untuk mengirim kode dengan semua ketergantungan secara andal, yang sangat penting jika orang menginstal perangkat lunak Anda secara lokal dan meminta dukungan jika mereka menghadapi masalah. (Dalam hal kecepatan, yang mungkin ditambahkan oleh orang lain di sini, tidak masalah. Python sudah cukup cepat.)
Kerangka Kerja
- Django: "Ini seperti kekuatan super untuk pengembang solo" (jika saya boleh mengutip Athony N. Simons di sini). Bersama dengan ekosistem ini, ia menyelesaikan hampir semua masalah yang mungkin Anda hadapi. Otentikasi, template, email, migrasi database, totp, ... hanya untuk menyebutkan beberapa.
- Django Rest Framework: Saat ini menggerakkan semua API dan melakukan pekerjaan yang hebat. Lapisan berbeda (serialisasi, otentikasi, izin, tampilan) menjaga kode Anda tetap bersih.
- React: Saya baru saja memigrasi klien web reguler ke React. Klien web lama (harap ingat bahwa ini dimulai pada tahun 2015) ditulis dalam AngularJS dan cukup menantang untuk tetap kompatibel dengan klien lama, misalnya, semua jalur ke pengguna tidak boleh berubah, karena mereka mungkin telah membookmark link ke rahasia dalam dokumentasi mereka atau menggunakan apa yang disebut berbagi tautan. Juga orang-orang menggunakan pencitraan merek kustom dengan logo mereka sendiri dan seterusnya di mana jalur dalam sistem tidak boleh berubah.
- webpack: Saya ingin menyebutkannya di sini, karena ini saat ini adalah satu-satunya bagian yang saya tidak senang dengan. Ini lambat, membuat rambut rontok, sulit dipelajari ... satu-satunya keuntungan yang Anda miliki adalah Anda tidak akan pernah terjebak. Masalah apa pun yang Anda alami, sudah ditanyakan di Stackoverflow dan Anda menemukan solusinya.
- Gatsby: Menggerakkan situs web statis kami untuk perusahaan dan produk. Dulu saya menggunakan Wordpress, namun overhead manajemen dengan pembaruan dan ketakutan terus-menerus bahwa situs web akan disusupi (dan potensi publisitas negatif) membuat kami beralih ke Gatsby. Sejauh ini tidak pernah menyesal.
- Vuepress: Sistem manajemen dokumentasi yang paling layak yang bisa saya temukan. Ini dikompilasi menjadi situs web statis, terlihat modern dan saat ini menggerakkan dokumentasi Psono.
- Material UI: Pustaka utama yang menggerakkan antarmuka pengguna (frontend). Kaya fitur, cocok dengan baik bersama React dan terlihat cukup modern, bertentangan dengan tema berbasis Bootstrap yang lebih lama.
Pasti ada banyak lagi yang layak disebutkan di sini, tetapi ini adalah yang "paling penting" menurut pendapat saya.
Basis Data
Walaupun Django mendukung banyak basis data, saya cukup awal menghadapi pertanyaan apakah saya ingin mendukung semua basis data Django atau hanya satu yang tertentu. Akar dari pertanyaan ini adalah karena saya menyimpan struktur pohon bersarang di basis data. Jadi pohon dengan banyak akar dan cabang bersama. Querying ini secara efisien sangat penting, jadi setelah menjelajahi semua opsi yang tersedia, saya memutuskan untuk menggunakan ekstensi ltree dari Postgre.
Jika Anda berencana mengembangkan apa pun dan menjalankannya sendiri, itu perlu berjalan di cloud yang andal, dikelola oleh penyedia cloud. Anda kemungkinan besar juga tidak ingin terkunci vendor, jadi tidak ada yang spesifik cloud, yang sangat membatasi pilihan Anda.
Keputusan saya:
- Postgres: Ada dua basis data sumber terbuka yang bisa Anda pilih. MariaDB atau Postgres. Saya selalu merencanakan untuk menggunakan Maria (kebanyakan karena Maria DB Galera Cluster, salah satu cerita "pengembang muda yang salah arah harus merencanakan pertumbuhan hiper" ;D), tetapi karena tidak adanya ekstensi ltree, saya terpaksa. Saat ini, dengan semua pengembangan yang masuk ke opsi sharding Postgres, saya tidak pernah menyesali keputusan itu sejauh ini.
- Redis: Direncanakan untuk digunakan sebagai cache untuk instalasi yang lebih besar. Juga di sini Anda dapat memilih antara Redis atau Memcache. Keduanya sangat baik, tetapi kebanyakan karena protokol Redis saat ini menjadi standar sebenarnya untuk caching, saya memilih Redis. Satu-satunya kekurangan yang pernah saya alami dengan Redis adalah bahwa ia berjalan di satu thread.
Infrastruktur
Gambaran kecil infrastruktur yang digunakan oleh Psono:
- Gitlab: Gitlab menggerakkan semua otomatisasi Psono. Perlu diperhatikan bahwa semuanya di Psono sudah otomatis, yang merupakan salah satu aspek kunci bagaimana saya dapat mengelola rilis dan memelihara seluruh Ekosistem Psono. Pada tahun 2015, setiap proyek sumber terbuka dijalankan di Github, tetapi Gitlab adalah (dan masih) sangat kuat dan secara fitur lebih unggul (dengan pengecualian dari fungsi pencarian Github). Gitlab menggerakkan pembangunan, rilis, pemindaian kerentanan dari SETIAP perangkat lunak yang kami gunakan.
- Cloudflare: Mungkin perusahaan paling inovatif yang saya kenal yang mempengaruhi saya selama 10 tahun terakhir. Wajar untuk mengatakan bahwa Cloudflare saat ini menggerakkan internet. Ini menyediakan saya dengan nameserver yang andal, TLS, CDN yang layak, dan fitur canggih seperti pekerja tepi mereka. Perlindungan DDoS dan fungsionalitas WAF memberikan nilai tambah tertentu, yang mana sebagai pengelola kata sandi sangat penting. Saya ingin menggunakan fitur SSL sebagai layanan mereka untuk memungkinkan pelanggan SaaS mengkonfigurasi domain mereka sendiri, tetapi dinding pembayaran dari tingkat perusahaan Cloudflare terlalu sulit. Saya masih berharap mereka akan merilisnya di suatu tempat sebagai plugin independen yang bisa dibeli.
- namecheap: Solusi utama saya untuk domain dan sertifikat SSL.
- Google Cloud Run: Semua server backend berjalan di Google Cloud Run, yang sangat hemat biaya dan andal ketika Anda ingin menghasilkan sekumpulan layanan. Setelah Anda memiliki stack yang berjalan, ini melakukan pekerjaan yang cukup baik. Integrasi API / CLI mereka yang canggih adalah nilai tambah mutlak di sini. Ada beberapa kelemahan, seperti dukungan yang hilang dari Google atau ancaman bahwa Google mungkin memutuskan pada suatu titik bahwa menjadi #3 sebagai penyedia layanan Cloud mungkin tidak sebanding dan mereka membatalkan produk.
- Artifactory: Melindungi pipeline pembangunan saya dari pemadaman npm dan menyimpan artefak pembangunan saya (yang tidak dibundel dalam Gitlab pada tahun 2015)
- Docker Hub: Menyimpan semua kontainer Docker dan melakukan beberapa pemindaian keamanan tambahan serta distribusi kontainer saya.
- Mailgun: Menangani semua email. Berbeda dengan sebagian besar penyedia solusi email, Mailgun memiliki fungsi logging dan analisis yang layak. Dukungan mereka sangat baik. Masalahnya hanya kadang-kadang email mereka dikirim ke kotak spam (meskipun SPF, DMARC dan seterusnya semua sudah ada), namun selain itu mereka melakukan pekerjaan yang hebat.
- Poeditor: Menangani semua terjemahan. Hal yang bagus adalah bahwa kontributor dapat meminta akses, yang penting jika Anda ingin pihak eksternal membantu menerjemahkan Proyek Anda. Dukungan mereka hebat dan Anda mendapatkan balasan sangat cepat.
- Docker: Salah satu keputusan terbaik untuk seluruh proyek. Terutama karena saya menggunakan Python dan mengirimkan kode Python yang berfungsi dengan semua ketergantungan perpustakaan Python / OS adalah sulit. Jika hal-hal harus berjalan dengan pelanggan di tempat dan persyaratan bahwa dia dapat memperbarui dan memelihara sistem. Docker memungkinkan kami melakukan semua itu dan memberi saya kendali penuh atas paket yang diinstal, yang menyelesaikan setidaknya 70% dari semua masalah dukungan (sementara memperkenalkan 20% masalah baru karena orang tidak terbiasa dengan Docker ;D).
Pemantauan
Jadi hal-hal dapat salah dan Anda perlu tahu kapan itu terjadi dan mendapatkan beberapa wawasan tentang masalah tersebut. Di sinilah alat-alat ini berguna:
- Google Cloud logging: Jika Anda di Google, solusi alami Anda
- Sentry: Solusi laporan kesalahan nomor satu saya. Sekali Anda mencobanya, Anda tidak akan pernah ingin ketinggalan. Ini memberi saya wawasan yang diperlukan ke dalam semua kesalahan.
- Uptimerobot: Memanggil healthcheck dari berbagai layanan saya dan akan memberi tahu saya jika ada yang turun. Halaman status publik untuk Psono dapat ditemukan di sini https://stats.psono.com/, yang hanya sebagian kecil dari layanan yang dipantau oleh alat ini untuk saya, namun semoga menunjukkan tingkat keandalan sistem.
Infrastruktur Pengembangan
Gambaran kecil tentang bagaimana tumpukan pengembangan lokal saya terlihat:
- Windows with WSL: Saya mungkin mendapatkan banyak kritik untuk ini, tetapi ya saya menjalankan Windows. Dalam beberapa tahun terakhir, saya selalu memiliki VM Linux di suatu tempat yang akan saya hubungkan untuk pengembangan, tetapi sekarang, ini didukung oleh WSL. Saya mendapatkan yang terbaik dari kedua dunia.
- Pycharm / Webstorm: Saya menggunakan Jetbrain IDEs. Fungsi pengembangan jarak jauh ini sangat penting untuk alur kerja pengembangan saya dan filosofi "termasuk baterai" ini cocok untuk saya. Terkadang saya memiliki sekitar 20 proyek terbuka yang memerlukan perangkat keras yang layak dengan RAM yang cukup. VSCode tampaknya menjadi alternatif yang baik saat ini, tetapi selama beberapa tahun terakhir saya terbiasa dengan Jetbrains dan mempelajari sesuatu yang baru selalu memerlukan kekuatan mental yang saat ini tidak ingin saya investasikan untuk ini. Saya akan mengatakan setiap orang harus menggunakan sesuatu yang biasa mereka gunakan.
Dukungan
Ada alat-alat tertentu tentu saja diperlukan untuk menangani dukungan bagi orang-orang yang menggunakan produk:
- Freshdesk: Perangkat lunak tiket email yang khas. Ini membantu saya melacak berbagai permintaan pelanggan. Dari awal, ini menyediakan tingkatan gratis yang layak, yang terutama pada tahap pendirian sangat penting.
- Discord: Beberapa orang mungkin lebih memilih obrolan atau memerlukan percakapan / bantuan yang lebih langsung. Di sinilah Discord berguna.
Lainnya
Ada alat lain yang ingin saya sebutkan yang bisa bermanfaat bagi orang lain. Terutama bank untuk orang yang ingin menjalankan bisnis mereka di Jerman:
- Odoo: Sistem ERP terbaik. Edisi sumber terbukanya gratis dan dapat diperluas dengan mudah dengan pengetahuan Python dan XML. Opsi kustomisasi dan integrasinya dengan API kustom sangat bagus.
- Holvi: Rekening bank utama kami. Di Jerman, Anda memerlukan bank yang memungkinkan Anda untuk membuka Rekening Pendiri, dalam bahasa Jerman "Gründerkonto", yaitu rekening bank yang terkait dengan perusahaan yang belum sepenuhnya terdaftar dan di mana Anda dapat mentransfer dana awal yang diperlukan untuk mendaftarkan perusahaan. Ini sedikit masalah ayam dan telur. Dan bank-bank besar yang memungkinkan itu biasanya memerlukan biaya yang sangat mahal. Proses pendaftaran juga berjalan cukup lancar. Satu-satunya kelemahan adalah dukungan yang hilang untuk pembayaran internasional, tetapi di sinilah layanan berikutnya berguna.
- Wise: Rekening bank kedua kami. Biaya mereka sangat rendah (misalnya tidak ada biaya bulanan), proses penyiapan berfungsi sempurna, mereka terhubung dengan baik dan memungkinkan transfer bank internasional dan transfer dilakukan dengan cepat, sehingga Anda tidak perlu menunggu berminggu-minggu atau sejenisnya.
Keamanan
Saya kira ini bisa menjadi posting blog terpisah tentang bagaimana kami menyusun akun pengguna, infrastruktur, hak akses. Karena ini adalah salah satu aspek paling utama untuk keamanan Psono, saya tidak akan membahas secara detail di sini dan mencoba untuk cukup samar. Kami menggunakan layanan Google Cloud dan Azure. Keduanya dengan pengguna dan grup yang sepenuhnya terpisah. Ada pengguna yang didedikasikan untuk tugas administrasi dan akun pengguna untuk "pekerjaan harian". Ada sistem fisik dan virtual yang berbeda yang saya gunakan untuk mengakses / mendukung / mengelola / mengadministrasi Psono. Tugas administrasi hanya dilakukan pada perangkat fisik yang terpisah, khususnya yang diperkuat, yang digunakan secara eksklusif untuk tugas-tugas ini. Setiap akun dilindungi dengan token perangkat keras. Semua sistem dikelola secara terpusat dan kebijakan keamanan yang ada untuk menjamin bahwa semua perangkat mengikuti standar keamanan yang biasanya Anda temukan di bank.
Kredit
Artikel ini sangat terinspirasi oleh artikel Anthony N. Simon tentang Panelbear.