在没有宝塔面板的环境下,如何手动配置 AnQiCMS 进程的可靠守护?

作为一名资深的安企CMS运营人员,我深知在复杂的服务器环境中,如何确保内容管理系统的稳定运行至关重要。对于许多不使用宝塔面板的用户来说,手动配置AnQiCMS的进程守护可能看似一项挑战,但只要掌握正确的方法,就能实现企业级的高可靠性。本文将详细阐述如何在没有宝塔面板的环境下,可靠地守护AnQiCMS进程。

理解AnQiCMS进程守护的重要性

AnQiCMS是一款基于Go语言开发的高性能内容管理系统。与依赖PHP-FPM等外部服务的传统CMS不同,AnQiCMS编译后是一个独立的二进制可执行文件,它自身就是一个Web服务器,通常监听在一个特定的端口(如默认的8001)。这意味着它不像PHP应用那样依赖Web服务器来启动和管理进程。然而,独立运行的二进制程序也需要有机制来确保其持续在线。一旦程序因任何原因(例如代码错误、系统资源耗尽、服务器重启等)崩溃或停止,如果没有守护程序,网站将无法访问。因此,为AnQiCMS配置可靠的进程守护,是确保网站高可用性和稳定性的关键一环。

前期准备与AnQiCMS的初始部署

在配置进程守护之前,您需要完成AnQiCMS的基础部署。首先,从AnQiCMS官方网站下载适用于Linux环境的最新安装包,并将其上传到您的服务器上,解压到一个合适的目录,例如/opt/anqicms/www/wwwroot/您的域名。解压后,您会得到一个名为anqicms的可执行文件(或其他您自定义的二进制文件名),以及config.json配置文件、templatepublic等目录。

接下来,确保您的服务器上已安装并运行MySQL数据库,并创建好AnQiCMS所需的数据库和具有足够权限的用户。首次运行AnQiCMS时,您需要通过命令行进入AnQiCMS的安装目录,直接执行 ./anqicms。程序启动后,通过浏览器访问您的服务器IP地址加端口(例如 http://服务器IP:8001),AnQiCMS将引导您完成数据库连接、管理员账号设置和站点信息的初始化。完成初始化后,即可关闭当前的命令行进程。

配置Nginx或Apache反向代理

由于AnQiCMS默认运行在特定端口,而用户通常通过标准HTTP/HTTPS端口(80/443)访问网站,因此需要配置Nginx或Apache作为反向代理。反向代理负责将用户请求转发到AnQiCMS监听的端口,并将AnQiCMS的响应返回给用户。

对于Nginx服务器,您可以在站点的配置文件中添加类似如下的配置:

server {
    listen 80;
    server_name www.yourdomain.com; # 替换为您的域名
    root /www/wwwroot/yourdomain.com/public; # 替换为您的AnQiCMS public目录

    location @AnqiCMS {
        proxy_pass http://127.0.0.1:8001; # AnQiCMS监听的端口
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    error_page 404 =200 @AnqiCMS;
    location / {
       try_files $uri $uri/index.html @AnqiCMS;
    }

    # 其他Nginx配置,例如SSL、日志等
    access_log /var/log/nginx/yourdomain.com_access.log;
    error_log /var/log/nginx/yourdomain.com_error.log warn;
}

如果您使用Apache服务器,可以通过mod_proxy模块进行配置。在您的站点虚拟主机配置文件中添加如下内容:

<VirtualHost *:80>
    ServerName www.yourdomain.com # 替换为您的域名
    DocumentRoot /www/wwwroot/yourdomain.com/public # 替换为您的AnQiCMS public目录

    ProxyRequests Off
    ProxyPreserveHost On
    ProxyVia On

    <Proxy *>
        Require all granted
    </Proxy>

    # 将所有请求转发到AnQiCMS监听的端口
    ProxyPass / http://127.0.0.1:8001/
    ProxyPassReverse / http://127.0.0.1:8001/

    ErrorLog ${APACHE_LOG_DIR}/yourdomain.com_error.log
    CustomLog ${APACHE_LOG_DIR}/yourdomain.com_access.log combined
</VirtualHost>

完成配置后,请务必重启Nginx或Apache服务,使配置生效。

守护AnQiCMS进程的几种方案

现在,我们来探讨如何在没有宝塔面板的环境下,可靠地守护AnQiCMS进程。我们将介绍几种方案,从简单到复杂,适用于不同需求和运维经验的场景。

方案一:使用Crontab配合Shell脚本(基础守护)

install.md文档中提到了使用crontab配合start.sh脚本来守护AnQiCMS进程,这是一种简单易行的基础守护方式。

  1. 创建启动脚本 start.sh 在AnQiCMS的安装目录下,创建一个名为start.sh的文件,并赋予执行权限。该脚本用于检查AnQiCMS进程是否正在运行,如果未运行则启动它。脚本内容应类似于:

    #!/bin/bash
    ### check and start AnqiCMS
    # author fesion
    # the bin name is anqicms
    BINNAME=anqicms
    BINPATH=/www/wwwroot/anqicms # 替换为您的AnQiCMS安装路径
    
    # 检查进程是否存在
    exists=`ps -ef | grep '\<'$BINNAME'\>' |grep -v grep |wc -l`
    echo "$(date +'%Y%m%d %H:%M:%S') $BINNAME PID check: $exists" >> $BINPATH/check.log
    echo "PID $BINNAME check: $exists"
    if [ $exists -eq 0 ]; then
        echo "$BINNAME NOT running"
        cd $BINPATH && nohup $BINPATH/$BINNAME >> $BINPATH/running.log 2>&1 &
    fi
    

    请注意,将BINPATH变量替换为您的AnQiCMS实际安装路径。

  2. 配置Crontab定时任务: 编辑系统的Crontab任务,让start.sh脚本每分钟运行一次。

    crontab -e
    

    在打开的编辑器中,添加一行:

    */1 * * * * /www/wwwroot/anqicms/start.sh # 替换为您的start.sh脚本的完整路径
    

    保存并退出编辑器。这样,系统将每分钟检查AnQiCMS进程,并在其停止时自动启动。

优点: 配置简单,易于理解。 缺点: 无法在AnQiCMS崩溃时立即重启,存在约一分钟的延迟。日志管理相对简陋,无法详细追踪进程状态。对于高可用性要求较高的生产环境,这种方式不够理想。

方案二:使用Systemd(推荐的生产环境守护方案)

Systemd是现代Linux发行版(如CentOS 78, Ubuntu 16.04+)中默认的系统和服务管理器,它提供了一套强大且成熟的服务管理机制,能够实现进程的自动启动、崩溃重启、日志管理等功能,是生产环境守护AnQiCMS进程的**选择。

  1. 创建Systemd服务文件:/etc/systemd/system/目录下创建一个名为anqicms.service的文件,用于定义AnQiCMS服务。

    sudo vim /etc/systemd/system/anqicms.service
    

    文件内容应类似于:

    ”`ini [Unit] Description=AnqiCMS Service After=network.target # 在网络服务启动后启动

    如果AnqiCMS依赖于MySQL,可以在这里添加After=mysql.service

    [Service] Type=simple # 进程类型为简单服务 WorkingDirectory=/www/wwwroot/anqicms # 替换为您的AnQiCMS安装路径 ExecStart=/www/wwwroot/anqicms/anqicms # 替换为您的AnQiCMS可执行文件的完整路径 Restart=always # 总是重启,无论正常退出、异常退出、信号退出等都会重启 RestartSec=3 # 重启前等待3秒 User=www # 推荐使用非root用户运行AnqiCMS,例如www用户 Group=www