在 FreeBSD 11.2 里安装 Magento2.3

环境:FreeBSD 11.1-RELEASE

过程:

1.pkg install apache24 # 安装 apache2.4
2.pkg install mysql57-server # 安装 mysql server 5.7
3.pkg install php72 php72-curl php72-gd php72-mbstring php72-mysqli php72-openssl php72-pdo_mysql php72-xml php72-dom php72-json php72-xsl php72-ctype php72-intl php72-hash php72-soap php72-filter php72-phar php72-zip php72-iconv php72-bcmath php72-simplexml php72-xmlwriter php72-tokenizer php72-opcache xmlreader php72-xmlreader php72-session php72-wddx php72-sockets php72-readline php72-pcntl php72-gettext php72-exif php72-fileinfo php72-zlib php72-calendar php72-ftp # 安装 php7.2 和相关扩展
4./usr/local/etc/apache24/httpd.conf # 编辑 httpd 的配置文件,本例,启用了好些模块 rewrite_module, mpm_event_module, http2_module, ssl_module, mod_proxy_fcgi, mod_proxy,引用了 httpd-vhosts.conf 文件,禁用了 mpm_worker_module 模块
5./usr/local/etc/apache24/extra/httpd-vhosts.conf # 编辑虚拟主机配置文件,如下例,是添加了https站点 szt.anqun.org的配置内容

Listen 443
<VirtualHost *:443>
        Protocols h2 http/1.1
        ServerName szt.anqun.org

        SSLEngine on
        SSLCertificateFile "/root/.acme.sh/szt.anqun.org/fullchain.cer"
        SSLCertificateKeyFile "/root/.acme.sh/szt.anqun.org/szt.anqun.org.key"

        DocumentRoot "/usr/local/www/szt_anqun_org/public_html"
        ProxyPassMatch ^/(.*\.php)$ fcgi://127.0.0.1:9000/usr/local/www/szt_anqun_org/public_html/$1
        ErrorLog "/usr/local/www/szt_anqun_org/logs/error.log"

    <Directory "/usr/local/www/szt_anqun_org/public_html">
        AllowOverride All
        DirectoryIndex /index.php index.php index.html
        Require all granted
        Allow from all
    </Directory>

</VirtualHost>

6.sysrc apache24_enable=yes # 允许 apache24 服务
7.sysrc mysql_enable=yes # 允许 mysql-server 服务
8.sysrc php_fpm_enable=yes # 允许 php-fpm 服务
9.service apache24 start # 启动 apache24 服务
10.service mysql-server start # 启动 mysql-server 服务
11.service php-fpm start # 启动 php-fpm 服务
freebsd-magento2-3.png
12.ALTER USER 'root'@'localhost' IDENTIFIED BY 'niDEpASSWORD' ; # 首次启动mysql5.7后,root的密码会写在/root/.mysql_secret 文件里,需要用 ALTER USER 命令更改密码后使用
13.下载不带演示数据的magento2安装文件,解压到 /usr/local/www/szt_anqun_org/public_html,且将目录权限设置为www用户所有
14.切换到magento的目录,执行以下命令安装:

sudo -u www php bin/magento setup:install --base-url=https://szt.anqun.org/ \
--db-host=localhost --db-name=mage --db-user=mage --db-password=wpmima888 \
--admin-firstname=Magento --admin-lastname=User --admin-email=liujia@anqun.org \
--admin-user=admin --admin-password=admin123 --language=en_US \
--currency=USD --timezone=America/Chicago --use-rewrites=1

freebsd-magento2-1.png
15.在浏览器访问前台和后台,正常
freebsd-magento2-2.png

参考:https://devdocs.magento.com/guides/v2.3/install-gde/install/cli/install-cli-subcommands.html

magento - 不能登录后台 - Mage registry key _singleton/massemail/observer

magento网站程序,可更改 local.xml 配置后,网站前台正常,但访问后台提示错误。

