/adcs

πŸ–₯️ Automated Autonomous Drone Communication System Manager

Primary LanguagePHP

Laravel Docker Node Version Yarn Version PHP Version PWA Support

πŸ–₯️ adcs

A manager and backend server for Automated Autonomous Drone Communication System.

πŸ”¨ Built with Laravel Jetstream and Inertia.js for Single Page Application builder (PWA enabled).

⚑ Supercharged with Laravel Octane for massive server performance boost.

⚠️ Important Notes

  • Swoole need to be installed in the server in order to use Laravel Octane.
  • Please respect the Laravel Octane rules and limitations in order to avoid memory leaks.

πŸ€– Runtime Components

In order to test the ADCS functionalities, you need to run several component instance based on this repository. Based on the given topology below, you need to run the Drone instances (min. 1 instance) and the Commander Server instance.

πŸ—ΊοΈ Topology

ADCS Software Topology


βœ… Technologies & Standards

  1. Laravel v8
  2. Laravel Eloquent
  3. Laravel Events
  4. Laravel Queues
  5. Laravel Task Scheduling
  6. Laravel Mix
  7. Laravel Broadcasting
  8. Laravel Jetstream
  9. Laravel Fluent
  10. Laravel Octane optional
  11. Laravel Cloudflare optional
  12. Laravel Sail optional
  13. PHP PSR2 Coding Style Standard
  14. PHPStan (with Larastan extension)
  15. Inertia.js
  16. Vue.js
  17. Webpack
  18. Supercronic
  19. Supervisor
  20. MySQL v5
  21. PHP MQTT
  22. Pusher
  23. Swoole optional
  24. Github Action CI/CD optional
  25. Docker optional
  26. Sentry optional
  27. Yarn optional

πŸ‘¨β€πŸ’» Getting Started

Ikuti salah satu dari langkah berikut untuk melakukan deploy aplikasi pada tahap development.

πŸ‹ Docker

Langkah instalasi dockerized application dengan β›΅ Laravel Sail untuk memudahkan proses deployment aplikasi

βœ”οΈ Requirement

  1. PHP v8.0
  2. Composer v2
  3. Docker

πŸ–₯️ Installation

  1. Clone repository ini ke local environment, lalu checkout ke development branch
  2. Buat file .env dengan menyalin file .env.example, lalu konfigurasikan seperti berikut:
    • Ubah APP_ENV menjadi local
    • Ubah APP_DEBUG menjadi true
  3. composer i --ignore-platform-reqs
  4. vendor/bin/sail up

πŸ“ Informasi

  • Jika menggunakan OS Windows, jalankan Laravel Sail dalam Windows WSL v2
  • Akses aplikasi via web pada alamat http://127.0.0.1
  • Alamat URL dan port aplikasi yang digunakan Laravel Sail sesuai konfigurasi pada .env

πŸ‘Œ Rekomendasi

  • Pelajari perintah Laravel Sail pada dokumentasi berikut

🏑 Self Hosted

Langkah tradisional untuk melakukan deploy aplikasi pada local atau self-hosted environment

βœ”οΈ Requirement

  1. PHP v8.0
  2. Composer v2
  3. MySQL Server v5.7
  4. NodeJS v16
  5. Yarn v1
  6. Laravel Homestead / Laravel Valet optional

πŸ–₯️ Installation

  1. Buat MySQL database untuk aplikasi:
    • mysql -u root -p
    • create database adcs;
    • create user 'adcs'@'localhost' identified by 'adcs';
    • grant all privileges on adcs.* to 'adcs'@'localhost';
    • flush privileges;
    • exit;
  2. Clone repository ini ke local environment, lalu checkout ke development branch
  3. Buat file .env dengan menyalin file .env.example, lalu konfigurasikan seperti berikut:
    • Ubah APP_ENV menjadi local
    • Ubah APP_DEBUG menjadi true
  4. composer i
  5. php artisan app:install

πŸ“ Informasi

  • Pastikan ekstensi PHP yang dibutuhkan Laravel v8 sudah terpasang pada local development environment, sesuai dokumentasi berikut

πŸ’‘ Opsional

  • Gunakan php artisan serve untuk membuka aplikasi via PHP Built-in Web Server
  • Gunakan php artisan queue:work database untuk testing fitur Queues
  • Gunakan php artisan schedule:run untuk testing fitur Task Scheduling
  • Gunakan php artisan optimize saat setelah proses development untuk mempercepat performa aplikasi

πŸ‘Œ Rekomendasi

  • Gunakan composer dev untuk optimalisasi Laravel Intellisense pada IDE anda
  • Gunakan composer lint untuk menjalankan PHP Linter (Static Code Analaysis)
  • Gunakan local development environment seperti Laravel Homestead / Laravel Valet

πŸš€οΈ Production Deployment

Ikuti langkah berikut ini untuk melakukan deploy aplikasi pada tahap staging atau production.

🏑 Self Hosted

Langkah tradisional untuk melakukan deploy aplikasi pada local atau self-hosted environment

