Indicate docker config in readme and auto create admin user in docker
All checks were successful
Docker / build (push) Successful in 10s

This commit is contained in:
krek0 2026-05-03 16:29:45 +02:00
parent 4bc1afa0cb
commit 9994403925
3 changed files with 99 additions and 0 deletions

View file

@ -66,6 +66,72 @@ run and to maintain.
```./maintenance_tool.sh```
## Docker install
1. Create a `docker-compose.yml`:
```yaml
version: "3.9"
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
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:
- ./static:/app/static
- ./media:/app/media
ports:
- "8080:8000"
```
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:

View file

@ -2,4 +2,5 @@
set -e
python manage.py migrate --noinput
python manage.py create_default_admin
exec gunicorn photo21.wsgi:application --bind 0.0.0.0:8000 --workers 3

View file

@ -0,0 +1,32 @@
from django.contrib.auth import get_user_model
from django.core.management.base import BaseCommand
class Command(BaseCommand):
help = "Create default admin user (admin@localhost / admin) if it does not exist"
def handle(self, *args, **kwargs):
User = get_user_model()
email = "admin@localhost"
username = "admin"
password = "admin"
if User.objects.filter(username=username).exists():
self.stdout.write("Default admin already exists, skipping.")
return
user = User.objects.create_superuser(username=username, email=email, password=password)
# Mark the email as verified via allauth
try:
from allauth.account.models import EmailAddress
EmailAddress.objects.create(
user=user,
email=email,
primary=True,
verified=True,
)
except Exception as e:
self.stderr.write(f"Could not create allauth EmailAddress: {e}")
self.stdout.write(f"Default admin created: {username} / {password}")