内容简介:LEMP (Linux + Nginx + MySQL + PHP) 基本是如今网页开发者的必备环境,正常情况下我们可以直接通过系统包管理工具如 apt、yum 直接安装使用,然而由于兼容考虑,系统自带的软件源往往更新缓慢,在半年左右就会停滞在上个版本,影响开发者对新功能的跟进测试。为了追求最新版本,不少开发者开始下载源码包自己进行编译,但过程过于繁琐,到后来也催化出类似 Oneinstack、lamp.sh 等一键安装包。而 Docker 的推出,可以大大简化以上的过程。在 Docker Hub 上有许多
LEMP (Linux + Nginx + MySQL + PHP) 基本是如今网页开发者的必备环境,正常情况下我们可以直接通过系统包管理 工具 如 apt、yum 直接安装使用,然而由于兼容考虑,系统自带的软件源往往更新缓慢,在半年左右就会停滞在上个版本,影响开发者对新功能的跟进测试。
为了追求最新版本,不少开发者开始下载源码包自己进行编译,但过程过于繁琐,到后来也催化出类似 Oneinstack、lamp.sh 等一键安装包。
而 Docker 的推出,可以大大简化以上的过程。在 Docker Hub 上有许多维护者将 php 、nginx 等各个组件打包成一个个 image,作为用户只要拉取组合相关的 image 即可搭建 LEMP。而且基于 Docker 的特性至少带来以下优点:
- 更新迅速,随时回滚指定版本
- 容器隔离,安全性高
- 无系统残留,不存在依赖链冲突
两个月前我就开始着手构建整个 LEMP 的框架,并根据需要自行维护了部分 image,相关编排模板开源在 https://github.com/metowolf/docker-lemp 。当前整个博客、API 站都跑在 docker 上,运行起来相当稳定。
容器
| 容器名 | 版本 |
| metowolf/php | 7.3.1, 7.3, 7, current |
| metowolf/nginx | 1.15.8, 1.15, 1, current |
| mysql/mysql-server | 8.0.15 |
| phpmyadmin/phpmyadmin | 4.8.5 |
| abiosoft/caddy | 0.11.2 |
| redis | 5.0.3-alpine |
演示
下面我用一个简单的例子做个示范。
首先需要安装 docker 和 docker-compose 两个环境。为了方便演示,这里直接使用 PWD 的试用主机来运行。
$ curl -fsSL https://get.docker.com -o get-docker.sh $ sh get-docker.sh $ curl -L "https://github.com/docker/compose/releases/download/1.23.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose $ chmod +x /usr/local/bin/docker-compose
登陆服务器,拉取编排模板
$ git clone https://github.com/metowolf/docker-lemp.git $ cd docker-lemp
创建配置文件
$ cp .env.example .env $ cp docker-compose.example.yml docker-compose.yml
创建 nginx 配置
$ cat > etc/nginx/config/example.conf <<EOF
server {
listen 80;
server_name example.com *.direct.labs.play-with-docker.com;
root /var/www/example.com;
index index.php;
location / {
try_files \$uri \$uri/ /index.php?\$query_string;
}
location ~ \.php\$ {
fastcgi_split_path_info ^(.+\.php)(/.+)\$;
fastcgi_pass php-fpm:9000;
fastcgi_index index.php;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME \$document_root\$fastcgi_script_name;
fastcgi_param PATH_INFO \$fastcgi_path_info;
}
}
EOF
创建 phpinfo 文件
$ mkdir wwwroot/example.com/ $ cat > wwwroot/example.com/index.php <<EOF <?php phpinfo(); EOF
启动容器
$ docker-compose up -d php-fpm nginx mysql
启动成功后,如果没有意外,我们就能在 80 端口看到熟悉的页面了。
高级玩法
QUIC
在编排示例中,我添加了一个 caddy 来反代 nginx,以此来获得 quic 特性。借助 docker 的特性,我们可以让 caddy 单独监听 443 udp 端口,让 nginx 依旧监听 443 tcp 端口,这样可以同时兼顾 TLSv1.3 和 quic。
nginx 配置中需要添加一个返回头,提醒浏览器尝试连接 quic
add_header alt-svc 'quic=":443"; ma=2592000; v="44,43,39"';
brotli
在 nginx 容器中,我将 brotli 编译成动态模块,可以根据需要开启。
新建 etc/nginx/nginx.conf 配置文件
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;
# 挂载 brotli 模块
load_module modules/ngx_http_brotli_filter_module.so;
load_module modules/ngx_http_brotli_static_module.so;
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;
}
新建 etc/nginx/config/brotli.conf 配置文件
brotli on; brotli_comp_level 6; brotli_types application/x-httpd-php application/javascript application/x-javascript application/xml application/json text/plain text/javascript text/css text/xml image/jpeg image/gif image/png image/svg+xml;
修改 docker-compose.yml 挂载 nginx.conf 配置文件
--- docker-compose.yml
+++ docker-compose.yml
@@ -11,6 +11,7 @@
- php-fpm
volumes:
- ./log/nginx:/var/log/nginx:rw
+ - ./etc/nginx/nginx.conf:/etc/nginx/nginx.conf:rw
- ./etc/nginx/config:/etc/nginx/conf.d:rw
- ./etc/ssl:/etc/nginx/ssl:rw
- ./wwwroot:/var/www:rw
@@ -65,6 +66,8 @@
最后更新容器编排即可
$ docker-compose up -d --no-deps --build
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- 构建安全灵活的多云环境
- 用 Docker 构建 MySQL 主从环境
- docker环境下的持续构建
- 使用virtualenv构建flask开发环境
- Linux 搭建 Android 编译构建环境
- 为异构大数据环境构建数据管道
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Data Structures and Algorithms
Alfred V. Aho、Jeffrey D. Ullman、John E. Hopcroft / Addison Wesley / 1983-1-11 / USD 74.20
The authors' treatment of data structures in Data Structures and Algorithms is unified by an informal notion of "abstract data types," allowing readers to compare different implementations of the same......一起来看看 《Data Structures and Algorithms》 这本书的介绍吧!