• 使用openresty && minio && thumbor 构建稳定高效的图片服务器


    备注:

         minio 是一个开源的s3 协议兼容的分布式存储,openresty nginx+lua 高性能可扩展的nginx 衍生版,thumbor 基于python

    的图片处理服务器,支持图片的裁剪,识别。。。。

         代码为使用docker 构建的一个一体化的参考代码,实际使用中,大家可以基于自己的业务场景修改,对于简单的场景,直接

    使用也是可以的。

    1. 项目结构

    ├── Dockerfile-nginx
    ├── Dockerfile-thumbor
    ├── README.md
    ├── docker-compose.yml
    └── nginx.conf

    2. 代码说明

    备注:主要是对于docker-compose.yml的说明
    
    a. docker-compose.yml
    
    version: '3'
    services:
      nginx:
        image: mynginx-minio
        build:
          context: .
          dockerfile: Dockerfile-nginx
        ports:
          - 8087:80
        depends_on:
          - thumbor
      thumbor:
        image: mythumbor
        build:
          context: .
          dockerfile: Dockerfile-thumbor
      minio:
        image: minio/minio
        volumes:
          - ./data:/data
          - ./config:/root/.minio
        ports:
          - 9091:9000
        command: server /data
    
    b. Dockerfile-nginx 很简单,就是进行反向代理的配置
    
    FROM openresty/openresty:alpine
    LABEL name="rongfengliang"
    LABEL version="v1.0.0"
    ENV name=rongfengliang
    ENV version=v1.0.0
    COPY nginx.conf usr/local/openresty/nginx/conf/
    EXPOSE 80
    EXPOSE 443
    EXPOSE 88
    
    nginx.conf
    
    worker_processes  1;
    events {
        worker_connections  1024;
    }
    http {
        include       mime.types;
        default_type  application/octet-stream;
        sendfile        on;
        keepalive_timeout  65;
        resolver 127.0.0.11; # dns 配置
        gzip  on;
        real_ip_header     X-Forwarded-For;
        real_ip_recursive on;
        server {
            listen       80;
            server_name  localhost;
            real_ip_header    X-Forwarded-For;
            real_ip_recursive on;
            charset utf-8;
            location /mydemo{
                root   html;
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-For $remote_addr;
                client_body_buffer_size 10M;
                client_max_body_size 10G;
                proxy_buffers 1024 4k;
                proxy_read_timeout 300;
                proxy_pass http://minio:9000; 
            }
            location /{
                proxy_set_header Host $http_host;
                proxy_set_header X-Forwarded-For $remote_addr;
                client_body_buffer_size 10M;
                client_max_body_size 10G;
                proxy_buffers 1024 4k;
                proxy_read_timeout 300;
                proxy_pass http://thumbor/unsafe/300x200/http://minio:9000$request_uri; // 图片处理为300*200 的大小
            }
            location /alert {
             default_type text/html;
             content_by_lua_block{
                 ngx.say([[<script>alert("error")</script>]])
             }
            }
            location /ip {
                default_type text/html;
                content_by_lua_block{
                    ngx.say(ngx.var.remote_addr)
                }
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
        server {
            listen       88;
            server_name  localhost;
            charset utf-8;
            location / {
                root   html;
                index  index.html index.htm;
            }
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
        }
    }
    
    c. Dockerfile-thumbor thumbor 的镜像
    
    FROM alpine:3.6
    EXPOSE 80
    MAINTAINER dalong@qq.com
    CMD ["thumbor", "-l", "info", "-p", "80"]
    ENV THUMBOR_VERSION 6.3.2
    RUN apk add --no-cache 
    		python 
        libcurl 
    		ca-certificates 
    		libjpeg-turbo 
        openjpeg 
        libwebp 
        tiff 
        gcc 
    		py-pip 
    		curl-dev 
    		python-dev 
    		musl-dev 
    		libjpeg-turbo-dev 
        openjpeg-dev 
        libwebp-dev 
        tiff-dev 
        libressl-dev 
    	&& export LIBRARY_PATH=/lib 
    	&& pip install thumbor==$THUMBOR_VERSION 
    	&& apk del gcc *-dev 
    	&& rm -rf /var/cache/apk/* 
    	&& rm -rf /root/.cache
    3. 构建
    docker-compose build
    4. 运行
    docker-compose up -d
    5. 准备运行数据(minio 文件,以及policy 配置)
    a. 获取minio key
    
    dokcer-compose logs  minio
    
    b. 输入minio 登陆需要的key 
    
    c. 创建bucket
    
    d. 设置bucket policy  *  read&&write
    6. 参考界面
    7. 参考资料
    http://thumbor.org/
    https://www.minio.io/
    https://github.com/rongfengliang/mino-thumbor-openresty
  • 相关阅读:
    “==” 和 Equals()
    数据持久层的设计
    Jquery Validation :多个按钮都需要做提交验证的解决方案
    留住异常的堆栈信息【throw ex 和 throw 的区别】
    [转] eval() may be evil
    框架结构和脚本跨域的问题
    ue4 材质MipLevels
    spring+json+jquery
    a different object with the same identifier value was already associated with the session错误
    kali 更新国内apt源 (转)
  • 原文地址:https://www.cnblogs.com/rongfengliang/p/8650784.html
Copyright © 2020-2023  润新知