OpenBSD як рішення для електронної комерції з PrestaShop і Apache

Вступ

У цьому посібнику демонструється OpenBSD як рішення для електронної комерції з використанням PrestaShop і Apache.

Apache потрібен, оскільки PrestaShop має складні вимоги до перезапису URL-адрес, які не підтримуються вбудованим веб-сервером OpenBSD, httpd. У цьому посібнику використовуються самопідписані сертифікати. Для виробництва використовуйте перевірений сертифікат.

Завдання на підготовку

Тимчасово створити звичайного користувача, якому дозволено використовувати doasбез пароля. Цей доступ буде видалено після налаштування.

user add -c "Example User" -m -G wheel -L staff auser
passwd auser
echo 'permit nopass keepenv :wheel' > /etc/doas.conf

Додайте сховище пакетів OpenBSD.

echo 'https://cdn.openbsd.org/pub/OpenBSD' > /etc/installurl

Пересилайте щоденні електронні листи про статус та безпеку на вашу адресу.

echo 'hostmaster@example.com' > /root/.forward

Встановіть ім'я хоста сервера.

echo 'www.example.com' > /etc/myname
hostname www.example.com

Додайте FQDN та IP-адресу вашого сервера до /etc/hosts.
Замініть 192.0.2.1на свою IP-адресу Vultr.

127.0.0.1    localhost
::1          localhost
192.0.2.1    www.example.com

Додайте необхідні пакети для PrestaShop і Apache. Коли буде запропоновано, виберіть найновіші версії.

doas su
pkg_add apache-httpd php php-curl php-gd php-intl php-pdo_mysql php-zip mariadb-client mariadb-server wget unzip

Створено самопідписаний сертифікат SSL для тестування. Встановіть Загальне ім’я для FQDN вашого сервера, наприклад 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

Завантажте та розпакуйте PrestaShop

Знайдіть URL-адресу останньої версії PrestaShop , завантажте /tmpта розпакуйте її /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

Налаштуйте брандмауер OpenBSD (pf).

Налаштуйте брандмауер на блокування всього вхідного трафіку, крім ssh , www та https .

Зробіть резервну копію /etc/pf.conf.

cp /etc/pf.conf /etc/pf.conf.bak

Відредагуйте, /etc/pf.confяк показано.

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

Перевірте та активуйте правила брандмауера.

doas pfctl -nf /etc/pf.conf
doas pfctl -f /etc/pf.conf

Налаштуйте OpenSMTPD як ретранслятор електронної пошти

Скопіюйте свій /etc/mail/smtpd.confфайл.

cp /etc/mail/smtpd.conf /etc/mail/smtpd.conf.bak

Відредагуйте, /etc/mail/smtpd.confяк показано нижче.

Примітки: * Визначення таблиці для секретів містить ім’я користувача та пароль для передачі пошти. * Вихідне дію переглядає своє ім'я користувача та пароль під ярликом prestashopв /etc/mail/secretsі ретранслюють електронну пошту через сервер електронної пошти.

    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://prestashop@mail.example.com:587 \
        tls no-verify auth <secrets>

    match from local for local action "local_mail"
    match from local for any action "outbound"

Створюйте /etc/mail/secrets

Замініть адресу електронної пошти та пароль обліковими даними, які ви використовуєте для свого сервера електронної пошти.

echo "prestashop user@example.com:password" > /etc/mail/secrets

Установіть дозволи для захисту /etc/mail/secrets

chmod 0600 /etc/secrets

Перегляньте файл конфігурації на наявність помилок і перезапустіть демон smtpd.

smtpd -n
rcctl restart smtpd

Налаштуйте середовище PHP та PHP-FPM

Налаштуйте процес PHP-FPM для прослуховування через сокет TCP замість сокета домену UNIX.

Зробіть наступні зміни для /etc/php-fpm.confфайлу.

...
; 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

