Site permettant de consulter la collection de mémoire de PostERG
  • PHP 53.7%
  • CSS 30.8%
  • Hack 7.8%
  • Python 5.6%
  • Shell 2.1%
Find a file
2026-03-24 18:23:40 +01:00
config feat: admin tag management, maintenance mode, TFE visibility states 2026-03-24 15:35:52 +01:00
docs deploy-nginx: add recipe, upload scripts to /tmp, print sudo instructions 2026-03-02 16:08:45 +01:00
nginx nginx: relax admin rate limit to 60r/m burst=20 (was 10r/m burst=5) 2026-03-02 16:08:45 +01:00
public admin: merge status + logs into unified system.php with instant tabs 2026-03-24 15:55:48 +01:00
scripts deploy-nginx: add recipe, upload scripts to /tmp, print sudo instructions 2026-03-02 16:08:45 +01:00
src feat: tag management tests, maintenance mode polish, répertoire pagination fix 2026-03-24 15:38:36 +01:00
storage feat: tag management tests, maintenance mode polish, répertoire pagination fix 2026-03-24 15:38:36 +01:00
templates admin: merge status + logs into unified system.php with instant tabs 2026-03-24 15:55:48 +01:00
tests feat: tag management tests, maintenance mode polish, répertoire pagination fix 2026-03-24 15:38:36 +01:00
.gitignore add flake.nix for Nix PHP dev shell 2026-03-11 12:39:18 +01:00
.ignore ops: simplify justfile, guard deploy-db, extract scripts, fix .gitignore 2026-03-02 16:08:45 +01:00
DEV.md Instructions pour DEV sur MACOS → DEV.md 2026-03-24 18:23:40 +01:00
flake.nix add flake.nix for Nix PHP dev shell 2026-03-11 12:39:18 +01:00
justfile deploy-nginx: add recipe, upload scripts to /tmp, print sudo instructions 2026-03-02 16:08:45 +01:00
README.md ops: simplify justfile, guard deploy-db, extract scripts, fix .gitignore 2026-03-02 16:08:45 +01:00
TODO.md admin: merge status + logs into unified system.php with instant tabs 2026-03-24 15:55:48 +01:00

posterg

Répertoire des travaux de fin d'études de l'ERG (École de Recherche Graphique).

Requirements

  • PHP 8.4
  • SQLite3 (php8.4-sqlite3)
  • nginx (production)

Project structure

posterg/
├── public/          # DocumentRoot — web-accessible only
│   ├── admin/       # Admin panel (session-authenticated)
│   ├── assets/      # CSS, fonts, icons
│   ├── media.php    # Controlled file serving (covers, PDFs)
│   └── *.php        # Public pages (index, search, tfe, apropos)
├── src/             # PHP classes (not web-accessible)
│   ├── AdminAuth.php
│   ├── Database.php
│   ├── RateLimit.php
│   └── config.php
├── templates/       # Shared PHP template partials
├── config/          # Bootstrap and credentials (not web-accessible)
├── storage/         # Database and uploaded files (not web-accessible)
│   ├── schema.sql
│   ├── test.db
│   └── fixtures/
├── tests/
├── scripts/         # Dev and server management scripts
│   ├── setup-dev.sh
│   ├── deploy-server.sh      # Run on server with sudo to apply nginx config
│   └── manage-admin-users.sh # Run on server with sudo to manage htpasswd
└── nginx/           # nginx config and reference files
    └── posterg.conf

Uploaded files (PDFs, covers) live in storage/ — outside the webroot — and are served exclusively through public/media.php, which validates paths and MIME types.

Development

just setup   # first-time: installs dev dependencies
just serve   # http://localhost:8000  (public) and /admin/
just test    # run test suite

Admin credentials in development are set via config/admin_credentials.php (see config/admin_credentials.example.php).

Deployment

Files are pushed to the server with rsync — there is no repo on the remote.

just deploy     # rsync app files → posterg:/var/www/posterg/
just deploy-db  # push local test.db → remote (only if remote DB is absent)

deploy-db refuses to run if a database already exists on the server, to avoid accidental overwrites of production data.

First-time server setup

ssh posterg
sudo mkdir -p /var/www/posterg
sudo chown www-data:posterg /var/www/posterg
sudo chmod 775 /var/www/posterg
exit

Then deploy once, copy nginx config, and apply:

just deploy
rsync -v nginx/posterg.conf posterg:/tmp/posterg.conf
ssh posterg "sudo bash /var/www/posterg/scripts/deploy-server.sh"
ssh posterg "sudo systemctl reload nginx"

Admin users (htpasswd)

ssh posterg "sudo bash /var/www/posterg/scripts/manage-admin-users.sh"

Security notes

  • Admin panel protected by nginx auth_basic + PHP session (AdminAuth)
  • Uploads stored outside webroot, served via controlled media.php
  • Rate limiting on public search (src/RateLimit.php)
  • See docs/TODO.SECURITY.md for outstanding items