OpenBSD作为带有PrestaShop和Apache的电子商务解决方案

介绍

本教程将OpenBSD演示为使用PrestaShop和Apache的电子商务解决方案。

需要Apache,因为PrestaShop具有复杂的URL重写要求,而OpenBSD的内置Web服务器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为您的Vultr IP地址。

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

找到最新版本的PrestaShop的URL ,下载/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)防火墙

配置防火墙以阻止除sshwwwhttps之外的所有入站流量。

制作的备份副本/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

对中的PHP环境进行一些其他更改 /etc/php-7.3.ini。如果版本高于7.3,则此文件名可能会稍有更改。这些变化:

  • 允许上传较大的文件。
  • 禁用chroot环境。
  • 配置PHP以通过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
    

    启用PHP插件。

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

启用并启动PHP-FPM守护程序。如果版本较新,则守护程序名称可能会略有不同。

rcctl enable php73_fpm
rcctl start php73_fpm

配置MariaDB

MariaDB为PrestaShop提供数据库后端。由于MariaDB需要的打开文件超出了默认类允许的数量,因此请在中创建一个特殊类/etc/login.conf

在文件底部,添加以下行:

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

安装MariaDB。

 doas su
 mysql_install_db
 rcctl enable mysqld
 rcctl start mysqld

配置MariaDB安全性。

 mysql_secure_installation

创建PrestaShop数据库。使用强密码。

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

配置Apache

备份 /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

启用S​​SL。

  • 点击商店参数
  • 点击常规
  • 为商店的所有部分启用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.conf文件来删除用户帐户的doas访问权限。

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

留下評論

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg

在Arch Linux上使用Makepkg可以避免系统污染,确保仅安装必要的依赖关系。

如何在Ubuntu 16.04上安装OpenSIPS控制面板

如何在Ubuntu 16.04上安装OpenSIPS控制面板

快速学习如何在Ubuntu 16.04上安装OpenSIPS控制面板,为VoIP提供商提供支持的功能。

在Fedora 28上安装Akaunting

在Fedora 28上安装Akaunting

学习如何在Fedora 28上安装Akaunting,一款适合小型企业和自由职业者的开源会计软件。

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

如何在CentOS 7上安装Mailtrain新闻通讯应用程序

使用其他系统?Mailtrain是一个基于Node.js和MySQL / MariaDB构建的开源自托管新闻通讯应用程序。

诊断Minecraft服务器延迟和低TPS

诊断Minecraft服务器延迟和低TPS

了解導致Minecraft延遲的原因和解決方案,包括優化伺服器性能和減少滯後的步驟。

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息