ezhttp一键安装配置lnmp lamp lnamp(nginx apache php mysql)环境

本文介绍使用ezhttp一键安装配置lnmp lamp lnamp(apache nginx php mysql)环境,在开始之前,请先查看ezhttp介绍
这里以安装lnmp为例,其它的安装类似。

交互安装

1.选择安装lnmp

1) 输入1回车进入Installation of stack.
2) 输入1回车选择LNMP(Nginx MySQL PHP)安装.
如图:
未分类

2.nginx安装设置

1)首先是nginx版本选择。
这里有5个选项:

  • 1) nginx-1.8.0
  • 2) tengine-2.1.0
  • 3) openresty-1.9.7.3
  • 4) custom_version
  • 5) do_not_install
  • 输入一个1-5的数字或直接回车,直接回车默认选择5。
    第1-3个选项是选择指定nginx,包含nginx官方版本,淘宝的tengine和整合nginx luajit的openresty。
    第4个选项是指定版本号,输入的规则为nginx-1.4.1 tengine-1.4.6 ngx_openresty-1.2.8.3。
    第5个选择是
    这里我们选择nginx-1.8.0。
    2)然后是输入安装路径
    直接回车默认是/usr/local/nginx。我们可以更改其安装路径,如输入/opt/nginx。 这里我们直接回车使用默认值。
    3)接着将会显示安装nginx使用的编译参数
    且提示是否更改编译参数,直接回车默认是不更改。输入y是更改参数,n为不更改参数。这里我们直接回车,即不更改。
    4)最后是提示是否安装nginx模块
    默认为不安装,即n。输入y则安装,n为不安装。我们这里输入y,安装模块。接着将显示可安装的nginx模块,比如

  • 1) lua-nginx-module-0.10.0
  • 2) nginx-http-concat-1.2.2
  • 3) nginx-upload-module-2.2
  • 4) ngx_http_substitutions_filter_module-0.6.4
  • 5) do_not_install
  • 输入对应的数字选择安装的模块或输入5不安装。这里我们输入2安装nginx-http-concat-1.2.2模块。
    如图:
    未分类

    3.mysql安装配置

    1) 选择安装的mysql版本
    1-4选项为mysql5.1,mysql5.5,mysql5.6,mysql5.7版本,5为libmysqlclient18,6为自定义版本,格式为mysql-5.1.71 mysql-5.5.32 mysql-5.6.12 mysql-5.7.9。这里我们输入3安装mysql5.6。
    2)输入mysql安装路径
    直接回车默认路径为/usr/local/mysql,可以输入其它安装路径。这里我们直接回车选择默认的/usr/local/mysql。
    3) 输入mysql数据目录
    直接回车为默认的{上面设置的mysql安装路径}/data。可以输入其它的,如/data/mysql。我们直接回车选择默认的/usr/local/mysql/data。
    4) 输入mysql端口
    直接回车默认使用3306端口。可以输入任意一个有效的端口,如3307。我们直接回车选择默认的3306端口。
    5) 设置mysql root用户密码
    直接回车默认设置密码为root。可以输入任意字符串的密码,这里我们输入mysqlpwd。
    6)设置mysql编译参数
    直接回车默认不更改。可以输入y进行更改或n不更改。
    如图:
    未分类

    4.php安装配置

    1) 选择安装的php版本
    支持php5.2,php5.3,php5.4,php5.5,php5.6,php7.1的版本。输入对应的数字安装对应的版本。也可以选择custom_version自定义版本。这里输入5安装php5.6版本。
    2) 设置安装路径
    直接回车默认选择/usr/local/php路径,可以输入其它的路径,如/opt/php。这里直接驾车。
    3) 更改编译参数
    直接回车选择不更改。
    4)安装php模块
    将会列表可安装的php模块,安装多个模块输入以空格分隔的数字,如1 2 3。这里输入2 4安装memcache和redis模块。
    如图:
    未分类

    5.其它软件安装

    将会列出可安装的软件,安装多个软件输入以空格分隔的多个数字,如1 2 3。这里输入1 4安装memcached和redis。
    然后接着要求输入各自的安装路径,这里我们直接回车使用默认值。
    如图:
    未分类

    6.检查设置

    最后将列出以上的所有设置。直接回车和输入y开始安装或输入n返回重新设置。如图:
    未分类

    非交互安装

    非交互安装即不需要手动选择或输入各种配置进行安装,可需要一个命令就行。
    可以执行./start.sh -h查看帮助。以上的lnmp配置参数可以使用如下命令进行非交互安装。

    1. ./start.sh –stack=lnmp –package=nginx,php5.6,mysql5.6,memcached,redis –nginx-module=nginx-http-concat –mysql-root-pwd=mysqlpwd –redis-maxmem=2g

    ez命令介绍

    ezhttp提供了一个ez命令来对环境进行操作。用法如下:

    虚拟主机管理

  • ez vhost add:创建虚拟主机
  • ez vhost list: 列出所有虚拟主机
  • ez vhost del: 删除虚拟主机
  • mysql管理

  • ez mysql reset:重置mysql root用户密码
  • ez mysql add:创建mysql用户
  • ez mysql mod:更新mysql用户
  • ez mysql del:删除mysql用户
  • ftp管理

  • ez ftp add:添加ftp用户
  • ez ftp list:列出所有ftp用户
  • ez ftp del:删除ftp用户
  • ez ftp mod:更改ftp用户
  • 进程管理

  • nginx:/etc/init.d/nginx (start|stop|restart)
  • apache:/etc/init.d/httpd (start|stop|restart)
  • php-fpm:/etc/init.d/php-fpm (start|stop|restart)
  • mysql:/etc/init.d/mysqld (start|stop|restart)
  • Linux一键配置工具ezhttp介绍

    简介

    ezhttp是一个Linux一键配置工具,采用bash脚本语言编写。支持自动配置LAMP,LNMP,LNAMP环境,以前提供各种其它的配置工具,如自动配置swap,配置iptables等。项目托管在github,地址为https://github.com/centos-bz/ezhttp

    支持的系统

    理论上支持所有Linux系统,但推荐的系统有centos、ubuntu、debian。

    功能

    支持的套件安装

  • LNMP:Nginx PHP MySQL
  • LAMP: Apache PHP MySQL
  • LNAMP:Nginx Apache PHP MySQL
  • Nginx: Nginx官方版本,Tengine,OpenResty
  • Apache: Apache-2.2,Apache-2.4
  • PHP: PHP-5.2,PHP-5.3,PHP-5.4,PHP-5.5,PHP-5.6,PHP-7.1
  • PHP模块:ZendOptimizer, ZendGuardLoader, xcache, eaccelerator, php_imagemagick, ionCube, php_memcache, php_memcached, php_redis, php_mongo, xdebug, mssql, fileinfo, php-gmp, swoole
  • MySQL: MySQL-5.1,MySQL-5.5,MySQL-5.6,MySQL-5.6
  • 额外的可选软件:memcached, PureFTPd, phpMyAdmin, redis, mongodb, phpRedisAdmin, memadmin, rockmongo, jdk7, jdk8, tomcat7, tomcat8
  • 支持的其它一键配置

  • 配置Swap
  • 生成MySQL my.cnf配置文件
  • 生成RPM包
  • Percona_xtrabackup安装
  • 更改SSH端口
  • Iptables配置
  • 开启和关闭PHP扩展
  • 配置系统时区及日期
  • 初始化MySQL
  • 添加chroot系统用户
  • 网络流量分析
  • 配置apt或yum仓库源
  • 安装配置rsync server
  • 一键配置备份
  • 统计进程访问的文件
  • 安装dotnet core
  • 安装Docker
  • 安装Docker Compose
  • 特性

  • 支持非交互配置,真正地一个命令配置
  • 三个下载节点智能测速选择,加快软件下载速度
  • 可自定义版本安装
  • 自动使用screen安装,再也不怕断网导致的安装中断
  • 自动检测软件md5,保证软件的完整性及安全性
  • 如何使用

    1. wget –no-check-certificate webres.wang/ezhttp.zip?time=$(date +%s) -O ezhttp.zip
    2. unzip ezhttp.zip
    3. cd ezhttp-master
    4. chmod +x start.sh

    交互安装:

    1. ./start.sh

    如图:
    未分类
    非交互安装(查看参数):

    1. ./start.sh -h

    如图:
    未分类

    FAQ

    安装出错

    请发送/root/ezhttp.log文件到[email protected]

    网络问题断开

    安装过程中由于网络原因导致终端断开,ezhttp默认使用screen安装,可以使用screen -r ezhttp命令恢复终端。

    如何赞助

    请在下面的打赏按钮处微信扫一扫支付。

    更多ezhttp教程

    1. 一键安装lnmp lamp lnamp
    2. 添加虚拟主机
    3. 启用和禁用php扩展
    4. 配置防火墙iptables
    5. 安装php模块
    6. 设置定时备份文件和数据库
    7. 更改sshd端口
    8. 设置时区和同步时间
    9. 设置系统swap
    10. 配置yum或apt仓库镜像
    11. 统计分析网络流量

    Docker部署WordPress LNMP(Nginx PHP MySQL)环境实践

    Docker基于LXC实现了把软件封装到一个完整的文件系统,可以在docker容器中运行所需的一切代码,运行环境,系统工具和系统库。由于docker使用独立于主机的文件系统,可以确保软件在不同的主机环境中仍然保持运行环境不变。docker与主机共用一个操作系统内核,使用docker容器具有轻量级的特点,能占用更少的内存快速启动容器。

    下面我们学习使用docker来部署目前非常流行的博客系统wordpress的运行环境nginx php mysql(作者wordpress博客devops.webres.wang正是运行在docker容器中)。那么docker部署wordpress的运行环境与我们传统上直接在主机配置环境有什么区别?我们从开发和运维人员角度来说明。运维使用docker制作好wordpress容器,分发给开发人员,开发人员随即只需一个命令就可以部署好完全一样的运行环境,从此只需要关注代码本身,而不再需要把时间浪费在配置环境上。而同时,docker容器确保了开发环境与生产环境的一致性,极大减少由于开发环境与生产环境不一致出现的各种问题。而由于docker容器可以快速部署的特点,运维人员可以很轻松的对服务进行伸缩和扩展。

    那么如何使用docker部署wordpress的运行环境?大概步骤是分别编写nginx php mysql的Dockerfile文件,从这些Dockerfile文件中生成各自的镜像,然后使用docker-compose工具来统一管理nginx php mysql。为了能只使用docker-compose.yml一个文件就能快速部署wordpress环境,我们把Dockerfile及环境的相关配置保存到阿里云的Kelude(git代码托管code.aliyun.com),然后使用阿里云的Docker镜像仓库(cr.console.aliyun.com)从Kelude拉取Dockerfile自动构建镜像。国外此类服务有hub.docker.com和github.com,使用阿里云的是因为可以免费设置私有git仓库和私有镜像,因为我们可能需要保存一些不便公开的私密信息(如网站证书,密码)。当然你也可以不使用这类服务,直接把镜像保存到本地环境中。下面开始一步步介绍。

    准备工作

    使用阿里云Kelude

    到https://code.aliyun.com/创建一个项目,如Dockerfile。之后我们把wordpress环境的所有相关Dockerfile及配置文件放置到centosbz目录。

    使用阿里云镜像仓库

    阿里云docker镜像仓库地址为https://cr.console.aliyun.com,用来存放docker镜像,可以在本地push镜像上去,也可以从Kelude拉取Dockerfile自动构建镜像。我们先登录,然后新建一个namespace,如centos-bz,之后所有的nginx,php,mysql镜像将存放在这个namespace下。

    安装docker-compose

    需要在运行docker容器的主机上安装docker-compose,可以参照官方文档手动安装,也可以使用ezhttp的一键安装工具(推荐)安装。如:

    wget webres.wang/ezhttp.zip
    unzip ezhttp.zip
    cd ezhttp-master
    ./start.sh
    

    之后会弹出一个菜单,输入2选择Some Useful Tools,然后输入18选择安装docker和compose。

    编写Dockerfile

    clone以上在阿里云Kelude创建的Dockerfile镜像到本地,在此项目中创建webres.wang,然后在webres.wang目录分别创建mysql,nginx,php目录,用于存放它们各自Dockerfile及配置文件。
    这里我们还约定以下目录:

  • /home/docker/nginx/logs/webres.wang:存放devops.webres.wang网站的日志
  • /home/docker/nginx/www/webres.wang: 存放devops.webres.wang网站的文件
  • /home/docker/php: 存放php-fpm的日志
  • /home/docker/mysql:mysql data目录
  • nginx Dockerfile

    在nginx目录创建Dockerfile文件,写入如下内容:

    # 从debian:jessie镜像基础上安装nginx
    FROM debian:jessie
    
    # 声明此Dockerfile维护者的邮箱,有什么问题可以发到此邮件寻问
    LABEL maintainer "[email protected]"
    
    # 定义软件版本及编译工具变量
    ENV NGINX_VERSION 1.10.3
    ENV OPENSSL_VERSION 1.0.2h
    ENV ZLIB_VERSION 1.2.11
    ENV PCRE_VERSION 8.40
    ENV CONCAT_VERSION 1.2.2
    ENV BUILD_TOOLS wget gcc make g++
    ENV SRC_DIR /opt/nginx
    
    # 切换到工作目录
    WORKDIR ${SRC_DIR}
    
    # 开始编译nginx,我们这里使用编译安装nginx而不是使用官方提供的nginx镜像是因为这里使用到了第三方的concat模块,只能编译了。
    # 把所有的安装命令都写在一个RUN指令中是因为这样可以减小镜像层数,缩减镜像大小。推荐使用反斜杠和&&把所有的安装命令放置到一行中。
    RUN apt-get update 
        && apt-get -y --no-install-recommends install ca-certificates ${BUILD_TOOLS} 
        && wget http://nginx.org/download/nginx-${NGINX_VERSION}.tar.gz  
        && wget https://www.openssl.org/source/openssl-${OPENSSL_VERSION}.tar.gz  
        && wget http://www.zlib.net/zlib-${ZLIB_VERSION}.tar.gz  
        && wget https://ftp.pcre.org/pub/pcre/pcre-${PCRE_VERSION}.tar.gz  
        && wget https://github.com/alibaba/nginx-http-concat/archive/${CONCAT_VERSION}.tar.gz -O nginx-http-concat-${CONCAT_VERSION}.tar.gz  
        && tar xf nginx-${NGINX_VERSION}.tar.gz  
        && tar xf openssl-${OPENSSL_VERSION}.tar.gz  
        && tar xf zlib-${ZLIB_VERSION}.tar.gz  
        && tar xf pcre-${PCRE_VERSION}.tar.gz  
        && tar xf nginx-http-concat-${CONCAT_VERSION}.tar.gz  
        && cd nginx-${NGINX_VERSION}  
        && ./configure --prefix=/usr/local/nginx --with-pcre=../pcre-${PCRE_VERSION} 
                    --with-zlib=../zlib-${ZLIB_VERSION} 
                    --with-http_ssl_module 
                    --with-openssl=../openssl-${OPENSSL_VERSION} 
                    --add-module=../nginx-http-concat-${CONCAT_VERSION}  
        && make -j$(nproc) 
        && make install 
        && rm -rf ${SRC_DIR} 
        && apt-get purge -y --auto-remove ${BUILD_TOOLS} 
        && rm -rf /var/lib/apt/lists/* 
    
    # 把构建上下文目录conf,即Dockerfile/webres.wang/nginx/conf目录下的文件复制到容器的/usr/local/nginx/conf目录。
    COPY conf/ /usr/local/nginx/conf/
    
    # 定义启动容器时运行的命令
    ENTRYPOINT ["/usr/local/nginx/sbin/nginx"]
    
    EXPOSE 80 443
    

    对于conf目录下的nginx配置文件,需要把日志,网站目录更改为以下约定的目录位置。

    php-fpm Dockerfile

    创建Dockerfile/webres.wang/php-fpm目录,在此目录下创建Dockerfile文件,内容如下:

    FROM debian:jessie
    LABEL maintainer "[email protected]"
    
    # 定义软件版本,编译工具,依赖等变量
    ENV PHP_VERSION 5.6.30
    ENV BUILD_TOOLS m4 
                   autoconf 
                   autoconf2.13 
                   openssl 
                   wget 
                   gcc 
                   make
    
    ENV BUILD_DEPS libcurl4-gnutls-dev 
                   libxml2-dev 
                   zlib1g-dev 
                   libpcre3-dev 
                   libjpeg-dev 
                   libpng12-dev 
                   libfreetype6-dev 
                   libmhash-dev 
                   libmcrypt-dev 
                   libssl-dev 
                   libtool
    
    ENV PHP_LOCATION /usr/local/php
    ENV BUILD_ARG   --prefix=${PHP_LOCATION} 
                    --with-config-file-path=${PHP_LOCATION}/etc 
                    --enable-fpm 
                    --enable-bcmath 
                    --with-pdo_sqlite 
                    --with-gettext 
                    --with-iconv 
                    --enable-ftp 
                    --with-sqlite3 
                    --enable-mbstring 
                    --enable-sockets 
                    --enable-zip 
                    --enable-soap 
                    --with-openssl 
                    --with-zlib 
                    --with-curl 
                    --with-gd 
                    --with-jpeg-dir 
                    --with-png-dir 
                    --with-freetype-dir 
                    --with-mcrypt 
                    --with-mhash 
                    --with-mysql=mysqlnd 
                    --with-mysqli=mysqlnd 
                    --with-pdo-mysql=mysqlnd 
                    --without-pear 
                    --with-libdir=lib64 
                    --enable-opcache 
                    --disable-cgi
    
    ENV SRC_DIR /opt/php
    
    WORKDIR ${SRC_DIR}
    
    # 开始编译安装php
    RUN apt-get update 
        && apt-get -y --no-install-recommends install ${BUILD_DEPS} ${BUILD_TOOLS} 
        && wget http://php.net/distributions/php-${PHP_VERSION}.tar.gz 
        && tar xf php-${PHP_VERSION}.tar.gz 
        && cd php-${PHP_VERSION} 
        && ln -s /usr/lib/x86_64-linux-gnu/libssl.so /usr/lib/libssl.so 
        && ln -s /usr/lib /usr/lib64 
        && ./configure ${BUILD_ARG} 
        && make -j$(nproc) 
        && make install 
        && cp php.ini-production ${PHP_LOCATION}/etc/php.ini 
        && cp ${PHP_LOCATION}/etc/php-fpm.conf.default ${PHP_LOCATION}/etc/php-fpm.conf 
        && rm -rf ${SRC_DIR} 
        && apt-get purge -y --auto-remove ${BUILD_TOOLS} 
        && rm -rf /var/lib/apt/lists/* 
    
    
    WORKDIR ${PHP_LOCATION}/etc/
    
    # 配置php-fpm,即使用sed工具编辑php-fpm.conf和php.ini文件,这里的php-fpm相关配置命令不与上面的编译命令合在一起来减小层数是因为
    # 配置文件可能会改动比较多,这样分开当配置文件更改时可以直接使用缓存跳过编译步骤,加快构建速度。
    RUN set_php_variable(){ 
            local key=$1; 
            local value=$2; 
            if grep -q -E "^$keys*=" php.ini;then 
                sed -i -r "s#^$keys*=.*#$key=$value#" php.ini; 
            else 
                sed -i -r "s#;s*$keys*=.*#$key=$value#" php.ini; 
            fi; 
            if ! grep -q -E "^$keys*=" php.ini;then 
                echo "$key=$value" >> php.ini; 
            fi; 
        } 
        && BASE_DIR=/home/docker/php 
        && set_php_variable disable_functions "dl,eval,assert,exec,popen,system,passthru,shell_exec,escapeshellarg,escapeshellcmd,proc_close,proc_open" 
        && set_php_variable expose_php Off 
        && set_php_variable error_log ${BASE_DIR}/php_errors.log 
        && set_php_variable request_order  "CGP" 
        && set_php_variable cgi.fix_pathinfo 0 
        && set_php_variable short_open_tag on 
        && set_php_variable date.timezone Asia/Chongqing 
        && sed -i 's/^user =.*/user = www-data/' php-fpm.conf 
        && sed -i 's/^group =.*/group = www-data/' php-fpm.conf 
        && sed -i "s#;slowlog = log/$pool.log.slow#slowlog = ${BASE_DIR}/$pool.log.slow#" php-fpm.conf 
        && sed -i 's/;request_slowlog_timeout = 0/request_slowlog_timeout = 5/' php-fpm.conf 
        && sed -i 's/^pm.max_children.*/pm.max_children =20/' php-fpm.conf 
        && sed -i 's/^pm.start_servers.*/pm.start_servers =5/' php-fpm.conf 
        && sed -i 's/^pm.min_spare_servers.*/pm.min_spare_servers =3/' php-fpm.conf 
        && sed -i 's/^pm.max_spare_servers.*/pm.max_spare_servers =8/' php-fpm.conf 
        && sed -i '/[global]/adaemonize =no' php-fpm.conf 
        && sed -i 's/^listen.*/listen =0.0.0.0:9000/' php-fpm.conf 
        && echo "[opcache]n 
                zend_extension=opcache.son 
                opcache.memory_consumption=128n 
                opcache.interned_strings_buffer=8n 
                opcache.max_accelerated_files=4000n 
                opcache.revalidate_freq=60n 
                opcache.fast_shutdown=1 n" >> php.ini
    
    ENTRYPOINT ["/usr/local/php/sbin/php-fpm"]
    
    EXPOSE 9000    
    

    mysql Dockerfile

    创建Dockerfile/webres.wang/mysql/Dockerfile文件,内容如下:

    FROM mysql:5.6
    LABEL maintainer "[email protected]"
    COPY my.cnf /etc/mysql/my.cnf
    

    这个Dockerfile非常简单,直接使用了官方的mysql镜像,唯一区别是我们使用自己定义的my.cnf配置文件。
    对于my.cnf配置文件,需要把日志,data目录指向/home/docker/mysql,一个my.cnf示例文件如下:

    # Generated by EZHTTP at 2016-02-03 01:05:29
    
    [mysql]
    
    # CLIENT #
    port                           = 3306
    socket                         = /home/docker/mysql/mysql.sock
    
    [mysqld]
    
    # GENERAL #
    port                           = 3306
    user                           = mysql
    default-storage-engine         = InnoDB
    socket                         = /home/docker/mysql/mysql.sock
    pid-file                       = /home/docker/mysql/mysql.pid
    skip-name-resolve
    
    # MyISAM #
    key-buffer-size                = 32M
    
    # INNODB #
    #innodb-flush-method            = O_DIRECT
    innodb-log-files-in-group      = 2
    innodb-log-file-size           = 64M
    innodb-flush-log-at-trx-commit = 2
    innodb-file-per-table          = 1
    innodb-buffer-pool-size        = 1G
    
    # CACHES AND LIMITS #
    tmp-table-size                 = 32M
    max-heap-table-size            = 32M
    query-cache-type               = 0
    query-cache-size               = 0
    max-connections                = 300
    thread-cache-size              = 50
    open-files-limit               = 1024
    table-definition-cache         = 100
    table-open-cache               = 400
    
    
    # SAFETY #
    max-allowed-packet             = 16M
    max-connect-errors             = 1000000
    
    # DATA STORAGE #
    datadir                        = /home/docker/mysql
    
    # LOGGING #
    log-error                      = /home/docker/mysql/mysql-error.log
    log-queries-not-using-indexes  = 1
    slow-query-log                 = 1
    slow-query-log-file            = /home/docker/mysql/mysql-slow.log
    
    # BINARY LOGGING #
    log-bin = /home/docker/mysql/mysql-bin
    server-id = 1
    expire-logs-days = 14
    sync-binlog = 1
    

    构建镜像

    把上一步创建的文件推送到阿里云的Kelude。然后我们登录阿里云的docker镜像仓库cr.console.aliyun.com。这里以设置自动构建nginx镜像为例,php和mysql镜像构建设置类似。
    1.点击左侧“镜像列表”,在右侧点击仓库镜像,如图:
    虚拟化技术
    2.在仓库镜像创建对话框中,说明如下:
    地域:选择离部署docker主机最近的位置,国内的话选择华东1或华东2。
    Namespace和仓库名称:这里选择centos-bz,nginx。
    设置代码源:我们这里选择阿里云code。
    构建设置:勾选代码变更时自动构建镜像,海外机器构建(因为国内主机apt-get安装软件时较慢),Dockerfile路径填/webres.wang/nginx
    完成后点击创建仓库按钮。
    如图:
    虚拟化技术
    3.回到镜像列表,找到nginx镜像,点击管理。
    4.左侧点击“构建”,右侧点击“立即构建”开始首次构建,之后我们更改Dockerfile及配置文件到Kelude之后就会自动构建了。
    5.查看日志,查看构建进程。
    然后继续完成php,mysql的镜像构建设置。

    启动环境

    为了方便统一管理nginx,php,mysql的启动,我们使用docker-compose工具。我们只需要编写一个docker-compose.yml文件,然后使用docker-compose工具就可以快速启动docker容器了。之后把docker-compose.yml传输到任意一台支持docker环境的主机中就可以快速配置wordpress的运行环境。

    docker-compose.yml

    把docker-compose.yml文件放置在/home/docker目录下。

    version: '3'
    # 定义三个服务nginx,php,mysql
    services:
        nginx:
            # 依赖php服务,意味着在启动nginx之前先启动php
            depends_on:
                - php
            # nginx镜像的路径
            image: registry.cn-hangzhou.aliyuncs.com/centos-bz/nginx
            # 容器的/home/docker/nginx目录挂载主机中的/home/docker/nginx目录,
            # 这样使nginx容器把网站文件和目录存放到主机目录中,持久化和方便管理
            volumes:
                - /home/docker/nginx:/home/docker/nginx
            # nginx意外退出时自动重启
            restart: always
    
            # 映射80和443端口
            ports:
                - "80:80"
                - "443:443"
    
            # 容器名称
            container_name: nginx    
        php:
            depends_on:
                - mysql
            image: registry.cn-hangzhou.aliyuncs.com/centos-bz/php-fpm
            restart: always
            volumes:
                - /home/docker/nginx/www:/home/docker/nginx/www
                - /home/docker/php:/home/docker/php
            container_name: php   
    
        mysql:
            image: registry.cn-hangzhou.aliyuncs.com/centos-bz/mysql
            volumes:
                - /home/docker/mysql:/home/docker/mysql
            restart: always
            # 设置MYSQL_ROOT_PASSWORD环境变量,这里是设置mysql的root密码。这里为root。
            environment:
                MYSQL_ROOT_PASSWORD: root
            container_name: mysql
    

    启动环境

    在/home/docker目录执行:

    docker-compose up
    

    查看nginx,php,mysql是否正常启动,如果正常,ctrl-c停止,再执行:

    docker-compose up -d
    

    这里compose命令就在后台启动了。
    执行docker ps查看容器运行状态。

    连接问题

    容器之间可以通过容器名称来连接,如nginx配置文件中连接php的代码fastcgi_pass php:9000,网站数据库配置文件使用mysql:3306。

    日常运维

    迁移

    比如A主机迁移到B主机。只需要三步。

  • 1.打包A主机的/home/docker目录,传输到B主机相同位置
  • 2.配置B主机docker环境
  • 3.在B主机的/home/docker目录下执行docker-compose up -d
  • 导出导入数据库

    把centos.sql.gz数据库文件导入到centos数据库:

    gunzip < centos.sql.gz | docker exec -i mysql mysql -uroot -proot centos
    

    把centos数据库导出到centos.sql.gz

    docker exec -i mysql mysqldump -uroot -proot centos | gzip > centos.sql.gz
    

    备份

    推荐使用ezhttp一键备份设置:

    wget webres.wang/ezhttp.zip
    unzip ezhttp.zip
    cd ezhttp-master
    ./start.sh
    

    之后会弹出一个菜单,输入2选择Some Useful Tools,然后输入14选择备份设置。需要注意的是在设置mysql使用mysqldump备份时,在提示输入mysql bin directory时,输入docker exec /usr/bin/。

    docker和compose一键快速安装脚本

    本文介绍快速安装docker和compose的方法。与手动安装相比,一键安装省去了手工输入命令的繁琐步骤且不容易出错。由于国内网络环境原因,连接docker官方服务器异常的慢,这体现为在国内安装docker-engine和拉取镜像非常慢,甚至无法安装和拉取。此脚本通过更换repository和registry mirror解决了此问题。

    脚本特性

    对于docker-engine的安装,脚本特性如下:

  • 支持centos7,ubuntu,debian系统的安装
  • 支持安装特定版本的docker
  • 根据网络环境测试结果自动选取较快的repository,如国内使用mirrors.ustc.edu.cn,国外使用dockerproject.org
  • 通过测试网络自动为国内设置hub-mirror.c.163.com registry mirror
  • 对于compose的安装,脚本特性如下:

  • 支持所有Linux系统的安装
  • 支持安装特定版本的compose
  • 由于compose托管在amazonaws,国内几乎无法访问,自动设置一个代理下载
  • 使用方法

    1. wget webres.wang/ezhttp.zip
    2. unzip ezhttp.zip
    3. cd ezhttp-master
    4. ./start.sh

    之后会弹出一个菜单,输入2选择Some Useful Tools.
    然后输入17选择安装docker,输入18选择安装compose。