1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > Docker 配置nginx文件上传的镜像

Docker 配置nginx文件上传的镜像

时间:2019-12-19 04:48:23

相关推荐

Docker 配置nginx文件上传的镜像

目录结构:

|-- docker

| |-- Dockerfile

| |-- install.sh

| |-- nginx

| | |-- conf.d

| | | `-- default.conf

| | `-- nginx.conf

| `-- nginx.key

`-- docker-compose.yml

一、安装docker、docker-compose

1、不会安装docker的请移步----》Centos 7 安装dockerUbuntu16.04安装Docker

2、安装docker-compose(Centos7环境无pip的----》centos7安装pip2)

pip install docker-compose

第二、配置文件,构建镜像

1、创建docker目录

mkdir docker && cd docker

2、创建nginx.key文件

cat << EOF > nginx.key-----BEGIN PGP PUBLIC KEY BLOCK-----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=UK9v-----END PGP PUBLIC KEY BLOCK-----EOF

3、创建install.sh文件

cat << EOF > install.sh#!/bin/shset -e# Base setupaddgroup -S nginx \&& adduser -D -S -h /var/cache/nginx -s /sbin/nologin -G nginx nginx \&& apk add --no-cache --virtual .build-deps \curl \gcc \gd-dev \geoip-dev \git \gnupg \libc-dev \libxslt-dev \linux-headers \make \openssh \openssl-dev \pcre-dev \perl-dev \unzip \zlib-dev \# Install GPG keysgpg --import /usr/src/nginx.keyCONFIG="\--prefix=/etc/nginx \--sbin-path=/usr/sbin/nginx \--modules-path=/usr/lib/nginx/modules \--conf-path=/etc/nginx/nginx.conf \--error-log-path=/var/log/nginx/error.log \--http-log-path=/var/log/nginx/access.log \--pid-path=/var/run/nginx.pid \--lock-path=/var/run/nginx.lock \--http-client-body-temp-path=/var/cache/nginx/client_temp \--http-proxy-temp-path=/var/cache/nginx/proxy_temp \--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \--http-scgi-temp-path=/var/cache/nginx/scgi_temp \--user=nginx \--group=nginx \--with-http_ssl_module \--with-http_realip_module \--with-http_addition_module \--with-http_sub_module \--with-http_dav_module \--with-http_flv_module \--with-http_mp4_module \--with-http_gunzip_module \--with-http_gzip_static_module \--with-http_random_index_module \--with-http_secure_link_module \--with-http_stub_status_module \--with-http_auth_request_module \--with-http_xslt_module=dynamic \--with-http_image_filter_module=dynamic \--with-http_geoip_module=dynamic \--with-http_perl_module=dynamic \--with-threads \--with-stream \--with-stream_ssl_module \--with-http_slice_module \--with-mail \--with-mail_ssl_module \--with-file-aio \--with-http_v2_module \--with-ipv6 \--add-module=/usr/src/progress/nginx-upload-progress-module-master \--add-module=/usr/src/upload/nginx-upload-module \"curl -fSL /download/nginx-$NGINX_VERSION.tar.gz -o nginx.tar.gzcurl -fSL /download/nginx-$NGINX_VERSION.tar.gz.asc -o nginx.tar.gz.ascgpg --batch --verify nginx.tar.gz.asc nginx.tar.gzexport GNUPGHOME="$(mktemp -d)"rm -r "$GNUPGHOME" nginx.tar.gz.ascmkdir -p /usr/srctar -zxC /usr/src -f nginx.tar.gzrm nginx.tar.gzmkdir -p /usr/src/uploadcd /usr/src/uploadgit clone /vkholodkov/nginx-upload-module.gitcd nginx-upload-modulegit checkout 2.255mkdir -p /usr/src/progresscd /usr/src/progresscurl -fSLO /masterzen/nginx-upload-progress-module/archive/master.zipunzip master.zipcd /usr/src/nginx-$NGINX_VERSION./configure $CONFIG --with-debugmake -j$(getconf _NPROCESSORS_ONLN)mv objs/nginx objs/nginx-debugmv objs/ngx_http_xslt_filter_module.so objs/ngx_http_xslt_filter_module-debug.somv objs/ngx_http_image_filter_module.so objs/ngx_http_image_filter_module-debug.somv objs/ngx_http_geoip_module.so objs/ngx_http_geoip_module-debug.somv objs/ngx_http_perl_module.so objs/ngx_http_perl_module-debug.so./configure $CONFIGmake -j$(getconf _NPROCESSORS_ONLN)make installrm -rf /etc/nginx/html/mkdir -p /etc/nginx/conf.d/mkdir -p /usr/share/nginx/html/install -m644 html/index.html /usr/share/nginx/html/install -m644 html/50x.html /usr/share/nginx/html/install -m755 objs/nginx-debug /usr/sbin/nginx-debuginstall -m755 objs/ngx_http_xslt_filter_module-debug.so /usr/lib/nginx/modules/ngx_http_xslt_filter_module-debug.soinstall -m755 objs/ngx_http_image_filter_module-debug.so /usr/lib/nginx/modules/ngx_http_image_filter_module-debug.soinstall -m755 objs/ngx_http_geoip_module-debug.so /usr/lib/nginx/modules/ngx_http_geoip_module-debug.soinstall -m755 objs/ngx_http_perl_module-debug.so /usr/lib/nginx/modules/ngx_http_perl_module-debug.soln -s ../../usr/lib/nginx/modules /etc/nginx/modulesstrip /usr/sbin/nginx*strip /usr/lib/nginx/modules/*.sorm -rf /usr/src/nginx-$NGINX_VERSIONrm -rf /usr/src/uploadrm -rf /usr/src/progress# Bring in gettext so we can get `envsubst`, then throw# the rest away. To do this, we need to install `gettext`# then move `envsubst` out of the way so `gettext` can# be deleted completely, then move `envsubst` back.apk add --no-cache --virtual .gettext gettextmv /usr/bin/envsubst /tmp/runDeps="$(scanelf --needed --nobanner /usr/sbin/nginx /usr/lib/nginx/modules/*.so /tmp/envsubst \| awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \| sort -u \| xargs -r apk info --installed \| sort -u \)"apk add --no-cache --virtual .nginx-rundeps $runDepsapk del .gettextmv /tmp/envsubst /usr/local/bin/# forward request and error logs to docker log collectorln -sf /dev/stdout /var/log/nginx/access.logln -sf /dev/stderr /var/log/nginx/error.logEOF

