Skip to content

Commit c571b24

Browse files
Merge pull request #466 from NewMediaCaucus/dev
Don't let docker logs go nuts
2 parents 8f88d76 + 7bf8fc5 commit c571b24

File tree

4 files changed

+50
-2
lines changed

4 files changed

+50
-2
lines changed

README.md

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,9 @@ Always name a feature branch "feature" plus description
66

77
1. [Important File Locations](#important-file-locations)
88
2. [Workflow Proposal](#workflow-proposal)
9-
3. [Further Reading](#further-reading)
10-
4. [Rolling Back](#rolling-back)
9+
3. [Production log limits](#production-log-limits)
10+
4. [Further Reading](#further-reading)
11+
5. [Rolling Back](#rolling-back)
1112

1213
## Important File Locations
1314

@@ -55,6 +56,21 @@ Still needed:
5556

5657
- Solution to back up content and media folders to offline storage
5758

59+
## Production log limits
60+
61+
Production is configured so container and application logs do not fill disk.
62+
63+
**Docker container logs** (stdout/stderr, i.e. `docker logs`) are limited by the logging driver:
64+
65+
- **docker-compose.prod.yml** and **deploy-prod.sh** use the `json-file` driver with `max-size: 10m` and `max-file: 3` for both the webserver and certbot containers. Docker keeps at most three 10 MB log files per container.
66+
67+
**Application log files** (Apache, PHP, Certbot) in `apache-logs/`, `php-logs/`, and `letsencrypt-logs/` are rotated on the **prod server** using logrotate:
68+
69+
- The config is in **logrotate.prod.conf** (rotate after 10M, keep 5 rotated files, compress, safe for open files).
70+
- On the prod server, install it once from the repo root:
71+
- `sudo cp logrotate.prod.conf /etc/logrotate.d/nmc-website`
72+
- If the app is not in `/home/nmcdev/nmc-website`, edit the paths at the top of `logrotate.prod.conf`. Logrotate runs via cron (typically daily); no container restart needed.
73+
5874
## Further Reading
5975

6076
1. [Git large file storage info](https://docs.github.com/en/repositories/working-with-files/managing-large-files/collaboration-with-git-large-file-storage)

deploy-prod.sh

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,9 @@ sudo docker run -d \
2828
--hostname newmediacaucus.org \
2929
-p 80:80 \
3030
-p 443:443 \
31+
--log-driver json-file \
32+
--log-opt max-size=10m \
33+
--log-opt max-file=3 \
3134
-v /home/nmcdev/nmc-website:/var/www/html/ \
3235
-v ./custom-php.prod.ini:/etc/php/8.3/apache2/conf.d/custom-php.ini \
3336
-v ./php-logs:/var/log/php-logs \
@@ -61,6 +64,9 @@ fi
6164
echo "Starting certbot container for automatic renewal..."
6265
sudo docker run -d \
6366
--name certbot \
67+
--log-driver json-file \
68+
--log-opt max-size=10m \
69+
--log-opt max-file=3 \
6470
-v /etc/letsencrypt:/etc/letsencrypt \
6571
-v ./letsencrypt-logs:/var/log/letsencrypt \
6672
-v /var/run/docker.sock:/var/run/docker.sock \

docker-compose.prod.yml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,11 @@ services:
1919
- ./id.env
2020
depends_on:
2121
- certbot
22+
logging:
23+
driver: json-file
24+
options:
25+
max-size: "10m"
26+
max-file: "3"
2227
networks:
2328
- webnet
2429

@@ -38,6 +43,11 @@ services:
3843
- DOMAIN=newmediacaucus.org
3944
- EMAIL=admin@newmediacaucus.org
4045
restart: unless-stopped
46+
logging:
47+
driver: json-file
48+
options:
49+
max-size: "10m"
50+
max-file: "3"
4151
networks:
4252
- webnet
4353

logrotate.prod.conf

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
# Logrotate config for NMC website prod (Apache, PHP, Certbot logs).
2+
# Install on prod server: sudo cp logrotate.prod.conf /etc/logrotate.d/nmc-website
3+
# (or symlink). Adjust base path below if the app is not in /home/nmcdev/nmc-website.
4+
5+
/home/nmcdev/nmc-website/apache-logs/
6+
/home/nmcdev/nmc-website/php-logs/
7+
/home/nmcdev/nmc-website/letsencrypt-logs/
8+
{
9+
rotate 5
10+
size 10M
11+
missingok
12+
notifempty
13+
compress
14+
delaycompress
15+
copytruncate
16+
}

0 commit comments

Comments
 (0)