- _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这块的知识,还是挺好玩的。