4、创建nginx配置文件

mkdir nginx && cd nginx

cat << EOF > nginx.confuser nginx;worker_processes 1;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_nopushon;keepalive_timeout 65;gzip on;include /etc/nginx/conf.d/*.conf;}EOF

mkdir conf.d && cd conf.d

cat << EOF > default.confserver {listen8888;location / {expires -1;root /usr/share/nginx/html;}location /logs/ {expires -1;root /usr/share/nginx/static/;}location /upload {# upload large file, beginclient_max_body_size 8000M;client_body_buffer_size 8000M;client_body_timeout 120;add_header X-Clacks-Overhead "GNU Terry Pratchett";add_header X-Clacks-Overhead "GNU Terry Pratchet";add_header Access-Control-Allow-Origin *;add_header 'Access-Control-Allow-Credentials' 'true';add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';add_header 'Access-Control-Allow-Headers' 'Authorization,DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';# upload large file end# After upload, pass altered request body to this django viewupload_pass /api/file/;# Store files to this directory# The directory is hashed, subdirectories 0 1 2 3 4 5 6 7 8 9 should existupload_store /usr/share/nginx/static/www/file/_upload 1; upload_store_access user:rw group:rw all:rw;# Set specified fields in request bodyupload_set_form_field $upload_field_name.name "$upload_file_name";upload_set_form_field $upload_field_name.content_type "$upload_content_type";upload_set_form_field $upload_field_name.path "$upload_tmp_path";# Inform backend about hash and size of a fileupload_aggregate_form_field "$upload_field_name.md5" "$upload_file_md5";upload_aggregate_form_field "$upload_field_name.size" "$upload_file_size";# Here is where you define additional fields to pass through to upload_completeupload_pass_form_field "^submit$|^description$";upload_pass_form_field "^name$";upload_pass_form_field "^terminal$";upload_cleanup 400-599;}}EOF

5、回到docker目录下创建Dockerfile文件

cat << EOF > DockerfileFROM alpine:3.4ENV NGINX_VERSION 1.13.6COPY install.sh /usr/src/COPY nginx.key /usr/src/RUN sh -x /usr/src/install.shCOPY nginx /etc/nginx# Create hashed temporary upload locationsRUN mkdir -p /usr/src/nginx/static/www/file/_upload/0 && \mkdir -p /usr/src/nginx/static/www/file/_upload/1 && \mkdir -p /usr/src/nginx/static/www/file/_upload/2 && \mkdir -p /usr/src/nginx/static/www/file/_upload/3 && \mkdir -p /usr/src/nginx/static/www/file/_upload/4 && \mkdir -p /usr/src/nginx/static/www/file/_upload/5 && \mkdir -p /usr/src/nginx/static/www/file/_upload/6 && \mkdir -p /usr/src/nginx/static/www/file/_upload/7 && \mkdir -p /usr/src/nginx/static/www/file/_upload/8 && \mkdir -p /usr/src/nginx/static/www/file/_upload/9 && \chmod 777 -R /usr/src/nginx/static/www/file/_uploadEXPOSE 80 443CMD ["nginx", "-g", "daemon off;"]EOF

文件创建完成之后对照一下docker目录下的文件结构

|-- Dockerfile

|-- install.sh

|-- nginx

| |-- conf.d

| | `-- default.conf

| `-- nginx.conf

`-- nginx.key

6、文件全部创建完毕后构建nginx:alpine镜像,在docker目录下执行下面命令:

docker build -t nginx:alpine .

第三、启动镜像

1、创建docker-compose.yml文件

cat << EOF > docker-compose.ymlversion: "2"services:nginx:container_name: nginximage: "nginx:alpine"# env_file: prod.envvolumes:- ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf- ./docker/nginx/conf.d:/etc/nginx/conf.d- /data/nginx/static:/usr/share/nginx/static- /data/nginx/logs:/var/log/nginxports:- "8888:8888"restart: alwaysEOF

2、创建数据储存目录

mkdir -p /data/nginx/static/www/file/_upload/{0..9}cd /data/nginx && chmod -R 777 static/mkdir -p /data/nginx/logs

3、启动容器

docker-compose up -d

构建完成

最后在default.conf配置文件中转到后台处理的接口upload_pass /api/file/;

接口对应的类,如下所示:(自己配置自己需要的数据结构)

class FileUploadCompileAPIView(APIView):def post(self, request, *args, **kwargs):data = dict(request.data.dict())return XopsResponse(data)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。