<?xml version="1.0" encoding="UTF-8"?>
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/"
xmlns:dc="http://purl.org/dc/elements/1.1/">
<channel rdf:about="https://zzs.tdcktz.com/index.php/feed/rss/tag/pocketbase/">
<title>钟志胜的个人网站 - pocketbase</title>
<link>https://zzs.tdcktz.com/index.php/tag/pocketbase/</link>
<description></description>
<items>
<rdf:Seq>
<rdf:li resource="https://zzs.tdcktz.com/index.php/archives/54/"/>
<rdf:li resource="https://zzs.tdcktz.com/index.php/archives/53/"/>
</rdf:Seq>
</items>
</channel>
<item rdf:about="https://zzs.tdcktz.com/index.php/archives/54/">
<title>用Docker compose部署pocketbase的配置文件和初始化管理员用户和密码的办法</title>
<link>https://zzs.tdcktz.com/index.php/archives/54/</link>
<dc:date>2025-04-30T05:05:00+00:00</dc:date>
<description>docker-compose.yml配置文件services:
  pocketbase:
    image: ghcr.nju.edu.cn/muchobien/pocketbase:latest
    container_name: pocketbase
    restart: unless-stopped
    ports:
      - &quot;127.0.0.1:8090:8090&quot;  # 仅本地访问
    environment:
      - POCKETBASE_DEBUG=false  # 生产环境禁用调试模式
    volumes:
      - ./pb_data:/pb_data
      - ./backups:/backups  # 备份目录
    healthcheck:  # 健康检查[3]()
      test: wget --no-verbose --tries=1 --spider http://127.0.0.1:8090/api/health || exit 1
      interval: 5s
      timeout: 5s
      retries: 5
    logging:  # 日志优化[2]()
      driver: &quot;json-file&quot;
      options:
        max-size: &quot;10m&quot;
        max-file: &quot;3&quot;
    deploy:  # 资源限制（兼容Swarm）
      resources:
        limits:
          cpus: &#039;1.0&#039;
          memory: 512M初始化管理员用户和密码的办法：运行下面的命令获取docker logs pocketbase</description>
</item>
<item rdf:about="https://zzs.tdcktz.com/index.php/archives/53/">
<title>让pocketbase的启动命令./pocketbase serve 常驻内存，失败后还能自动重启的方案</title>
<link>https://zzs.tdcktz.com/index.php/archives/53/</link>
<dc:date>2025-04-29T23:50:29+00:00</dc:date>
<description>为了确保 PocketBase 的 ./pocketbase serve 命令常驻内存并在失败后自动重启，可以使用 systemd 或 supervisord 等工具进行管理。以下是详细的解决方案：方法一：使用 systemd（推荐）systemd 是 Linux 系统的标准服务管理工具，适合长期运行的服务。1. 创建 systemd 服务文件在 /etc/systemd/system/ 目录下创建一个新的服务文件，例如 pocketbase.service：sudo nano /etc/systemd/system/pocketbase.service2. 配置服务内容将以下内容粘贴到文件中（根据你的实际路径调整）：[Unit]
Description=PocketBase Service
After=network.target

[Service]
# 替换为你的 PocketBase 可执行文件路径
ExecStart=/path/to/pocketbase serve
# 设置工作目录（可选）
WorkingDirectory=/path/to/your/pocketbase/project
# 以哪个用户身份运行（可选）
User=your-username
# 自动重启配置
Restart=always
# 日志输出（可选）
StandardOutput=file:/var/log/pocketbase.log
StandardError=file:/var/log/pocketbase-err.log

[Install]
WantedBy=multi-user.target3. 重新加载 systemd 配置sudo systemctl daemon-reload4. 启动并启用服务sudo systemctl start pocketbase
sudo systemctl enable pocketbase5. 验证服务状态sudo systemctl status pocketbase如果服务失败，systemd 会自动重启它（Restart=always）。方法二：使用 supervisordsupervisord 是一个进程管理工具，适合需要更灵活控制的场景。1. 安装 supervisord# Ubuntu/Debian
sudo apt-get install supervisor

