在 AWS EC2 上建立 LARAVEL 專案

by 班陳
laravel-1
 本篇文章將介紹如何在 AWS 上建立一個 Laravel 專案

可以分為三大塊

1. 建立 Instance
2. SSH 連線至 Server
3. Server 環境設定

建立 Instance

  • 選用AMI
    • 套件管理工作: Yum

SSH 連線至 Server

  • 聽 80 Port並新增連線
    • Dashboard→instance→security group→inbound
  • 改根目錄為:
    • /var/html/<projectName>/public
      • Allow Override: All
      • 因為對外的連接點是public裡的index, 而本機valet因為已經設好了所以不用此設定
  • SSH 連線
    • Command Line
      ssh -i ~/.ssh/mykeypair.pem ec2-user@<yourPublicIP>
      

Server 環境設定

  • 安裝PHP
    sudo yum install php72
    
  • 安裝套件
    sudo yum install php72-mbstring
    sudo yum install php72-bcmath
    sudo yum install php72-pdo
    sudo yum install php72-mysqlnd
    sudo yum install php72-gd.x86_64
    
  • Apache 設置
    • 安裝

      sudo yum install httpd24
      
    • 啟動

      sudo service httpd start
      
    • 設定開機自動重啟

      sudo chkconfig httpd on
      
    • 確認Httpd已啟用

      [ec2-user ~]$ chkconfig --list httpd
      httpd           0:off   1:off   2:on    3:on    4:on    5:on    6:off
      
    • 安裝 SSL module

      sudo yum install mod24_ssl
      
    • 設定檔案許可

      • 預設在/var/www裡的檔案只給root用 但我們要給es2-user也可以用 所以須要設定 這邊是將 ec2-user 新增至 apache 群組,以向 apache 群組授予 /var/www 目錄的所有權,並指派寫入許可。
      • 將使用者 ( ec2-user) 新增至 apache 群組: $ sudo usermod -a -G apache ec2-user
      • 登出並重新登入,以取得新的群組並驗證成員資格。
        • $ exit
        • $ groups
        • 原本是ec2-user wheel, 在變更及exit再重新連接後 會變成 ec2-user wheel apache
      • 將 /var/www 的群組所有權及其內容變更為 apache 群組。
        • $ sudo chown -R ec2-user:apache /var/www
        • 驗證一下是否成功
        • Ref: http://linux.vbird.org/linux_basic/0220filemanager.php
          • 可參閱linux 指令,包括find、exec、-p、-t、加到$PATH路徑的作法
        • 新增群組寫入許可並在將來的子目錄上設定群組 ID,變更 /var/www 及其子目錄的目錄許可。
          • 把當下的子資料夾也變成2775的權限
            sudo chmod 2775 /var/www(
            
          • 把之後加進去的資料夾也變成2775的權限
            find /var/www -type d -exec sudo chmod 2775 {} \;
            
          • 現在,ec2-user (以及 apache 群組未來的任何成員) 可以新增、刪除和編輯 Apache 文件根目錄中的檔案
            • chmod 2775 意義: https://forums.oscommerce.com/topic/352153-is-chmod-2775-secure/
              • The first digit of a 4-character permission (in this case, the “2”) specifies the setuid mode (=4), the setgid mode (=2), and the sticky mode (=1). These values are added together in a manner identical to the read/write/executable permissions above. More information is here.
              • 簡單來說 第一個2的意思是 在這個資料夾下面的子資料笑也會是有相同的權限 意即775
            • Find、type、exec 意義: 以find /var/www -type d -exec sudo chmod 2775 {} ;為例,就是去找/var/www這個資料夾裡 type為directory的東西(即資料夾) 然後做額外的動作(-exec) 設權限為2775, 後面的大括號+右斜線是遞迴,意即這個資料夾下面也做一樣的事情(複寫改權限)
    • 測試LAMP 伺服器

      • 在 Apache 文件根資料夾中建立 PHP 檔案。
        $ echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
        
      • 在 browser 輸入 IP + php位址
        • http://15.164.49.140/phpinfo.php
        • 若無畫面 可以檢查套件是否正確安裝
          • sudo yum list installed | grep php
            • grep後面可以加 php、httpd、mysql等
            • AWS 官方:
              [ec2-user ~]$ sudo yum list installed httpd24 php70 mysql56-server php70-mysqlnd Loaded plugins: priorities, update-motd, upgrade-helper Installed Packages httpd24.x86_64 2.4.25-1.68.amzn1 @amzn-updates mysql56-server.x86_64 5.6.35-1.23.amzn1 @amzn-updates php70.x86_64 7.0.14-1.20.amzn1 @amzn-updates php70-mysqlnd.x86_64 7.0.14-1.20.amzn1 @amzn-updates
              
      • 刪除 phpinfo.php 檔案。雖然這可能是有用的資訊,但基於安全因素,不應將其廣播至網際網路。

        $ rm /var/www/html/phpinfo.php

    • 資料庫伺服器

      • 安裝Mysql
        $ sudo yum install mysql57-server
        
      • 啟動Mysql
        $ sudo service mysqld start
        
      • 設定Mysql於reboot時重啟
        $ sudo chkconfig mysqld on
        
      • 保護資料庫伺服器
        sudo mysql_secure_installation
        
      • 遠端連線
         GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
         FLUSH PRIVILEGES;
        
        • 第一句是說給all 權限給 root 這個帳號,%代表從哪登入都可 (原來是localhost, 意即只有 remote那台本機) 藉password
        • 第二句是立刻動作
        • Sequel Pro就用public IP (AWS裡的)登入 帳號就是上面寫的 (root) 密碼亦同 (password)
    • Composer

      • 安裝composer (可參考官網)
        php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
        php -r "if (hash_file('sha384', 'composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
        php composer-setup.php
        php -r "unlink('composer-setup.php');"
        
      • 把composer移到可以全域使用
        sudo mv composer.phar /usr/local/bin/composer
        
    • Git

      • 安裝sudo yum install -y git
    • 部署

      • Cd 到 /var/www/html資料夾
      • Clone 專案
      • 部署 .env
      • 以Composer安裝composer.json
      • 改 Apache 的預設讀取資料夾位置
        $ sudo vim /etc/httpd/conf/httpd.conf

      裡面要改的內容:

      
      DocumentRoot "/var/www/html/PayMeChien/public" (這個documentRoot不能不設)
      
       Relax access to content within /var/www.
      
      <Directory "/var/www/html/PayMeChien/public"
      ;> (這個Directory不能不設, AllowOverride也要改成All)
          AllowOverride All
          # Allow open access:
          Require all granted
      </Directory>
      

      – 重啟apache
      $ sudo service httpd restart

      恭喜! 大功告成囉!

You may also like

Leave a Comment