introduction
Ce tutoriel présente OpenBSD en tant que solution de commerce électronique utilisant PrestaShop et Apache.
Apache est requis car PrestaShop a des exigences de réécriture d'URL complexes qui ne sont pas prises en charge par le serveur Web intégré d'OpenBSD, httpd. Ce didacticiel utilise des certificats auto-signés. Veuillez utiliser un certificat vérifié pour la production.
Tâches de préparation
Créez temporairement un utilisateur régulier autorisé à utiliser doas
sans mot de passe. Cet accès sera supprimé après la configuration.
user add -c "Example User" -m -G wheel -L staff auser
passwd auser
echo 'permit nopass keepenv :wheel' > /etc/doas.conf
Ajoutez le référentiel de packages OpenBSD.
echo 'https://cdn.openbsd.org/pub/OpenBSD' > /etc/installurl
Transférez des e-mails quotidiens sur l'état et la sécurité à votre adresse.
echo '[email protected]' > /root/.forward
Définissez le nom d'hôte du serveur.
echo 'www.example.com' > /etc/myname
hostname www.example.com
Ajoutez le nom de domaine complet et l'adresse IP de votre serveur à /etc/hosts
.
Remplacez 192.0.2.1
par votre adresse IP Vultr.
127.0.0.1 localhost
::1 localhost
192.0.2.1 www.example.com
Ajoutez les packages requis pour PrestaShop et Apache. Choisissez les dernières versions lorsque vous y êtes invité.
doas su
pkg_add apache-httpd php php-curl php-gd php-intl php-pdo_mysql php-zip mariadb-client mariadb-server wget unzip
Création d'un certificat SSL auto-signé pour les tests. Définissez Common Name sur le nom de domaine complet de votre serveur, par exemple www.example.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
Télécharger et extraire PrestaShop
Localisez l'URL de la dernière version de PrestaShop , téléchargez /tmp
et extrayez vers /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
Configurez le pare-feu pour bloquer tout le trafic entrant, à l'exception de ssh , www et https .
Faites une copie de sauvegarde de /etc/pf.conf
.
cp /etc/pf.conf /etc/pf.conf.bak
Modifiez /etc/pf.conf
comme indiqué.
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
Testez et activez les règles du pare-feu.
doas pfctl -nf /etc/pf.conf
doas pfctl -f /etc/pf.conf
Sauvegardez votre /etc/mail/smtpd.conf
fichier.
cp /etc/mail/smtpd.conf /etc/mail/smtpd.conf.bak
Modifiez /etc/mail/smtpd.conf
comme indiqué ci-dessous.
Remarques: * La définition de table pour les secrets contient le nom d'utilisateur et le mot de passe pour le relais de messagerie. * L'action sortante recherche le nom d' utilisateur et mot de passe sous l'étiquette prestashop
dans /etc/mail/secrets
et relaie le courrier électronique via votre serveur de messagerie.
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"
Créer /etc/mail/secrets
Remplacez l'adresse e-mail et le mot de passe par les informations d'identification que vous utilisez pour votre serveur de messagerie.
echo "prestashop [email protected]:password" > /etc/mail/secrets
Définir des autorisations pour sécuriser /etc/mail/secrets
chmod 0600 /etc/secrets
Recherchez les erreurs dans le fichier de configuration et redémarrez le démon smtpd.
smtpd -n
rcctl restart smtpd
Configurez le processus PHP-FPM pour écouter sur un socket TCP au lieu d'un socket de domaine UNIX.
Apportez la modification suivante ci-dessous pour le /etc/php-fpm.conf
fichier.
...
; 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
Apportez quelques modifications supplémentaires à l'environnement PHP dans /etc/php-7.3.ini
. Ce nom de fichier peut changer légèrement si la version est plus récente que 7.3. Ces changements:
- Autorisez le téléchargement de fichiers plus volumineux.
- Désactivez l'environnement chrooté.
-
Configurez PHP pour envoyer des e-mails via 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
Activez les plugins PHP.
cp /etc/php-7.3.sample/* /etc/php-7.3/.
Activez et démarrez le démon PHP-FPM. Le nom du démon peut être légèrement différent si la version est plus récente.
rcctl enable php73_fpm
rcctl start php73_fpm
Configuration de MariaDB
MariaDB fournit le backend de base de données pour PrestaShop. Parce que MariaDB a besoin de plus de fichiers ouverts que la classe par défaut ne le permet, créez une classe spéciale dans /etc/login.conf
.
Au bas du fichier, ajoutez les lignes suivantes:
mysqld:\
:openfiles-cur=1024:\
:openfiles-max=2048:\
:tc=daemon:
Installez MariaDB.
doas su
mysql_install_db
rcctl enable mysqld
rcctl start mysqld
Configurez la sécurité MariaDB.
mysql_secure_installation
Créez la base de données PrestaShop. Utilisez un mot de passe fort.
mysql -u root
CREATE DATABASE prestashop;
GRANT ALL PRIVILEGES ON prestashop.* TO 'prestashop'@'localhost' IDENTIFIED BY 'password123';
FLUSH PRIVILEGES;
EXIT
Configuration d'Apache
Sauvegarder /etc/apache2/httpd2.conf
cp /etc/apache2/httpd2.conf /etc/apache2/httpd2.conf.bak
Apportez les modifications suivantes à /etc/apache2/httpd2.conf
, en utilisant #
pour activer et désactiver les modules.
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
-
Plusieurs autres modifications /etc/apache2/httpd2.conf
se produisent vers le bas du fichier. Supprimez #
des instructions incluses indiquées.
-
Ajoutez les lignes d'hébergement virtuel en dernier.
# Server-pool management (MPM specific)
Include /etc/apache2/extra/httpd-mpm.conf
...
# Virtual Hosts
IncludeOptional /etc/apache2/sites/*.conf
Créez le /etc/apache2/sites
répertoire.
mkdir /etc/apache2/sites
Créez /etc/apache2/sites/example.conf
avec les informations suivantes:
<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>
Configurez le module proxy d'Apache en ajoutant ce qui suit à /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>
Testez la configuration, puis activez et démarrez Apache.
apachectl configtest
rcctl enable apache2
rcctl start apache2
Assurez-vous qu'Apache écoute sur les ports 80 et 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
Installer PrestaShop
Accédez à votre site Web à http://www.example.com
. L'assistant d'installation de PrestaShop se lancera.
Une fois l'installation terminée, prenez note de la vitrine et des liens administratifs et supprimez le répertoire /var/www/htdocs/prestashop/install
.
Activez SSL.
- Cliquez sur Paramètres de la boutique
- Cliquez sur Général
- Activez SSL pour toutes les parties de votre boutique
Modifiez votre mot de passe administrateur.
- Cliquez sur Paramètres avancés
- Cliquez sur Équipe
- Changez votre mot de passe.
Quelques tâches finales
Sauvegardez votre magasin et sa base de données:
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*
Supprimez l'accès doas pour votre compte d'utilisateur en recréant le doas.conf
fichier.
echo 'permit keepenv :wheel' > /etc/doas.conf