在 Server 上部署 Laravel 專案

前言

本篇紀錄如何在 AWS EC2 上部署 Laravel 專案
主要有以下重點:

  1. LAMP 部署
  2. Composer 部署
  3. Laravel 部署

規格

  • Amazon Linux AMI 2018.03.0 (HVM), SSD Volume Type

LAMP

PHP

  • 安裝 PHP

    sudo yum install php72;php -v
  • 安裝 PHP Extension

    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

  • 安裝 Apache

    sudo yum install httpd24
  • 啟動 Apache

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

    sudo chkconfig httpd on
  • 確認 httpd 已啟用

    chkconfig --list httpd
  • 設定 AWS security inbound

  • 測試 Apache 運作,拜訪 IP

  • 安裝 SSL module

    sudo yum install mod24_ssl

MySQL

  • 安裝 MySQL

    sudo yum install mysql57-server
  • 啟動 MySQL

    sudo service mysqld start
  • 設定 MySQL 於 Reboot 時自動重啟

    sudo chkconfig mysqld on
  • 執行 mysql_secure_installation

    sudo mysql_secure_installation
  • 設定MySQL支援Sequel Pro 遠端連接

    CREATE USER 'root'@'%' IDENTIFIED BY '';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;

設定檔案許可

  • 將您的使用者 (在此案例中為 ec2-user) 新增至 apache 群組

    sudo usermod -a -G apache ec2-user
  • 登出並重新登入,以取得新的群組並驗證您的成員資格。

  1. 登出 (使用 exit 命令或關閉終端機視窗):

    exit
  2. 若要在 apache 群組中驗證您的會員資格,請重新連線至您的執行個體,然後執行下列命令:

    groups
  • 將 /var/www 的群組所有權及其內容變更為 apache 群組。

    sudo chown -R ec2-user:apache /var/www
  • 若要新增群組寫入許可並在將來的子目錄上設定群組 ID,請變更 /var/www 及其子目錄的目錄許可。

    sudo chmod 2775 /var/www
    find /var/www -type d -exec sudo chmod 2775 {} \;
  • 若要新增群組寫入許可,請以遞迴方式變更 /var/www 及其子目錄的檔案許可:

    find /var/www -type f -exec sudo chmod 0664 {} \;

測試您的 LAMP Web 伺服器

  • 在 Apache 文件根資料夾中建立 PHP 檔案。
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
  • 在 Web 瀏覽器中,輸入您剛才建立的檔案 URL。此 URL 為您執行個體的公有 DNS 地址,其後跟隨斜線和檔案名稱。例如: http://my.public.dns.amazonaws.com/phpinfo.php
  • 刪除 phpinfo.php 檔案。雖然這可能是有用的資訊,但基於安全因素,您不應將其廣播至網際網路。
    rm /var/www/html/phpinfo.php

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 可被 Global 使用

    sudo mv composer.phar /usr/local/bin/composer

Git

  • 安裝 Git
    sudo yum install -y git

部署專案

  • Clone 專案

    git clone repositoryAddress
  • 部署 .env

    cp .env.example .env
  • 安裝 Composer

    composer install
  • 產生 key

    php artisan key:generate
  • 建立資料庫

    mysql -uroot
    create database databaseName;
  • 建立表格

    php artisan migrate
  • 若記憶體不足,可劃分磁碟為替代記憶體

    sudo dd if=/dev/zero of=/swapfile bs=1M count=2000;
    sudo chmod 600 /swapfile;
    sudo mkswap /swapfile;
    sudo swapon /swapfile;
    swapon -s;
    sudo vim /etc/fstab;

加入以下 code

/swapfile swap swap defaults 0 0

  • 更改 Apache 的預設讀取資料夾位置
    sudo vim /etc/httpd/conf/httpd.conf
<Direction "/var/www/html">
Allow Override All
</Direction>



以上為正規流程,以下為懶人版

懶人版

