Initial commit. Version 2.17.0.
Some checks reported errors
continuous-integration/drone/push Build encountered an error

This commit is contained in:
Stanislav Nikitin 2022-07-29 10:52:25 +05:00
commit bd2ce1ea0b
Signed by: pztrn
GPG Key ID: 1E944A0F0568B550
14 changed files with 2302 additions and 0 deletions

25
.drone.yml Normal file
View File

@ -0,0 +1,25 @@
---
kind: pipeline
type: docker
name: build
steps:
- name: docker
image: code.pztrn.name/containers/mirror/plugins/docker:20.13.0
settings:
registry: code.pztrn.name
username: drone
password:
from_secret: drone_secret
repo: code.pztrn.name/containers/snappymail
auto_tag: true
- name: docker
image: code.pztrn.name/containers/mirror/plugins/docker:20.13.0
settings:
username:
from_secret: dockerhub_user
password:
from_secret: dockerhub_password
repo: pztrn/snappymail
auto_tag: true

61
.gitlab-ci.yml Normal file
View File

@ -0,0 +1,61 @@
image: docker:19.03.13
services:
- docker:19.03.13-dind
variables:
DOCKER_HOST: tcp://docker:2375
DOCKER_TCP_PORT: 2375
DOCKER_TLS_CERTDIR: ""
LOCAL_REGISTRY_IMAGE_LATEST: $CI_REGISTRY_IMAGE:latest
LOCAL_REGISTRY_IMAGE_TAGGED: $CI_REGISTRY_IMAGE:$CI_COMMIT_TAG
DOCKERHUB_IMAGE_LATEST: pztrn/rainloop:latest
DOCKERHUB_IMAGE_TAGGED: pztrn/rainloop:$CI_COMMIT_TAG
stages:
- build
before_script:
- docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
- docker login -u "$DOCKERHUB_USER" -p "$DOCKERHUB_PASSWORD"
- docker info
build-local-registry-latest:
stage: build
tags:
- docker
script:
- docker build --pull -t $LOCAL_REGISTRY_IMAGE_LATEST .
- docker push $LOCAL_REGISTRY_IMAGE_LATEST
only:
- master
build-local-registry-version:
stage: build
tags:
- docker
script:
- docker build --pull -t $LOCAL_REGISTRY_IMAGE_TAGGED .
- docker push $LOCAL_REGISTRY_IMAGE_TAGGED
only:
- tags
build-dockerhub-latest:
stage: build
tags:
- docker
script:
- docker build --pull -t $DOCKERHUB_IMAGE_LATEST .
- docker push $DOCKERHUB_IMAGE_LATEST
only:
- master
build-dockerhub-version:
stage: build
tags:
- docker
script:
- docker build --pull -t $DOCKERHUB_IMAGE_TAGGED .
- docker push $DOCKERHUB_IMAGE_TAGGED
only:
- tags

43
Dockerfile Normal file
View File

