安装、维护Monica PRM的一些笔记

基本上,安装、维护Monica PRM(笔者安装的是v4.0.0)的时候,循着官方教程,不会出什么错。不过由于不同的自托管环境条件之复杂,每个人都可能遇到各不一样的问题:此官方文档之不能备也。是故笔者姑将自己所遇到的,陈诸此文,幸能为博雅网友参考而已。

Monica是什么

先简单介绍下Monica这款软件。

Monica是一个开源的个人关系管理系统(PRM),可以由用户自托管。它帮助用户通过记录与他们生活中的人有关的信息和交互来管理他们的个人关系。用户可以记录重要的日期,如生日和纪念日,以及与朋友和家人的交往,包括他们的偏好和生活中的重大事件。

Monica的目的是帮助用户保持与他们关心的人的联系,并通过提供有意义的个人互动来增强这些关系。通过一个中心化的在线平台,Monica旨在成为用户社交互动的可靠记录和提醒系统。

因缺失PHP扩展而无法运行Composer安装命令

循官方文档而安装Monica的过程中遇到的问题,基本可以通过阅读报错信息而解决。例如在本桩例子中,运行完composer install --no-interaction --no-dev报错:

Your lock file does not contain a compatible set of packages. Please run composer update.

  Problem 1
    - Root composer.json requires PHP extension ext-gmp * but it is missing from your system. Install or enable PHP's gmp extension.
  Problem 2
    - Root composer.json requires PHP extension ext-redis * but it is missing from your system. Install or enable PHP's redis extension.

To enable extensions, verify that they are enabled in your .ini files:
(从略)
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-gmp --ignore-platform-req=ext-redis` to temporarily ignore these required extensions.

以上段报错文字为例,则说明在运行Composer安装命令时遇到了一些问题,提示缺少ext-gmpext-redis这两个PHP扩展。下面是一些可能的解决步骤:

  1. 安装缺失的PHP扩展:
    • 需要在服务器上安装gmpredis这两个 PHP 扩展。在Ubuntu上,可以通过下面的命令来安装它们:
      bash sudo apt-get install php-gmp php-redis
      在其他操作系统或包管理器上,安装命令可能会有所不同。
  2. 检查PHP配置:
    • 确保上述的扩展已经在php.ini文件中启用。可以通过运行php --ini命令来找到php.ini文件的位置,然后在文件中查看extension=gmpextension=redis是否存在并取消注释。
    • 或者,可以在命令行中运行php -m来检查这些扩展是否已被正确加载。
  3. 使用Composer忽略平台要求(不推荐):
    • 如果仅仅是想快速绕过这个问题,可以使用--ignore-platform-req选项来临时忽略这些扩展要求:
      bash composer install --no-interaction --no-dev --ignore-platform-req=ext-gmp --ignore-platform-req=ext-redis
      但是,这可能会导致应用在运行时出现问题,因为这些扩展是Monica项目依赖的。
  4. 更新Composer(不推荐):
    • 如果上述步骤都无法解决问题,尝试运行composer update来更新composer.lock文件和依赖关系。但是,请注意,这可能会更新依赖库到新的版本,可能会有破坏性的变更。

另外,在运行Composer安装命令时会收到提示信息:

Do not run Composer as root/super user! See https://getcomposer.org/root for details

它的意思是说,最好不要以root用户身份运行Composer,因为这可能会导致安全问题。可以创建一个新的用户,或者使用现有的非root用户来运行Composer。

运行yarn run production不顺利

首先要强调的是,一定要yarn install命令顺利运行以后再运行yarn run production

然后,该命令运行的不顺利可能由以下原因导致:

Browserslist数据库过时

运行yarn run production后,报错信息如包括:

Browserslist: caniuse-lite is outdated. Please run:
  npx update-browserslist-db@latest
  Why you should do it regularly: https://github.com/browserslist/update-db#readme

则说明Browserslist数据库过时了,可以按照提示运行以下命令来更新它:

npx update-browserslist-db@latest

JavaScript堆内存耗尽

运行yarn run production后,报错信息如包括:

FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory

则说明在构建过程中,JavaScript堆内存耗尽了。可以尝试增加Node.js的堆内存限制来解决这个问题。

例如,可以在运行yarn run production命令前设置NODE_OPTIONS环境变量来增加内存限制:

export NODE_OPTIONS="--max-old-space-size=4096"
yarn run production

这会将Node.js的堆内存限制设置为4GB。

使修改完的.env生效

网站的配置,在服务器上Monica项目的根目录中的.env这一配置文件内进行修改。

而通常,在Laravel(Monica所用的框架)项目中,当.env文件被修改后,可能需要清除配置缓存以使更改生效。这可以通过运行以下命令来完成:

php artisan config:clear

在一些情况下,可能还需要重新启动web服务器(例如Apache或Nginx)和/或PHP-FPM服务来确保新的配置被正确加载。不过笔者所做的大部分修改,执行完php artisan config:clear后都能够立即生效。

S3配置的.env变量

在设置S3的时候,官方文档与GitHub repo的issue区里所提及的变量名时有出入。不过经过检查软件源代码(v4.0.0)发现:

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID', env('AWS_KEY')),
            'secret' => env('AWS_SECRET_ACCESS_KEY', env('AWS_SECRET')),
            'region' => env('AWS_DEFAULT_REGION', env('AWS_REGION')),
            'bucket' => env('AWS_BUCKET'),
            'url' => env('AWS_URL'),
            'endpoint' => env('AWS_ENDPOINT', env('AWS_SERVER', '') ? 'https://'.env('AWS_SERVER') : null),
            'use_path_style_endpoint' => env('AWS_USE_PATH_STYLE_ENDPOINT', env('S3_PATH_STYLE', false)),
            'throw' => true,
        ],

不同名称都能指向各自的同一个设定。所以确保每个必要的设定都得到妥善的填写即可。

Discover more from 山月

Subscribe now to keep reading and get access to the full archive.

Continue reading