sudo yum install -y php72;
sudo yum install -y php72-mbstring;
sudo yum install -y php72-bcmath;
sudo yum install -y php72-pdo;
sudo yum install -y php72-mysqlnd;
sudo yum install -y httpd24;
sudo yum install -y sudo yum install php72-gd.x86_64
sudo service httpd start;
sudo chkconfig httpd on;
sudo yum install -y mod24_ssl;
sudo yum install -y mysql57-server;
sudo service mysqld start;
sudo chkconfig mysqld on;
sudo usermod -a -G apache ec2-user;
sudo chown -R ec2-user:apache /var/www;
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
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');";
sudo mv composer.phar /usr/local/bin/composer;
sudo yum install -y git;
sudo php -v
  • 設定 AWS security inbound

  • 測試 Apache 運作,拜訪 IP

  • 執行 mysql_secure_installation

    sudo mysql_secure_installation
  • 設定MySQL支援Sequel Pro 遠端連接

    CREATE USER 'root'@'%' IDENTIFIED BY '';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'  WITH GRANT OPTION;FLUSH PRIVILEGES;
  • 登出並重新登入,以取得新的群組並驗證您的成員資格。

  1. 登出 (使用 exit 命令或關閉終端機視窗):

    exit
  2. 若要在 apache 群組中驗證您的會員資格,請重新連線至您的執行個體,然後執行下列命令:

    groups
  • 在 Apache 文件根資料夾中建立 PHP 檔案。
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
  • 在 Web 瀏覽器中,輸入您剛才建立的檔案 URL。此 URL 為您執行個體的公有 DNS 地址,其後跟隨斜線和檔案名稱。例如: http://my.public.dns.amazonaws.com/phpinfo.php

  • 刪除 phpinfo.php 檔案。雖然這可能是有用的資訊,但基於安全因素,您不應將其廣播至網際網路。

    rm /var/www/html/phpinfo.php
  • Clone 專案

    git clone repositoryAddress
  • 部署 .env

    cp .env.example .env
  • 安裝 Composer

    composer install
  • 產生 key

    php artisan key:generate
  • 建立資料庫

    mysql -uroot
    create database databaseName;
  • 建立表格

    php artisan migrate
  • 若記憶體不足,可劃分磁碟為替代記憶體

    sudo dd if=/dev/zero of=/swapfile bs=1M count=2000;
    sudo chmod 600 /swapfile;
    sudo mkswap /swapfile;
    sudo swapon /swapfile;
    swapon -s;
    sudo vim /etc/fstab;

加入以下 code

/swapfile swap swap defaults 0 0

  • 更改 Apache 的預設讀取資料夾位置
    sudo vim /etc/httpd/conf/httpd.conf
<Direction "/var/www/html">
Allow Override All
</Direction>
  • 重啟 Apache
    sudo service httpd restart

規格

  • GCP- CentOS 7

LAMP

PHP

  • 更新鏡像站

    yum install epel-release;
    rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
  • 安裝 PHP

    sudo apt-get install php72;php -v
  • 安裝 PHP Extension

    sudo apt-get install php7.2-mbstring
sudo apt-get install php7.2-bcmath
sudo apt-get install php7.2-mysqlnd
sudo apt-get install php7.2-gd
sudo apt-get install php-simplexml
sudo apt-get install php7.2-zip
sudo apt-get install php7.2-curl
sudo apt install zip;
sudo apt install unzip

Apache

  • 安裝 Apache

    sudo apt install apache2
  • 啟動 Apache

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

    sudo systemctl enable apache2
  • 確認 Apache 已啟用

    sudo systemctl is-enabled apache2
  • 設定 AWS security inbound

  • 測試 Apache 運作,拜訪 IP

  • 啟動 SSL module

    sudo a2enmod ssl;
    sudo service apache2 restart

MySQL

  • 安裝 MySQL

    sudo apt install mysql-server
  • 啟動 MySQL

    sudo systemctl start mysql
  • 設定 MySQL 於 Reboot 時自動重啟

    sudo systemctl is-enabled mysql
  • 執行 mysql_secure_installation

    sudo mysql_secure_installation
  • 設定MySQL支援Sequel Pro 遠端連接

    CREATE USER 'root'@'%' IDENTIFIED BY 'yourPassword';
    GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
    FLUSH PRIVILEGES;
  • GCP 要特別開權限

    LOCAL_IP=$(curl  http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip \
    -H "Metadata-Flavor: Google")
    sudo sed -i "s|bind-address.*|bind-address = $LOCAL_IP|" /etc/mysql/mysql.conf.d/mysqld.cnf

更多設定可參考官方文件

設定檔案許可

  • 將您的使用者 (在此案例中為 ec2-user) 新增至 apache 群組

    sudo usermod -a -G www-data yourUserName
  • 登出並重新登入,以取得新的群組並驗證您的成員資格。

  1. 登出 (使用 exit 命令或關閉終端機視窗):

    exit
  2. 若要在 apache 群組中驗證您的會員資格,請重新連線至您的執行個體,然後執行下列命令:

    groups
  • 將 /var/www 的群組所有權及其內容變更為 apache 群組。

    sudo chown -R yourUserName:www-data /var/www
  • 若要新增群組寫入許可並在將來的子目錄上設定群組 ID,請變更 /var/www 及其子目錄的目錄許可。

    sudo chmod 2775 /var/www
    find /var/www -type d -exec sudo chmod 2775 {} \;
  • 若要新增群組寫入許可,請以遞迴方式變更 /var/www 及其子目錄的檔案許可:

    find /var/www -type f -exec sudo chmod 0664 {} \;

測試您的 LAMP Web 伺服器

  • 在 Apache 文件根資料夾中建立 PHP 檔案。
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
  • 在 Web 瀏覽器中,輸入您剛才建立的檔案 URL。此 URL 為您執行個體的公有 DNS 地址,其後跟隨斜線和檔案名稱。例如: http://my.public.dns.amazonaws.com/phpinfo.php
  • 刪除 phpinfo.php 檔案。雖然這可能是有用的資訊,但基於安全因素,您不應將其廣播至網際網路。
    rm /var/www/html/phpinfo.php

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 可被 Global 使用

    sudo mv composer.phar /usr/local/bin/composer

