introduzione
Questo tutorial dimostra OpenBSD come soluzione di e-commerce usando PrestaShop e Apache.
Apache è necessario perché PrestaShop ha complessi requisiti di riscrittura degli URL che non sono supportati dal server Web incorporato di OpenBSD, httpd. Questo tutorial utilizza certificati autofirmati. Si prega di utilizzare un certificato verificato per la produzione.
Compiti di preparazione
Creare temporaneamente un utente normale autorizzato a utilizzare doas
senza password. Questo accesso verrà rimosso dopo l'installazione.
user add -c "Example User" -m -G wheel -L staff auser
passwd auser
echo 'permit nopass keepenv :wheel' > /etc/doas.conf
Aggiungi il repository di pacchetti OpenBSD.
echo 'https://cdn.openbsd.org/pub/OpenBSD' > /etc/installurl
Inoltra e-mail giornaliere di stato e sicurezza al tuo indirizzo.
echo '[email protected]' > /root/.forward
Imposta il nome host del server.
echo 'www.example.com' > /etc/myname
hostname www.example.com
Aggiungi il nome FQDN e l'indirizzo IP del tuo server a /etc/hosts
.
Sostituisci 192.0.2.1
con il tuo indirizzo IP Vultr.
127.0.0.1 localhost
::1 localhost
192.0.2.1 www.example.com
Aggiungi i pacchetti richiesti per PrestaShop e Apache. Scegli le ultime versioni quando richiesto.
doas su
pkg_add apache-httpd php php-curl php-gd php-intl php-pdo_mysql php-zip mariadb-client mariadb-server wget unzip
Creato un certificato SSL autofirmato per il test. Impostare Common Name sul nome FQDN del server, ad esempio www.esempio.com.
openssl req -x509 -new -nodes -newkey rsa:4096 -keyout /etc/ssl/private/example.com.key -out /etc/ssl/example.com.crt -days 3650 -sha256
chmod 0600 /etc/ssl/private/example.com.key
Scarica ed estrai PrestaShop
Individua l'URL dell'ultima versione di PrestaShop , scaricalo /tmp
ed estrailo in /var/www/htdocs/prestashop
.
cd /tmp
wget <https://download.prestashop.com/download/releases/prestashop_1.7.6.4.zip>
unzip prestashop_1.7.6.4.zip -d /var/www/htdocs/prestashop
chown -R www:www /var/www/htdocs/prestashop
Configura il firewall per bloccare tutto il traffico in entrata ad eccezione di ssh , www e https .
Fai una copia di backup di /etc/pf.conf
.
cp /etc/pf.conf /etc/pf.conf.bak
Modifica /etc/pf.conf
come mostrato.
set skip on lo
block in
pass out
pass in on egress inet proto tcp to port {ssh, www, https} \
flags S/SA keep state
Testare e attivare le regole del firewall.
doas pfctl -nf /etc/pf.conf
doas pfctl -f /etc/pf.conf
Esegui il backup del tuo /etc/mail/smtpd.conf
file.
cp /etc/mail/smtpd.conf /etc/mail/smtpd.conf.bak
Modifica /etc/mail/smtpd.conf
come mostrato di seguito.
Note: * La definizione della tabella per i segreti contiene il nome utente e la password per l'inoltro della posta. * L'azione in uscita guarda in alto il nome utente e la password sotto l'etichetta prestashop
di /etc/mail/secrets
e relè l'e-mail attraverso il vostro server di posta elettronica.
table aliases file:/etc/mail/aliases
table secrets file:/etc/mail/secrets
listen on lo0
action "local_mail" mbox alias <aliases>
action "outbound" relay host smtp+tls://[email protected]:587 \
tls no-verify auth <secrets>
match from local for local action "local_mail"
match from local for any action "outbound"
Creare /etc/mail/secrets
Sostituisci l'indirizzo e-mail e la password con le credenziali che usi per il tuo server e-mail.
echo "prestashop [email protected]:password" > /etc/mail/secrets
Imposta le autorizzazioni per proteggere /etc/mail/secrets
chmod 0600 /etc/secrets
Testare il file di configurazione per errori e riavviare il demone smtpd.
smtpd -n
rcctl restart smtpd
Configurare il processo PHP-FPM per l'ascolto su un socket TCP anziché su un socket di dominio UNIX.
Apportare le seguenti modifiche per il /etc/php-fpm.conf
file.
...
; If using a TCP port, never expose this to a public network.
;listen = /var/www/run/php-fpm.sock
listen = 127.0.0.1:9000
Apporta alcune modifiche aggiuntive all'ambiente PHP in /etc/php-7.3.ini
. Questo nome di file può cambiare leggermente se la versione è più recente di 7.3. Questi cambiamenti:
- Consentire il caricamento di file più grandi.
- Disabilita l'ambiente chroot.
-
Configura PHP per inviare e-mail tramite sendmail.
; Default Value: not set
;chroot = /var/www
...
; Maximum allowed size for uploaded files.
; <http://php.net/upload-max-filesize>
upload_max_filesize = 6M
...
; For Unix only. You may supply arguments as well (default: "sendmail -t -i").
; <http://php.net/sendmail-path>
;sendmail_path =
sendmail_path = /usr/sbin/sendmail -t -i
...
; Whether to allow the treatment of URLs (like <http://> or <ftp://)> as files.
; <http://php.net/allow-url-fopen>
allow_url_fopen = On
...
; Maximum size of POST data that PHP will accept.
; Its value may be 0 to disable the limit. It is ignored if POST data reading
; is disabled through enable_post_data_reading.
; <http://php.net/post-max-size>
post_max_size = 12M
Abilita i plugin PHP.
cp /etc/php-7.3.sample/* /etc/php-7.3/.
Abilita e avvia il demone PHP-FPM. Il nome del demone potrebbe essere leggermente diverso se la versione è più recente.
rcctl enable php73_fpm
rcctl start php73_fpm
Configurazione di MariaDB
MariaDB fornisce il backend del database per PrestaShop. Poiché MariaDB richiede più file aperti rispetto a quelli consentiti dalla classe predefinita, creare una classe speciale in /etc/login.conf
.
Nella parte inferiore del file, aggiungi le seguenti righe:
mysqld:\
:openfiles-cur=1024:\
:openfiles-max=2048:\
:tc=daemon:
Installa MariaDB.
doas su
mysql_install_db
rcctl enable mysqld
rcctl start mysqld
Configura la sicurezza di MariaDB.
mysql_secure_installation
Creare il database PrestaShop. Usa una password complessa.
mysql -u root
CREATE DATABASE prestashop;
GRANT ALL PRIVILEGES ON prestashop.* TO 'prestashop'@'localhost' IDENTIFIED BY 'password123';
FLUSH PRIVILEGES;
EXIT
Configurare Apache
Eseguire il backup /etc/apache2/httpd2.conf
cp /etc/apache2/httpd2.conf /etc/apache2/httpd2.conf.bak
Apportare le seguenti modifiche a /etc/apache2/httpd2.conf
, utilizzando #
per abilitare e disabilitare i moduli.
Listen 443
...
LoadModule mpm_event_module /usr/local/lib/apache2/mod_mpm_event.so
#LoadModule mpm_prefork_module /usr/local/lib/apache2/mod_mpm_prefork.so
LoadModule proxy_module /usr/local/lib/apache2/mod_proxy.so
LoadModule proxy_fcgi_module /usr/local/lib/apache2/mod_proxy_fcgi.so
LoadModule ssl_module /usr/local/lib/apache2/mod_ssl.so
LoadModule rewrite_module /usr/local/lib/apache2/mod_rewrite.so
...
ServerAdmin [email protected]
ServerName 192.0.2.1:80
-
Diverse altre modifiche si /etc/apache2/httpd2.conf
verificano nella parte inferiore del file. Rimuovere #
dalle istruzioni include indicate.
-
Aggiungi le ultime linee di hosting virtuale.
# Server-pool management (MPM specific)
Include /etc/apache2/extra/httpd-mpm.conf
...
# Virtual Hosts
IncludeOptional /etc/apache2/sites/*.conf
Crea la /etc/apache2/sites
directory.
mkdir /etc/apache2/sites
Crea /etc/apache2/sites/example.conf
con le seguenti informazioni:
<VirtualHost *:80>
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
DocumentRoot "/var/www/htdocs/prestashop"
<Directory "/var/www/htdocs/prestashop">
Options -Indexes +Multiviews +FollowSymLinks
AllowOverride All
<Limit GET POST OPTIONS>
</Limit>
Require all granted
</Directory>
</VirtualHost>
<VirtualHost *:443>
ServerName example.com
ServerAlias www.example.com
ServerAdmin [email protected]
DocumentRoot "/var/www/htdocs/prestashop"
<Directory "/var/www/htdocs/prestashop">
Options -Indexes +Multiviews +FollowSymLinks
AllowOverride All
<Limit GET POST OPTIONS>
</Limit>
Require all granted
</Directory>
SSLEngine On
SSLCertificateFile "/etc/ssl/example.com.crt"
SSLCertificateKeyFile "/etc/ssl/private/example.com.key"
SSLCipherSuite HIGH:!aNULL
</VirtualHost>
Configura il modulo proxy di Apache aggiungendo quanto segue a /etc/apache2/sites/example.conf
<IfModule proxy_module>
<IfModule dir_module>
DirectoryIndex index.php
</IfModule>
<FilesMatch "\.php$">
SetHandler "proxy:fcgi://127.0.0.1:9000"
</FilesMatch>
</IfModule>
Testare la configurazione, quindi abilitare e avviare Apache.
apachectl configtest
rcctl enable apache2
rcctl start apache2
Assicurarsi che Apache sia in ascolto sulle porte 80 e 443.
netstat -ln -finet
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address (state)
tcp 0 0 *.443 *.* LISTEN
tcp 0 0 127.0.0.1.25 *.* LISTEN
tcp 0 0 *.22 *.* LISTEN
tcp 0 0 *.80 *.* LISTEN
tcp 0 0 127.0.0.1.3306 *.* LISTEN
tcp 0 0 127.0.0.1.9000 *.* LISTEN
Installa PrestaShop
Passare al sito Web all'indirizzo http://www.example.com
. Verrà avviata l'installazione guidata di PrestaShop.
Una volta completata l'installazione, prendere nota della parte anteriore del negozio e dei collegamenti amministrativi ed eliminare la directory /var/www/htdocs/prestashop/install
.
Abilita SSL.
- Fai clic su Parametri negozio
- Fai clic su Generale
- Abilita SSL per tutte le parti del tuo negozio
Cambia la tua password amministrativa.
- Fai clic su Parametri avanzati
- Fai clic su Team
- Cambia la tua password.
Alcune attività finali
Esegui il backup del tuo negozio e del suo database:
cd /var/www/htdocs
doas tar cvfz /home/auser/prestashop.tar.gz prestashop/
doas mysqldump -u prestashop -p prestashop | gzip -4 > /home/auser/prestashop.sql.tar.gz
doas chown auser:auser /home/auser/prestashop*
Rimuovere doas access per il tuo account utente ricreando il doas.conf
file.
echo 'permit keepenv :wheel' > /etc/doas.conf