Picstome
Docker app from Jomom50's Repository
Overview
Readme
View on GitHubInstallation
This project is a standard Laravel application; it is based on Laravel 12 and uses Livewire, Tailwind CSS, and TallStackUI for the frontend. If you are familiar with Laravel, you should feel comfortable working on this project.
For local development, you can use the following requirements:
- PHP 8.3 with SQLite, GD, and other common extensions.
- Node.js 16 or later.
Note for production: If you expect users to download large galleries or files, you should increase the
request_terminate_timeoutsetting in your PHP-FPM pool configuration (usually in/etc/php/8.3/fpm/pool.d/www.conf). For example:request_terminate_timeout = 1200This prevents PHP-FPM from killing long-running download requests. Make sure to reload PHP-FPM after changing this setting.
Large uploads copied to S3 from the application can also exceed PHP's default execution limit. The gallery upload action raises the PHP limit to 5 minutes, but the PHP-FPM pool's
request_terminate_timeoutmust allow that longer request too.
If you meet these requirements, you can start by cloning the repository and installing the dependencies.
composer install
npm install
After that, set up your .env file:
cp .env.example .env
php artisan key:generate
Set up your database, run the migrations and the seeder:
touch database/database.sqlite
php artisan migrate:fresh --seed
Link the storage to the public folder.
php artisan storage:link
In a separate terminal, build the assets in watch mode and start the development server:
composer run dev
Categories
Download Statistics
Related apps
Explore more like this
Explore allDetails
jomom50/picstome:latestRuntime arguments
- Web UI
http://[IP]:[PORT:80]/- Network
bridge- Shell
bash- Privileged
- false
Template configuration
Port for the Picstome web interface. Container port is 80.
- Target
- 80
- Default
- 8282
- Value
- 8282
MinIO S3 endpoint. Browsers download gallery photos from this port, so it must be reachable from client devices.
- Target
- 9000
- Default
- 9000
- Value
- 9000
The only path that has to persist: database, logs and generated secrets (plus photos, unless the optional path below is mapped). Any directory works — on Unraid the usual choice is /mnt/user/appdata/picstome; on another host use something like /srv/picstome.
- Target
- /data
- Default
- /mnt/user/appdata/picstome
- Value
- /mnt/user/appdata/picstome
Optional. A separate directory for gallery photos, handy for keeping them out of appdata backups or on a bigger disk. Any path works and it can be changed or removed later; if it is removed, photos stay under Appdata. The object store keeps its own layout, so the files are not browsable as plain images.
- Target
- /data/minio
- Default
- /mnt/user/appdata/picstome/minio
- Value
- /mnt/user/appdata/picstome/minio
Address used in emails, share links and contracts. Use the exact public URL, including https:// when behind a TLS reverse proxy.
- Target
- APP_URL
- Default
- http://[IP]:[PORT:80]
- Value
- http://[IP]:[PORT:80]
Public address of the S3 photo endpoint, without the bucket name. Behind a reverse proxy use a dedicated hostname such as https://photos.example.com.
- Target
- PICSTOME_PHOTOS_URL
- Default
- http://[IP]:[PORT:9000]
- Value
- http://[IP]:[PORT:9000]
Email of the admin account created on first start. This address also grants admin access later.
- Target
- PICSTOME_ADMIN_EMAIL
Display name for the first admin account and its studio.
- Target
- PICSTOME_ADMIN_NAME
- Default
- Picstome Admin
- Value
- Picstome Admin
Password for the first admin account. Only used when no user exists yet. Leave empty to generate one into the appdata folder.
- Target
- PICSTOME_ADMIN_PASSWORD
Mail server for account verification, gallery and contract emails. Only needed when Mail Transport is smtp — leave it empty to install without mail and set it later.
- Target
- MAIL_HOST
587 for STARTTLS, 465 for implicit TLS.
- Target
- MAIL_PORT
- Default
- 587
- Value
- 587
smtp for port 587 (STARTTLS), smtps for port 465.
- Target
- MAIL_SCHEME
- Default
- smtp
- Value
- smtp
Usually the full email address for your mail provider.
- Target
- MAIL_USERNAME
Password or app password from your mail provider.
- Target
- MAIL_PASSWORD
Sender address shown on outgoing email. Leave empty to use the admin email.
- Target
- MAIL_FROM_ADDRESS
Sender name shown on outgoing email.
- Target
- MAIL_FROM_NAME
- Default
- Picstome
- Value
- Picstome
smtp sends real email. log writes messages to the container log instead, useful while testing.
- Target
- MAIL_MAILER
- Default
- smtp
- Value
- smtp
Application timezone, for example Europe/Madrid. Affects reminders and contract dates.
- Target
- APP_TIMEZONE
- Default
- UTC
- Value
- UTC
Default interface language: en or es.
- Target
- APP_LOCALE
- Default
- en
- Value
- en
Maximum size of a single upload, applied to both nginx and PHP. Raise it if you upload large videos.
- Target
- UPLOAD_MAX_SIZE
- Default
- 512M
- Value
- 512M
Memory allowed per PHP process.
- Target
- PHP_MEMORY_LIMIT
- Default
- 512M
- Value
- 512M
Seconds a web request may run. Large gallery downloads are handled separately.
- Target
- PHP_MAX_EXECUTION_TIME
- Default
- 300
- Value
- 300
bunny serves photos directly from your own storage (recommended, nothing leaves your server). wsrv.nl resizes images through a third-party CDN, which must be able to reach your Photo Storage URL.
- Target
- PICSTOME_PHOTO_CDN_DOMAIN
- Default
- bunny
- Value
- bunny
Reverse proxies allowed to send X-Forwarded headers. * accepts any proxy, which is normal on a home network. Set the proxy IP for a stricter setup.
- Target
- TRUSTED_PROXIES
- Default
- *
- Value
- *
Optional. Send anonymous visitors who open the root URL to this public page instead of the login screen, for example /@yourhandle/portfolio. Signed-in users still reach the dashboard. Leave empty to keep the default behaviour.
- Target
- LANDING_REDIRECT
Apply database migrations on every start. Leave enabled so updates always migrate.
- Target
- AUTO_MIGRATE
- Default
- true
- Value
- true
Laravel log level: debug, info, warning or error.
- Target
- LOG_LEVEL
- Default
- warning
- Value
- warning
Name of the bucket inside the bundled object store. It is created on first start, so changing it is safe; existing photos stay under the old bucket.
- Target
- S3_BUCKET
- Default
- picstome
- Value
- picstome
Region reported to the S3 client. MinIO accepts us-east-1 by default.
- Target
- S3_REGION
- Default
- us-east-1
- Value
- us-east-1
Seconds the queue worker allows per job. Must stay above the gallery archive timeout of 3600.
- Target
- QUEUE_WORKER_TIMEOUT
- Default
- 3700
- Value
- 3700