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.
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.
- Laravel
v8
- Laravel Eloquent
- Laravel Events
- Laravel Queues
- Laravel Task Scheduling
- Laravel Mix
- Laravel Broadcasting
- Laravel Jetstream
- Laravel Fluent
- Laravel Octane optional
- Laravel Cloudflare optional
- Laravel Sail optional
- PHP PSR2 Coding Style Standard
- PHPStan (with Larastan extension)
- Inertia.js
- Vue.js
- Webpack
- Supercronic
- Supervisor
- MySQL
v5
- PHP MQTT
- Pusher
- Swoole optional
- Github Action CI/CD optional
- Docker optional
- Sentry optional
- Yarn optional
Ikuti salah satu dari langkah berikut untuk melakukan deploy aplikasi pada tahap development.
Langkah instalasi dockerized application dengan β΅ Laravel Sail untuk memudahkan proses deployment aplikasi
- PHP
v8.0
- Composer
v2
- Docker
- Docker for Windows
v4.0.1
- Docker for Linux
v4.0.1
- Docker for Mac
v20.10
- Docker for Windows
- Clone repository ini ke local environment, lalu checkout ke
development
branch - Buat file
.env
dengan menyalin file.env.example
, lalu konfigurasikan seperti berikut:- Ubah
APP_ENV
menjadilocal
- Ubah
APP_DEBUG
menjaditrue
- Ubah
composer i --ignore-platform-reqs
vendor/bin/sail up
- 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
- Pelajari perintah Laravel Sail pada dokumentasi berikut
Langkah tradisional untuk melakukan deploy aplikasi pada local atau self-hosted environment
- PHP
v8.0
- Composer
v2
- MySQL Server
v5.7
- NodeJS
v16
- Yarn
v1
- Laravel Homestead / Laravel Valet optional
- 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;
- Clone repository ini ke local environment, lalu checkout ke
development
branch - Buat file
.env
dengan menyalin file.env.example
, lalu konfigurasikan seperti berikut:- Ubah
APP_ENV
menjadilocal
- Ubah
APP_DEBUG
menjaditrue
- Ubah
composer i
php artisan app:install
- Pastikan ekstensi PHP yang dibutuhkan Laravel
v8
sudah terpasang pada local development environment, sesuai dokumentasi berikut
- 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
- 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
Ikuti langkah berikut ini untuk melakukan deploy aplikasi pada tahap staging atau production.
Langkah tradisional untuk melakukan deploy aplikasi pada local atau self-hosted environment
- PHP
v8.0
- Composer
v2
- MySQL Server
v5.7
- NodeJS
v16
- Yarn
v1
- Nginx / Apache2 / LiteSpeed
- Supercronic
- Supervisor
- 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;
- Clone repository ini ke server, lalu checkout ke
main
branch - Buat file
.env
dengan menyalin file.env.example
, lalu konfigurasikan seperti berikut:- Ubah
APP_ENV
menjadiproduction
- Ubah
APP_DEBUG
menjadifalse
- Ubah
composer i --no-dev
php artisan app:install
- Konfigurasikan Web Server dengan path Document Root mengarah ke lokasi direktori
public
pada proyek - Install redis-server untuk aplikasi:
sudo apt install redis-server
sudo nano /etc/redis/redis.conf
, lalu ubahsupervised no
menjadisupervised systemd
sudo service redis-server restart
- 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
-
- 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
-
- Pastikan ekstensi PHP yang dibutuhkan Laravel
v8
sudah terpasang pada server, sesuai dokumentasi berikut
- Untuk mempercepat performa aplikasi, jalankan
php artisan optimize
saat setelah update source code pada aplikasi