logo

Đang load dữ liệu

logo devmaster

VIỆN CÔNG NGHỆ VÀ ĐÀO TẠO DEVMASTER

Đào tạo - Phần mềm - Cho thuê nhân sự

  • 0969.609.003
  • 0978.611.889
  • Trang chủ
  • Các khoá đào tạo
    • Chuyên đề WEB - PHP

      • Lập trình web với HTML5 - CSS3- JQuery - Bootstrap - Ajax - [36 giờ]
      • Lập trình web frontend - reactjs - [75 giờ]
      • Lập trình web với mã nguồn mở PHP&MYSQL - PHP FRAMEWORK [126 giờ]

      Chuyên đề Mobile

      • Lập trình Games/Apps trên nền tảng Android - [120 giờ]
      • Lập trình Games/Apps trên nền tảng IOS - [120 giờ]

      Chuyên đề JAVA

      • Ngôn ngữ lập trình hướng đối tượng với java - [40 giờ]
      • Lập trình ứng dụng với java - [100 giờ]
      • Lập trình web site với java framework (JPA, HIBERNATE, SPRING MVC, SPRINGBOOT) - [276 giờ]

      Chuyên đề NETWORK/SECURITY

      • Khoá học Quản trị hạ tầng mạng CCNA v6 - [72 giờ]
      • Khoá học quản trị hệ thống với Windows SERVER 2012- [72 giờ]
      • Chuyên gia bảo mật hệ thống CompTIA + - [110 giờ]

      Chuyên đề .NET

      • Nền tảng lập trình hướng đối tượng với C# - [40 giờ]
      • Lập trình ứng dụng WINDOWS FORM - [100 giờ]
      • Lập trình Web với ASP.NET MVC 5, WebAPI - [145 giờ]

      Chuyên đề khác

      • Ngôn ngũ lập trình C/C++ - [80 giờ]
  • Lập trình cho trẻ em
  • Dịch vụ
    • Đào tạo theo như cầu
    • Cung cấp thiết bị - Phần mềm
    • Tư vấn - Thiết kế mạng hạ tầng
    • Tư vấn - Triển khai dịch vụ mạng
    • Tư vấn - Tư vấn, triển khai giám sát hệ thống
    • Thực tập dự án
  • Lịch khai giảng
  • Tin tức
    • Tin tức và sự kiện
    • Tin hoạt động
    • Tin công nghệ
    • Hội thảo, workshop, Codecam
    • Thông tin việc làm
    • Cẩm nang chia sẻ kiến thức
  • Tiện ích
  • Liên hệ

Tin tức và sự kiện

Nov - 2018

02

Deploy Laravel sử dụng Elastic Beanstalk

Tin tức và sự kiện

 

Mở đầu

Có 2 cách để bắt đầu:

  • Sử dụng elastic beanstalk cli
  • Sử dụng aws console

Dùng EB cli

Chuẩn bị

Cài đặt Python

Mọi người lên Google search cách cài đặt Python đối với mỗi môi trường, máy mình có rồi nên upgrade thôi.

Cài đặt awscli

Sau đó thì install awscli

1
2
3
 
pip3 install awscli
 

Cài đặt awsebcli

Và cuối cùng là awsebcli

1
2
3
 
pip3 install awsebcli
 

 

Đọc thêm tại đây Installing the AWS Command Line Interface

Chuẩn bị project

Tất nhiên là không phải deploy 1 project vớ vẩn lên rồi. Mọi người di chuyển terminal vào thư mục project muốn deploy bằng eb và thực hiện các bước tiếp theo.

Elastic Beanstalk Deploy

Khởi tạo application

Dùng lệnh

1
2
3
 
eb init
 

Ở đây, nó sẽ bắt mình nhập aws key với secrect, thế nên là phải mở tab mới chrome, thực hiện bước tiếp theo.

Tạo IAM user

Vào IAM, tạo một user mới.

Sau đó chọn permissions cho hợp lý, còn mình thì cứ full access.

Sau khi tạo xong user, chọn user vừa tạo, chuyển sang tab Security credentials để thêm mới access key bằng cách ấn vào Create access key. Lưu file chứa key lại cho chắc, mình vừa vào lại thì chả biết làm thế nào để xem lại cái secret key cả T.T