1.在浏览器里尝试登录到magento站点后,提示错误
mage-error-registry-key-1.jpg

2.在var/report里找到相应的事件记录,有如下语句:

a:5:{i:0;s:64:"Mage registry key "_singleton/massemail/observer" already exists";i:1;s:2330:"#0 /www/users/domain.name/app/Mage.php(222): Mage::throwException('Mage registry k...')
#1 /www/users/domain.name/app/Mage.php(476): Mage::register('_singleton/mass...', false)

3.网上查得,可以尝试通过magento的管理脚本compiler.php来关闭comiler功能来解决

php compiler.php state
php compiler.php disable
php compiler.php clear

参考:https://community.magento.com/t5/Magento-1-x-Technical-Issues/Mage-registry-key-quot-singleton-massemail-observer-quot-already/td-p/60351

magento前台访问错误 - Class name must be a valid object or a string

1.magento 1.x 版本,站点搬迁后,前台访问,提示错误:Fatal error: Class name must be a valid object or a string in /www/users/domain.name/includes/src/__default.php on line 29658

2.查看 __default.php 相应的行,大概有如下:

    public function getConnectionTypeInstance($type)
    {
        if (!isset($this->_connectionTypes[$type])) {
            $config = Mage::getConfig()->getResourceTypeConfig($type);
            $typeClass = $config->getClassName();
            $this->_connectionTypes[$type] = new $typeClass();
        }
        return $this->_connectionTypes[$type];
    }

3.网上查得,这是mysql连接相关。查看 local.xml 文件中mysql的配置内容,是写了 pdo_mysqli ,但查看当前的php模块中,仅有 pdo_mysql
mag-pdo_mysql-1.png

4.将 local.xml 文件中的 pdo_mysqli 替换为 pdo_mysql 后,就正常了
mag-pdo_mysql-2.png

参考:https://stackoverflow.com/questions/13377491/magento-fatal-error-class-name-must-be-a-valid-object-or-a-string

在cron计划任务中使用aws命令

问题:包含aws命令的脚本,可以在Shell里正常执行,但不能在cron中定时执行。

aws lightsail stop-instance --instance-name Debian-1GB-CNNC-1
sleep 60
aws lightsail start-instance --instance-name Debian-1GB-CNNC-1

原因:很可能是因为cron中执行时,找不到aws程序,即默认执行路径中,没有aws。

解决:在脚本里添加aws所在的路径 /usr/local/bin/ ,即可。

#!/bin/bash
PATH=$PATH:/usr/local/bin/
aws lightsail stop-instance --instance-name Debian-1GB-CNNC-1
sleep 60
aws lightsail start-instance --instance-name Debian-1GB-CNNC-1

aws-cron-path-1.png

参考:https://serverfault.com/questions/614890/cant-run-aws-cli-from-cron-credentials

在Windows 2019里安装WSL - Debian

在微软的新版本系统里,可以通过Windows Subsystem Linux跑Debian系统,完成一些日常开发的任务。

过程:

1.winver # 在PowerShell里,执行此命令,确认当前Windows版本支持WSL功能
win2019-wsl-1.png

2.Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux # 在PowerShell里,执行此命令,启用WSL功能,且重启机子
win2019-wsl-2.png

3.Invoke-WebRequest -Uri https://aka.ms/wsl-debian-gnulinux -OutFile wsl-debian-gnulinux.appx -UseBasicParsing # 在PowerShell里,执行此命令,下载 Debian 安装包

4.Rename-Item wsl-debian-gnulinux.appx wsl-debian-gnulinux.zip # 在PowerShell里,执行此命令,重启名安装包文件为zip文件

5.Expand-Archive wsl-debian-gnulinux.zip debian # 在PowerShell里,执行此命令,解压到debian目录
win2019-wsl-3.png

6..\debian.exe # 安装 debian 系统,完成后会提示设置新用户及密码
win2019-wsl-4.png

参考:https://docs.microsoft.com/zh-cn/windows/wsl/install-on-server