LNMP 代表的就是:Linux系统下 Nginx + MySQL + PHP 这种网站服务器架构。
Linux 是一类 Unix 计算机操作系统的统称,本例中选用 Ubuntu 14.04。
Nginx 是一个高性能的 HTTP 服务器和反向代理服务器,也是一个 IMAP/POP3/SMTP 代理服务器,本例选用版本为1.8。
Mysql 是一个小型关系型数据库管理系统,本例中选用版本为5.5。
PHP 是一种在服务器端执行的嵌入 HTML 文档的脚本语言,目前常用版本为5.5。
这四种软件均为免费开源软件 ,组合到一起,成为一个免费、高效、扩展性强的网站服务系统。
我们选用 dockerhub 的 octohost/nginx:1.8 这个镜像作为基础镜像。这个镜像已经预装了 Nginx 1.8 版本,并且设置为前台启动。
通过 apt-get update
更新 apt 的资料列表;
导入配置文件/etc/nginx/sites-available/default
。这里提供一个配置文件模板:
server {
listen 80 default_server backlog=2048;
root /var/www/my_website;
index index.html index.php;
# Make site accessible from http://localhost/
server_name localhost;
location / {
try_files $uri $uri/ /index.php;
}
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
# NOTE: You should have "cgi.fix_pathinfo = 0;" in php.ini
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_index index.php;
include fastcgi_params;
}
}
其中,定义了服务器端口为80
以及网站的根目录为/var/www/my_website
。
另外,很重要的一点,在/etc/nginx/nginx.conf
最后一行已经添加了daemon off;
这一句,表示关闭了 Nginx 后台启动,因此 Nginx 会通过前台启动。
添加 PHP5 的安装源并安装 PHP 包括以下组件:
- php5-fpm (PHP FastCGI manager, a patch to the PHP source code, to the FastCGI process management integrated into the PHP package)
- php5-cgi (FastCGI manager that comes with PHP)
- php5-cli (PHP command line)
- php-apc (accelerate the speed of PHP application)
- php5-curl (URL client library function library)
- php5-gd (GD Library Image Library)
- php5-mysql (added MySQL support)
- php5-mcrypt (Mcrypt Encryption Library)
- php5-memcache (Memcache client)
- php5-memcached (Memcache server)
- php5-dev (development support module)
其中,PHP有两个memcache客户端:php5-memcache 和 php5-memcached。php-memcache独立用 PHP 实现,是老客户端,功能少,可设置的属性也少;php5-memcached是基于原生 C 的 libmemcached 的扩展,更加完善,建议使用 php5-memcached。
若要优化 php5-fpm,则编辑```/etc/php5/fpm/pool.d/www.conf,修改以下取值:
pm.max_children = 20
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 20
以上参数为在512MB 内存的服务器的推荐取值。
这里我们预先放进去一个测试页面,用于测试 LNMP 环境是否部署成功。
在/var/www/my_website
添加 index.php 文件,内容如下:
<?php
$link = mysql_connect($_SERVER['MYSQL_HOST'],$_SERVER['MYSQL_USER'],$_SERVER['MYSQL_PASSWORD']);
if ($link)
echo "Success...";
else
echo "Failure...";
mysql_close();
phpinfo();
?>
其中,MYSQL_HOST
、MYSQL_USER
、MYSQL_PASSWORD
是 PHP 服务器的系统变量,在fastcgi_params
文件中定义了这些变量。我们希望可以通过环境变量来为它们赋值。
为此,通过一个脚本start.sh
来定义这些变量,并传入环境变量参数。脚本内容如下:
#!/bin/bash
sed -i '$a fastcgi_param MYSQL_HOST $MYSQL_HOST;' /etc/nginx/fastcgi_params && sed -i "s/\$MYSQL_HOST/$MYSQL_HOST/" /etc/nginx/fastcgi_params
sed -i '$a fastcgi_param MYSQL_USER $MYSQL_USER;' /etc/nginx/fastcgi_params && sed -i "s/\$MYSQL_USER/$MYSQL_USER/" /etc/nginx/fastcgi_params
sed -i '$a fastcgi_param MYSQL_PASSWORD $MYSQL_PASSWORD;' /etc/nginx/fastcgi_params && sed -i "s/\$MYSQL_PASSWORD/$MYSQL_PASSWORD/" /etc/nginx/fastcgi_params
通过 CMD 指令执行环境变量导入脚本,启动 PHP ,最后启动 Nginx,具体如下:
CMD bash /start.sh && service php5-fpm start && nginx
完整的 Dockerfile 及所需文件,请见该 Git repo:LNMP on Shurenyun
先部署 MYSQL,使用官方提供的5.5版本的镜像即可,数人云提供了国内镜像下载地址:index.shurenyun.com/mysql:5.5
。
2.1.1 选择"应用管理"中的"新建应用"
2.1.2 新建应用
填写应用名称:mysql
选择集群:your-cluster
添加应用镜像地址:index.shurenyun.com/mysql
填写镜像版本:5.5
网络模式:HOST模式
主机选择:(选定一台主机 IP)
容器目录:容器内的挂载目录 /var/lib/mysql
主机目录:主机上的挂载目录 /var/lib/mysql
选择容器规格: CPU:1 内存:512 MB
高级设置:
填写环境变量参数:
Key:MYSQL_ROOT_PASSWORD Value:123456
2.2.1 选择"应用管理"中的"新建应用"
2.2.2 新建应用
填写应用名称:php
选择集群:your-cluster
添加应用镜像地址:index.shurenyun.com/lnmp/php
填写镜像版本:v1
网络模式:网桥模式
主机选择:(选定一台主机 IP)
选择容器规格: CPU:1 内存:512 MB
高级设置:
填写应用地址: 端口:8090,类型:对外 HTTP
选择“对外 HTTP”方式,则该应用会向内部代理注册, 网关对外暴露8090端口;
填写环境变量参数:
Key:MYSQL_HOST Value:{mysql-ip}
Key:MYSQL_USER Value:root
Key:MYSQL_PASSWORD Value:123456
访问外部网关所在主机的8090端口,具体地址见:http://ip:8090
,若看到以下页面内容,则表示 LNMP 部署已经成功。