Quay lại màn hình terminal lúc nãy, điền key vào và làm tiếp các bước mà nó yêu cầu. Sau khi xong sẽ thấy file gitignore có thay đổi và có thêm 1 thư mục mới tên là .elasticbeanstalk là có vẻ đúng rồi đó.

Khởi tạo môi trường

Đoạn này là đoạn tạo 1 instance ec2 để chạy code của mình đó. Tức là 1 Application có nhiều Environment đó, kiểu thế này này:

Dùng lệnh

1
2
3
 
eb create
 

Đợi vài phút, chúng ta sẽ được phiên bản đầu tiên của project được deploy lên elastic beanstalk. Chúng ta có thể thấy cái CNAME kia hoặc vào aws console, chọn ElasticBeanstalk, chọn environment mà vừa được tạo, sẽ có link để chạy.

Deploy cho những lần sau

Sau khi chúng ta sửa code, fix bugs, hoặc đơn giản là chả làm gì, chúng ta muốn deploy thì dùng lệnh:

1
2
3
 
eb deploy
 

Chú ý 1 tý là cần commit code đã rồi mới deploy. Và thỉnh thoảng nó báo This branch does not have a default environment... bla bla là vì mình init ở develop, muốn deploy thì thêm tên của environment vào sau:

1
2
3
 
eb deploy environment-name-blabla
 

Cơ bản là đã xong, nhưng mà mình deploy Laravel mà, làm như thế này thì vẫn chưa chạy được. Còn phải config composer rồi npm, suppervisord các kiểu nữa cơ mà.

Cấu hình môi trường

  • Vào aws console, chọn ElasticBeanstalk, chọn môi trường mình đang sử dụng.
  • Chọn Configuration > Chọn ô Software
  • Sửa: Document Root thành /public
  • Thêm: Environment properties là các key trong file .env.example của chúng ta

Thật ra thì thằng ElasticBeastalk này cung cấp cho chúng ta các biến môi trường về RDS, Cache,… nọ kia rồi nhưng mà nêu dùng của nó thì mình lại phải sửa code, sửa config .env trong project của mình, thế nên là mình nghĩ ra làm theo cách này, hơi dài với thủ công tí nhưng mà chắc chắn, đọc mấy tutorial khác người ta toàn bảo dùng key

1
2
3
 
RDS_DB_NAME
 

gì đó hay thêm define vào.

Tạo thư mục

1
2
3
 
.ebextensions
 

trong folder project. Cái này để chưa file config chạy các lệnh mà chúng ta vẫn hay làm khi deploy project ấy: migrate, seed, npm dev,...

Biến môi trường

Như đã nói ở trên, chúng ta có thể config biến môi trường như mình làm, hoặc dùng các biến có sẵn của EB, hoặc config trong ebextensions.

Tạo file 00environmentVariables.config:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
option_settings:
   - namespace: aws:elasticbeanstalk:application:environment
     option_name: DB_HOST
     value: mysqldbname.product-app.us-east-1.rds.amazonaws.com
   - option_name: DB_PORT
     value: 3306
   - option_name: DB_NAME
     value: dbname
   - option_name: DB_USER
     value: username
   - option_name: DB_PASS
     value: password
 

Sau đó sửa file config\database.php của chúng ta:

1
2
3
4
5
6
7
8
9
10
11
12
13
 
