这是微博秀地方
KUYH

树莓派docker搭建lnmp环境

前面已经用docker搭建许多laravel环境了,这次尝试使用树莓派搭建可谓信心满满,可惜安装的过程中还是不可避免了踩了不少坑,特此从头记录一下。

 

首先在控制台执行

curl -fsSL get.docker.com -o get-docker.sh
 sudo sh get-docker.sh

 

等待一段时间后,docker安装成功,然后执行

sudo usermod -aG docker your-user
 newgrp - docker

然后执行docker version 查看,显示docker信息,说明docker-ce已经正确无误的安装了。

安装完以后,试着跑一下laradock,果然安装不成功,这是因为树莓派毕竟是卡片电脑,有一些镜像必须要量身去打造,所以我们只能自己去写Dockerfile文件啦。

 

首先在某个可写目录下,新建三个文件夹,一个命名为docker,用来存放相应的Dockerfile文件,一个命名为wwwroot用来存放程序文件,最后一个新建为.data,用来存放数据库文件。

 

我们在docker文件夹中新建docker-compose.yml文件内容为

  version: '2'
 
services:
   
### Applications Code Container #############################
 
    applications:
      image: tianon/true
      volumes:
        - /home/nosay/wwwroot:/var/www/html
 
### Applications Code Container #############################
 
    mysql:
      image: hypriot/rpi-mysql
      container_name: nosay_mysql
      volumes:
        - /home/nosay/.data:/var/lib/mysql
      environment:
        - MYSQL_DATABASE=muzilong
        - MYSQL_USER=muzilong
        - MYSQL_PASSWORD=Caonidaye0023
        - MYSQL_ROOT_PASSWORD=Caonidaye0023
      ports:
        - "3306:3306"
      networks:
        - backend
         
### PHP-FPM Container #######################################
 
    phpfpm:
      build:
        context: ./phpfpm
      container_name: nosay_phpfpm
      volumes_from:
        - applications
      ports:
        - "9000:9000"
      links:
        - mysql
      networks:
        - backend
 
### nginx Container #######################################
 
    nginx:
      build:
        context: ./nginx
      container_name: nosay_nginx
      volumes_from:
        - applications
      ports:
        - "80:80"
      links:
        - phpfpm
      networks:
        - backend         
               
 
 
### Networks Setup ############################################
 
networks:
  #frontend:
    #driver: "bridge"
  backend:
    driver: "bridge"

 

在docker文件夹中建立nginx文件夹,放入Dockerfile文件,内容为

FROM nginx
 
MAINTAINER Nosay <admin@muzilong.cn>
 
COPY default.conf /etc/nginx/conf.d/default.conf
COPY nginx.conf /etc/nginx/nginx.conf
 
CMD ["nginx"]
 
EXPOSE 80 443

 

其中,nginx.conf文件内容为

user  nginx;
worker_processes  1;
daemon off; 
error_log  /var/log/nginx/error.log warn;
pid        /var/run/nginx.pid;
events {
    worker_connections  1024;
}
 
 
http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;
    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                      '$status $body_bytes_sent "$http_referer" '
                      '"$http_user_agent" "$http_x_forwarded_for"';
    access_log  /var/log/nginx/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    keepalive_timeout  65;
    #gzip  on;
    include /etc/nginx/conf.d/*.conf;
}

default.conf文件内容为

server {
    listen       80;
    server_name  localhost;
 
    #charset koi8-r;
    #access_log  /var/log/nginx/host.access.log  main;
 
    location / {
        root   /var/www/html/laravel/public;
        index  index.php index.html index.htm;
        try_files $uri $uri/ /index.php$is_args$args;
    }
    #error_page  404              /404.html;
    # redirect server error pages to the static page /50x.html
    #
    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /var/www/html/laravel/public;
    }
    # proxy the PHP scripts to Apache listening on 127.0.0.1:80
    #
    #location ~ \.php$ {
    #    proxy_pass   http://127.0.0.1;
    #}
 
    # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
    #
    location ~ \.php$ {
        root           /var/www/html/laravel/public;
        fastcgi_pass   phpfpm:9000;
        fastcgi_index  index.php;
        fastcgi_param  SCRIPT_FILENAME  /var/www/html/laravel/public$fastcgi_script_name;
        include        fastcgi_params;
    }
 
    # deny access to .htaccess files, if Apache's document root
    # concurs with nginx's one
    #
    #location ~ /\.ht {
    #    deny  all;
    #}
}

 

然后在docker目录下,建立phpfpm文件夹,放入Dockerfile文件,内容为

FROM php:7.1-fpm
MAINTAINER Nosay <admin@muzilong.cn>
RUN docker-php-ext-install pdo_mysql
RUN apt-get update -yqq && apt-get install -y vim git zip unzip
EXPOSE 9000

 

当然还要安装docker-compose 执行命令为:

sudo pip install -U docker-compose

 

然后试执行

docker-compose up -d

执行起来比较慢,半天时间才把一个树莓派装好,其它的就简单多了,把镜像导出来然后再给别的树莓派就可以了。

 

镜像导出命令:

docker save 镜像id > 镜像.tar

 

镜像导入命令:

docker load < 镜像.tar

如此这样操作,顺利的话就像博主一样,三台树莓派都装好了lnmp环境,这样我们试着用一台云服务器做下反向代理,并负载均衡一下看看。

 

在云服务器中的nginx配置文件中写入

user www-data;
worker_processes  1;
pid /run/nginx.pid;
daemon off;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    upstream backend {
        #ip_hash;
        server 树莓派一ip:8441;
    server 树莓派二ip:8442;
    server 树莓派三ip:8443;
     }
    server {
        listen       80;
        server_name  2;
        location / {
             proxy_set_header Host $host;
             proxy_set_header X-Real-IP $remote_addr;
             proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
             #禁用缓存
             proxy_buffering off;
             #反向代理的地址
             proxy_pass http://backend;     
        }
    }
}

 

这样通过云服务器访问三次,得到以下界面

 

这是树莓派1显示内容:

这是树莓派二显示内容:

这是树莓派三显示内容:

成功显示了三台树莓派中的内容,说明配置是正确无误的。此次操作加深了对docker的认识,也认识到对nginx配置不熟悉的不足,接下来会买一些书恶补一下nginx这块的知识,还是挺好玩的。

码字很辛苦,转载请注明来自KUYH《树莓派docker搭建lnmp环境》

评论