{"id":15308577,"url":"https://github.com/ezralazuardy/adcs","last_synced_at":"2025-06-30T05:05:27.534Z","repository":{"id":38110292,"uuid":"433456702","full_name":"ezralazuardy/adcs","owner":"ezralazuardy","description":"🖥️ Automated Autonomous Drone Communication System Manager","archived":false,"fork":false,"pushed_at":"2023-03-14T23:53:54.000Z","size":4081,"stargazers_count":0,"open_issues_count":11,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-27T17:38:06.585Z","etag":null,"topics":["inertiajs","laravel","mqtt","vue"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ezralazuardy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-11-30T14:13:27.000Z","updated_at":"2024-06-20T23:27:29.000Z","dependencies_parsed_at":"2024-12-06T13:52:50.424Z","dependency_job_id":null,"html_url":"https://github.com/ezralazuardy/adcs","commit_stats":{"total_commits":31,"total_committers":3,"mean_commits":"10.333333333333334","dds":0.09677419354838712,"last_synced_commit":"9ef2998e7416bd67a90783c1fca8e6100d44dc97"},"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/ezralazuardy/adcs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezralazuardy%2Fadcs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezralazuardy%2Fadcs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezralazuardy%2Fadcs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezralazuardy%2Fadcs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ezralazuardy","download_url":"https://codeload.github.com/ezralazuardy/adcs/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ezralazuardy%2Fadcs/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":260695003,"owners_count":23047991,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["inertiajs","laravel","mqtt","vue"],"created_at":"2024-10-01T08:17:01.090Z","updated_at":"2025-06-30T05:05:27.501Z","avatar_url":"https://github.com/ezralazuardy.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ca href=\"https://github.com/ezralazuardy/adcs/actions/workflows/laravel.yml\"\u003e\n    \u003cimg alt=\"Laravel\" src=\"https://github.com/ezralazuardy/adcs/actions/workflows/laravel.yml/badge.svg\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://github.com/ezralazuardy/adcs/actions/workflows/docker.yml\"\u003e\n    \u003cimg alt=\"Docker\" src=\"https://github.com/ezralazuardy/adcs/actions/workflows/docker.yml/badge.svg\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://nodejs.org/en/download\"\u003e\n    \u003cimg alt=\"Node Version\" src=\"https://img.shields.io/badge/node-%3E%3D%2016-brightgreen\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://yarnpkg.com\"\u003e\n    \u003cimg alt=\"Yarn Version\" src=\"https://img.shields.io/badge/yarn-%3E%3D%201-red\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://www.php.net/releases\"\u003e\n    \u003cimg alt=\"PHP Version\" src=\"https://img.shields.io/badge/php-%3E%3D%208.0-blue\"\u003e\n\u003c/a\u003e\n\u003ca href=\"https://web.dev/progressive-web-apps\"\u003e\n    \u003cimg alt=\"PWA Support\" src=\"https://img.shields.io/badge/%20pwa-enabled-blueviolet\"\u003e\n\u003c/a\u003e\n\n# 🖥️ adcs\n\nA manager and backend server for Automated Autonomous Drone Communication System.\n\n🔨 Built with [Laravel Jetstream](https://jetstream.laravel.com) and [Inertia.js](https://inertiajs.com) for Single Page\nApplication builder ([PWA](https://web.dev/progressive-web-apps) enabled).\n\n⚡ Supercharged with [Laravel Octane](https://laravel.com/docs/8.x/octane) for massive server performance boost.\n\n\u003e ⚠️ **Important Notes**\n\u003e\n\u003e - [Swoole](https://www.swoole.co.uk) need to be installed in the server in order to use Laravel Octane.\n\u003e - Please respect the Laravel Octane [rules and limitations](https://laravel.com/docs/8.x/octane#dependency-injection-and-octane) in order to avoid memory leaks.\n\n### 🤖 Runtime Components\n\nIn order to test the ADCS functionalities, you need to run several component instance based on\nthis [repository](https://github.com/ezralazuardy/adcs-runtime). Based on the given topology below, you need to run the\nDrone instances (min. 1 instance) and the Commander Server instance.\n\n### 🗺️ Topology\n\n![ADCS Software Topology](https://user-images.githubusercontent.com/24422019/144341602-86e17ae4-3991-470f-9d56-b5dd3ac18941.png)\n\n\u003cbr/\u003e\n\n## ✅ Technologies \u0026 Standards\n\n1. [Laravel](https://laravel.com/docs/8.x) `v8`\n2. [Laravel Eloquent](https://laravel.com/docs/8.x/eloquent)\n3. [Laravel Events](https://laravel.com/docs/8.x/events)\n4. [Laravel Queues](https://laravel.com/docs/8.x/queues)\n5. [Laravel Task Scheduling](https://laravel.com/docs/8.x/scheduling)\n6. [Laravel Mix](https://laravel.com/docs/8.x/mix)\n7. [Laravel Broadcasting](https://laravel.com/docs/8.x/broadcasting)\n8. [Laravel Jetstream](https://jetstream.laravel.com)\n9. [Laravel Fluent](https://github.com/lepikhinb/laravel-fluent)\n10. [Laravel Octane](https://laravel.com/docs/8.x/octane) \u003csup\u003e\u003ci\u003eoptional\u003c/i\u003e\u003c/sup\u003e\n11. [Laravel Cloudflare](https://github.com/monicahq/laravel-cloudflare) \u003csup\u003e\u003ci\u003eoptional\u003c/i\u003e\u003c/sup\u003e\n12. [Laravel Sail](https://laravel.com/docs/8.x/sail) \u003csup\u003e\u003ci\u003eoptional\u003c/i\u003e\u003c/sup\u003e\n13. [PHP PSR2 Coding Style Standard](https://www.php-fig.org/psr/psr-2)\n14. [PHPStan](https://phpstan.org/) (with [Larastan](https://github.com/nunomaduro/larastan) extension)\n15. [Inertia.js](https://inertiajs.com)\n16. [Vue.js](https://vuejs.org)\n17. [Webpack](https://webpack.js.org)\n18. [Supercronic](https://github.com/aptible/supercronic)\n19. [Supervisor](http://supervisord.org/index.html)\n20. [MySQL](https://dev.mysql.com) `v5`\n21. [PHP MQTT](https://github.com/php-mqtt/client)\n22. [Pusher](https://pusher.com)\n23. [Swoole](https://www.swoole.co.uk) \u003csup\u003e\u003ci\u003eoptional\u003c/i\u003e\u003c/sup\u003e\n24. [Github Action CI/CD](https://github.com/features/actions) \u003csup\u003e\u003ci\u003eoptional\u003c/i\u003e\u003c/sup\u003e\n25. [Docker](https://www.docker.com) \u003csup\u003e\u003ci\u003eoptional\u003c/i\u003e\u003c/sup\u003e\n26. [Sentry](https://sentry.io) \u003csup\u003e\u003ci\u003eoptional\u003c/i\u003e\u003c/sup\u003e\n27. [Yarn](https://yarnpkg.com) \u003csup\u003e\u003ci\u003eoptional\u003c/i\u003e\u003c/sup\u003e\n\n\u003cbr/\u003e\n\n## 👨‍💻 Getting Started\n\nIkuti salah satu dari langkah berikut untuk melakukan deploy aplikasi pada tahap **development**.\n\n### 🐋 Docker\n\nLangkah instalasi dockerized application dengan ⛵ Laravel Sail untuk memudahkan proses deployment aplikasi\n\n#### ✔️ Requirement\n\n1. PHP `v8.0`\n2. Composer `v2`\n3. [Docker](https://www.docker.com)\n    - [Docker for Windows](https://docs.docker.com/docker-for-windows/install) `v4.0.1`\n    - [Docker for Linux](https://docs.docker.com/engine/install) `v4.0.1`\n    - [Docker for Mac](https://docs.docker.com/docker-for-mac/install) `v20.10`\n\n#### 🖥️ Installation\n\n1. Clone repository ini ke local environment, lalu checkout ke `development` branch\n2. Buat file `.env` dengan menyalin file `.env.example`, lalu konfigurasikan seperti berikut:\n    - Ubah `APP_ENV` menjadi `local`\n    - Ubah `APP_DEBUG` menjadi `true`\n3. `composer i --ignore-platform-reqs`\n4. `vendor/bin/sail up`\n\n\u003e #### 📝 Informasi\n\u003e - Jika menggunakan OS Windows, jalankan Laravel Sail dalam [Windows WSL v2](https://ubuntu.com/wsl)\n\u003e - Akses aplikasi via web pada alamat `http://127.0.0.1`\n\u003e - Alamat URL dan port aplikasi yang digunakan Laravel Sail sesuai konfigurasi pada `.env`\n\n\u003e #### 👌 Rekomendasi\n\u003e - Pelajari perintah **Laravel Sail** pada dokumentasi [berikut](https://laravel.com/docs/8.x/sail)\n\n### 🏡 Self Hosted\n\nLangkah tradisional untuk melakukan deploy aplikasi pada local atau self-hosted environment\n\n#### ✔️ Requirement\n\n1. PHP `v8.0`\n2. Composer `v2`\n3. MySQL Server `v5.7`\n4. NodeJS `v16`\n5. Yarn `v1`\n6. [Laravel Homestead](https://laravel.com/docs/8.x/homestead)\n   / [Laravel Valet](https://laravel.com/docs/8.x/valet) \u003csup\u003e\u003ci\u003eoptional\u003c/i\u003e\u003c/sup\u003e\n\n#### 🖥️ Installation\n\n1. Buat MySQL database untuk aplikasi:\n    - `mysql -u root -p`\n    - `create database adcs;`\n    - `create user 'adcs'@'localhost' identified by 'adcs';`\n    - `grant all privileges on adcs.* to 'adcs'@'localhost';`\n    - `flush privileges;`\n    - `exit;`\n2. Clone repository ini ke local environment, lalu checkout ke `development` branch\n3. Buat file `.env` dengan menyalin file `.env.example`, lalu konfigurasikan seperti berikut:\n    - Ubah `APP_ENV` menjadi `local`\n    - Ubah `APP_DEBUG` menjadi `true`\n4. `composer i`\n5. `php artisan app:install`\n\n\u003e #### 📝 Informasi\n\u003e - Pastikan ekstensi PHP yang dibutuhkan Laravel `v8` sudah terpasang pada local development environment, sesuai dokumentasi [berikut](https://laravel.com/docs/8.x/deployment)\n\n\u003e #### 💡 Opsional\n\u003e - Gunakan `php artisan serve` untuk membuka aplikasi via PHP Built-in Web Server\n\u003e - Gunakan `php artisan queue:work database` untuk testing fitur [Queues](https://laravel.com/docs/8.x/queues)\n\u003e - Gunakan `php artisan schedule:run` untuk testing fitur [Task Scheduling](https://laravel.com/docs/8.x/scheduling)\n\u003e - Gunakan `php artisan optimize` saat setelah proses development untuk mempercepat performa aplikasi\n\n\u003e #### 👌 Rekomendasi\n\u003e - Gunakan `composer dev` untuk optimalisasi Laravel Intellisense pada IDE anda\n\u003e - Gunakan `composer lint` untuk menjalankan PHP Linter (Static Code Analaysis)\n\u003e - Gunakan local development environment seperti [Laravel Homestead](https://laravel.com/docs/8.x/homestead) / [Laravel Valet](https://laravel.com/docs/8.x/valet)\n\n\u003cbr/\u003e\n\n## 🚀️ Production Deployment\n\nIkuti langkah berikut ini untuk melakukan deploy aplikasi pada tahap **staging** atau **production**.\n\n### 🏡 Self Hosted\n\nLangkah tradisional untuk melakukan deploy aplikasi pada local atau self-hosted environment\n\n#### ✔️ Requirement\n\n1. PHP `v8.0`\n2. Composer `v2`\n3. MySQL Server `v5.7`\n4. NodeJS `v16`\n5. Yarn `v1`\n6. [Nginx](https://nginx.org/en/download.html) / [Apache2](https://httpd.apache.org/download.cgi)\n   / [LiteSpeed](https://openlitespeed.org/Downloads/)\n7. [Supercronic](https://github.com/aptible/supercronic)\n8. [Supervisor](http://supervisord.org/index.html)\n\n#### 🖥️ Installation\n\n1. Buat MySQL database untuk aplikasi:\n    - `mysql -u root -p`\n    - `create database adcs;`\n    - `create user 'adcs'@'localhost' identified by 'adcs';`\n    - `grant all privileges on adcs.* to 'adcs'@'localhost';`\n    - `flush privileges;`\n    - `exit;`\n2. Clone repository ini ke server, lalu checkout ke `main` branch\n3. Buat file `.env` dengan menyalin file `.env.example`, lalu konfigurasikan seperti berikut:\n    - Ubah `APP_ENV` menjadi `production`\n    - Ubah `APP_DEBUG` menjadi `false`\n4. `composer i --no-dev`\n5. `php artisan app:install`\n6. Konfigurasikan Web Server dengan path **Document Root** mengarah ke lokasi direktori `public` pada proyek\n7. Install **redis-server** untuk aplikasi:\n    - `sudo apt install redis-server`\n    - `sudo nano /etc/redis/redis.conf`, lalu ubah `supervised no` menjadi `supervised systemd`\n    - `sudo service redis-server restart`\n8. Install **supercronic** untuk aplikasi:\n    - `sudo apt install snap`\n    - `sudo snap install go`\n    - `go get -d github.com/aptible/supercronic`\n    - `cd ~/go/pkg/mod/github.com/aptible/supercronic@v\u003cversion\u003e`\n      \u003cdiv style=\"margin-top: 21px\"\u003e\n\n      \u003e Ubah `\u003cversion\u003e` ke versi terakhir supercronic sesuai laman [berikut](https://github.com/aptible/supercronic/releases)\n\n      \u003c/div\u003e\n    - `go mod vendor`\n    - `go install`\n    - `source /etc/profile`\n    - Verifikasi instalasi supercronic dengan perintah `supercronic`\n    - Siapkan cronjob untuk aplikasi:\n      ```bash\n      rm -rf ~/supercronic \u0026\u0026 \\\n      sudo mkdir ~/supercronic \u0026\u0026 \\\n      sudo touch ~/supercronic/adcs.cron \u0026\u0026 \\\n      sudo echo \"path=/var/www/adcs\" \u003e\u003e ~/supercronic/adcs.cron \u0026\u0026 \\\n      sudo echo \"* * * * * php $path/artisan schedule:run \u003e\u003e /dev/null 2\u003e\u00261\" \u003e\u003e ~/supercronic/adcs.cron \u0026\u0026 \\\n      sudo echo \"0 1 * * * rm -rf $path/storage/logs/laravel.log \u0026\u0026 touch $path/storage/logs/laravel.log\" \u003e\u003e ~/supercronic/adcs.cron \u0026\u0026 \\\n      sudo echo \"0 1 * * * rm -rf $path/storage/logs/adcs-cron.log \u0026\u0026 touch $path/storage/logs/adcs-cron.log\" \u003e\u003e ~/supercronic/adcs.cron \u0026\u0026 \\\n      sudo echo \"0 1 * * * rm -rf $path/storage/logs/adcs-worker.log \u0026\u0026 touch $path/storage/logs/adcs-worker.log\" \u003e\u003e ~/supercronic/adcs.cron \u0026\u0026 \\\n      sudo echo \"0 1 * * * rm -rf $path/storage/logs/adcs-octane.log \u0026\u0026 touch $path/storage/logs/adcs-octane.log\" \u003e\u003e ~/supercronic/adcs.cron \u0026\u0026 \\\n      sudo echo \"0 1 * * * rm -rf $path/storage/logs/nginx-access.log \u0026\u0026 touch $path/storage/logs/nginx-access.log\" \u003e\u003e ~/supercronic/adcs.cron \u0026\u0026 \\\n      sudo echo \"0 1 * * * rm -rf $path/storage/logs/nginx-error.log \u0026\u0026 touch $path/storage/logs/nginx-error.log\" \u003e\u003e ~/supercronic/adcs.cron\n      ```\n      \u003e Sesuaikan path `/var/www/adcs` dengan lokasi direktori proyek\n9. Install **supervisor** untuk aplikasi:\n    - `sudo apt install supervisor`\n    - `sudo chown -R www-data:www-data /var/www/`\n    - `nano /etc/supervisor/conf.d/adcs-supervisor.conf`\n    - Masukkan konfigurasi berikut:\n      \u003cdiv style=\"margin-top: 21px\"\u003e\n\n      ```\n      [supervisord]\n      nodaemon=false\n      logfile=/dev/null\n      logfile_maxbytes=0\n      pidfile=/run/supervisord.pid\n      \n      [program:adcs-cron]\n      process_name=%(program_name)s_%(process_num)02d\n      command=/root/go/bin/supercronic /root/supercronic/adcs.cron\n      autostart=true\n      autorestart=true\n      user=root\n      numprocs=1\n      redirect_stderr=true\n      stdout_logfile=/var/www/adcs/storage/logs/adcs-cron.log\n      stdout_logfile_maxbytes=0\n      stopwaitsecs=3600\n       \n      [program:adcs-worker]\n      process_name=%(program_name)s_%(process_num)02d\n      command=php /var/www/adcs/artisan queue:work database --sleep=3 --tries=3\n      autostart=true\n      autorestart=true\n      user=root\n      numprocs=8\n      redirect_stderr=true\n      stdout_logfile=/var/www/adcs/storage/logs/adcs-worker.log\n      stdout_logfile_maxbytes=0\n      stopwaitsecs=3600\n       \n      [program:adcs-octane]\n      process_name=%(program_name)s_%(process_num)02d\n      command=php /var/www/adcs/artisan octane:start --max-requests=500\n      autostart=true\n      autorestart=true\n      user=root\n      numprocs=1\n      redirect_stderr=true\n      stdout_logfile=/var/www/adcs/storage/logs/adcs-octane.log\n      stdout_logfile_maxbytes=0\n      stopwaitsecs=3600\n      ```\n\n      \u003c/div\u003e\n\n      \u003e Sesuaikan `/var/www/adcs` dengan lokasi direktori proyek\n\n    - `sudo supervisorctl reread`\n    - `sudo supervisorctl update`\n    - `sudo supervisorctl restart all` \u003cbr/\u003e\n\n\u003e #### 📝 Informasi\n\u003e - Pastikan ekstensi PHP yang dibutuhkan Laravel `v8` sudah terpasang pada server, sesuai dokumentasi [berikut](https://laravel.com/docs/8.x/deployment)\n\n\u003e #### 💡 Opsional\n\u003e - Untuk mempercepat performa aplikasi, jalankan `php artisan optimize` saat setelah update source code pada aplikasi\n\n\u003e #### 👌 Rekomendasi\n\u003e - Gunakan OS berbasis Linux (e.g. Ubuntu 20.04.3 LTS) \u003cbr/\u003e\n\u003e - Gunakan Web Server [Nginx](https://nginx.org/en/download.html), [Apache2](https://httpd.apache.org/download.cgi), atau [LiteSpeed](https://openlitespeed.org/Downloads/)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fezralazuardy%2Fadcs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fezralazuardy%2Fadcs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fezralazuardy%2Fadcs/lists"}