使用docker-compose部署一套nginx + php + mysql + redis环境,其中php在部署时需要添加mysql和redis的扩展
目录结构
# tree
.
├── docker-compose.yml
├── mysql
│ └── my.cnf
├── nginx
│ ├── conf.d
│ │ └── test.conf
│ └── web
│ ├── db.php
│ ├── index.html
│ ├── index.php
│ └── redis.php
├── php
│ ├── Dockerfile
│ ├── entrypoint.sh
│ ├── logs
│ │ ├── php_errors.log
│ │ └── php-fpm.log
│ ├── php-fpm.conf
│ ├── php-fpm.d
│ │ └── www.conf
│ └── php.ini
└── start.sh
docker-compose文件参考
# cat docker-compose.yml
version: "3"
services:
nginx:
image: nginx:alpine
restart: always
container_name: "nginx-server"
volumes:
- /data/nginx/conf:/etc/nginx/conf.d
- /data/web:/usr/share/nginx/html
- /data/nginx/logs:/var/log/nginx
ports:
- "80:80"
depends_on:
- "php"
networks:
- lnmp_net
php:
build: ./php
restart: always
container_name: "php-fpm-server"
ports:
- "9000:9000"
volumes:
- /data/web:/var/www/html
- /data/php/conf/php.ini:/usr/local/etc/php/php.ini
- /data/php/conf/php-fpm.conf:/usr/local/etc/php-fpm.conf
#- ./php/php-fpm.d/:/usr/local/etc/php-fpm.d/
- /data/php/logs/php-fpm.log:/usr/local/etc/log/php-fpm.log
networks:
- lnmp_net
mysql:
image: wangxian/alpine-mysql
restart: always
ports:
- "3306:3306"
volumes:
- /data/mysql/data:/var/lib/mysql
- /data/mysql/conf/my.cnf:/etc/my.cnf
environment:
MYSQL_ROOT_PASSWORD: 123456
networks:
- lnmp_net
redis:
image: redis:alpine
restart: always
ports:
- "6379:6379"
volumes:
- /data/redis/data:/data
command: redis-server --appendonly yes
networks:
- lnmp_net
networks:
lnmp_net:
driver: bridge
nginx连接php的配置文件参考
# cat nginx/conf.d/test.conf
server {
listen 80;
server_name localhost;
#access_log logs/host.access.log main;
root /usr/share/nginx/html;
location / {
index index.html index.htm index.php;
}
location ~ \.php$ {
fastcgi_pass php:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/html$fastcgi_script_name;
include fastcgi_params;
}
}
如果部署有问题,可参考:nginx连不上php-fpm
nginx访问测试页面参考
[root@sb-server lnmp]# cat nginx/web/
db.php index.html index.php redis.php
[root@sb-server lnmp]# cat nginx/web/index.php
<?php
phpinfo();
[root@sb-server lnmp]# cat nginx/web/db.php
<?php
/*
try{
$con =new PDO("mysql:host=mysql;dbname=test","root","123456");
echo"ok...";
}catch(PDOException $e){
echo $e->getMessage();
}
*/
$con = new mysqli("mysql","root","123456");
if($con->connect_error){
die("connect fail".$con->connect_error);
}else{
echo "connect success!";
}
[root@sb-server lnmp]# cat nginx/web/redis.php
<?php
$redis = new Redis();
$redis->connect('redis',6379);
$redis->set('test','hello world!');
echo $redis->get('test');
php添加扩展方法
[root@sb-server lnmp]# cat nginx/web/
db.php index.html index.php redis.php
[root@sb-server lnmp]# cat nginx/web/index.php
<?php
phpinfo();
[root@sb-server lnmp]# cat nginx/web/db.php
<?php
/*
try{
$con =new PDO("mysql:host=mysql;dbname=test","root","123456");
echo"ok...";
}catch(PDOException $e){
echo $e->getMessage();
}
*/
$con = new mysqli("mysql","root","123456");
if($con->connect_error){
die("connect fail".$con->connect_error);
}else{
echo "connect success!";
}
[root@sb-server lnmp]# cat nginx/web/redis.php
<?php
$redis = new Redis();
$redis->connect('redis',6379);
$redis->set('test','hello world!');
echo $redis->get('test');
php.ini文件参考
[root@sb-server lnmp]# cat php/php.ini | egrep -v "^;|^$"
[PHP]
engine = On
short_open_tag = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
unserialize_callback_func =
serialize_precision = -1
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = On
max_execution_time = 30
max_input_time = 60
memory_limit = 128M
error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
display_errors = Off
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
html_errors = On
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 8M
auto_prepend_file =
auto_append_file =
default_mimetype = "text/html"
default_charset = "UTF-8"
doc_root =
user_dir =
enable_dl = Off
file_uploads = On
upload_max_filesize = 2M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60
[CLI Server]
cli_server.color = On
[Date]
[filter]
[iconv]
[imap]
[intl]
[sqlite3]
[Pcre]
[Pdo]
[Pdo_mysql]
pdo_mysql.cache_size = 2000
pdo_mysql.default_socket=
[Phar]
[mail function]
SMTP = localhost
smtp_port = 25
mail.add_x_header = Off
[ODBC]
odbc.allow_persistent = On
odbc.check_persistent = On
odbc.max_persistent = -1
odbc.max_links = -1
odbc.defaultlrl = 4096
odbc.defaultbinmode = 1
[Interbase]
ibase.allow_persistent = 1
ibase.max_persistent = -1
ibase.max_links = -1
ibase.timestampformat = "%Y-%m-%d %H:%M:%S"
ibase.dateformat = "%Y-%m-%d"
ibase.timeformat = "%H:%M:%S"
[MySQLi]
mysqli.max_persistent = -1
mysqli.allow_persistent = On
mysqli.max_links = -1
mysqli.cache_size = 2000
mysqli.default_port = 3306
mysqli.default_socket =
mysqli.default_host =
mysqli.default_user =
mysqli.default_pw =
mysqli.reconnect = Off
[mysqlnd]
mysqlnd.collect_statistics = On
mysqlnd.collect_memory_statistics = Off
[OCI8]
[PostgreSQL]
pgsql.allow_persistent = On
pgsql.auto_reset_persistent = Off
pgsql.max_persistent = -1
pgsql.max_links = -1
pgsql.ignore_notice = 0
pgsql.log_notice = 0
[bcmath]
bcmath.scale = 0
[browscap]
[Session]
session.save_handler = files
session.use_strict_mode = 0
session.use_cookies = 1
session.use_only_cookies = 1
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.referer_check =
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.sid_length = 26
session.trans_sid_tags = "a=href,area=href,frame=src,form="
session.sid_bits_per_character = 5
[Assertion]
zend.assertions = -1
[COM]
[mbstring]
[gd]
[exif]
[Tidy]
tidy.clean_output = Off
[soap]
soap.wsdl_cache_enabled=1
soap.wsdl_cache_dir="/tmp"
soap.wsdl_cache_ttl=86400
soap.wsdl_cache_limit = 5
[sysvshm]
[ldap]
ldap.max_links = -1
[dba]
[opcache]
[curl]
[openssl]
php-fpm.conf文件参考
# cat php/php-fpm.conf | egrep -v "^;|^$"
[global]
error_log = log/php-fpm.log
include=etc/php-fpm.d/*.conf
# cat php/php-fpm.d/www.conf | egrep -v "^;|^$"
[www]
user = www-data
group = www-data
listen = 127.0.0.1:9000
pm = dynamic
pm.max_children = 5
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 3
部署
docker-compose up -d