βœ”οΈ Requirement

  1. PHP v8.0
  2. Composer v2
  3. MySQL Server v5.7
  4. NodeJS v16
  5. Yarn v1
  6. Nginx / Apache2 / LiteSpeed
  7. Supercronic
  8. Supervisor

πŸ–₯️ Installation

  1. Buat MySQL database untuk aplikasi:
    • mysql -u root -p
    • create database adcs;
    • create user 'adcs'@'localhost' identified by 'adcs';
    • grant all privileges on adcs.* to 'adcs'@'localhost';
    • flush privileges;
    • exit;
  2. Clone repository ini ke server, lalu checkout ke main branch
  3. Buat file .env dengan menyalin file .env.example, lalu konfigurasikan seperti berikut:
    • Ubah APP_ENV menjadi production
    • Ubah APP_DEBUG menjadi false
  4. composer i --no-dev
  5. php artisan app:install
  6. Konfigurasikan Web Server dengan path Document Root mengarah ke lokasi direktori public pada proyek
  7. Install redis-server untuk aplikasi:
    • sudo apt install redis-server
    • sudo nano /etc/redis/redis.conf, lalu ubah supervised no menjadi supervised systemd
    • sudo service redis-server restart
  8. Install supercronic untuk aplikasi:
    • sudo apt install snap

    • sudo snap install go

    • go get -d github.com/aptible/supercronic

    • cd ~/go/pkg/mod/github.com/aptible/supercronic@v<version>

      Ubah <version> ke versi terakhir supercronic sesuai laman berikut

    • go mod vendor

    • go install

    • source /etc/profile

    • Verifikasi instalasi supercronic dengan perintah supercronic

    • Siapkan cronjob untuk aplikasi:

      rm -rf ~/supercronic && \
      sudo mkdir ~/supercronic && \
      sudo touch ~/supercronic/adcs.cron && \
      sudo echo "path=/var/www/adcs" >> ~/supercronic/adcs.cron && \
      sudo echo "* * * * * php $path/artisan schedule:run >> /dev/null 2>&1" >> ~/supercronic/adcs.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/laravel.log && touch $path/storage/logs/laravel.log" >> ~/supercronic/adcs.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/adcs-cron.log && touch $path/storage/logs/adcs-cron.log" >> ~/supercronic/adcs.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/adcs-worker.log && touch $path/storage/logs/adcs-worker.log" >> ~/supercronic/adcs.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/adcs-octane.log && touch $path/storage/logs/adcs-octane.log" >> ~/supercronic/adcs.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/nginx-access.log && touch $path/storage/logs/nginx-access.log" >> ~/supercronic/adcs.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/nginx-error.log && touch $path/storage/logs/nginx-error.log" >> ~/supercronic/adcs.cron

      Sesuaikan path /var/www/adcs dengan lokasi direktori proyek

  9. Install supervisor untuk aplikasi:
    • sudo apt install supervisor

    • sudo chown -R www-data:www-data /var/www/

    • nano /etc/supervisor/conf.d/adcs-supervisor.conf

    • Masukkan konfigurasi berikut:

      [supervisord]
      nodaemon=false
      logfile=/dev/null
      logfile_maxbytes=0
      pidfile=/run/supervisord.pid
      
      [program:adcs-cron]
      process_name=%(program_name)s_%(process_num)02d
      command=/root/go/bin/supercronic /root/supercronic/adcs.cron
      autostart=true
      autorestart=true
      user=root
      numprocs=1
      redirect_stderr=true
      stdout_logfile=/var/www/adcs/storage/logs/adcs-cron.log
      stdout_logfile_maxbytes=0
      stopwaitsecs=3600
       
      [program:adcs-worker]
      process_name=%(program_name)s_%(process_num)02d
      command=php /var/www/adcs/artisan queue:work database --sleep=3 --tries=3
      autostart=true
      autorestart=true
      user=root
      numprocs=8
      redirect_stderr=true
      stdout_logfile=/var/www/adcs/storage/logs/adcs-worker.log
      stdout_logfile_maxbytes=0
      stopwaitsecs=3600
       
      [program:adcs-octane]
      process_name=%(program_name)s_%(process_num)02d
      command=php /var/www/adcs/artisan octane:start --max-requests=500
      autostart=true
      autorestart=true
      user=root
      numprocs=1
      redirect_stderr=true
      stdout_logfile=/var/www/adcs/storage/logs/adcs-octane.log
      stdout_logfile_maxbytes=0
      stopwaitsecs=3600
      

      Sesuaikan /var/www/adcs dengan lokasi direktori proyek

    • sudo supervisorctl reread

    • sudo supervisorctl update

    • sudo supervisorctl restart all

πŸ“ Informasi

  • Pastikan ekstensi PHP yang dibutuhkan Laravel v8 sudah terpasang pada server, sesuai dokumentasi berikut

πŸ’‘ Opsional

  • Untuk mempercepat performa aplikasi, jalankan php artisan optimize saat setelah update source code pada aplikasi

πŸ‘Œ Rekomendasi