共计 3083 个字符,预计需要花费 8 分钟才能阅读完成。
使用 docker 搭建项目
创建项目目录
mkdir php
创建如下项目结构
- sites 目录放置项目文件
- services 目录放置服务相关配置
- script 放置自定义脚本
├── Readme.md | |
├── docker-compose.yml | |
├── script | |
├── services | |
│ ├── mariadb | |
│ │ └── Dockerfile | |
│ ├── nginx | |
│ │ ├── Dockerfile | |
│ │ ├── conf.d | |
│ │ │ └── default.conf | |
│ │ └── nginx.conf | |
│ ├── php | |
│ │ └── Dockerfile | |
│ └── redis | |
│ └── Dockerfile | |
└── sites | |
├── index.html | |
└── index.php | |
8 directories, 10 files |
编辑 docker-compose
文件
version: "3" | |
services: | |
php: | |
build: ./services/php | |
# ports: | |
# - "9001:9000" | |
container_name: lnmp-php | |
restart: always | |
volumes: | |
- ./sites:/www | |
networks: | |
lnmp_net: | |
ipv4_address: 101.11.11.10 | |
nginx: | |
build: ./services/nginx | |
ports: | |
- "81:80" | |
- "444:443" | |
container_name: lnmp-nginx | |
restart: always | |
volumes: | |
- ./sites:/www | |
- ./services/nginx/nginx.conf:/etc/nginx/nginx.conf | |
- ./services/nginx/conf.d:/etc/nginx/conf.d:rw | |
networks: | |
lnmp_net: | |
ipv4_address: 101.11.11.11 | |
networks: | |
lnmp_net: | |
driver: bridge | |
ipam: | |
config: | |
- subnet: 101.11.11.0/20 |
编辑 services/nginx
文件
FROM nginx:1.17.0-alpine | |
# 更新安装源 | |
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories | |
# 设置时区为上海 | |
RUN apk update && apk add --upgrade \ | |
&& apk add tzdata \ | |
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ | |
&& echo "Asia/Shanghai" > /etc/timezone \ | |
&& apk del tzdata |
编辑 services/php
文件
FROM php:7.3.6-fpm-alpine3.9 | |
# 更新安装源 | |
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories | |
# 设置时区为上海 | |
RUN apk update && apk add --no-cache tzdata autoconf gcc g++ make zlib-dev curl-dev\ | |
&& cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \ | |
&& echo "Asia/Shanghai" > /etc/timezone \ | |
&& apk del tzdata \ | |
&& docker-php-ext-install mysqli pdo_mysql opcache \ | |
&& pecl install grpc protobuf xdebug yaf yar swoole \ | |
&& docker-php-ext-enable xdebug yaf yar swoole grpc protobuf |
以上我们的 lnmp 环境基本搭建完毕,下面我们针对 Php 解析做相关的配置
修改services/nginx/nginx.conf
, 可根据需求自行修改
user nginx; | |
worker_processes auto; | |
error_log /var/log/nginx/error.log warn; | |
pid /var/run/nginx.pid; | |
events {worker_connections 1024;} | |
http { | |
include /etc/nginx/mime.types; | |
default_type application/octet-stream; | |
log_format main '$remote_addr - $remote_user [$time_local]"$request"''$status $body_bytes_sent "$http_referer" ''"$http_user_agent""$http_x_forwarded_for"'; | |
access_log /var/log/nginx/access.log main; | |
sendfile on; | |
#tcp_nopush on; | |
keepalive_timeout 65; | |
#gzip on; | |
include /etc/nginx/conf.d/*.conf; | |
} |
修改 services/nginx/conf.d
目录下文件
该目录是各个项目的配置文件,可根据需求配置单个或多个服务
server { | |
listen 80; | |
server_name localhost; | |
#charset koi8-r; | |
#access_log /var/log/nginx/host.access.log main; | |
#root /usr/share/nginx/html; | |
root /www; | |
index index.php index.html index.htm; | |
#error_page 404 /404.html; | |
# redirect server error pages to the static page /50x.html | |
# | |
error_page 500 502 503 504 /50x.html; | |
location = /50x.html {root /usr/share/nginx/html;} | |
# proxy the PHP scripts to Apache listening on 127.0.0.1:80 | |
# | |
#location ~ \.php$ { | |
# proxy_pass http://127.0.0.1; | |
#} | |
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000 | |
# | |
location ~ \.php$ { | |
# root html; | |
fastcgi_pass 101.11.11.10:9000; | |
fastcgi_index index.php; | |
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; | |
include fastcgi_params; | |
} | |
# deny access to .htaccess files, if Apache's document root | |
# concurs with nginx's one | |
# | |
#location ~ /\.ht { | |
# deny all; | |
#} | |
} |
启动服务
cd php && docker-compose up --build -d
上述的步骤根据网速的 docker 的配置执行时间个不相同,因为 php 中编译了些许扩展,也可根据自身需求做响应的删减
通过浏览器访问
http://127.0.0.1:81
, 如果看到了phpinfo
的输出信息,那么恭喜你,你的 lnmp 环境已经部署完成
正文完