- _nosay
树莓派docker搭建lnmp环境
2017-11-04 17:10:02
前面已经用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这块的知识,还是挺好玩的。