iT邦幫忙

4

Laravel + MySQL AWS 專案部署

啟用 AWS 服務

EC2 (Server)

啟用一台伺服器

  1. EC2 -> Instances -> Launch Instance
  2. 選擇 AMI:Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type
  3. 選擇 t2.nano(如果還有 Free tier) 或 t3.nano
  4. 跳過 step 3~step 5
  5. Step 6:Configure Security Group:加上 HTTP 和 HTTPS
  6. Step 7:Launch, Create a new key pair 或 Choose an existing key pair(務必保管好鑰匙)
  7. 點 Security Groups -> Create security group(給待會兒的RDS用的)
  8. 輸入 Security group name 和 Description
  9. Inbound rules:加上 Type - MYSQL/Aurora, Source type - Anywhere

RDS (Database)

啟用一個資料庫

  1. Create database
  2. Standard Create -> MySQL -> Free tier
  3. Settings:輸入 DB instance identifier, Master password 和 Confirm password(請記得它們,待會兒會用到)
  4. Connectivity:VPC security group -> Choose existing -> 將預設的 security group 替換成我們剛剛在 EC2 建立的
  5. Additional configuration:輸入 Initial database name(請記得它,待會兒會用到)
  6. Create database

Route 53 (Domain Name)

申請一個網域名稱

  1. Registered domains -> Register Domain
  2. 輸入 domain name, Check 然後付款、信箱驗證,等候申請成功
  3. 回到 Registered domains -> 點擊剛剛申請好的 domain name
  4. Auto renew(自動續約): Disabled
  5. Transfer lock(轉移網域鎖): Enabled
  6. Hosted zones:點擊剛剛申請好的 domain name -> Create Record Set
  7. 在 Name 輸入 www
  8. 在 Value 輸入 Instance 的 IP
  9. Create

Certificate Manager (HTTPS)

將服務從 HTTP 轉為 HTTPS

  1. Request a certificate -> Request a public certificate -> Request a certificate -> 在 Domain name 貼上剛剛申請的 domain name
  2. 順著步驟新增它,驗證並等候

部署

進入 EC2 開始部署程式

  1. 回到 EC2 的 Instances -> 點選剛剛建立的 Instance -> Connect
  2. 按提示下指令,連線進入 Instance

問題與解決:有時候透過 SSH 連線進機器會失敗,原因可能有二:

  1. 當前路進下沒有當初的 Key Pair -> 請切換至有該 Key Pair 的路徑下再次嘗試進入機器
  2. 網路被擋住了(ex. 公司內網擋 SSH 連線) -> 改連其他網路後再試嘗試進入機器
  1. 安裝 APACHE 伺服器並啟動
$ sudo su
$ yum update -y
$ yum install httpd24 -y
$ yum install php72 php72-mysqlnd php72-imap php72-pecl-memcache php72-pecl-apcu php72-gd php72-mbstring -y
$ yum install mod24_ssl -y
$ service httpd start

這時可以在瀏覽器輸入 Instance IP,應該要能否看到 Apache 的預設頁面

  1. 接著安裝 git 並下載專案
$ chkconfig --add httpd
$ chkconfig httpd on
$ yum install git -y
$ cd /var/www/html
$ git clone <你的專案網址>
  1. vi /etc/httpd/conf/httpd.conf,在最下面貼上
Alias / /var/www/html/laravel/public/
<Directory "/var/www/html/laravel/public">
AllowOverride All
Order allow,deny
      allow from all
</Directory>

laravel 請改成自己 github 上專案的名稱

  1. cd 進專案根目錄
  2. vi public/.htaccess 在 RewriteEngine On 下面加上一行 RewriteBase /
  3. 設定環境
$ cp .env.example .env
$ vi .env

.env 需要設定連線至剛才建立的資料庫
DB_CONNECTION=mysql
DB_HOST=< RDS ENDPOINT >
DB_PORT=3306
DB_DATABASE=<RDS 資料庫名稱>
DB_USERNAME=<RDS 使用者,預設為 admin>
DB_PASSWORD=<RDS 密碼>

  1. 給予權限並重啟伺服器
$ chmod -R 777 storage
$ service httpd restart
  1. 安裝 composer,下載相依套件
$ yum install wget -y
$ wget https://getcomposer.org/composer.phar
$ php composer.phar
$ php composer.phar install
  1. 最後產生 key,並且建立資料表
$ php artisan key:generate
$ php artisan session:table
$ php artisan migrate --seed

(如果沒有要 seed 則不用加後面 --seed 參數)

參考網站

https://awsofthings.com/deploying-and-scaling-a-laravel-app-on-aws-1349dcd7d17a/

https://aws.amazon.com/tw/getting-started/hands-on/get-a-domain/

https://blog.25sprout.com/aws-提供免費的-ssl-憑證服務-超簡單懶人包看這裡-9220e2f5bcdb


2 則留言

0
frank_huang
iT邦新手 5 級 ‧ 2020-05-14 14:21:35

感謝大大分享
申請網域可使用no-ip來免費申請
/images/emoticon/emoticon01.gif

以練習來講整套都在AWS上感覺比較完整
但這個讚讚 這樣就有免費網域可以用了!
感謝分享

0
dragonH
iT邦超人 6 級 ‧ 2020-05-14 14:55:16

母湯喔

看起來你的 RDS 是裸奔在 internet 上

最好弄個 VPC

放在 private subnet

然後你的 yum install 那些

可以在創 EC2 時

就寫在 user data 那

這樣創好的時候

他也裝好了

感謝提醒

查了一下VPC等資料,發現我的東西雖然可以跑 但是很不安全架構也有諸多缺陷。不過有點深,之後再慢慢補上

有試著寫shell上傳到user data,可以成功建好環境,方便很多(不然之前因為測試,常常刪掉instance重建,每次都要手動裝環境超麻煩

dragonH iT邦超人 6 級 ‧ 2020-05-20 10:02:58 檢舉

/images/emoticon/emoticon42.gif

我要留言

立即登入留言