Sistem obrolan/obrolan berdasarkan protokol AMQP (Pialang Pesan RabbitMQ) yang ditulis dalam Python menggunakan Tornado dan RabbitMQ.
Tautan: http://rabbitchat.readthedocs.io/en/latest/index.html
Tautan: https://pypi.python.org/pypi/rabbitchat
| Pengarang: | Anirban Roy Das |
|---|---|
| E-mail: | [email protected] |
| Hak Cipta (C): | 2017, Anirban Roy Das <[email protected]> |
Periksa file rabbitChat/LICENSE untuk pemberitahuan hak cipta penuh.
Rabbitchit adalah server obrolan yang sangat sederhana yang dapat diatur secara lokal untuk mengobrol di LAN Anda. Ini mendukung kedua obrolan publik di antara semua peserta yang terhubung secara bersamaan pada waktu tertentu dan juga obrolan pribadi antara masing -masing peserta tersebut.
Ini menggunakan protokol AMQP untuk mengimplementasikan sistem lewat pesan waktu nyata. AMQP diimplementasikan dalam banyak bahasa dan dalam banyak perangkat lunak, setelah itu adalah RabbitMQ, yang merupakan broker pesan yang menerapkan protokol AMQP.
Koneksi dibuat menggunakan protokol SockJS. Sockjs diimplementasikan dalam banyak bahasa, terutama di JavaScript untuk berbicara dengan server secara real time, yang mencoba membuat koneksi dua arah dupleks antara klien (browser) dan server . Server itu juga harus mengimplementasikan protokol SockJS . Jadi menggunakan perpustakaan Sockjs-Tornado yang memperlihatkan protokol Sockjs di server tornado.
Ini pertama kali mencoba membuat koneksi WebSocket, dan jika gagal maka ia mundur ke mekanisme transportasi lainnya, seperti Ajax , pemungutan suara panjang , dll. Setelah koneksi dibuat, server tornado ** (sockjs-tornado) ** terhubung ke Rabbitmq melalui protokol AMQP menggunakan Perpustakaan Klien AMQP Python , Pika.
Dengan demikian koneksi adalah browser web ke tornado ke RabbitMQ dan sebaliknya.
| sockjs-client: | Klien Websocket JavaScript Lanjutan |
|---|---|
| Angin topan: | Perpustakaan Web Async Python + Server Web |
| Sockjs-Tornado: | Sockjs Websocket Server Implementasi untuk Tornado |
| AMQP: | Protokol antrian pesan lanjutan yang digunakan dalam middleware berorientasi pesan |
| Pika: | Perpustakaan Klien AMQP Python |
| Rabbitmq: | Pialang pesan yang menerapkan AMQP |
| Pytest: | Perpustakaan Pengujian Python dan Test Runner dengan Tes Discobery yang Luar Biasa |
| Pytest-Flask: | Plugin Pytest untuk aplikasi Flask, untuk menguji aplikasi Fask menggunakan Pytest Library. |
| Uber's Test-Double: | Uji Perpustakaan Ganda untuk Python, alternatif yang bagus untuk perpustakaan tiruan |
| Jenkins (opsional): | Server CI yang diselenggarakan sendiri |
| Travis-ci (opsional): | Server CI yang di-host gratis untuk projec open-source |
| Buruh pelabuhan: | Alat kontainerisasi untuk devop yang lebih baik |
Ada dua jenis instalasi. Satu menggunakan rabbitchat sebagai biner dengan menginstal dari PIP dan menjalankan aplikasi di mesin lokal secara langsung. Metode lain adalah menjalankan aplikasi dari Docker. Oleh karena itu satu set langkah instalasi lain untuk kasus penggunaan Docker.
Untuk Safegurad Secret dan Rahasia Data Kebocoran melalui GIT Anda berkomitmen untuk repo GitHub publik, periksa git-secrets .
Proyek Git Secrets ini membantu mencegah kebocoran mengeluarkan kesalahan.
Lihat, ada begitu banyak teknologi yang digunakan yang disebutkan dalam spesifikasi teknologi, namun ketergantungannya hanya dua. Ini adalah kekuatan Docker.
Langkah 1 - Instal Docker
Ikuti proyek GitHub saya yang lain, di mana segala sesuatu yang berkaitan dengan DevOps dan skrip disebutkan bersama dengan menyiapkan lingkungan pengembangan untuk menggunakan Docker disebutkan.
- Proyek: https://github.com/anirbanroydas/devops
Langkah 2 - Instal Make
# (Mac OS) $ brew install automake # (Ubuntu) $ sudo apt-get update $ sudo apt-get install make
Langkah 3 - Pasang dependensi
Instal dependensi berikut pada mesin pengembangan lokal Anda yang akan digunakan dalam berbagai skrip.
$ pip instal rabbitchit
Jika ketergantungan di atas tidak diinstal oleh perintah di atas, maka gunakan langkah -langkah di bawah untuk menginstalnya satu per satu.
Langkah 1 - Pasang Pip
Ikuti metode di bawah ini untuk memasang PIP. Salah satunya dapat membantu Anda menginstal PIP di sistem Anda.
- Metode 1 - https://pip.pypa.io/en/stable/installing/
- Metode 2- http://ask.xmodulo.com/install-pip-linux.html
- Metode 3 - Jika Anda menginstal Python di Mac OS X melalui
brew install python, maka PIP sudah diinstal bersama dengan Python.Langkah 2 - Instal Tornado
$ pip menginstal tornadoLangkah 3 - Pasang Sockjs -Tornado
$ Pip Instal Sockjs-TornadoLangkah 4 - Instal Pika
$ Pip Instal PikaLangkah 5 - Instal RabbitMQ
Untuk pengguna
Mac1. Bir Instal Rabbitmq
$ brew install rabbitmq
- Konfigurasikan RabbitMQ, ikuti tautan ini, yang ini dan ini.
Untuk pengguna
Ubuntu/Linux1. Aktifkan repositori aplikasi Rabbitmq
$ echo "deb http://www.rabbitmq.com/debian/ testing utama" >> /etc/apt/sources.list2. Tambahkan kunci verifikasi untuk paket
$ wget -o http://www.rabbitmq.com/rabbitmq-ygning-key-public.asc | sudo apt -key add -3. Perbarui sumber dengan tambahan baru kami dari atas
$ APT-GET UPDATE4. Dan akhirnya, unduh dan instal Rabbitmq
$ sudo apt-get menginstal rabbitmq-server
- Konfigurasikan RabbitMQ, ikuti tautan ini, yang ini dan ini.
Jika Anda menggunakan proyek dalam pengaturan CI (seperti Travis, Jenkins), maka, pada setiap dorongan ke GitHub, Anda dapat mengatur pipa Travis Build atau Jenkins Anda. Travis akan menggunakan file .travis.yml dan Jennis akan menggunakan Jenkinsfile untuk melakukan pekerjaan mereka. Sekarang, jika Anda menggunakan Travis, lalu jalankan perintah pengaturan spesifik Travis dan untuk Jenkins menjalankan perintah pengaturan spesifik Jenkins terlebih dahulu. Anda juga dapat menggunakan keduanya untuk membandingkan kinerja antara yang ada.
Kunci pengaturan membaca nilai -nilai dari file .env yang memiliki semua variabel lingkungan diekspor. Tetapi Anda akan melihat contoh file env dan bukan file .env . Pastikan untuk menyalin file env ke .env dan ubah/ubah variabel aktual dengan nilai nyata Anda.
File .env tidak berkomitmen untuk git karena mereka disebutkan dalam file .gitignore untuk mencegah kebocoran data rahasia.
Setelah Anda menjalankan perintah pengaturan, Anda akan disajikan dengan sejumlah kunci aman. Salin itu ke file konfigurasi Anda sebelum melanjutkan.
Catatan: Ini adalah pengaturan satu kali. Catatan: Periksa skrip pengaturan di dalam scripts/ direktori untuk memahami apa variabel lingkungan yang tombol terenkripsi disediakan. Catatan: Jangan lupa menyalin kunci aman ke .travis.yml atau Jenkinsfile Anda
Catatan: Jika Anda tidak ingin melakukan salinan .env env mengubah nilai variabel di .env dengan nilai nyata Anda maka Anda dapat mengedit skrip travis-setup.sh atau jenknis-setup.sh dan memperbarui nilai-nilainya secara langsung. Skrip ada di direktori scripts/ tingkat proyek.
PENTING: Anda harus menjalankan skrip travis-setup.sh atau skrip jenkins-setup.sh di mesin lokal Anda sebelum digunakan ke server jarak jauh.
Langkah -langkah ini akan mengenkripsi variabel lingkungan Anda untuk mengamankan data rahasia Anda seperti kunci API, tombol berbasis Docker, menggunakan tombol spesifik.
$ membuat travis-setup
Langkah -langkah ini akan mengenkripsi variabel lingkungan Anda untuk mengamankan data rahasia Anda seperti kunci API, tombol berbasis Docker, menggunakan tombol spesifik.
$ membuat jenkins-setup
Ada dua jenis penggunaan. Satu menggunakan rabbitchat sebagai biner dengan menginstal dari PIP dan menjalankan aplikasi di mesin lokal secara langsung. Metode lain adalah menjalankan aplikasi dari Docker. Oleh karena itu satu set langkah penggunaan lain untuk kasus penggunaan Docker.
Setelah menginstal dependensi di atas, dan menjalankan opsional (jika tidak menggunakan server CI apa pun) atau diperlukan (jika menggunakan server CI apa pun) Langkah Pengaturan CI , maka cukup jalankan perintah berikut untuk menggunakannya:
Anda dapat menjalankan dan menguji aplikasi di mesin pengembangan lokal Anda atau Anda dapat menjalankan dan menguji langsung di mesin jarak jauh. Anda juga dapat menjalankan dan menguji di lingkungan produksi.
Perintah di bawah ini akan dimulai semuanya dalam lingkungan pengembangan. Untuk memulai di lingkungan produksi, akhiran -prod untuk setiap perintah membuat .
Misalnya, jika perintah normal make start , maka untuk lingkungan produksi, gunakan make start-prod . Lakukan modifikasi ini untuk setiap perintah yang ingin Anda jalankan di lingkungan produksi.
Pengecualian: Anda tidak dapat menggunakan metode di atas untuk perintah uji, perintah uji adalah sama untuk setiap lingkungan. Juga perintah make system-prune adalah mandiri tanpa variasi spesifik produksi NO (tetap sama di semua lingkungan).
Mulai Applcation
$ membuat bersih $ membuat build $ Make Start # ATAU $ Docker -Compose up -D
Hentikan aplikasi
$ Make Stop # ATAU $ Docker-Compose Stop
Hapus dan Bersihkan Aplikasi
$ membuat bersih # ATAU $ Docker -Compose RM --Force -V $ echo "y" | Sistem Docker Prune
Sistem bersih
$ Make System-Prune # ATAU $ echo "y" | Sistem Docker Prune
Untuk memeriksa seluruh log aplikasi
$ Make check-log # ATAU $ Docker-Compose Logs-Follow-Tail = 10
Untuk memeriksa log App Python
$ Make check-log-app # ATAU $ Docker-Compose Logs-Follow-Tail = 10 Identidock
Setelah menginstal Rabbitchit melalui PIP, cukup jalankan perintah berikut untuk menggunakannya:
Server RabbitMQ
1. Untuk pengguna Mac
# Mulai secara normal $ rabbitmq-server # Jika Anda ingin berlari di latar belakang $ rabbitmq-server-terpisah # Mulai Menggunakan Brew Rervices (tidak berfungsi dengan TMUX) $ Brew Services Rabbitmq Mulai
2. Untuk pengguna Ubuntu/LInux
# Mulai secara normal $ rabbitmq-server # Jika Anda ingin berlari di latar belakang $ rabbitmq-server-terpisah # Untuk mulai menggunakan layanan $ Service Rabbitmq-Server Mulai # Untuk berhenti menggunakan layanan $ Service Rabbitmq-Server Stop # Untuk memulai kembali menggunakan layanan $ layanan rabbitmq-server restart # Untuk memeriksa statusnya $ servis rabbitmq-server status
Mulai Server Rabbitchit
$ rabbitchit [opsi]
Opsi
| --pelabuhan: | Nomor port di mana server obrolan akan dimulai |
|---|
Contoh
$ rabbitchit --port = 9191
Hentikan server Rabbitchit
Klik Ctrl+C untuk menghentikan server.
Catatan: Pengujian hanya dilakukan dengan menggunakan metode Docker. Bagaimanapun, seharusnya tidak masalah apakah Anda menjalankan aplikasi Anda menggunakan metode Docker atau metode mandiri. Pengujian tidak tergantung pada itu.
Sekarang, pengujian adalah kesepakatan utama dari proyek ini. Anda dapat menguji dalam banyak hal, yaitu, menggunakan perintah make seperti yang disebutkan dalam perintah di bawah ini, yang mengotomatiskan segalanya dan Anda tidak harus tahu apa pun, seperti pustaka tes atau kerangka kerja apa yang digunakan, bagaimana tes terjadi, baik secara langsung atau melalui wadah docker , atau mungkin merupakan lingkungan virtual yang berbeda menggunakan tox . Tidak ada yang perlu diketahui.
Di sisi lain jika Anda ingin kontrol yang baik atas tes, maka Anda dapat menjalankannya secara langsung, baik dengan menggunakan perintah pytest , atau melalui perintah tox untuk menjalankannya di lingkungan Python yang berbeda atau dengan menggunakan perintah docker-compose untuk menjalankan tes berbeda.
Tetapi menjalankan perintah Make adalah lawasy yang pergi ke strategi dan pendekatan yang direkomendasikan untuk proyek ini.
Catatan: TOX dapat digunakan secara langsung, di mana wadah docker tidak akan digunakan. Although we can try to run tox inside our test contianers that we are using for running the tests using the make commands, but then we would have to change the Dockerfile and install all the python dependencies like python2.7 , python3.x and then run tox commands from inside the docker containers which then run the pytest commands which we run now to perform our tests inside the current test containers.
Peringatan: Satu -satunya peringatan menggunakan perintah Make secara langsung dan tidak menggunakan tox adalah kami hanya menguji proyek dalam lingkungan python tunggal, Nameley python 3.6 .
Untuk menguji semuanya
$ membuat tes
Metode lain tanpa menggunakan Make akan melibatkan penulisan banyak perintah. Jadi gunakan perintah make the preferrand
Untuk melakukan tes unit
$ membuat unit-unit
Untuk melakukan tes komponen
$ membuat komponen tes
Untuk melakukan tes kontrak
$ membuat kontrak tes
Untuk melakukan tes integrasi
$ membuat tes-integrasi
Untuk melakukan ujung ke ujung (E2E) atau sistem atau penerimaan UI atau tes fungsional
$ Make Test-E2E # ATAU $ membuat sistem tes # ATAU $ Make Test-U-Icceptance # ATAU $ membuat test-functional