Skip to content

Latest commit

 

History

History
312 lines (257 loc) · 13.2 KB

README.md

File metadata and controls

312 lines (257 loc) · 13.2 KB
Laravel Docker Production Node Version NPM Version PHP Version PWA Support

📦 simase

Asset Management System for PT Perusahaan Listrik Negara (Persero).

🔨 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.

🤖 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 Excel
  10. Laravel Fluent
  11. Laravel Octane optional
  12. Laravel Cloudflare optional
  13. Laravel Sail optional
  14. PHP PSR2 Coding Style Standard
  15. PHPStan (with Larastan extension)
  16. Inertia.js
  17. Inertia.js Tables
  18. Vue.js
  19. Webpack
  20. Supercronic
  21. Supervisor
  22. MySQL 5.x
  23. Swoole optional
  24. Github Action CI/CD optional
  25. Docker optional
  26. Sentry optional
  27. npm optional

👨‍💻 Getting Started

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

🐋 Docker

Langkah instalasi containerized 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

  • Untuk kebutuhan running aplikasi, Docker Image sudah tersedia pada laman berikut.
  • Jika menggunakan OS Windows, jalankan Laravel Sail dalam Windows WSL v2
  • 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. npm v8
  6. Laravel Homestead / Laravel Valet optional

🖥️ Installation

  1. Buat MySQL database untuk aplikasi:
    • mysql -u root -p
    • create database simase;
    • create user 'simase'@'localhost' identified by 'simase';
    • grant all privileges on simase.* to 'simase'@'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. npm v8
  6. Nginx / Apache2 / LiteSpeed
  7. Supercronic
  8. Supervisor

🖥️ Installation

  1. Buat MySQL database untuk aplikasi:

    • mysql -u root -p
    • create database simase;
    • create user 'simase'@'localhost' identified by 'simase';
    • grant all privileges on simase.* to 'simase'@'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

      </div>
      
    • 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/simase.cron && \
      sudo echo "path=/var/www/simase/web" >> ~/supercronic/simase.cron && \
      sudo echo "* * * * * php $path/artisan schedule:run >> /dev/null 2>&1" >> ~/supercronic/simase.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/laravel.log && touch $path/storage/logs/laravel.log" >> ~/supercronic/simase.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/simase-cron.log && touch $path/storage/logs/simase-cron.log" >> ~/supercronic/simase.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/simase-worker.log && touch $path/storage/logs/simase-worker.log" >> ~/supercronic/simase.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/simase-octane.log && touch $path/storage/logs/simase-octane.log" >> ~/supercronic/simase.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/simase-horizon.log && touch $path/storage/logs/simase-horizon.log" >> ~/supercronic/simase.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/nginx-access.log && touch $path/storage/logs/nginx-access.log" >> ~/supercronic/simase.cron && \
      sudo echo "0 1 * * * rm -rf $path/storage/logs/nginx-error.log && touch $path/storage/logs/nginx-error.log" >> ~/supercronic/simase.cron

      Sesuaikan path /var/www/simase/web 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/simase-supervisor.conf

    • Masukkan konfigurasi berikut:

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

      Sesuaikan /var/www/simase/web 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