# Photo server 2021-2023 This project is a fork of [Photo21](https://gitlab.crans.org/bde/photo21/) developped at ENS Paris-Saclay. [![License: GPL v3](https://img.shields.io/badge/License-GPL%20v3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0.txt) This is the source code for the webserver hosting pictures from the ENS Paris-Saclay student life. The philosophy of this project is to keep this code as simple as possible to run and to maintain. ## Setup 1. **Dependency installation.** If you are not using Debian, please feel free to adapt the following instructions. ```bash sudo apt install git gettext python3-django python3-django-allauth python3-django-crispy-forms python3-docutils python3-exifread python3-pil ``` 2. **Cloning.** Change directory to where you want the project to be. In production, we usually use `/var/www/photos/` as the `root` user. ```bash git clone https://codeberg.org/krek0/photo21.git && cd photo21 ``` 3. **Configuration (production only).** ```bash sudo mkdir static media sudo chmod +x maintenance_tool.sh ``` 4. **Database (production only).** In development, you may use SQLite (no setup). In production, we use PostgreSQL which require a bit of setup: ```bash sudo apt install postgresql postgresql-contrib sudo -u postgres psql postgres=# CREATE USER photo21 WITH PASSWORD 'un_mot_de_passe_sur'; postgres=# CREATE DATABASE photo21 OWNER photo21; ``` 5. **Initialization.**, In production, please use `www-data` user. ``` ./manage.py collectstatic ./manage.py check ./manage.py migrate ./manage.py compilemessages # Only when creating a new database ./manage.py loaddata initial ./manage.py createsuperuser # change DEBUG to True in photo21/settings.py ``` 6. **Maintenance Mode.**, In production to toggle the server mainteance mode ```./maintenance_tool.sh``` ## Docker install 1. Create a `docker-compose.yml` (a ready-to-use file is provided in the repository): ```yaml version: "3.9" networks: photo26: services: db: image: postgres:16 container_name: photo26-db restart: unless-stopped environment: POSTGRES_DB: photo26 POSTGRES_USER: photo26 POSTGRES_PASSWORD: change-me volumes: - ./postgres_data:/var/lib/postgresql/data networks: - photo26 photo26: image: git.sinfonie.org/sinfonie/photo26:latest container_name: photo26-app restart: unless-stopped depends_on: - db environment: DB_ENGINE: postgres DB_NAME: photo26 DB_USER: photo26 DB_PASSWORD: change-me DB_HOST: db DB_PORT: 5432 SECRET_KEY: change-me EXTRA_HOSTS: photos.example.org volumes: - ./media:/app/media ports: - "8080:8000" networks: - photo26 ``` 2. Start the stack: ```bash docker compose up -d ``` On first start the container will run migrations and create a default admin account automatically. 3. **Default credentials** — change these immediately after first login: | Field | Value | |----------|-----------------| | Username | `admin` | | Password | `admin` | | Email | `admin@localhost` | Admin panel: `http://localhost:8080/admin/` 4. **Passwords to change** in `docker-compose.yml` before going to production: - `POSTGRES_PASSWORD` / `DB_PASSWORD` — database password - `SECRET_KEY` — Django secret key (use a long random string) - Log in to the admin panel and change the `admin` user password --- 6. *Enjoy \o/* In development, you can launch the development server using: ```bash (env)$ ./manage.py runserver ```