initial commit

This commit is contained in:
cupcakearmy 2019-08-10 22:46:44 +02:00
commit 46fc3d4a2e
5 changed files with 170 additions and 0 deletions

38
Dockerfile Normal file
View File

@ -0,0 +1,38 @@
FROM alpine AS builder
ARG DEP_DEV="alpine-sdk zlib-dev pcre-dev openssl-dev gd-dev"
ARG NGINX_MODULES="--with-http_realip_module --with-threads --with-http_ssl_module --with-http_v2_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_secure_link_module"
ARG NGINX=1.16.0
RUN apk add --no-cache ${DEP_DEV}
WORKDIR /build
RUN curl https://nginx.org/download/nginx-${NGINX}.tar.gz | tar xz
RUN mv nginx-${NGINX} nginx
RUN git clone --recursive https://github.com/google/ngx_brotli.git
WORKDIR /build/nginx
RUN ./configure ${NGINX_MODULES} --add-module=../ngx_brotli
RUN make && make install
FROM alpine
ARG DEP_RUN="pcre openssl gd tzdata"
COPY --from=builder /usr/local/nginx /usr/local/nginx
RUN apk add --no-cache ${DEP_RUN} \
&& ln -sf /dev/stdout /usr/local/nginx/logs/access.log \
&& ln -sf /dev/stderr /usr/local/nginx/logs/error.log
COPY ./conf/nginx.conf /usr/local/nginx/conf/nginx.conf
COPY ./conf/default.conf /usr/local/nginx/conf/sites/default.conf
COPY ./html/error.html /usr/local/nginx/html/error.html
EXPOSE 80
STOPSIGNAL SIGTERM
CMD ["/usr/local/nginx/sbin/nginx", "-g", "daemon off;"]

50
README.md Normal file
View File

@ -0,0 +1,50 @@
# NGINX Static Server
This is a little docker image for histing static content efficiently.
Supports ETags & Brotli/GZip compression out of the box.
## Quickstart 🚀
```yaml
# docker-compose.yml
version: '3.7'
services:
server:
image: cupcakearmy/static
restart: unless-stopped
ports:
- 80:80
volumes:
- ./public:/srv:ro
```
```bash
docker-compose up -d
```
### Custom Configuration
```
# my.conf
server {
listen 80;
server_name _;
location / {
root /srv;
try_files $uri /index.html =404;
}
}
```
```yaml
version: '3.7'
services:
server:
# ...
volumes:
- ./my.conf:/usr/local/nginx/conf/sites/default.conf
# ...
```

17
conf/default.conf Normal file
View File

@ -0,0 +1,17 @@
server {
listen 80;
server_name _;
location / {
root /srv;
try_files $uri /index.html =404;
}
error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 420 422 423 424 426 428 429 431 444 449 450 451 /error.html;
error_page 500 501 502 503 504 505 506 507 508 509 510 511 /error.html;
location = /error.html {
internal;
root /usr/local/nginx/html;
}
}

47
conf/nginx.conf Normal file
View File

@ -0,0 +1,47 @@
user nobody;
worker_processes auto;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
log_format main '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_x_forwarded_for"';
sendfile on;
keepalive_timeout 30;
etag on;
gzip on;
brotli on;
brotli_types *;
server_tokens off;
include sites/*.conf;
# server {
# listen 80;
# server_name _;
# location / {
# root /srv;
# try_files $uri /index.html =404;
# # add_header Cache-Control "public, max-age=86400, stale-while-revalidate=604800, stale-if-error=604800";
# }
# error_page 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 420 422 423 424 426 428 429 431 444 449 450 451 /error.html;
# error_page 500 501 502 503 504 505 506 507 508 509 510 511 /error.html;
# location = /error.html {
# internal;
# root /usr/local/nginx/html;
# }
# }
}

18
html/error.html Normal file
View File

@ -0,0 +1,18 @@
<!DOCTYPE html>
<html>
<head>
<style>
html, body{
font-family: 'Courier New', Courier, monospace;
text-align: center;
}
h1 {
font-weight: normal;
}
</style>
</head>
<body>
<h1>error</h1>
</body>
</html>