@ -0,0 +1,43 @@
FROM code.pztrn.name/containers/mirror/alpine:3.16.0
# Install necessary things
RUN apk add --no-cache \
git \
nginx \
php8-curl \
php8-dom \
php8-fpm \
php8-iconv \
php8-json \
php8-mbstring \
php8-openssl \
php8-pdo_mysql \
php8-pdo_pgsql \
php8-pdo_sqlite \
php8-xml \
s6 \
unzip \
wget && \
rm /etc/php8/php-fpm.d/www.conf
# Get rainloop.
RUN mkdir -p /var/www/snappymail && \
cd /var/www/snappymail && \
wget https://github.com/the-djmaze/snappymail/releases/download/v2.17.0/snappymail-2.17.0.zip && \
ls -la && \
unzip snappymail-*.zip && \
chown -R nginx:nginx /var/www/snappymail && \
rm *.zip
# Configure container
COPY configs/ /etc/
# Configure s6.
RUN chmod -R +x /etc/s6/* \
&& chmod +x /etc/s6/.s6-svscan/finish
EXPOSE 80
VOLUME [ "/var/www/snappymail/data" ]
ENTRYPOINT ["/bin/s6-svscan", "/etc/s6"]

33
README.md Normal file
View File

@ -0,0 +1,33 @@
# SnappyMail webmail Docker container
This repository contains Snappymail webmail Docker container build scripts and neccessary configuration files.
## Persistent things
There are some things that should be preserved between container's restarts. Please, add new volume for ``/var/www/snappymail/data`` directory.
If you're binding directory except of creating volume please do proper ``chown``:
```shell
chown -R 100:101 /dir/with/data
```
## Use with docker-compose
You may use this image with docker-compose like that *(do not forget to replace version with needed one!)*:
```yaml
version: "2.4"
services:
rainloop:
restart: always
image: "code.pztrn.name/containers/snappymail:2.17.0"
volumes:
- "/root/snappymail/data:/var/www/snappymail/data"
ports:
- "5480:80"
cpus: 2
mem_limit: 1G
memswap_limit: 0
```

View File

@ -0,0 +1,51 @@
server {
listen 80 default;
server_name localhost _;
root /var/www/snappymail;
index index.php index.html;
autoindex on;
charset utf-8;
client_max_body_size 500m;
# To not cache requests bodys on disk.
client_body_buffer_size 16m;
gzip on;
gzip_disable "msie6";
gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript;
gzip_vary on;
access_log /dev/stdout main;
error_log /dev/stdout info;
location = /favicon.ico { access_log off; log_not_found off; }
location ~* favicon\.(ico|png)$ { access_log off; log_not_found off; }
location = /browserconfig.xml { access_log off; log_not_found off; }
location = /robots.txt { access_log off; log_not_found off; }
location = /humans.txt { access_log off; log_not_found off; }
location = /apple-touch-icon.png { access_log off; log_not_found off; }
location = /apple-touch-icon-precomposed.png { access_log off; log_not_found off; }
location ~ /\.ht { deny all; return 404; }
location ~ /\.git { deny all; return 404; }
location ~ /\.svn { deny all; return 404; }
location ^~ /data { deny all; return 404; }
location ~* ^.+\.(?:jpe?g|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
access_log off;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location ~ \.php(/|$) {
include fastcgi_params;
fastcgi_split_path_info ^(.+\.php)(/.*)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS off;
fastcgi_pass 127.0.0.1:9000;
}
}

92
configs/nginx/nginx.conf Normal file
View File

@ -0,0 +1,92 @@
# /etc/nginx/nginx.conf
user nginx;
# Set number of worker processes automatically based on number of CPU cores.
worker_processes auto;
# Enables the use of JIT for regular expressions to speed-up their processing.
pcre_jit on;
# Configures default error logger.
error_log /dev/stdout info;
# Includes files with directives to load dynamic modules.
include /etc/nginx/modules/*.conf;
daemon off;
events {
# The maximum number of simultaneous connections that can be opened by
# a worker process.
worker_connections 1024;
}
http {
# Includes mapping of file name extensions to MIME types of responses
# and defines the default type.
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Name servers used to resolve names of upstream servers into addresses.
# It's also needed when using tcpsocket and udpsocket in Lua modules.
#resolver 208.67.222.222 208.67.220.220;
# Don't tell nginx version to clients.
server_tokens off;
# Specifies the maximum accepted body size of a client request, as
# indicated by the request header Content-Length. If the stated content
# length is greater than this size, then the client receives the HTTP
# error code 413. Set to 0 to disable.
client_max_body_size 1m;
# Timeout for keep-alive connections. Server will close connections after
# this time.
keepalive_timeout 65;
# Sendfile copies data between one FD and other from within the kernel,
# which is more efficient than read() + write().
sendfile on;
# Don't buffer data-sends (disable Nagle algorithm).
# Good for sending frequent small bursts of data in real time.
tcp_nodelay on;
# Causes nginx to attempt to send its HTTP response head in one packet,
# instead of using partial frames.
#tcp_nopush on;
# Path of the file with Diffie-Hellman parameters for EDH ciphers.
#ssl_dhparam /etc/ssl/nginx/dh2048.pem;
# Specifies that our cipher suits should be preferred over client ciphers.
ssl_prefer_server_ciphers on;
# Enables a shared SSL cache with size that can hold around 8000 sessions.
ssl_session_cache shared:SSL:2m;
# Enable gzipping of responses.
#gzip on;
# Set the Vary HTTP header as defined in the RFC 2616.
gzip_vary on;
# Enable checking the existence of precompressed files.
#gzip_static on;
# Specifies the main log format.
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
# Sets the path, format, and configuration for a buffered log write.
access_log /dev/stdout main;
# Includes virtual hosts configs.
include /etc/nginx/conf.d/*.conf;
}

View File

@ -0,0 +1,4 @@
[global]
pid = /var/run/php-fpm8.pid
include=/etc/php8/php-fpm.d/*.conf

View File

@ -0,0 +1,31 @@
[snappymail]
user = nginx
group = nginx
listen = 127.0.0.1:9000
listen.owner = nginx
listen.group = nginx
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 40
pm.start_servers = 4
pm.min_spare_servers = 4
pm.max_spare_servers = 36
pm.process_idle_timeout = 10s;
pm.max_requests = 100
catch_workers_output = yes
; Pass environment variables like LD_LIBRARY_PATH. All $VARIABLEs are taken from
; the current environment.
; Default Value: clean env
env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp
php_admin_value[memory_limit] = 128M

1945
configs/php8/php.ini Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,5 @@
#!/bin/sh
for file in /etc/s6/*/finish; do
$file
done

3
configs/s6/nginx/finish Normal file
View File

@ -0,0 +1,3 @@
#!/bin/sh
kill `cat /var/run/nginx/nginx.pid`

3
configs/s6/nginx/run Normal file
View File

@ -0,0 +1,3 @@
#!/bin/execlineb -P
/usr/sbin/nginx

View File

@ -0,0 +1,3 @@
#!/bin/sh
kill `cat /var/run/php-fpm8.pid`

3
configs/s6/php-fpm/run Normal file
View File

@ -0,0 +1,3 @@
#!/bin/execlineb -P
/usr/sbin/php-fpm8 -F