--- tags: Heroku --- # **Heroku** -- deploy PHP & MYSQL on Heroku ## 前言 ### 佈署(Deploy) 從本機環移動到遠端的伺服器主機 ### Heroku PaaS:提供硬體與作業平台 (Platform as a service) 使用 PostgreSQL 關聯式資料庫 ## 本地環境 在本機的環境與欲推上的專案 1. Windows 10 2. Git Bash 3. Xampp (PHP ver 5.6.33, Mysql ver 15.1) 4. PHP on Mysqli ## 前置準備 依照[Heroku官方文件](https://devcenter.heroku.com/articles/deploying-php#overview)操作 1. 註冊 Heroku 帳號 > 綁定信用卡可以增加流量額度 (建議綁定,因為之後要擴充第三方元件也是要綁定) 2. 安裝 Heroku CLI > Herorku Command line Interface (CLI):Heroku 的命令列,也稱作 Heroku Toolbelt。可以在終端機中輸入Heroku的語法 3. 安裝 Composer > 安裝過程中若出現以下警告訊息:module openssl already loaded in Unknown on line 0,表示 extension=php_openssl.dll 在 php.ini 內出現了兩次。解決方式:進到 php.ini 把其中一個 extension=php_openssl.dll 移除或註解(前面加上;) >> 參考 [這個問答](https://stackoverflow.com/questions/40173712/xampp-composer-installation-issue-module-openssl-already-loaded-in-unknown-on) ## 操作流程 參考這篇文章 [Deploying a PHP and MySQL Web App with Heroku](https://scotch.io/@phalconVee/deploying-a-php-and-mysql-web-app-with-heroku) ### 1. 登入Heroku **$ heroku login** 會打開Heroku網頁,按下登入按鈕 ### 2. 建立Heroku專案 **$ heroku create (YOUR_PROJECT_NAME)** > 注意專案名稱若有人已使用就不可建立,也可以不用輸入名稱,Heroku會自動幫你產生 出現兩個網址: 1. 網址(URL):專案對外開放的網址 2. Git repostory:存放專案程式碼的儲存庫位置 #### 以下動作都在專案資料夾內操作 ### 3. 建立 composer.json 檔案 > Heroku 上的 PHP 應用程式規定要有的,可以先內容空白 ### 4. 建立 Procfile 文字檔 建立 Procfile 文字檔在根目錄 ```plain text= web: vendor/bin/heroku-php-apache2 ``` 描述該應用程式是web網頁服務,並執行 vendor/bin/heroku-php-apache2 > 參見 [官方說明] (https://devcenter.heroku.com/articles/deploying-php#the-procfile) 或是 [這篇文章](https://andyyou.github.io/2016/10/31/process-types-and-profile/) ### 5. 建立遠端資料庫 安裝第三方擴充套件:ClearDB,使MYSQL資料庫可以在Heroku上運行 **$ heroku addons:add cleardb:ignite** > 注意:要綁定信用卡才能安裝 > ### 6. 獲得Heroku資料庫(ClearDB)的資訊 **$ heroku config | grep CLEARDB_DATABASE_URL** 出現以下訊息: CLEARDB_DATABASE_URL => mysql://[username]:[password]@[host]/[database name]?reconnect=true 也可以輸入 $ heroku addons:open cleardb 來獲得使用者資訊 ### 7. 匯入資料表到Heroku資料庫 > 先從phpmyadmin匯出我們的資料表 1. **$ winpty mysql -u [username] -h [host] -p [database name]** :::danger :heavy_exclamation_mark:要在 mysql 前增加 winpty > 請參考 [這個問答](https://stackoverflow.com/questions/32620670/git-bash-mysql-blank) ::: >:pushpin: 關於 Git Bash 無法完全替代 cmd,請參考 [這篇文章](https://my.oschina.net/snowdreams1006/blog/3045419) 2. Enter password: **[password]** 會出現以下畫面  3. MySQL [heroku_991c1db19d02adc]> **source INPUT.sql** :::danger :heavy_exclamation_mark:此行程式碼要與上面的分開打 > 請參考 [這個問答](https://stackoverflow.com/questions/40680812/mysql-git-bash-winpty-mysqldump-stdout-is-not-a-tty-and-stdin-is-not-a-tty/44727575) ::: ### 8. 更改資料庫連線資料 以下以我的專案程式為例 ```php= <?php session_start(); $cleardb_url = parse_url(getenv("CLEARDB_DATABASE_URL")); $cleardb_server = $cleardb_url["host"]; $cleardb_username = $cleardb_url["user"]; $cleardb_password = $cleardb_url["pass"]; $cleardb_db = substr($cleardb_url["path"],1); $hostname = $cleardb_server ; $dbuser = $cleardb_username; $dbpw = $cleardb_password; $dbname = $cleardb_db; $_SESSION["conn"] = mysqli_connect($hostname, $dbuser, $dbpw, $dbname); if($_SESSION["conn"]) { mysqli_query($_SESSION["conn"], "SET NAMES UTF8"); // echo "已正確連線"; } else { echo "資料庫連線錯誤:". mysqli_connect_error(); } ?> ``` ### 9. 更新composer.json 1. 因為使用mysqli,所以在composer.json內新增以下程式,讓資料庫可以包含MYSQL的擴充 ```json= { "require": { "ext-mysqli": "*" } } ``` 2. **$ composer update** :pushpin: 執行後,會產生 composer.lock 檔案:point_right:重要,確保我的程式在不同環境下都能執行 ### 10. 推上專案到Heroku $ git init $ git add . $ git commit -m "" **$ git push heroku master** ### 11. 觀看成果 使用Heroku給的網址或 **$ heroku open** ### 12. 刪除資料庫 若資料庫要重新建立必須把 ClearDB 整個先移除,再重新安裝 **$ heroku addons:destroy cleardb** 再回到步驟5, 6, 7 (會產生新的資料庫名稱與資訊) > 參考[這個問答](https://getsatisfaction.com/cleardb/topics/drop_recreate_db) 與 [官方文件](https://devcenter.heroku.com/articles/cleardb)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up