基于docker-compose配置 LNMP 环境
项目背景
公司业务重心转向了网站开发和托管业务,开发和运维的网站数量越来越多,为实现应用的快速部署和升级,用技术提高生产力,
本着我们不要高大上,适合自己越简单越好的想法,研究和制定适合公司现状的运维规范。当然主要目的,是在节约服务器的成本的
情况下达到资源利用的最大化,同时又能保证同一台服务器多个网站的隔离性。隔离性有了,面对参差不齐的网站开发者,我们才能
进一步保证服务器的安全。事实证明,被攻击的网站总是来自固定的开发者。无规矩不成方圆,有规矩自成体系。制定规矩者需要以身
作则,要把岗位获得的权力当做责任来抗,而不是肆无忌惮的摧残他人灿烂自己,要知道靠心机活着总有凋谢的一天,因为没有实力,
魅力,人格,谁也掌控不了他人。要做好技术首先要做好人,
项目环境
Centos7
docker-compose docker-compose 的使用 猛击这里
docker
sftp
项目实施
Docker镜像
要做docker 运维,首先我们要了解将要使用的docker 镜像,根据个人需求重新封装镜像。
     nginx 镜像   官网地址
作为运维我们主要关注 how to use this image. 能依据官方镜像进行定制,即可满足大部分需求.
我们主要关注的地方有以下几点:
1. nginx 配置文件
2. nginx 网站目录
3. 模板配置文件中变量传递的问题 (envsubst 命令)
nginx 模板配置文件如下:
       原则:通常我们把配置文件的通用参数分类放在单独的文件中,通过  include 的方式包含到 server 区块中. 由于docker 推荐一个容器启动一个应用,越简单越好。我们在这里只把 静态文件和php 配置文件做区分。这里只列举常用配置,很多参数需要根据业务进行设置,有的是开发提供,有的是依据业务负载等等。总之,我们做运维除了好的责任心,就是良好的思维方式。
      静态配置文件 
server {
    listen       80;
    server_name  192.168.100.108;
    charset utf-8;
    root   /usr/share/nginx/html;
    index index.php index.html;
    error_page  404  /404.html;
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }
    include /etc/nginx/conf.d/phpconfig/php.conf
}
php 配置文件
location ~ ^(.+\.php)(.*)$ {
        fastcgi_pass php-fpm:9000;
        fastcgi_split_path_info ^(.+\.php)(.*)$;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
        fastcgi_param PATH_INFO $fastcgi_path_info;
        fastcgi_read_timeout 300;
    }
php-fpm 镜像 官网地址
和 nginx 镜像一样,我们首先要学会如何使用这个镜像。当然我们也可以从基础系统镜像一步步封装成自己需要的镜像。
但是有轮子,在满足需求的情况下,何必自己造轮子呢?须知人生短暂。
基础镜像默认已经安装了很多模块,如果项目需要安装新的模块,只需要依据文档编写 Dockfile 文件即可.
Docker镜像定制
nginx 镜像使用方法简介
#生成一个名为 wordpress 的docker 容器,同时挂载宿主机目录/wpic/wordpress 到 nginx 容器 docker run --name wordpress -v /wpic/wordpress:/usr/share/nginx/html:ro -d nginx #在上面的基础上映射主机端口到容器端口 docker run --name wordpress -p 80:80 -v /wpic/wordpress:/usr/share/nginx/html:ro -d nginx #挂载本地的nginx 配置文件到 wordpress 容器 docker run --name worpess -p 80:80 -v /host/path/nginx.conf:/etc/nginx/nginx.conf:ro -d nginx #复制容器中的文件到本地文件系统 docker cp wordpress:/etc/nginx/nginx.conf ./wpic.conf
nginx 中使用环境变量(envsubst 命令转化)
nginx docker 镜像有一个功能可以读取镜像中 /etc/nginx/templates/*.template 文件,通过 envsubst 命令转化这些文件到 /etc/nginx/conf.d 中,
例如:test.conf.template 会转化成 test.conf, so 我们只需要把模板文件挂载在 /etc/nginx/templates 中即可
当然我们也可以通过设置变量改变这个功能的默认值
# 模板文件目录, default: /etc/nginx/templates NGINX_ENVSUBST_TEMPLATE_DIR # envsubst 命令转换的文件名后缀,default: .template NGINX_ENVSUBST_TEMPLATE_SUFFIX # envsubst 转换模板文件后的输出目录,default: /etc/nginx/conf.d NGINX_ENVSUBST_OUTPUT_DIR
模板变量使用示例
# 变量的设置,一般通过 docker run -e 命令传递, 或写在配置文件中
docker run -e USERNAME="ceshi"  ......
# 模板文件中引用环境变量
usename=${USERNAME}
php-fpm 镜像使用方法简介
启动 php-fpm 镜像
# 启动 php-fpm, 并暴露端口在本机,同时挂载网站文件到容器 docker run --name=php-fpm -p 9000:9000 -v /wpic/wordpress/:/var/www/html -d php:7.4-fpm
镜像中的 php 安装包
      镜像自带了 php 源码包, 源码包在 /usr/src 目录中,文件名称是 php.tar.xz, docker官方提供的 docker-php-source extract 来快速解压它,解压目录 /usr/src/php/,
      同样可以用 docker-php-source delete 来快速删除/usr/src/php/ 目录。
# 解压安装包 docker-php-source extract # 删除解压包目录 docker-php-source delete
通过源码包安装核心扩展
      核心扩展是自带在php源码包里面的,解压后在 /usr/src/php/ext,docker 官方提供 docker-php-ext-install [gettext] 来快速安装并启用扩展。
安装有依赖的扩展,perl 扩展,或者需要手动编译的扩展,可以在 docker 容器中测试,并写入 Dockerfile 文件中.
# 安装并启用 mysqli 扩展 docker-php-ext-install mysqli
Docker-compose 项目实施
使用 nginx 镜像,php-fpm 镜像,和阿里云 RDS ,组合成为生产环境的 LNMP 架构.
我把这个项目上传到了码云上,码云地址:猛击这里
大家根据码云的说明操作就好了.
 
                    
                
 
                
            
         浙公网安备 33010602011771号
浙公网安备 33010602011771号