# [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 ... ```