美文网首页
Docker安装一个LNMP环境全过程

Docker安装一个LNMP环境全过程

作者: AnnaJIAN | 来源:发表于2018-12-01 18:51 被阅读0次

    本人的工作环境:Mac一台,里面安装虚拟机ubuntu,在ubuntu上安装docker。虚拟机ubuntu IP 192.168.33.12

    安装一个LNMP环境
    vagrant@dragon:~$ docker images
    REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
    ubuntu18            apache24php72       15f84056ba6f        7 days ago          275MB
    ubuntu              latest              93fd78260bd1        11 days ago         86.2MB
    mysql               latest              f991c20cb508        2 weeks ago         486MB
    centos              latest              75835a67d134        7 weeks ago         200MB
    #本地已经有一个ubuntu18干净的镜像
    vagrant@dragon:~$ docker run -p 80:80 -it ubuntu:latest
    root@fd2f5316cfb5:/# apt-get update
    ...
    
    安装nginx
    root@fd2f5316cfb5:/# apt-get install nginx
    ...
    root@fd2f5316cfb5:/# nginx -v
    nginx version: nginx/1.14.0 (Ubuntu)
    root@fd2f5316cfb5:~# nginx -t
    nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
    nginx: configuration file /etc/nginx/nginx.conf test is successful
    root@fd2f5316cfb5:~# service nginx restart
     * Restarting nginx nginx                                                                                                                    [ OK ]
    root@fd2f5316cfb5:~#
    

    在浏览器输入http://192.168.33.12,可以看到Welcome to nginx! 表示nginx安装成功。

    安装php7.2
    root@fd2f5316cfb5:~# apt-get install php7.2
    ...
    root@fd2f5316cfb5:~# php -v
    PHP 7.2.10-0ubuntu0.18.04.1 (cli) (built: Sep 13 2018 13:45:02) ( NTS )
    Copyright (c) 1997-2018 The PHP Group
    Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
        with Zend OPcache v7.2.10-0ubuntu0.18.04.1, Copyright (c) 1999-2018, by Zend Technologies
    #安装php常用扩展
    root@fd2f5316cfb5:~# apt-get install php7.2-fpm php7.2-mysql php7.2-curl php7.2-json php7.2-mbstring php7.2-xml  php7.2-intl php7.2-gd php7.2-cgi  php7.2-opcache php7.2-zip
    
    配置nginx, 让nginx可以启用php解释器,使php执行。
    使用php-cgi tcp 方式通信
    #备份
    root@fd2f5316cfb5:~# cp sites-available/default sites-available/default.bak
    root@fd2f5316cfb5:~# vi sites-available/default
    
    nignx 配置
    # 添加自动索引文件
    index index.php index.html index.htm index.nginx-debian.html;
    #项目根目录
    root /var/www/html;
    #域名
    server_name localhost;
    #根目录请求,未找到404报错
    location / {
            try_files $uri $uri/ =404;
    }
    #使用tcp方式,使php-cgi与nginx通信,端口9000
    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
    #
    #       # With php-fpm (or other unix sockets):
    #        fastcgi_pass unix:/var/run/php/php7.0-fpm.sock;
    #       # With php-cgi (or other tcp sockets):
           fastcgi_pass 127.0.0.1:9000;
    }
    #禁止.htaccess
    location ~ /\.ht {
        deny all;
    }
    
    测试
    #重启nginx,添加检验文件
    root@fd2f5316cfb5:~# service nginx restart
    root@fd2f5316cfb5:/var/www/html# vi test.php
    
    <?php
    phpinfo();
    ?>
    

    浏览器访问http://192.168.33.12/test.php, 502 Bad Gateway 报错

    查看Fastcgi 的端口, 查看是否有127.0.0.1:9000,没有,开启9000端口
    root@fd2f5316cfb5:/etc/nginx/sites-available# netstat -antp
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      17496/nginx: master
    tcp        0      0 172.17.0.2:80           192.168.33.1:62329      ESTABLISHED -
    tcp        0      0 172.17.0.2:80           192.168.33.1:62320      TIME_WAIT   -
    tcp        0      0 172.17.0.2:80           192.168.33.1:62330      ESTABLISHED -
    tcp        0      0 172.17.0.2:80           192.168.33.1:62328      TIME_WAIT   -
    tcp6       0      0 :::80                   :::*                    LISTEN      17496/nginx: master
    root@fd2f5316cfb5:/etc/nginx/sites-available# php-cgi -b 127.0.0.1:9000
    [1] 17500
    root@fd2f5316cfb5:/etc/nginx/sites-available# netstat -antp
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
    tcp        0      0 127.0.0.1:9000          0.0.0.0:*               LISTEN      17500/php-cgi
    tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      17496/nginx: master
    tcp6       0      0 :::80                   :::*                    LISTEN      17496/nginx: master
    root@fd2f5316cfb5:/etc/nginx/sites-available#
    

    重新访问http://192.168.33.12/test.php,获得php的所有配置文件信息,nginx和php连接成功。

    或者使用php-fpm sock 方式,使nginx php-fpm 通信
    #打开使用php-fpm sock方式,与php通信,更新nginx配置
    location ~ \.php$ {
            include snippets/fastcgi-php.conf;
    #
    #       # With php-fpm (or other unix sockets):
            fastcgi_pass unix:/var/run/php/php7.2-fpm.sock;
    #       # With php-cgi (or other tcp sockets):
    #      fastcgi_pass 127.0.0.1:9000;
    }                   
    root@fd2f5316cfb5:/etc/nginx/sites-available# service nginx restart
    root@fd2f5316cfb5:/etc/nginx/sites-available# ps aux | grep php-fpm
    root     17604  0.0  0.0  11464  1008 ?        S+   14:29   0:00 grep --color=auto php-fpm
    

    浏览器访问http://192.168.33.12/test.php, 502 Bad Gateway 报错

    root@fd2f5316cfb5:/etc/php/7.2/fpm/pool.d# service php7.2-fpm status
     * php-fpm7.2 is not running
    #查看配置文件
    root@fd2f5316cfb5:/etc/php/7.2/fpm/pool.d# ls
    www.conf
    
    #查看是否监听socket
    listen = /run/php/php7.2-fpm.sock
    #去掉分号;使用当前用户组访问
    listen.mode = 0660
    
    root@fd2f5316cfb5:/etc/php/7.2/fpm/pool.d# service php7.2-fpm restart
     * Restarting PHP 7.2 FastCGI Process Manager php-fpm7.2                                                                                     [ OK ]
    root@fd2f5316cfb5:/etc/php/7.2/fpm/pool.d# service php7.2-fpm status
     * php-fpm7.2 is running
    

    浏览器访问http://192.168.33.12/test.php, 502 Bad Gateway 仍旧是报错, 查看php7.2-fpm.log没有异常,查看nginx error.log, 有一个权限报错。

    root@fd2f5316cfb5:/var/log# tail -f php7.2-fpm.log
    root@fd2f5316cfb5:/var/log/nginx# tail -f error.log
    2018/12/01 17:19:28 [crit] 17753#17753: *21 connect() to unix:/var/run/php/php7.2-fpm.sock failed (13: Permission denied) while connecting to upstream, client: 192.168.33.1, server: localhost, request: "GET /test.php HTTP/1.1", upstream: "fastcgi://unix:/var/run/php/php7.2-fpm.sock:", host: "192.168.33.12"
    
    注意到nginx.conf 用户是www-data, 修改user root;重启nignx,[http://192.168.33.12/test.php]
    可以访问了。说明是用户权限的问题。
    ...
    user www-data;
    worker_processes auto;
    ...
    查看/etc/php/7.2/fpm/pool.d/www.conf,  找到sock的执行目录
    listen = /run/php/php7.2-fpm.sock
    
    root@fd2f5316cfb5:/run/php# ls -al
    total 12
    drwxr-xr-x  2 www-data root 4096 Dec  1 17:50 .
    drwxr-xr-x 12 root     root 4096 Dec  1 18:12 ..
    -rw-r--r--  1 root root    5 Dec  1 17:50 php7.2-fpm.pid
    srw-rw----  1 root root    0 Dec  1 17:50 php7.2-fpm.sock
    #把php的执行文件都加到www-data用户和组里面
    root@fd2f5316cfb5:/run# chown www-data:www-data -R php
    root@fd2f5316cfb5:/run/php# ls -al
    total 12
    drwxr-xr-x  2 www-data www-data 4096 Dec  1 18:21 .
    drwxr-xr-x 12 root     root     4096 Dec  1 18:12 ..
    -rw-r--r--  1 www-data www-data    5 Dec  1 18:21 php7.2-fpm.pid
    srw-rw----  1 www-data www-data    0 Dec  1 18:21 php7.2-fpm.sock
    root@fd2f5316cfb5:/run/php#
    

    浏览器访问http://192.168.33.12/test.php, 能够看到php的配置文件了。php-fpm开始运行了。

    安装mysql, 安装默认的mysql5.7

    root@fd2f5316cfb5:~# apt-get install mysql-server
    root@fd2f5316cfb5:~# apt-get install mysql-client
    root@fd2f5316cfb5:~# apt-get install libmysqlclient-dev
    ...
    root@fd2f5316cfb5:~# service mysql start
     * Starting MySQL database server mysqld                                                                                                            No directory, logging in with HOME=/
                                                                                                                                                 [ OK ]
    #登录mysql
    root@fd2f5316cfb5:~# mysql -uroot -p
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 6
    Server version: 5.7.24-0ubuntu0.18.04.1 (Ubuntu)
    
    Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
    
    Oracle is a registered trademark of Oracle Corporation and/or its
    affiliates. Other names may be trademarks of their respective
    owners.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    4 rows in set (0.00 sec)
    root@fd2f5316cfb5:~# ps aux | grep mysql
    mysql    20200  0.0  0.0   4628  1664 ?        S    18:36   0:00 /bin/sh /usr/bin/mysqld_safe
    mysql    20550  0.1  8.7 1154572 178496 ?      Sl   18:36   0:00 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=
    root     20626  0.0  0.0  11464  1072 ?        S+   18:40   0:00 grep --color=auto mysql
    
    服务器根目录加入测试代码,测试mysql连接
    <?php
    $mysqli = new mysqli("localhost", "root", "password"); 
    if(!$mysqli)  { 
        echo "连接失败!"; 
    }else{ 
        echo "连接成功!"; 
    } 
    $mysqli->close(); 
    

    浏览器可以看到 连接成功!的输出。mysql和php通信成功。

    保存docker镜像
    vagrant@dragon:/vagrant$ docker ps
    CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS              PORTS                NAMES
    fd2f5316cfb5        ubuntu:latest       "/bin/bash"         1 hours ago         Up 7 hours          0.0.0.0:80->80/tcp   dreamy_ptolemy
    vagrant@dragon:/vagrant$ docker commit fd2f5316cfb5 ubuntu18:nginx114php72mysql57
    vagrant@dragon:/vagrant$ docker images
    REPOSITORY          TAG                    IMAGE ID            CREATED             SIZE
    ubuntu18            nginx114php72mysql57   7f183e09be60        29 seconds ago      687MB
    ubuntu18            apache24php72          15f84056ba6f        8 days ago          275MB
    ubuntu              latest                 93fd78260bd1        11 days ago         86.2MB
    mysql               latest                 f991c20cb508        2 weeks ago         486MB
    centos              latest                 75835a67d134        7 weeks ago         200MB
    vagrant@dragon:/vagrant$
    

    相关文章

      网友评论

          本文标题:Docker安装一个LNMP环境全过程

          本文链接:https://www.haomeiwen.com/subject/xeulcqtx.html