Neting ProGalleries · Install guide

Install Neting Pro Galleries

A complete, step-by-step guide. Pick your edition below — shared hosting (Hostinger, cPanel…) or your own server with Docker.

🌐

Shared hosting

Hostinger, cPanel, Plesk… No command line. Ready-to-run package + web installer. Easiest.

🐳

Docker / VPS

Your own Linux server. One command builds everything. Includes ffmpeg for video. Most powerful.

📦
Requirements (both editions): a domain name, and PHP 8.2+ with the extensions pdo mbstring openssl fileinfo gd zip curl sodium. HTTPS is strongly recommended (free with Let's Encrypt on most hosts).
The shared-hosting package is ready to run: PHP dependencies and the web app are already built inside the ZIP. You only need a database and the built-in web installer — no SSH.

Shared hosting · 6 steps

1

Create a MySQL database

In your hosting panel (Hostinger hPanel, cPanel…), create a database and a user with all privileges on it. Note the host, database name, user and password.

hpanel.hostinger.com › Databases › MySQL
u123_neting
u123_neting
••••••••••••
Create

Write down: host (usually localhost), database, user, password.

2

Upload & extract the package

Upload neting-pro-galleries-shared-1.0.0.zip via the File Manager or FTP, e.g. into /home/youruser/neting/, then extract it there. You should see app/ public/ vendor/ storage/ and a .env.example file.

3

Point the domain to the public/ folder

The document root of your domain must point to the app's public/ folder — never the project root.

hpanel › Domains › your-domain.com
/home/youruser/neting/public
Save
⚠️
If your panel can't change the document root: move the contents of public/ into public_html/, move the rest one level above the web root, and fix the two require paths in index.php. Changing the document root is far simpler — prefer it.
4

Run the web installer

Open https://your-domain.com/install. The installer checks your server, asks for the database details and creates your admin account.

https://your-domain.com/install
PHP 8.3 detected
Extensions: pdo, mbstring, gd, zip, sodium…
storage/ & bootstrap/cache writable
localhost
u123_neting
u123_neting
••••••••
Install Neting Pro Galleries →

When it finishes, log in at https://your-domain.com/.

5

Add the cron job (important)

Background jobs (photo thumbnails, emails, the cloud folder scanner) run from a database queue + scheduler. Add one cron job, every minute:

* * * * * cd /home/youruser/neting && php artisan schedule:run >> /dev/null 2>&1
hpanel › Advanced › Cron Jobs
Every minute  (* * * * *)
cd /home/youruser/neting && php artisan schedule:run
Add cron job

If your host uses a versioned PHP binary, use its full path (e.g. /usr/bin/php8.3).

6

You're live 🎉

Log in and start creating galleries. Unlock paid modules anytime under Admin → License & modules / Shop.

https://your-domain.com/galleries
Wedding · Léa & Tom
248 photos
Studio session
96 photos
Paris trip
173 photos
🎬
About videos on shared hosting: most shared hosts don't provide ffmpeg, so video thumbnails / MOV→MP4 / HEIC conversion are skipped. JPEG/PNG photos work perfectly. Need full video support? Use the Docker edition.
🐳
The Docker package ships the source code; Docker builds the dependencies and the app for you. The image includes ffmpeg, so video thumbnails, MOV→MP4 transcoding and HEIC conversion all work.

Docker / VPS · 6 steps

1

Prepare the server

A Linux VPS with a public IP and a domain pointing to it. Install Docker Engine + the Compose plugin:

curl -fsSL https://get.docker.com | sh
2

Extract the package

unzip neting-pro-galleries-docker-1.0.0.zip -d neting
cd neting
3

Configure .env

cp .env.example .env
nano .env

Set at least:

  • APP_URL=https://your-domain.com
  • DB_PASSWORD= a strong Postgres password (your choice)
  • BRAND_NAME / BRAND_TAGLINE — already “Neting Pro” / “Galleries”

Leave APP_KEY empty — it's generated in step 5. The bundled compose.yaml runs 6 containers: app, web, queue, scheduler, postgres, redis (queue + scheduler mean no cron needed).

4

Build & start

docker compose up -d --build
root@your-server: ~/neting
$ docker compose up -d --build
[+] Building 142.3s ... installing PHP deps, building web app
[+] Running 6/6
  ✔ Container pics-postgres  Healthy
  ✔ Container pics-redis     Started
  ✔ Container pics-app       Started
  ✔ Container pics-queue     Started
  ✔ Container pics-scheduler Started
  ✔ Container pics-web       Started

First build takes a few minutes. Check status with docker compose ps.

5

Initialise the app

docker compose exec app php artisan key:generate --force
docker compose exec app php artisan migrate --force
docker compose exec app php artisan storage:link

Then create the first administrator by opening https://your-domain.com/install — it detects the database and just creates the admin/owner account.

6

Public access & HTTPS

The web container listens on 127.0.0.1:8090 (HTTP) and :8443 (HTTPS). Put a reverse proxy in front for your domain + automatic TLS. Example with Caddy (/etc/caddy/Caddyfile):

your-domain.com {
    reverse_proxy 127.0.0.1:8090
}

To change the published ports, edit the ports: of the web service in compose.yaml.

Handy commands

docker compose ps                 # container status
docker compose logs -f app        # application logs
docker compose exec app bash      # shell inside the app
docker compose down               # stop (data kept in volumes)
docker compose up -d --build      # rebuild after an update
💾
Backups: data lives in the Docker volumes (Postgres) and in storage/app (originals + derivatives). Back those up regularly.

Troubleshooting

White page or HTTP 500 error
Make sure storage/ and bootstrap/cache/ are writable, and that the document root points to public/. To read the real error, set APP_DEBUG=true in .env, reload, then set it back to false.
Only the home page works, other pages return 404
Shared: mod_rewrite is disabled or public/.htaccess wasn't uploaded. Docker: check the reverse proxy points to 127.0.0.1:8090.
Photos stay on “processing”
Shared: the cron from step 5 isn't running — check the command and the PHP binary path. Docker: check the queue container is up (docker compose ps).
Database connection refused
Shared: re-check host/name/user/password from the panel. Docker: wait for the Postgres healthcheck to pass, then re-run migrate --force.
Emails are not sent
Fill the MAIL_* settings in .env (SMTP from your host or a provider such as Postmark / SendGrid / Brevo).
How do I unlock paid modules?
Log in as admin → License & modules / Shop, then paste your license token or buy modules. The base product works without any module.