本篇文章將介紹如何在 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>
- Command Line
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路徑的作法
- 可參閱linux 指令,包括
- 新增群組寫入許可並在將來的子目錄上設定群組 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, 後面的大括號+右斜線是遞迴,意即這個資料夾下面也做一樣的事情(複寫改權限)
- chmod 2775 意義: https://forums.oscommerce.com/topic/352153-is-chmod-2775-secure/
- 把當下的子資料夾也變成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
- sudo yum list installed | grep php
- 刪除 phpinfo.php 檔案。雖然這可能是有用的資訊,但基於安全因素,不應將其廣播至網際網路。
$ rm /var/www/html/phpinfo.php
- 在 Apache 文件根資料夾中建立 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)
- 安裝Mysql
-
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
- 安裝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
恭喜! 大功告成囉!
-