Install on a VPS (Nginx or Apache)
Server block and virtual host examples, permissions and HTTPS for a VPS or dedicated server.
On your own server you point the web server's document root at Sellora's public folder. Everything else (app, config, .env, vendor ...) stays outside the web-accessible area.
1. Install the software#
Example for Ubuntu (adapt for your distribution):
sudo apt update
sudo apt install nginx mariadb-server unzip \
php8.3-fpm php8.3-cli php8.3-mysql php8.3-bcmath php8.3-curl php8.3-gd \
php8.3-mbstring php8.3-xml php8.3-zip php8.3-intl php8.3-opcache
Create the database and user as shown in Database and purchase code.
2. Upload the files#
Upload the contents of the sellora folder to, for example, /var/www/sellora and set ownership so the web server can write where it needs to:
sudo mkdir -p /var/www/sellora
sudo unzip sellora.zip -d /var/www/sellora # adjust to your upload
sudo chown -R www-data:www-data /var/www/sellora
sudo find /var/www/sellora -type d -exec chmod 755 {} \;
sudo find /var/www/sellora -type f -exec chmod 644 {} \;
sudo chmod -R 775 /var/www/sellora/storage /var/www/sellora/bootstrap/cache /var/www/sellora/public/uploads
If public/uploads does not exist yet, create it. The wizard checks all of this and can fix simple permission problems itself.
3a. Nginx#
Create /etc/nginx/sites-available/sellora:
server {
listen 80;
server_name your-domain.com www.your-domain.com;
root /var/www/sellora/public;
index index.php;
client_max_body_size 32M;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
}
# Never serve hidden files (.env, .git ...) except the ACME challenge folder
location ~ /\.(?!well-known).* {
deny all;
}
location ~* \.(?:css|js|woff2?|png|jpe?g|gif|svg|webp|avif|ico)$ {
expires 30d;
access_log off;
}
}
Enable it and reload:
sudo ln -s /etc/nginx/sites-available/sellora /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx
3b. Apache#
Enable the rewrite module (sudo a2enmod rewrite) and create /etc/apache2/sites-available/sellora.conf:
<VirtualHost *:80>
ServerName your-domain.com
ServerAlias www.your-domain.com
DocumentRoot /var/www/sellora/public
<Directory /var/www/sellora/public>
AllowOverride All
Require all granted
Options -Indexes
</Directory>
</VirtualHost>
sudo a2ensite sellora && sudo systemctl reload apache2
AllowOverride All is required so the .htaccess file inside public is honoured.
4. HTTPS#
Install a free certificate with Certbot:
sudo apt install certbot python3-certbot-nginx # or python3-certbot-apache
sudo certbot --nginx -d your-domain.com -d www.your-domain.com
Use https:// when the wizard asks for your address, and keep APP_URL in .env set to the HTTPS address. When Sellora runs behind a proxy or load balancer that sets X-Forwarded-Proto: https, it generates HTTPS links automatically.
5. Run the wizard and add the cron job#
Open https://your-domain.com, complete the setup wizard, then add the cron job.
PHP tuning (optional)#
In php.ini (for example /etc/php/8.3/fpm/php.ini): memory_limit = 256M, upload_max_filesize = 32M, post_max_size = 32M, max_execution_time = 120, and make sure opcache.enable=1. Restart PHP-FPM afterwards.