# CentOS/RHEL
sudo yum install epel-release
sudo yum install supervisor2. 创建配置文件在 /etc/supervisor/conf.d/ 目录下创建 pocketbase.conf：sudo nano /etc/supervisor/conf.d/pocketbase.conf3. 配置内容[program:pocketbase]
command=/path/to/pocketbase serve
directory=/path/to/your/pocketbase/project
user=your-username
autostart=true
autorestart=true
stdout_logfile=/var/log/pocketbase.log
stderr_logfile=/var/log/pocketbase-err.log4. 重新加载配置sudo supervisorctl reread
sudo supervisorctl update5. 启动服务sudo supervisorctl start pocketbase6. 验证状态sudo supervisorctl status pocketbase其他注意事项权限问题  确保 PocketBase 可执行文件有可执行权限：chmod +x /path/to/pocketbase配置文件路径  如果使用自定义配置文件（如 ./pocketbase serve --config ./my-config.json），需在 ExecStart 中指定完整路径。日志管理  建议将日志输出到文件，方便排查问题。例如：ExecStart=/path/to/pocketbase serve &gt;&gt; /var/log/pocketbase.log 2&gt;&amp;1容器化方案（可选）  如果使用 Docker，可以通过 docker run 的 --restart always 参数实现自动重启：docker run -d --name pocketbase -p 8090:8090 --restart always ghcr.io/pocketbase/pocketbase:latest serve验证自动重启功能手动终止进程：killall pocketbase检查服务状态：systemctl status pocketbase  # 或 supervisorctl status pocketbase通过以上方法，PocketBase 将始终在后台运行，并在异常退出时自动重启。选择 systemd 更适合大多数场景，而 supervisord 提供了更细粒度的控制。更优解的方案为了实现 PocketBase 的 ./pocketbase serve 命令常驻内存并在失败后自动重启，我们可以在不依赖第三方工具的前提下，通过更简洁、高效、可维护的方式来优化原有的解决方案。以下是一个经过优化的、更加现代化的方案设计思路。✅ 优化目标最小化依赖：避免引入过多外部组件（如 supervisord 或 docker）；高可靠性：确保服务崩溃后能够自动重启；易于维护：配置简洁、日志清晰、便于排查问题；跨平台兼容：适用于 Linux 和 macOS 环境。🛠️ 优化方案一：使用 systemd（推荐）✅ 优点：系统原生支持，稳定性高；配置简单，易于管理；支持日志输出、自动重启等功能。🔧 优化后的配置文件示例：[Unit]
Description=PocketBase Service
After=network.target

[Service]
ExecStart=/path/to/pocketbase serve
WorkingDirectory=/path/to/pocketbase/project
User=pocketbase
Restart=always
RestartSec=5s
StandardOutput=file:/var/log/pocketbase.log
StandardError=file:/var/log/pocketbase-err.log
Environment=&quot;PORT=8090&quot;
Environment=&quot;DB_PATH=/path/to/db&quot;

[Install]
WantedBy=multi-user.target⚙️ 优化点说明：RestartSec=5s：服务崩溃后等待 5 秒再重启，防止频繁重启；Environment：直接在配置中定义环境变量，避免修改启动脚本；User=pocketbase：指定以非 root 用户运行，提高安全性；日志路径统一管理：便于集中查看日志。📌 启动与验证sudo systemctl daemon-reload
sudo systemctl enable pocketbase
sudo systemctl start pocketbase
sudo systemctl status pocketbase🛠️ 优化方案二：使用 Shell 脚本 + nohup（轻量级）如果你不想使用 systemd，可以采用一个轻量级、易用的 Shell 脚本方式，适用于快速部署或临时测试环境。📜 示例脚本：start-pocketbase.sh#!/bin/bash

LOGFILE=&quot;/var/log/pocketbase.log&quot;
PIDFILE=&quot;/tmp/pocketbase.pid&quot;

while true; do
    echo &quot;Starting PocketBase...&quot;
    /path/to/pocketbase serve &gt;&gt; &quot;$LOGFILE&quot; 2&gt;&amp;1 &amp;
    PID=$!
    echo $PID &gt; &quot;$PIDFILE&quot;
    wait $PID
    RC=$?
    echo &quot;PocketBase exited with code $RC. Restarting in 5 seconds...&quot;
    sleep 5
done📌 使用方式：chmod +x start-pocketbase.sh
nohup ./start-pocketbase.sh &amp;⚠️ 注意事项：此脚本会持续运行，但不具备系统级服务管理能力；不适合生产环境，仅适合临时测试或开发环境；若需持久运行，建议结合 systemd 使用。🛠️ 优化方案三：使用 Docker（容器化部署）如果你希望更标准化、可移植地部署 PocketBase，使用 Docker 是一种非常高效的方式。📦 Docker 镜像docker run -d \
  --name pocketbase \
  -p 8090:8090 \
  --restart always \
  ghcr.io/pocketbase/pocketbase:latest serve✅ 优势：自动重启：--restart always 确保容器崩溃后自动重启；隔离性强：避免依赖冲突；跨平台：可在任何支持 Docker 的环境中运行；版本控制：方便回滚或升级。📊 总结：哪种方案最适合你？方案适用场景优点缺点systemd生产环境稳定、可控、日志清晰需要配置文件Shell 脚本开发/测试环境快速部署、无需安装无系统级管理Docker容器化部署易于迁移、版本控制依赖 Docker 环境🧩 最佳实践建议如果你正在部署到生产服务器，优先使用 systemd；如果你在做快速原型或开发测试，可以使用 Shell 脚本；如果你追求一致性、可扩展性，Docker 是最佳选择。通过以上优化方案，你可以实现 更简洁、更可靠、更易维护 的 PocketBase 自动重启机制。根据你的具体需求选择最合适的方案即可。</description>
</item>
</rdf:RDF>