注:此項目已升級成 通用 docker 項目自動化部署腳本工具
先看最終效果,如下:
使用方式
debian/ubuntu/deepin:
sudo wget -O /tmp/src.tar.gz https://gitee.com/gogls/php-web-environment/raw/master/src.tar.gz&&tar -C /tmp -zxvf /tmp/src.tar.gz&&cd /tmp/src/&&sudo bash /tmp/src/start.sh
它是什么?
它是 docker 容器虛擬化技術。總共只有幾KB大小的描述文件,文件里定義了要安裝什么、配置什么,一執行就全自動處理好了。
它有什么用?
解決新來同事搭環境搭半天的問題解決重裝系統后要搭環境浪費時間的問題環境一致,快速部署
進入詳情講解(此腳本針對debian系操作系統,如deepin、ubuntu)
如圖,四個文件:
準備文件 Dockerfile-php7.4,內容如下。這是基于 docker 官方的 7.4版本的PHP ,并且定義了要安裝 MySQL 擴展、GD 擴展、Redis 擴展,如果有需要,你可以自行增減。
FROM php:7.4-fpm# 系統更新
RUN apt-get update \
# 安裝sql擴展
&& docker-php-ext-install pdo_mysql \
# 安裝圖形處理擴展
&& apt install libjpeg62-turbo-dev libfreetype6-dev -y \
&& docker-php-ext-configure gd --enable-gd --with-freetype --with-jpeg \
&& docker-php-ext-install gd \
# 安裝redis擴展
&& pecl install -o -f redis \
# 刪除臨時文件
&& rm -rf /tmp/pear \
# 啟用redis擴展
&& docker-php-ext-enable redis
準備文件 docker-compose.yml,內容如下。這是一個工程描述文件,里面描述了要安裝什么、配置什么。
version: '3'
services:php:build:context: ./dockerfile: Dockerfile-php7.4 #從這個文件名里構建phpports:- "9100:9000"container_name: common_1.0_php #容器名volumes:- "/opt/wwwroot/www:/www" #把宿主機的 /opt/wwwroot/www 目錄掛載到容器內的 /www 目錄restart: always #自動啟動nginx:image: nginx:1.23 #基于官方的鏡像nginx:1.23ports:- "80:80"container_name: common_1.0_nginxrestart: alwaysvolumes:- "/opt/wwwroot/www:/www"- "/opt/wwwroot/nginx/conf.d:/etc/nginx/conf.d"- "/opt/wwwroot/nginx/logs:/etc/nginx/logs"redis:image: redis:7.0ports:- "6179:6379"container_name: common_1.0_redisrestart: alwaysmysql:image: mysql:8.0ports:- "3106:3306"container_name: common_1.0_mysqlrestart: alwaysvolumes:- "/opt/wwwroot/mysql:/var/lib/mysql"environment:MYSQL_ROOT_PASSWORD: 123qwe.
準備文件 start.sh ,這是一個自動化處理腳本,內容如下:
#!/bin/bash
echo "請問,您想要做什么?這里是php通用開發環境。輸入 exit 退出。"
echo " 安裝docker:install docker"
echo " 卸載docker:remove docker"
echo " 安裝docker-compose:install compose"
echo " 卸載docker-compose:remove compose"
echo " 生成PHP環境:build php env"
echo " 查看容器列表:docker ps"
echo " 查看鏡像列表:docker images"echo ""function go(){if [ "$install_type" ]thenif [ "$install_type" == "install docker" ]thensudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyunelif [ "$install_type" == "remove docker" ]thensudo apt-get purge docker-cesudo rm -rf /var/lib/dockerelif [ "$install_type" == "install compose" ]thensudo curl -L "https://github.com/docker/compose/releases/download/v2.14.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-composesudo chmod +x /usr/local/bin/docker-composesudo ln -s /usr/local/bin/docker-compose /usr/bin/docker-composedocker-compose versionelif [ "$install_type" == "remove compose" ]thensudo /usr/local/bin/docker-composeelif [ "$install_type" == "build php env" ]thensudo docker-compose up -delif [ "$install_type" == "docker ps" ]thensudo docker pselif [ "$install_type" == "docker images" ]thensudo docker imageselseecho "請輸入正確的值"fielseecho "請輸入一個值"fi
}# 死循環,這樣可以多次處理
while [ true ]
doread -p "請輸入一個值:" install_typeif [ "$install_type" ] && [ "$install_type" == "exit" ]thenbreakfigo $install_type
done
搭建 PHP Web 環境
進入當前目錄,執行 ./start.sh,就會看到文章開頭的圖片效果。此教程,需要先安裝docker 和
docker-compose,可自行安裝,也可在這里安裝,輸入對應命令即可。
輸入:build php env ,可能會提示輸入密碼,這是當前 linux 系統管理員的密碼。
就這么簡單,搞定了。看到如上幾個 started 表示 PHP Web 環境構建成功并啟動了,mysql啟動了,php啟動了,redis啟動了,nginx啟動了。連接的時候,用宿主機IP也行、用容器名也行。
輸入:docker ps 查看這四個容器是否啟動了,名稱都是 common_1.0_xx
新增一個網站
設置 host 域名,或去域名商解析一個域名。請自行完成。我這里配置了一個 sdt.com
配置 nginx ,在 /opt/wwwroot/nginx/conf.d 目錄里,新建一個 sdt.com.conf 文件,內容如下:
# 服務端配置節點
server {# 監聽端口。此端口不能被占用了listen 80;# 此站點的域名。直接在宿主機配置一個host域名,或者在阿里云等云服務商那里解析過來。server_name sdt.com;# 此站點的入口目錄,也就是php容器的目錄。宿主機掛載到容器內的目錄。root /www/shangdiantuanfenxiao/public;# 入口目錄里可識別的入口文件index index.html index.htm index.php;# 配置url。Thinkphp的偽靜態設置。這個是fastadmin,用的是thinkphp5.0location / {#訪問路徑的文件不存在則重寫URL轉交給ThinkPHP處理if (!-e $request_filename) {rewrite ^(.*)$ /index.php?s=/$1 last;break;}}# 配置url,處理及轉發PHP請求location ~ \.php(/|$) {# 可以直接寫容器名,也可以直接寫宿主機的IPfastcgi_pass common_1.0_php:9000;fastcgi_index index.php;fastcgi_split_path_info ^((?U).+\.php)(/?.+)$;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;fastcgi_param PATH_INFO $fastcgi_path_info;fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;include fastcgi_params;}# 目錄會自動生成。access_log /etc/nginx/logs/sdt.com.log;# 錯誤日志error_log /etc/nginx/logs/sdt.com.error.log;
}
注意,新增一個網站,就在 /opt/wwwroot/nginx/conf.d 里增加一個配置文件即可,nginx 會自動去這個目錄里讀取所有配置文件。
打開網站看看
附上下載地址:https://gitee.com/gogls/php-web-environment.git
總結
以上是生活随笔為你收集整理的快速部署PHP Web环境(docker nginx php mysql redis)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。