# [laravel]laravel筆記:環境建置,安裝與布署
###### tags: `laravel`,`php`
## 環境建置
### ubuntu系統: 安裝tasksel套件
http://skyroxas.tw/ubuntu-%E4%BD%BF%E7%94%A8-tasksel-%E5%BF%AB%E9%80%9F%E9%85%8D%E7%BD%AElamp%E7%92%B0%E5%A2%83/
https://linuxconfig.org/how-to-install-lamp-ubuntu-18-04-bionic-beaver-linux-apache-mysql-php
```c!
$ sudo apt-get install tasksel
$ sudo tasksel install lamp-server
```
---
### win & mac: 安裝與設定xampp
安裝:
https://www.apachefriends.org/zh_tw/index.html
>win系統安裝前請先將UAC關閉
設定:
https://neohsuxoops.blogspot.com/2017/10/xamppmysqlphpmyadmin.html
在win os中登入mysql命令列
https://stackoverflow.com/questions/698914/how-can-i-access-the-mysql-command-line-with-xampp-for-windows
```c!
cd c:\xampp\mysql\bin
mysql.exe -u root --password=urrpassword
mysql.exe -u root --password
mysql.exe -u root -p
```
---
### xampp以外的其他方案
#### laragon
https://laragon.org/
#### wamp
http://www.wampserver.com/en/
## nodejs相關
### ubuntu 安裝nodejs
https://linuxize.com/post/how-to-install-node-js-on-ubuntu-18.04/
https://stackoverflow.com/questions/31472755/sudo-npm-command-not-found
---
## composer相關
### 安裝composer
https://getcomposer.org/
### ubuntu 安裝 composer
https://www.digitalocean.com/community/tutorials/how-to-install-and-use-composer-on-ubuntu-18-04
https://getcomposer.org/download/
https://linuxize.com/post/how-to-install-and-use-composer-on-ubuntu-18-04/
https://medium.com/@panjeh/install-laravel-on-ubuntu-18-04-with-apache-mysql-php7-lamp-stack-5512bb93ab3f
```c!
$ sudo apt install wget php-cli php-zip unzip
$ sudo apt install php7.2-common php7.2-cli php7.2-gd php7.2-mysql php7.2-curl php7.2-intl php7.2-mbstring php7.2-bcmath php7.2-imap php7.2-xml php7.2-zip
```
```c!
$ cd /usr/local/bin/
$ sudo php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ sudo php -r "if (hash_file('sha384', 'composer-setup.php') === 'e0012edf3e80b6978849f5eff0d4b4e4c79ff1609dd1e613307e16318854d24ae64f26d17af3ef0bf7cfb710ca74755a') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
$ sudo php -r "unlink('composer-setup.php');"
```
>上述第三行含有hash的指令要以下方網址的最新指令為主!!!
>https://getcomposer.org/download/
---
## 使用composer安裝laravel/installer
```c!
$ composer global require laravel/installer
```
安裝完成後,添加環境變數:
macOS and GNU / Linux Distributions:
>$HOME/.composer/vendor/bin
Windows(修改系統變數):
>%USERPROFILE%\AppData\Roaming\Composer\vendor\bin
---
## 建立新的laravel專案
```c!
$ laravel new project_name
```
https://stackoverflow.com/questions/35149812/install-specific-version-using-laravel-installer
若要指定專案版本(假設要用laravel 5.8):
```c!
$ composer create-project laravel/laravel="5.8.*" appName
```
(2022/8/6 composer2已改善速度,此套件已停止維護)
## 快速新建laravel專案: 使用prestissimo套件
https://github.com/hirak/prestissimo
原本的專案創建方式非常耗時,
可考慮採用prestissimo這款composer套件加速下載過程.
安裝composer套件:
```c!
$ composer global require hirak/prestissimo
```
ubuntu需先安裝ext-curl:
https://stackoverflow.com/questions/19335305/composer-install-error-requires-ext-curl-when-its-actually-enabled
```c!
$ sudo apt-get install php-curl
```
創建新專案:
```c!
$ composer create-project laravel/laravel="5.8.*" project_name --no-progress --profile --prefer-dist
```
## 在本地端設置apache運行專案,不必再用php artisan serve
>*此種修改方式的網址只能在本地端開啟,其他人無法開啟
### 修改httpd-vhosts.conf
C:\xampp\apache\conf\extra\httpd-vhosts.conf
```xml!
<!-- ..... -->
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/project1/public"
ServerName local-project1.stg
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/project2/public"
ServerName local-project2.stg
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/project3/public"
ServerName local-project3.stg
</VirtualHost>
```
### 修改host檔案(需用管理員權限進行修改)
C:\Windows\System32\drivers\etc\hosts
```c!
//...
127.0.0.1 local-project1.stg
127.0.0.1 local-project2.stg
127.0.0.1 local-project3.stg
```
>網址可隨便命名,只要兩個檔案對得起來就行
---
### 取得SSL
https://hackmd.io/mJ8FFYiUSOWaAtwpFkUcgw
### force https
https://stackoverflow.com/questions/16200501/how-to-automatically-redirect-http-to-https-on-apache-servers
```xml!
NameVirtualHost *:80
<VirtualHost *:80>
ServerName laravel-project.twkhjl.duckdns.org
Redirect permanent / https://laravel-project.twkhjl.duckdns.org/
</VirtualHost>
<VirtualHost _default_:443>
ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "C:/xampp/htdocs/laravel-project/public"
ServerName laravel-project.twkhjl.duckdns.org:443
ErrorLog "logs/laravel-project.twkhjl.duckdns.org-error.log"
CustomLog "logs/laravel-project.twkhjl.duckdns.org-access.log" common
SSLEngine on
SSLCertificateFile crt/laravel-project/cert.crt
SSLCertificateKeyFile crt/laravel-project/domain.key
SSLCertificateChainFile crt/laravel-project/chain.crt
SSLProtocol TLSv1.2
SSLCipherSuite ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384
SSLHonorCipherOrder on
</VirtualHost>
```
## 將現有專案布署至server
### win10
https://stackoverflow.com/questions/50483174/deploy-finished-laravel-project-on-localhost-for-client-laravel/50483229
必裝:
1.xampp(或是個別安裝php+mysql或其它資料庫+apache或nginx亦可,只是很麻煩)
2.composer
3.node.js
建議安裝:
1.vs code
2.git
### 安裝composer
```c!
$ composer install
```
### 新增空白database
win10可搭配heidisql快速建立空白database
### 修改.env
先將.env.example複製一份改名為.env,
修改database相關設定(帳號,密碼等)
### 確定切換到local環境
https://stackoverflow.com/questions/28719966/laravel-5-how-to-switch-from-production-mode
修改.env
```c!
...
APP_ENV=local
...
```
```c!
//若有修改.env檔就要重新執行這行指令
$ php artisan config:clear
//查看目前環境是production還是local
$ php artisan env
```
>確定網站跑得動再切到production會比較好
>將APP_ENV=production後再重新執行php artisan config:clear
>即可切換到production環境
## (選擇性)重新產生新的APP_KEY
```c!
$ php artisan key:generate
```
>不重新產生也一樣可以運行,只是有點危險
### 清除快取 & 執行migration
```c!
$ php artisan config:cache
$ php artisan view:clear
$ php artisan migrate
```
## 編譯前端檔案
```c!
$ npm install
$ npm run dev
```
### 搭配duckdns服務取得免費domain
https://www.duckdns.org/
在此網站上註冊(用google帳號直接登入即可),
新增一個domain name,
將ip指向win10 server.
網站全名如下:
http://ur_domain_name.duckdns.org
### 修改httpd-vhosts.conf以運行多個laravel專案
C:\xampp\apache\conf\extra\httpd-vhosts.conf
```xml=
<VirtualHost *:80>
ServerAdmin ur_mail_or_whatever_u_like
DocumentRoot "C:/xampp/htdocs/project1/public"
ServerName project1.ur_domain_name.duckdns.org
</VirtualHost>
<VirtualHost *:80>
ServerAdmin ur_mail_or_whatever_u_like
DocumentRoot "C:/xampp/htdocs/project2/public"
ServerName project2.ur_domain_name.duckdns.org
</VirtualHost>
<VirtualHost *:80>
ServerAdmin ur_mail_or_whatever_u_like
DocumentRoot "C:/xampp/htdocs/project3/public"
ServerName project3.ur_domain_name.duckdns.org
</VirtualHost>
...
```
以上述設定為例,
使用者可以連至以下幾個網址:
project1.ur_domain_name.duckdns.org
project2.ur_domain_name.duckdns.org
project3.ur_domain_name.duckdns.org
## 問題排除
### 未分類
#### Class 'PhpParser\Parser\Php7' not found
https://stackoverflow.com/questions/39247957/class-phpparser-parser-php7-not-found-laravel-when-using-mail
```
$composer update
```
### ubuntu
#### failed to open stream: Permission denied
Q:
運行php artisan serve時出現錯誤畫面及以下之錯誤訊息:
The stream or file "/var/www/ttt-l/storage/logs/laravel-2020-04-10.log" could not be opened: failed to open stream: Permission denied
A:
https://stackoverflow.com/questions/35894375/php-laravel-failed-to-open-stream-permission-denied
https://laravel.io/forum/05-08-2014-failed-to-open-stream-permission-denied
```c!
cd your_project_path
php artisan cache:clear
chmod -R 777 app
chmod -R 777 storage
composer dump-autoload
```
## 其他設定
### 關閉cache
https://stackoverflow.com/questions/68721771/how-to-disable-cache-in-laravel-8-for-localserver
config/cache.php
```htmlembedded=
'stores'=>[
...
'none' => [
'driver' => 'null',
],
...
]
```
.env
```csharp!
...
CACHE_DRIVER=none
...
```