'mysql' => [
'driver'    => 'mysql',
'host'      => $_ENV['DB_HOST'],
‘port’     => $_ENV['DB_PORT’],
'database'  => $_ENV['DB_NAME'],
'username'  => $_ENV['DB_USER'],
'password'  => $_ENV['DB_PASS'],
'charset'   => 'utf8',
'collation' => 'utf8_unicode_ci',
'prefix'    => '',
],
 

Nếu mà làm bằng tay như mình đã chỉ rồi thì thôi không cần có file này cũng được.

Composer Commands

Tạo file

1
2
3
 
01composer.config:<code class="language-none">
 

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
commands:
   01updateComposer:
      command: export COMPOSER_HOME=/root && /usr/bin/composer.phar self-update
 
option_settings:
   - namespace: aws:elasticbeanstalk:application:environment
     option_name: COMPOSER_HOME
     value: /root
 
container_commands:
   01optimize:
      command: "/usr/bin/composer.phar dump-autoload --optimize"
 

 

Artisan Commands

Tạo file

1
2
3
 
02artisan.config:
 

 

1
2
3
4
5
6
7
 
container_commands:
   01migrateSeed:
      command: "php artisan migrate"
   02seed:
      command: "php artisan db:seed"
 

 

Config Suppervisord

Khi mà dùng queue để gửi mail hay chạy job gì đó thì cần dùng suppervisord. Đây là phần config cái đó.

Tạo file 03supervisor.config:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
 
files:
  "/tmp/new_supervisord_conf":
     mode: "000644"
     owner: root
     group: root
     content: |
       ; Sample supervisor config file.
       ;
       ; For more information on the config file, please see:
       ; http://supervisord.org/configuration.html
 
       [unix_http_server]
       file=/tmp/supervisor.sock   ; (the path to the socket file)
 
       [supervisord]
       logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
       logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
       logfile_backups=10           ; (num of main logfile rotation backups;default 10)
       loglevel=info                ; (log level;default info; others: debug,warn,trace)
       pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
       nodaemon=false               ; (start in foreground if true;default false)
       minfds=1024                  ; (min. avail startup file descriptors;default 1024)
       minprocs=200                 ; (min. avail process descriptors;default 200)
 
       [rpcinterface:supervisor]
       supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
 
       [supervisorctl]
       serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
 
       [program:queue]
       command=php artisan queue:listen --sleep=10
       directory=/var/app/current
       stdout_logfile=/var/app/current/storage/logs/supervisor.log
       redirect_stderr=true
 
  "/opt/elasticbeanstalk/hooks/appdeploy/post/99_supervisor":
     mode: "000777"
     owner: root
     group: root
     content: |
       #!/usr/bin/env bash
       #sudo easy_install supervisor==3.1.3
       #supervisord -c /tmp/new_supervisord_conf
 

Ngoài ra trong project khác nhau thì cần thêm các setup khác nữa tùy vào dự án, như các set up về npm, về nodejs hay bla bla gì đó, có thể tạo thêm file config và xử lý như trên. Chúng ta có thể tìm hiểu thêm ở đây: Advanced Environment Customization with Configuration Files (.ebextensions)

Hoàn thành

Xong xuôi tất cả, chúng ta commit lại code và deploy. Thành quả:

Dùng aws console

Ngoài cách trên chúng ta còn có thể dùng aws console.

Mở aws console, chọn ElasticBeanstalk

  • Chọn
    1
    2
    3
     
    Create a web server environment
     

Ở đây mình đã save lại config env của 1 env khác rồi, và đã deploy được nhiều lần rồi, nên mình chọn load lại

1
2
3
 
existing version
 

 

Cấu hình

  • Chọn
    1
    2
    3
     
    Configure more options
     

    ở bước trên, ta có:

  • Chọn modify Software để sửa lại cấu hình cho project như doc root, env variables,…
  • Chọn Instances để sửa lại cấu hình server.
  • Chọn Database để sửa lại cấu hình cho thằng RDS.
  • Những thứ còn lại mình chưa tìm hiểu 😄

Hoàn thành

  • Chọn Create Environment để bắt đầu, sau đó làm ván war guild chờ nó chạy xong:

Kết luận

  • Chúng ta có thể ssh lên server eb bằng cách:

 

1
2
3
 
eb ssh
 

Nếu mà nó báo lỗi xác thực gì gì đó thì hãy tạo 1 cái Key pair:

Vào Ec2 > Chọn Key pairs ở trong menu NETWORK & SECURITY > Chọn Create key pair

Có file pem rồi copy vào thư mục .ssh trên máy mình là ok.

  • Gõ eb để biết thêm các lệnh khác.
  • Các cách xử lý đối với EB có thể dùng command ebcli và đều có thể thao tác được bằng chuột ở trên aws console.
  • Ngoài ra còn cần phải tạo RDB để chạy DB nữa, các bạn tự mò vì nó nằm ở chỗ Configuration hết rồi.
  • Làm theo hướng dẫn trên có thể sẽ không chạy được 100% vì 1 vài lý do nào đó =)) mình cũng làm theo hướng dẫn của người ta nhưng cũng không suôn sẻ được, phải mày mò khá nhiều chỗ khác nhau và mới thành công để viết được cái bài này.

