# Debian lauch a laravel project with Apache ###### `GCP`, `Deployment`, `Apache`, `Laravel6` # 事前 1. 在自己電腦上安裝 gcloud sdk * [macOS](https://formulae.brew.sh/cask/google-cloud-sdk) * [Ubuntu](https://cloud.google.com/sdk/docs/quickstart-debian-ubuntu?hl=zh-tw) * [Windows](https://cloud.google.com/sdk/docs/quickstart-windows?hl=zh-tw) 3. `gcloud init` 4. `gcloud auth login` 5. 查看 project `gcloud config list project` (`gcloud projects create`==PROJECT_ID==) # Step 1 建立執行個體 1. 建立一個名稱為"test1023"的執行個體(GCE): `gcloud compute instances create test1023 --image-project ubuntu-os-cloud --image-family ubuntu-1804-lts` >若要指定網路區域可以下參數 `--zone asia-east1-b`,否則區域為 gcloud init 時設定的那個 >設定映像檔一定要這兩個參數:`--image-project` , `--image-family` * 若全都用預設,就只要下指令: `gcloud compute instances create test1023`即可 * 查看[可用映像檔](https://cloud.google.com/compute/docs/images?hl=zh-tw) 查詢:`gcloud compute images list` * 查看[可用區域](https://cloud.google.com/compute/docs/regions-zones/?hl=zh-tw#available) 查詢:`gcloud compute zones list` * 查詢目前VM個體:`gcloud compute instances list` 2. 進入 `gcloud compute ssh "test1023"` (`gcloud compute ssh --zone "asia-east1-b" "test1023"`) 3. 輸入SSH 鑰匙密碼`Enter passphrase for key '/Users/sarahcheng/.ssh/google_compute_engine':` 4. 開瀏覽器到 [gcloud console](https://console.cloud.google.com/) 將防火牆打開 ![](https://i.imgur.com/qO078qH.png) > 如果要刪除 `gcloud compute instances delete test1023 --zone asia-east1-b` # Step 2 安裝所需套件 * 看作業系統: `lsb_release -a` `cat /etc/*release` ## 2-1 安裝 php 1. 看 php 版本:`php -v`,更新到 7.4 ```= sudo apt upgrade sudo apt -y install lsb-release apt-transport-https ca-certificates sudo wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" | sudo tee /etc/apt/sources.list.d/php.list sudo apt update sudo apt -y install php7.4 sudo apt-get install php7.4-{bcmath,bz2,intl,gd,mbstring,mysql,zip,xml} ``` * 再看一次確認安裝成功 `php -v` * `echo "<?php phpinfo(); ?>" > /var/www/html/phpinfo.php` ## 2-2 安裝 composer * 安裝指令:`curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer` * 查看是否安裝成功:`composer -v` ## 2-3 [安裝 mysql](https://blog.johnsonlu.org/install-mysql-on-ubuntu/) 1. `sudo apt-get install mysql-server` > 若要安裝特定版本`sudo apt-get install mysql-server-5.7` > 若要設密碼:`$sudo mysql_secure_installation` 7. 啟動 mysql-server: `sudo systemctl start mysql` 8. 查看是否成功啟動: `systemctl |grep mysql` 9. 進入 mysql server: `sudo mysql -u root` > 查看目前使用者及其身份驗證方式: `SELECT User, Host, plugin FROM mysql.user;` 1. `CREATE USER 'sarah'@'localhost' IDENTIFIED BY '00000';` 2. 給予新建的使用者存取DB的權限: `GRANT ALL PRIVILEGES ON *.* TO 'sarah'@'localhost';` (*.* 代表所有DB的所有 table) 4. 查看目前 mysql server的使用者: `select user,plugin,authentication_string from mysql.user;` ## 2-4 安裝 Apache 1. 查看Port 80 是否被佔用:`sudo netstat -utlnp | grep 80` (參數意義 udp, tcp, listen, numeric, process) > numeric 的意思是將名稱數字化(IP),例:原本的 localhost 會變成 127.0.0.1 2. `sudo apt install -y apache2`, `sudo systemctl status apache2` 3. 將專案建在 /var/www/html底下不用改任何東西 可直接運行 ``` <!DOCTYPE html> <html> <h1>My First Heading</h1> </html> ``` ## 2-5 安裝 git 1. `sudo apt-get update` 2. `sudo apt-get upgrade -y --allow-unauthenticated` 3. `sudo apt-get install git` # Step 3 部署 github 專案 ## 3-1 專案下載 * `git clone https://github.com/laravel/laravel.git` ## 3-2 Apache 設定 3. 在檔案 /etc/apache2/apache2.conf 中註解 ``` </Directory /var/www/> #Options Indexes FollowSymLinks #AllowOverride None Require all granted </Directory> ``` 5. 在檔案 /etc/apache2/sites-available/000-default.conf 中修改伺服器指向路徑為我們要部署的專案 `DocumentRoot /var/www/html/專案路徑` 2. 讓 Apache 重新載入修改完的設定檔: `sudo apache2ctl graceful` 4. 進入專案安裝套件和設定環境: `cd laravel` 1. `sudo composer install` 2. `mv .env.example .env` 3. 產生 access key: `sudo php artisan key:generate` ## 3-3 資料庫 Operation 1. 進入 `mysql -u sarah -p00000` * `CREATE DATABASE testdb;` * `show databases;` * `use testdb;` * `show tables;` (現在是空的) 2. 另外開一個 ssh 連線過去 2. 進到專案目錄下:`cd laravel` 3. 修改專案的環境設定 .env 檔: `vim .env` ``` DB_CONNECTION=mysql DB_HOST=127.0.0.1 DB_PORT=3306 DB_DATABASE=testdb DB_USERNAME=sarah DB_PASSWORD=00000 ``` 4. 執行指令建立 tabel: `php artisan migrate` (原本git clone 下來的專案就有寫好的 migration了) 3. 回到 mysql * `show tables;` (現在多了三個 table) * 離開 mysql `exit` ## 3-4 更改權限 在專案目錄下: * 修改擁有群組為 www-data `sudo chown -R sarahcheng.www-data .` * "chown" change 擁有者 * "-R" 往下層所有目錄遞迴 * "sarahcheng.www-data" 擁有者.擁有群組 * "." 代表當前目錄 * `sudo chmod -R 2770 ./storage/` * "chmod" change mode * "-R" 往下層所有目錄遞迴 * "2770" 2代表 SGID [參考](http://www.vixual.net/blog/archives/224) * 770分別代表: * 擁有者的存取權限 * 擁有群組的存取權限 * 其他人的存取權限 * "." 代表當前目錄 到專案路徑下看擁有者是否更改成功 `ls -al` * 如何讓路徑存取不用 index.php? http://35.234.18.116/index.php/api/register # P.S. - 目錄 /var/log/apache2 下有 access.log 和 error.log 可以查看 request - GCP instance 的 IP,可在 GCP GUI 複製 `外部 IP`。 - 將舊資料備份 `mysqldump --opt -usarahcheng -p laravel_shop > test.sql` - 透過 ssh 將檔案傳到 GCE instance `gcloud compute scp test.sql test1023: --zone asia-east1-b` - 匯入資料:`mysql -u 使用者名稱 -p 資料庫名稱 < backup.sql` - 查看目前機器中所有開放的 Port ```bash $ sudo netstat -utlnp ``` * 基本上不用安裝[laravel](https://laravel.com/docs/6.x/installation)(不太可能在server上開發),不過還是提供參考指令: ``` 2. `sudo composer global require laravel/installer` 2. `vi ~/.bash_profile` * `export PATH="$HOME/.composer/vendor/bin:$PATH"` 3. `source ~/.bash_profile 4. `laravel -V` ```