很多時候工作中我感覺到深深的痛苦,因為我不能愉快的開發,50%甚至80%的時間都浪費在環境搭建上,依賴問題、環境變量問題、端口衝突、編譯庫、扶牆走問題等等。
可以說Docker很大程度拯救了我,這個開源的應用容器引擎,讓開發者可以打包他們的應用以及依賴包到一個可移植的容器中,不在受本地環境限制,就能得到良好的工作環境,並且便攜無遷移痛苦,在我實踐的這幾年中深深受益。
今天是要總結的是 PHP開發、部署環境。我因為主業不是PHP開發,雖然有一定經驗,但也比較少去做一些基於 php 的大型項目,但它來了,所以我就祭出 docker 來搭建一套方便的開發部署環境,平時我的本地開發環境需求比較複雜,既會做 java、nodejs、python,現在又加上 php,還有一些非語言類的環境,如果都安裝在本地先不說會不會衝突,維護起來也真夠一夢的,所以當前的本地開發除非必要全部都是 docker 容器化。
不說廢話,開始工作。
搭建PHP Docker 開發環境
這次的 PHP docker 開發環境有大神已經做好了,我們只要下載回來安裝即可,在 github 中搜索 laradock。
一、配置
<code>cd ~
mkdir PHP_Workspace
cd PHP_Workspace
git clone https://github.com/laradock/laradock
cp env-example env/<code>
.env 文件大部分情況下不需要改動,但很有可能我們會遇到 docker 鏡像拉取慢、npm 包下載慢等網絡問題,所以我們進行如下配置。
1、Docker 源配置
<code>{
"registry-mirrors": [
"https://dockerhub.azk8s.cn",
"https://hub-mirror.c.163.com"
]
}/<code>
配置為國內源的源。
2、Wokspace 配置
<code> # If you need to change the sources (i.e. to China), set CHANGE_SOURCE to true
CHANGE_SOURCE=true
# Set CHANGE_SOURCE and UBUNTU_SOURCE option if you want to change the Ubuntu system sources.list file.
UBUNTU_SOURCE=aliyun/<code>
3、NVM配置
<code> WORKSPACE_NVM_NODEJS_ORG_MIRROR=https://npm.taobao.org/mirrors/node/<code>
其它各種開發配置都可以在 .env 文件中找到,如 php debug相關
PHP_FPM_INSTALL_XDEBUG
WORKSPACE_INSTALL_XDEBUG
二、啟動容器
<code>docker-compose up -d nginx mysql phpmyadmin redis workspace /<code>
這步操作會執行 docker 的自動下載 image 以及 buid 相關操作,執行後會得到以下容器
三、開發配置
這個時我們就可以進行項目開發相關的配置
將我們的項目放在 PHP_Workspace 工程下面,與 laradock 同級,目錄如下
<code>➜ PHP_Workspace
.
├── laradock
└── mp-shop/<code>
配置 nginx
<code>cd ./laradock/nginx/sites
.
├── app.conf.example
├── confluence.conf.example
├── default.conf
├── laravel.conf.example
├── laravel_varnish.conf.example
├── mp-shop.conf
└── symfony.conf.example/<code>
可以看到文件夾中有一些配置模板,根據需要可以 copy 過來使用或者自建,我這裡新建了 mp-shop.conf,配置就是 copy laravel.conf 但是略有調整
Nginx 就配置好了,然將我們的 server_name 做一下本地的 host 映射
<code>127.0.0.1 mp-shop.test/<code>
檢驗
<code>docker-compose exec workspace bash
drwxr-xr-x 87 root root 2784 Mar 22 01:21 laradock
drwxrwxr-x 14 root root 448 Mar 21 07:36 mp-shop/<code>
可以看到進入 workspace 容器后里面已經映射好當前 PHP_Workspace 中的項目以及 laradock 環境。
訪問 mp-shop.test 網頁如期而遇的展現出來。
一些項目的補充說明,當前開發環境啟動後,我們的程序針對數據庫、redis 或其它服務的主機名,可以在.env 中找到
<code>DB_HOST=mysql
REDIS_HOST=redis/<code>
<code>// 數據庫配置
$config = [
'host' => 'mysql',
'database' => 'default',
'username' => 'default',
'password' => 'secret',
'port' => '3306',
'charset' => 'utf8',
];/<code>
以上就是基於 laradock 的本地 docker 開發環境的配置,中間我遇到的主要問題就是網絡環境和一些配置不清的問題,所以這方面遇到問題的同學可以與我直接交流,接下來就是關於上線所應用的寶塔。
Docker 寶塔一鍵部署
寶塔Linux面板是提升運維效率的服務器管理軟件,支持一鍵LAMP/LNMP/集群/監控/網站/FTP/數據庫/JAVA等100多項服務器管理功能。在運維界知名度相當高,也非常的好用、實用,但直接安裝還是稍微繁瑣,今天我們就用 docker 來一鍵部署。
這裡我用一個完成度很好的 docker 腳本項目,簡單介紹下:
1、克隆項目
<code>git clone https://github.com/ifui/baota/<code>
2、配置環境
<code>cp .env-example .env/<code>
3、啟動鏡象
<code>docker-compose up -d app/<code>
完成!
總結
此篇文章主要介紹瞭如何利用 Laradock 搭建一套完善的本地 php 開發環境,以及如何利用 docker 去方便的部署寶塔,此次項目中主要遇到了網絡問題、配置說明不清晰的問題,耽誤了不少時間,但效果是非常好的。下面附上文中應用的相關項目。
- http://laradock.io/
- https://github.com/ifui/baota
閱讀更多 劉佰晟 的文章