Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding docker-compose configuration files and documentation #2786

Merged
merged 1 commit into from
Jan 15, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ terminal. Features include:
Ability to build GoAccess' Docker image from upstream. You can still fully
configure it, by using Volume mapping and editing `goaccess.conf`. See
[Docker](https://github.com/allinurl/goaccess#docker) section below.
There is also documentation how to use [docker-compose](./docker-compose/README.md).

### Nearly all web log formats... ###
GoAccess allows any custom log format string. Predefined options include, but
Expand Down Expand Up @@ -215,6 +216,8 @@ OR real-time

tail -F access.log | docker run -p 7890:7890 --rm -i -e LANG=$LANG allinurl/goaccess -a -o report.html --log-format COMBINED --real-time-html -

There is also documentation how to use [docker-compose](./docker-compose/README.md).

##### Build in isolated container

You can also build the binary for Debian based systems in an isolated container environment to prevent cluttering your local system with the development libraries:
Expand Down
34 changes: 34 additions & 0 deletions docker-compose/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
# Docker-compose configuration

Here are two docker-compose configurations for goaccess which
combine a static site with a real-time report of goaccess.
The directories used are:

- `configs` - for the nginx and goaccess configuration
- `public` - the files served by nginx - put your static site here
- `logs` - nginx logs - there is no log rotation in place!

There are two flavors of the docker-compose files and the goaccess files:
- `*.vanilla.*` which need you to take care of the TLS certificates
- `*.traefik.*` using traefik for TLS and domain routing

## Vanilla

For the vanilla version, you'll have to do the following:

- put the TLS certificates into `configs/certs`, following the naming scheme
in `goaccess.vanilla.conf`
- route requests for the static webpage to port `8080`

## Traefik

The traefik version is setup to make it easier to do the routing.
You don't need to take care of the TLS certificates, and the
goaccess websocket gets its own subdomain.

To put it all together, the following environment is needed:
- traefik configured according to [Traefik-101](https://ineiti.ch/posts/traefik-101/traefik-101/)
- DNS configuration for two domain names pointing to your server's IP:
- `yourdomain` for the static pages, e.g., a blog-post using [Hugo](https://gohugo.io/)
- `goaccess.yourdomain` for the stats with goaccess

9 changes: 9 additions & 0 deletions docker-compose/configs/goaccess.traefik.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
tz Europe/Zurich
time-format %H:%M:%S
date-format %Y-%m-%d
log-format COMBINED
log-file /srv/logs/access.log
output /srv/report/report.html
real-time-html true
ws-url wss://goaccess.yourdomain
port 443
10 changes: 10 additions & 0 deletions docker-compose/configs/goaccess.vanilla.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
tz Europe/Zurich
time-format %H:%M:%S
date-format %Y-%m-%d
log-format COMBINED
log-file /srv/logs/access.log
output /srv/report/report.html
real-time-html true
ws-url wss://yourdomain
ssl-cert /srv/certs/yourdomain.crt
ssl-key /srv/certs/yourdomain.key
31 changes: 31 additions & 0 deletions docker-compose/configs/nginx.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log notice;
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;
}
33 changes: 33 additions & 0 deletions docker-compose/docker-compose.traefik.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
services:
web:
image: nginx
volumes:
- ./logs:/var/log/nginx
- ./config/nginx.conf:/etc/nginx/nginx.conf
- ./public:/usr/share/nginx/html
labels:
- "traefik.enable=true"
- "fqdn=yourdomain"
networks:
- traefik

goaccess:
image: allinurl/goaccess
container_name: goaccess
volumes:
- ./configs/goaccess.traefik.conf:/srv/config/goaccess.conf
- ./logs:/srv/logs
- ./public:/srv/report
command: ["--no-global-config", "--config-file=/srv/config/goaccess.conf"]
labels:
- "traefik.enable=true"
- "fqdn=goaccess.yourdomain"
- "traefik.http.services.yourdomain-goaccess.loadbalancer.server.port=443"
restart: unless-stopped
networks:
- traefik

networks:
traefik:
external:
name: traefik_traefik
21 changes: 21 additions & 0 deletions docker-compose/docker-compose.vanilla.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
services:
web:
image: nginx
ports:
- 8080:80
volumes:
- ./logs:/var/log/nginx
- ./config/nginx.conf:/etc/nginx/nginx.conf
- ./public:/usr/share/nginx/html

goaccess:
image: allinurl/goaccess
ports:
- 7890:7890
volumes:
- ./configs/goaccess.vanilla.conf:/srv/config/goaccess.conf
- ./logs:/srv/logs
- ./public:/srv/report
- ./configs/certs:/srv/certs
command: ["--no-global-config", "--config-file=/srv/config/goaccess.conf"]
restart: unless-stopped
Loading