基于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 架构. 

      我把这个项目上传到了码云上,码云地址:猛击这里

      大家根据码云的说明操作就好了.

 

 

 

 

 

 

 

    

 

      

  

        

posted @ 2020-03-09 18:30  步绍训  阅读(446)  评论(0)    收藏  举报