Heroku là một nền tảng khá tuyệt vời để deploy ứng dụng web cho nhiều mục đích với nhiều lợi ích mà nó đem lại như kết nối với Github và tự động deploy qua Github, có nhiều tool và "buildpack" đi kèm... Hiện tại Heroku đang cho chúng ta sử dụng dịch vụ một cách miễn phí nhưng đi kèm với một điều kiện là nếu chúng ta không truy cập vào ứng dụng một khoảng thời gian thì ứng dụng sẽ vào trạng thái "sleep" và khi truy cập lại nó sẽ mất khá nhiều thời gian để load (thông thường là 5-10s). Đó là một điều khá là tệ khi phải ngồi đợi trong khoảng thời gian đấy, cảm giác như đang đợi 1 trang "link skip" vậy. sdfsdfsdf
Heroku App Pinger
Có khá nhiều cách để giữ ứng dụng Heroku luôn ở trạng thái "awake" nhưng trong bào viết này mình sẽ dùng một bên thứ ba đó là Uptime Robot. Ý tưởng là mình sẽ dùng Uptime Robot để ping đến trang web của mình sau một khoảng thời gian (n phút) và chỉnh n sao cho n nhỏ hơn thời gian mà ứng dụng sẽ vào trạng thái "sleep" (theo mình tìm hiểu là 30p). Nhược điểm của cách làm này là ứng dụng của chúng ta sẽ bị phụ thuộc vào một bên thứ ba và sẽ không thể khẳng định là ứng dụng sẽ luôn trong trạng thái "wake" và phải có niềm tin =))) Đầu tiên, các bạn vào trang https://uptimerobot.com/ và tạo một tài khoản cho riêng mình
Sau khi đã có tài khoản, mình sẽ vào phần +Monitor và điền các thông số dưới đây
Monitor Type: chọn Ping
Friendly Name: tên của monitor đang tạo
IP (or Host): để link tới ứng dụng heroku mà bạn muốn ping
Monitoring Interval: khoảng thời gian giữa các lần ping (nên để dưới 30p)
Sau khi nhấn Create Monitor thì một monitor được tạo và bạn có thể theo dõi qua bảng Quick Stats ở bên phải màn hình. Bài viết của mình đến đây là hết và chúc các bạn thành công. Gud luk!!
Heroku là mô hình điện toán đám mây với nền tảng là dịch vụ (Platform as a Service - PaaS), nó hỗ trợ rất nhiều các ngôn ngữ lập trình khác nhau như Ruby on Rails, PHP, Python, Java, Node.js, Scala, Clojure... Heroku giúp bạn quên đi những lo toan về cơ sở hạ tầng mà chỉ tập trung vào các ứng dụng bạn cần phát triển. Heroku có rất nhiều các tính năng ưu việt như:
Triển khai nhanh ứng dụng thông qua Git kết hợp với việc sử dụng các kịch bản build.
Có nhiều Addon cài đặt thêm như các ứng dụng, cơ sở dữ liệu...
Khả năng mở rộng quy mô lớn, quy mô độc lập cho từng ứng dụng không ảnh hưởng bởi các chức năng và hiệu suất.
Tách biệt các xử lý bằng dyno (Heroku dyno là một Linux container rút gọn có thể chạy các lệnh người dùng).
Cho phép đăng nhập và truy xuất output của mọi thành phần trên từng dyno.
Heroku cho phép bạn tạo miễn phí các dyno để triển khai các ứng dụng, tuy nhiên dyno miễn phí bị hạn chế là sẽ chuyển sang chế độ ngủ nếu không có truy nhập trong 30 phút. Ngoài ra các gói khác của Heroku là mất phí. Heroku hiện đang là đối thủ của HP Clound service, Openshift, Amazon Web service, Google App Engine, Windows Azure...
Cài đặt Laravel trên Heroku
Heroku có những hỗ trợ lớn với các môi trường PHP như hỗ trợ công cụ composer và trở thành điểm lưu trữ tốt cho các ứng dụng PHP. Trong bài viết này chúng ta sẽ cài đặt một ứng dụng Laravel trên Heroku với tốc độ nhanh chóng và cũng là ví dụ để làm quen với Heroku.
Yêu cầu chuẩn bị trước khi cài đặt
Trước khi thực hiện cài đặt, chúng ta cần chuẩn bị một số công cụ trước như sau:
1. Đăng ký tài khoản Heroku
Đăng ký tài khoản trên Heroku rất nhanh chóng, bạn điền các thông tin vào form đăng ký, click Create Free Account. Mặc định Heroku tạo các tài khoản miễn phí, sau đó khi sử dụng, nếu bạn có yêu cầu sẽ chuyển sang tài khoản mất phí. Một email xác thực sẽ được gửi đến địa chỉ email của bạn, thực hiện click vào đường dẫn xác thực là bạn đã có ngay tài khoản Heroku.
2. Cài đặt Composer trên máy
Composer là công cụ quản lý các phụ thuộc các thư viện lập trình bằng PHP, xem Hướng dẫn cài đặt Composer. #### 3. Cài đặt Heroku Toolbelt (tên khác Heroku CLI - Heroku Command Line Interface).
Heroku CLI là công cụ tạo và quản lý các ứng dụng Heroku từ dòng lệnh/shell trên các hệ điều hành khác nhau: ##### Cài đặt Heroku trên Windows:
Tải các bản cài đặt Heroku về và cài đặt tùy thuộc nền tảng Windows bạn đang sử dụng: windows-32-bit, windows-64-bit. Chú ý, bộ cài này tích hợp cùng với bộ cài Git do Heroku hỗ trợ git để triển khai ứng dụng.
Tham khảo bài viết SSH là gì để biết cách tạo cặp khóa private key và public key. Heroku hỗ trợ cả hai định dạng khóa là RSA và DSA. Để add public key vào Heroku sử dụng câu lệnh:
$ heroku keys:add
Found existing public key: /Users/admin/.ssh/id_rsa.pub
Uploading SSH public key /Users/admin/.ssh/id_rsa.pub... done
Mặc định Heroku sẽ tìm kiếm public key tại đường dẫn ~\.ssh\id_rsa.pub. ### Các bước thực hiện cài đặt Laravel, git push và triển khai trên Heroku
Bước 1: Cài đặt một bản Laravel mới trên máy local.
c:\xampp\htdocs>composer create-project laravel/laravel laravel-heroku-test
Installing laravel/laravel (v5.4.16)
- Installing laravel/laravel (v5.4.16): Downloading (100%)
Created project in laravel-heroku-test
> php -r "file_exists('.env') || copy('.env.example', '.env');"
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 59 installs, 0 updates, 0 removals
- Installing symfony/polyfill-mbstring (v1.3.0): Loading from cache
- Installing symfony/var-dumper (v3.2.7): Downloading (100%)
...
phpunit/phpunit suggests installing phpunit/php-invoker (~1.1)
phpunit/phpunit suggests installing ext-xdebug (*)
Writing lock file
Generating autoload files
> Illuminate\Foundation\ComposerScripts::postUpdate
> php artisan optimize
Generating optimized class loader
The compiled services file has been removed.
> php artisan key:generate
Application key [base64:91uviK378405ctL2vqwNa8vZYf4VDpOFO58lDQpmzdY=] set successfully.
Chỉnh sửa file .gitignore để bỏ qua các file và thư mục không xử lý với git, chỉnh sửa nội dung file này chỉ còn như sau:
Có thể bỏ qua bước thiết lập ngôn ngữ cho ứng dụng vì khi Git push, Heroku sẽ tự động phát hiện đây là ngôn ngữ PHP.
Bước 4: Push ứng dụng Laravel lên Heroku Git.
Đầu tiên tạo local repository, commit source ứng dụng Laravel vào đó.
c:\xampp\htdocs\laravel-heroku-test>git init
Initialized empty Git repository in c:/xampp/htdocs/laravel-heroku-test/.git/
c:\xampp\htdocs\laravel-heroku-test>git add .
warning: LF will be replaced by CRLF in .env.example.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in .gitattributes.
...
c:\xampp\htdocs\laravel-heroku-test>git commit -m "first commit on Heroku"
...
create mode 100644 tests/TestCase.php
create mode 100644 tests/Unit/ExampleTest.php
create mode 100644 webpack.mix.js
c:\xampp\htdocs\laravel-heroku-test>
Do câu lệnh tạo ứng dụng trong heroku đã mặc định tạo remote heroku, chúng ta chỉ việc sử dụng thôi.
c:\xampp\htdocs\laravel-heroku-test>git push heroku master
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 380 bytes | 0 bytes/s, done.
Total 4 (delta 3), reused 0 (delta 0)
remote: Compressing source files... done.
remote: Building source:
remote:
remote: -----> PHP app detected
remote: -----> Bootstrapping...
remote: -----> Installing platform packages...
remote: - php (7.1.3)
remote: - ext-mbstring (bundled with php)
remote: - apache (2.4.20)
remote: - nginx (1.8.1)
remote: -----> Installing dependencies...
remote: Composer version 1.4.1 2017-03-10 09:29:45
remote: Loading composer repositories with package information
remote: Installing dependencies from lock file
remote: Package operations: 31 installs, 0 updates, 0 removals
remote: - Installing doctrine/inflector (v1.1.0): Loading from cache
remote: - Installing erusev/parsedown (1.6.2): Loading from cache
remote: - Installing jakub-onderka/php-console-color (0.1): Loading fro
m cache
remote: - Installing symfony/polyfill-mbstring (v1.3.0): Loading from c
ache
remote: - Installing symfony/var-dumper (v3.2.7): Loading from cache
remote: - Installing psr/log (1.0.2): Loading from cache
remote: - Installing symfony/debug (v3.2.7): Loading from cache
remote: - Installing symfony/console (v3.2.7): Loading from cache
remote: - Installing nikic/php-parser (v3.0.5): Loading from cache
remote: - Installing jakub-onderka/php-console-highlighter (v0.3.2): Lo
ading from cache
remote: - Installing dnoegel/php-xdg-base-dir (0.1): Loading from cache
remote: - Installing psy/psysh (v0.8.3): Loading from cache
remote: - Installing vlucas/phpdotenv (v2.4.0): Loading from cache
remote: - Installing symfony/css-selector (v3.2.7): Loading from cache
remote: - Installing tijsverkoyen/css-to-inline-styles (2.2.0): Loading
from cache
remote: - Installing symfony/routing (v3.2.7): Loading from cache
remote: - Installing symfony/process (v3.2.7): Loading from cache
remote: - Installing symfony/http-foundation (v3.2.7): Loading from cac
he
remote: - Installing symfony/event-dispatcher (v3.2.7): Loading from ca
che
remote: - Installing symfony/http-kernel (v3.2.7): Loading from cache
remote: - Installing symfony/finder (v3.2.7): Loading from cache
remote: - Installing swiftmailer/swiftmailer (v5.4.6): Loading from cac
he
remote: - Installing paragonie/random_compat (v2.0.10): Loading from ca
che
remote: - Installing ramsey/uuid (3.6.1): Loading from cache
remote: - Installing symfony/translation (v3.2.7): Loading from cache
remote: - Installing nesbot/carbon (1.22.1): Loading from cache
remote: - Installing mtdowling/cron-expression (v1.2.0): Loading from c
ache
remote: - Installing monolog/monolog (1.22.1): Loading from cache
remote: - Installing league/flysystem (1.0.37): Loading from cache
remote: - Installing laravel/framework (v5.4.17): Loading from cache
remote: - Installing laravel/tinker (v1.0.0): Loading from cache
remote: Generating optimized autoload files
remote: > Illuminate\Foundation\ComposerScripts::postInstall
remote: > php artisan optimize
remote: Generating optimized class loader
remote: The compiled services file has been removed.
remote: -----> Preparing runtime environment...
remote: -----> Checking for additional extensions to install...
remote: -----> Discovering process types
remote: Procfile declares types -> web
remote:
remote: -----> Compressing...
remote: Done: 16.1M
remote: -----> Launching...
remote: Released v7
remote: https://allaravel-heroku.herokuapp.com/ deployed to Heroku
remote:
remote: Verifying deploy.... done.
To https://git.heroku.com/allaravel-heroku.git
d926a9f..8e4d964 master -> master
c:\xampp\htdocs\laravel-heroku-test>
Ok, như vậy đã push và build xong trên Heroku, Heroku sử dụng Procfile cho quá trình build này. Có thể truy nhập luôn vào đường dẫn mà Heroku thông báo https://allaravel-heroku.herokuapp.com/ hoặc có thể sử dụng câu lệnh:
c:\xampp\htdocs\laravel-heroku-test>heroku open
Khi mở ứng dụng lên tại https://allaravel-heroku.herokuapp.com/ thấy báo lỗi "Whoops, looks like something went wrong.", để xem lỗi rõ hơn, bật chế độ debug lên. Mở file config/app.php sửa debug thành true.
Gói miễn phí của Heroku như đã nói ở trên dyno sẽ chuyển sang chế độ sleep nếu không có request nào trong 30 phút. Mỗi khi dyno ở chế độ ngủ, một request mới đến sẽ làm nó chuyển chế độ sang hoạt động bình thường và mất khoảng 10-15 giây. Chúng ta phải chấp nhận thôi vì đây là gói miễn phí, tuy nhiên có nhiều cách khiến cho dyno không bao giờ chuyển sang chế độ ngủ: ### Sử dụng các service ping:
Các công cụ như Pingdom, Pingometer.com, UptimeRobot, Kaffeine ... sẽ request ứng dụng theo thời gian bạn lựa chọn, như vậy dyno sẽ không bao giờ vào chế độ sleep.
Cài đặt package Heroku self ping:
Không cần sử dụng đến các công cụ bên thứ ba, bạn có thể cài đặt Heroku Self ping để thực hiện ping một đường dẫn nào đó trong một khoảng thời gain.
Lời kết
Heroku là một nền tảng đáng để thử nghiệm, quá trình cài đặt ứng dụng cực nhanh chóng, hơn nữa nó MIỄN PHÍ. Trong bài viết đầu này, chúng ta chỉ làm quen cách cài đặt cơ bản ứng dụng Laravel trên Heroku, trong những bài tiếp theo sẽ tìm hiểu sâu hơn cách thức cài đặt CSDL, thiết lập dyno... và đưa ứng dụng laravel-test chứa toàn bộ các bài ví dụ cho Học Laravel trong 7 ngày lên Heroku.
FirebirD
Đam mê Toán học, Lập trình. Sở thích chia sẻ kiến thức, Phim hài, Bóng đá, Cà phê sáng với bạn bè.
4 Bình luận trong "Cài đặt Laravel trên Heroku miễn phí"
Ducbeo
5 years ago
Phản hồirun: heroku open. toàn bị You don't have permission to access / on this server. ?? chả hiểu tại sao?
Ducbeo
5 years ago
Phản hồiah lỗi do phải thêm /public xin chỉ cách để tự trỏ vào /public ad.thank
FirebirD
5 years ago
Phản hồiHeroku sử dụng file Procfile để nhận biết bắt đầu chạy từ đâu trong project, bạn tạo một file tên Procfile với nội dung: web:vendor/bin/heroku-php-apache2 public/ ở thư mục gốc dự án rồi upload cùng dự án là tự động Heroku sẽ đọc từ đây.
Oliver Russell
3 years ago
Phản hồiIf you want to host a Laravel app on a server, you can also use Cloudways PaaS. With this platform, user can launch a managed laravel server in just a single click without having to manually install or configure the stack.