Git

  • 安裝 Git
    sudo apt install -y git

部署專案

  • Clone 專案

    git clone repositoryAddress
  • 部署 .env

    cp .env.example .env
  • 安裝 Composer

    composer install
  • 產生 key

    php artisan key:generate
  • 確認 MySQL root 登入方式

    SELECT user, plugin, host FROM mysql.user;
  • 更改登入 root 的方式

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword';
    FLUSH PRIVILEGES
  • 建立資料庫

    mysql -uroot
    create database databaseName;
  • 建立表格

    php artisan migrate
  • 若記憶體不足,可劃分磁碟為替代記憶體

    sudo dd if=/dev/zero of=/swapfile bs=1M count=2000;
    sudo chmod 600 /swapfile;
    sudo mkswap /swapfile;
    sudo swapon /swapfile;
    swapon -s;
    sudo vim /etc/fstab;

加入以下 code

/swapfile swap swap defaults 0 0

  • 更改 Apache 的預設讀取資料夾位置
    sudo vim /etc/httpd/conf/httpd.conf
<Direction "/var/www/html">
Allow Override All
</Direction>



以上為正規流程,以下為懶人版

懶人版

sudo yum install -y php72;
sudo yum install -y php72-mbstring;
sudo yum install -y php72-bcmath;
sudo yum install -y php72-pdo;
sudo yum install -y php72-mysqlnd;
sudo yum install -y httpd24;
sudo yum install php72-gd.x86_64
sudo service httpd start;
sudo chkconfig httpd on;
sudo yum install -y mod24_ssl;
sudo yum install -y mysql57-server;
sudo service mysqld start;
sudo chkconfig mysqld on;
sudo usermod -a -G apache ec2-user;
sudo chown -R ec2-user:apache /var/www;
sudo chmod 2775 /var/www
find /var/www -type d -exec sudo chmod 2775 {} \;
find /var/www -type f -exec sudo chmod 0664 {} \;
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');";
sudo mv composer.phar /usr/local/bin/composer;
sudo yum install -y git;
sudo php -v
  • 設定 AWS security inbound

  • 測試 Apache 運作,拜訪 IP

  • 執行 mysql_secure_installation

    sudo mysql_secure_installation
  • 設定MySQL支援Sequel Pro 遠端連接

    CREATE USER 'root'@'%' IDENTIFIED BY '';GRANT ALL PRIVILEGES ON *.* TO 'root'@'%'  WITH GRANT OPTION;FLUSH PRIVILEGES;
  • 登出並重新登入,以取得新的群組並驗證您的成員資格。

  1. 登出 (使用 exit 命令或關閉終端機視窗):

    exit
  2. 若要在 apache 群組中驗證您的會員資格,請重新連線至您的執行個體,然後執行下列命令:

    groups
  • 在 Apache 文件根資料夾中建立 PHP 檔案。
echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php
  • 在 Web 瀏覽器中,輸入您剛才建立的檔案 URL。此 URL 為您執行個體的公有 DNS 地址,其後跟隨斜線和檔案名稱。例如: http://my.public.dns.amazonaws.com/phpinfo.php

  • 刪除 phpinfo.php 檔案。雖然這可能是有用的資訊,但基於安全因素,您不應將其廣播至網際網路。

    rm /var/www/html/phpinfo.php
  • Clone 專案

    git clone repositoryAddress
  • 部署 .env

    cp .env.example .env
  • 安裝 Composer

    composer install
  • 產生 key

    php artisan key:generate
  • 建立資料庫

    mysql -uroot
    create database databaseName;
  • 建立表格

    php artisan migrate
  • 若記憶體不足,可劃分磁碟為替代記憶體

    sudo dd if=/dev/zero of=/swapfile bs=1M count=2000;
    sudo chmod 600 /swapfile;
    sudo mkswap /swapfile;
    sudo swapon /swapfile;
    swapon -s;
    sudo vim /etc/fstab;

加入以下 code

/swapfile swap swap defaults 0 0

  • 更改 Apache 的預設讀取資料夾位置
    sudo vim /etc/httpd/conf/httpd.conf
<Direction "/var/www/html">
Allow Override All
</Direction>
  • 重啟 Apache
    sudo service httpd restart

確認 OS 種類以及版本

  • 使用 lsb_release , 如果沒安裝的話,安裝它

    sudo apt-get install lsb-release
  • 查詢用法

    lsb_release --help

輸出如下:

-h, --help         show this help message and exit
-v, --version show LSB modules this system supports
-i, --id show distributor ID
-d, --description show description of this distribution
-r, --release show release number of this distribution
-c, --codename show code name of this distribution
-a, --all show all of the above information
-s, --short show requested information in short format

  • 根據上面的資訊,想查詢明細的話

    lsb_release -a
  • 只想知道 Kernel 版本的話

    uname -r
Kubernetes Engine - 入門 使用 `Laravel` `template` 與 `blade`

留言

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×