Nguồn: Sưu tầm từ internet via Viblo

 

Các bài viết cùng chủ đề

KHÓA HỌC LẬP TRÌNH #FULLSTACK TẠI #DEVMASTER – LỘ TRÌNH TOÀN DIỆN TỪ CƠ BẢN ĐẾN CHUYÊN NGHIỆP
KHÓA HỌC LẬP TRÌNH #FULLSTACK TẠI #DEVMASTER – LỘ ...
🔟 Buổi hướng dẫn đồ án
🔟 Buổi hướng dẫn đồ án
KHÉP LẠI MỘT HÀNH TRÌNH
KHÉP LẠI MỘT HÀNH TRÌNH
Tưng bừng ưu đãi khóa học lập trình fullstack với công nghệ JavaSpringBoot
Tưng bừng ưu đãi khóa học lập trình fullstack với ...
Devmaster- Thông báo khai giảng khóa học lập trình cung chuyên gia tháng 8-2023
Devmaster- Thông báo khai giảng khóa học lập trình...
Khóa học lập trình ReactJs khai giảng tháng 7 - 2023 tại devmaster
Khóa học lập trình ReactJs khai giảng tháng 7 - 20...

Các khóa đào tạo chuyên đề

Thiết kế và lập trình Website PHP, Laravel chuyên nghiệp - FullStack
Thiết kế và lập trình Website PHP, Laravel chuyên nghiệp - FullStack
Lập trình ứng dụng trên nền tảng android Lập trình ứng dụng trên nền tảng android
Lập trình Ứng dụng với Công nghệ ASP.NET Core MVC, WebAPI, ReactJS - FullStack

Lập trình Ứng dụng với Công nghệ ASP.NET Core MVC, WebAPI, ReactJS - FullStack
Lập trình ứng dụng với WINDOWS FORM Lập trình ứng dụng với WINDOWS FORM
Lập trình ứng dụng với JAVA (FORM) Lập trình ứng dụng với JAVA (FORM)
Thiết kế và lập trình Ứng dụng với công nghệ Java (Java Framework springBoot, hibernate,...) - FullStack
Thiết kế và lập trình Ứng dụng với công nghệ Java (Java Framework springBoot, hibernate,...) - FullStack
Thiết kế và lập trình website với công nghệ HTML5, CSS3, Javascript, Bootstrapt 4, Jquery Thiết kế và lập trình website với công nghệ HTML5, CSS3, Javascript, Bootstrapt 4, Jquery
Lập trình frontend với reacjs (Full) Lập trình frontend với reacjs (Full)
DEVMASTER
Viện Công Nghệ Và Đào Tạo Devmaster

DEVMASTER ACADEMY

Địa chỉ: Tầng 6 - Tòa nhà VIỆN CÔNG NGHỆ
Số 25, Vũ Ngọc Phan - Láng Hạ - Đống Đa - Hà Nội

Hotline: 0969 609 003 | 0978 611 889

devmaster.contact@gmail.com

hna.tvchung@gmail.com

CÁC KHÓA HỌC CHUYÊN ĐỀ

  • Thiết kế và lập trình Website PHP, Laravel chuyên nghiệp - FullStack
  • Lập trình ứng dụng trên nền tảng android
  • Lập trình Ứng dụng với Công nghệ ASP.NET Core MVC, WebAPI, ReactJS - FullStack
  • Lập trình ứng dụng với WINDOWS FORM
  • Lập trình ứng dụng với JAVA (FORM)
  • Thiết kế và lập trình Ứng dụng với công nghệ Java (Java Framework springBoot, hibernate,...) - FullStack
  • Thiết kế và lập trình website với công nghệ HTML5, CSS3, Javascript, Bootstrapt 4, Jquery
  • Lập trình frontend với reacjs (Full)
Viện Công Nghệ Và Đào Tạo Devmaster

VIỆN CÔNG NGHỆ VÀ ĐÀO TẠO DEVMASTER - Học thực tế * Làm thực tế * Cam kết việc làm
Copyright by Ⓒ DEVMASTER 2015