Make some additional changes to the PHP environment in /etc/php-7.3.ini. This file name may change slightly if the version is newer than 7.3. These changes:

  • Allow for larger files to be uploaded.
  • Disable the chrooted environment.
  • Configure PHP to send email 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
    

    Enable the PHP plugins.

    cp /etc/php-7.3.sample/* /etc/php-7.3/.

Enable and start the PHP-FPM daemon. The daemon name might be slightly different if the version is newer.

rcctl enable php73_fpm
rcctl start php73_fpm

Configuring MariaDB

MariaDB provides the database backend for PrestaShop. Because MariaDB needs more open files than the default class allows, create a special class in /etc/login.conf.

At the bottom of the file, add the following lines:

mysqld:\
      :openfiles-cur=1024:\
      :openfiles-max=2048:\
      :tc=daemon:

Install MariaDB.

 doas su
 mysql_install_db
 rcctl enable mysqld
 rcctl start mysqld

Configure MariaDB security.

 mysql_secure_installation

Create the PrestaShop database. Use a strong password.

mysql -u root
CREATE DATABASE prestashop;
GRANT ALL PRIVILEGES ON prestashop.* TO 'prestashop'@'localhost' IDENTIFIED BY 'password123';
FLUSH PRIVILEGES;
EXIT

Configuring Apache

Back up /etc/apache2/httpd2.conf

cp /etc/apache2/httpd2.conf /etc/apache2/httpd2.conf.bak

Внесіть наступні зміни в /etc/apache2/httpd2.conf, використовуючи #для включення та вимкнення модулів.

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 webmaster@example.com
ServerName 192.0.2.1:80
  • Ще кілька змін /etc/apache2/httpd2.confвідбуваються в нижній частині файлу. Вилучіть #із зазначених заяв про включення.

  • Додайте рядки віртуального хостингу останніми.

    # Server-pool management (MPM specific)
    Include /etc/apache2/extra/httpd-mpm.conf
    ...
    # Virtual Hosts
    IncludeOptional /etc/apache2/sites/*.conf
    

Створіть /etc/apache2/sitesкаталог.

mkdir /etc/apache2/sites

Створіть /etc/apache2/sites/example.confз такою інформацією:

<VirtualHost *:80>
  ServerName example.com
  ServerAlias www.example.com
  ServerAdmin webmaster@example.com
  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 webmaster@example.com
  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>

Налаштуйте модуль проксі Apache, додавши наступне до /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>

Перевірте конфігурацію, потім увімкніть і запустіть Apache.

apachectl configtest
rcctl enable apache2
rcctl start apache2

Переконайтеся, що Apache прослуховує порти 80 і 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

Встановіть PrestaShop

Перейдіть на свій веб-сайт за адресою http://www.example.com. Запуститься майстер встановлення PrestaShop.

Після завершення інсталяції зверніть увагу на посилання магазину та адміністративні посилання та видаліть каталог /var/www/htdocs/prestashop/install.

Увімкніть SSL.

  • Натисніть Параметри магазину
  • Натисніть Загальні
  • Увімкніть SSL для всіх частин вашого магазину

Змініть пароль адміністратора.

  • Натисніть Додаткові параметри
  • Натисніть Команда
  • Змінити пароль.

Деякі підсумкові завдання

Створіть резервну копію вашого магазину та його бази даних:

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*

Видаліть доступ doas для вашого облікового запису користувача, повторно створивши doas.confфайл.

echo 'permit keepenv :wheel' > /etc/doas.conf

Залишити коментар

Повстання машин: застосування ШІ в реальному світі

Повстання машин: застосування ШІ в реальному світі

Штучний інтелект не в майбутньому, він тут прямо в сьогоденні У цьому блозі Прочитайте, як програми штучного інтелекту вплинули на різні сектори.

DDOS-атаки: короткий огляд

DDOS-атаки: короткий огляд

Ви також стали жертвою DDOS-атак і спантеличені методами запобігання? Прочитайте цю статтю, щоб вирішити свої запитання.

Ви коли-небудь замислювалися, як хакери заробляють гроші?

Ви коли-небудь замислювалися, як хакери заробляють гроші?

Можливо, ви чули, що хакери заробляють багато грошей, але чи замислювалися ви коли-небудь, як вони заробляють такі гроші? давайте обговоримо.

Революційні винаходи від Google, які полегшать ваше життя.

Революційні винаходи від Google, які полегшать ваше життя.

Ви хочете побачити революційні винаходи Google і як ці винаходи змінили життя кожної людини сьогодні? Тоді читайте в блозі, щоб побачити винаходи Google.

Friday Essential: Що сталося з автомобілями, керованими штучним інтелектом?

Friday Essential: Що сталося з автомобілями, керованими штучним інтелектом?

Концепція самокерованих автомобілів, щоб вирушати в дороги за допомогою штучного інтелекту, є мрією, яку ми давно мріємо. Але, незважаючи на кілька обіцянок, їх ніде не видно. Прочитайте цей блог, щоб дізнатися більше…

Технологічна сингулярність: віддалене майбутнє людської цивілізації?

Технологічна сингулярність: віддалене майбутнє людської цивілізації?

Оскільки наука розвивається швидкими темпами, бере на себе багато наших зусиль, ризики піддати себе незрозумілій Сингулярності також зростає. Читайте, що може означати для нас сингулярність.

Функціональні можливості шарів еталонної архітектури великих даних

Функціональні можливості шарів еталонної архітектури великих даних

Прочитайте блог, щоб дізнатися про різні шари архітектури великих даних та їх функціональні можливості найпростішим способом.

Еволюція зберігання даних – інфографіка

Еволюція зберігання даних – інфографіка

Методи зберігання даних можуть розвиватися з моменту народження Даних. Цей блог висвітлює еволюцію зберігання даних на основі інфографіки.

6 дивовижних переваг використання пристроїв розумного дому в нашому житті

6 дивовижних переваг використання пристроїв розумного дому в нашому житті

У цьому цифровому світі пристрої розумного дому стали важливою частиною життя. Ось кілька дивовижних переваг пристроїв розумного дому щодо того, як вони роблять наше життя гідним життя та спрощують його.

Оновлення доповнення macOS Catalina 10.15.4 спричиняє більше проблем, ніж вирішує

Оновлення доповнення macOS Catalina 10.15.4 спричиняє більше проблем, ніж вирішує

Нещодавно Apple випустила додаткове оновлення macOS Catalina 10.15.4, щоб виправити проблеми, але схоже, що оновлення викликає більше проблем, що призводять до блокування комп’ютерів Mac. Прочитайте цю статтю, щоб дізнатися більше