<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:wfw="http://wellformedweb.org/CommentAPI/">
<channel>
<title>钟志胜的个人网站 - pocketbase</title>
<link>https://zzs.tdcktz.com/index.php/tag/pocketbase/</link>
<atom:link href="https://zzs.tdcktz.com/index.php/feed/tag/pocketbase/" rel="self" type="application/rss+xml" />
<language>zh-CN</language>
<description></description>
<lastBuildDate>Wed, 30 Apr 2025 05:05:00 +0000</lastBuildDate>
<pubDate>Wed, 30 Apr 2025 05:05:00 +0000</pubDate>
<item>
<title>用Docker compose部署pocketbase的配置文件和初始化管理员用户和密码的办法</title>
<link>https://zzs.tdcktz.com/index.php/archives/54/</link>
<guid>https://zzs.tdcktz.com/index.php/archives/54/</guid>
<pubDate>Wed, 30 Apr 2025 05:05:00 +0000</pubDate>
<dc:creator>钟志胜</dc:creator>
<category><![CDATA[技术相关]]></category>
<description><![CDATA[docker-compose.yml配置文件services:  pocketbase:    image: ghcr.nju.edu.cn/muchobien/pocketbase:lates...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<h2>docker-compose.yml配置文件</h2><pre><code>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</code></pre><h2>初始化管理员用户和密码的办法：运行下面的命令获取</h2><pre><code>docker logs pocketbase</code></pre>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://zzs.tdcktz.com/index.php/archives/54/#comments</comments>
<wfw:commentRss>https://zzs.tdcktz.com/index.php/feed/tag/pocketbase/archives/54/</wfw:commentRss>
</item>
<item>
<title>让pocketbase的启动命令./pocketbase serve 常驻内存，失败后还能自动重启的方案</title>
<link>https://zzs.tdcktz.com/index.php/archives/53/</link>
<guid>https://zzs.tdcktz.com/index.php/archives/53/</guid>
<pubDate>Tue, 29 Apr 2025 23:50:29 +0000</pubDate>
<dc:creator>钟志胜</dc:creator>
<category><![CDATA[技术相关]]></category>
<description><![CDATA[为了确保 PocketBase 的 ./pocketbase serve 命令常驻内存并在失败后自动重启，可以使用 systemd 或 supervisord 等工具进行管理。以下是详细的解决方...]]></description>
<content:encoded xml:lang="zh-CN"><![CDATA[
<p>为了确保 PocketBase 的 <code>./pocketbase serve</code> 命令常驻内存并在失败后自动重启，可以使用 <strong>systemd</strong> 或 <strong>supervisord</strong> 等工具进行管理。以下是详细的解决方案：</p><hr><h3><strong>方法一：使用 systemd（推荐）</strong></h3><p><code>systemd</code> 是 Linux 系统的标准服务管理工具，适合长期运行的服务。</p><h4>1. 创建 systemd 服务文件</h4><p>在 <code>/etc/systemd/system/</code> 目录下创建一个新的服务文件，例如 <code>pocketbase.service</code>：</p><pre><code class="lang-bash">sudo nano /etc/systemd/system/pocketbase.service</code></pre><h4>2. 配置服务内容</h4><p>将以下内容粘贴到文件中（根据你的实际路径调整）：</p><pre><code class="lang-ini">[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.target</code></pre><h4>3. 重新加载 systemd 配置</h4><pre><code class="lang-bash">sudo systemctl daemon-reload</code></pre><h4>4. 启动并启用服务</h4><pre><code class="lang-bash">sudo systemctl start pocketbase
sudo systemctl enable pocketbase</code></pre><h4>5. 验证服务状态</h4><pre><code class="lang-bash">sudo systemctl status pocketbase</code></pre><ul><li>如果服务失败，<code>systemd</code> 会自动重启它（<code>Restart=always</code>）。</li></ul><hr><h3><strong>方法二：使用 supervisord</strong></h3><p><code>supervisord</code> 是一个进程管理工具，适合需要更灵活控制的场景。</p><h4>1. 安装 supervisord</h4><pre><code class="lang-bash"># Ubuntu/Debian
sudo apt-get install supervisor

# CentOS/RHEL
sudo yum install epel-release
sudo yum install supervisor</code></pre><h4>2. 创建配置文件</h4><p>在 <code>/etc/supervisor/conf.d/</code> 目录下创建 <code>pocketbase.conf</code>：</p><pre><code class="lang-bash">sudo nano /etc/supervisor/conf.d/pocketbase.conf</code></pre><h4>3. 配置内容</h4><pre><code class="lang-ini">[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.log</code></pre><h4>4. 重新加载配置</h4><pre><code class="lang-bash">sudo supervisorctl reread
sudo supervisorctl update</code></pre><h4>5. 启动服务</h4><pre><code class="lang-bash">sudo supervisorctl start pocketbase</code></pre><h4>6. 验证状态</h4><pre><code class="lang-bash">sudo supervisorctl status pocketbase</code></pre><hr><h3><strong>其他注意事项</strong></h3><ol><li><p><strong>权限问题</strong>  <br>确保 PocketBase 可执行文件有可执行权限：</p><pre><code class="lang-bash">chmod +x /path/to/pocketbase</code></pre></li><li><strong>配置文件路径</strong>  <br>如果使用自定义配置文件（如 <code>./pocketbase serve --config ./my-config.json</code>），需在 <code>ExecStart</code> 中指定完整路径。</li><li><p><strong>日志管理</strong>  <br>建议将日志输出到文件，方便排查问题。例如：</p><pre><code class="lang-bash">ExecStart=/path/to/pocketbase serve &gt;&gt; /var/log/pocketbase.log 2&gt;&amp;1</code></pre></li><li><p><strong>容器化方案（可选）</strong>  <br>如果使用 Docker，可以通过 <code>docker run</code> 的 <code>--restart always</code> 参数实现自动重启：</p><pre><code class="lang-bash">docker run -d --name pocketbase -p 8090:8090 --restart always ghcr.io/pocketbase/pocketbase:latest serve</code></pre></li></ol><hr><h3><strong>验证自动重启功能</strong></h3><ul><li><p>手动终止进程：</p><pre><code class="lang-bash">killall pocketbase</code></pre></li><li><p>检查服务状态：</p><pre><code class="lang-bash">systemctl status pocketbase  # 或 supervisorctl status pocketbase</code></pre></li></ul><p>通过以上方法，PocketBase 将始终在后台运行，并在异常退出时自动重启。选择 <code>systemd</code> 更适合大多数场景，而 <code>supervisord</code> 提供了更细粒度的控制。</p><h2>更优解的方案</h2><p>为了实现 <strong>PocketBase 的 <code>./pocketbase serve</code> 命令常驻内存并在失败后自动重启</strong>，我们可以在不依赖第三方工具的前提下，通过更<strong>简洁、高效、可维护</strong>的方式来优化原有的解决方案。以下是一个经过优化的、更加现代化的方案设计思路。</p><hr><h2>✅ 优化目标</h2><ul><li><strong>最小化依赖</strong>：避免引入过多外部组件（如 <code>supervisord</code> 或 <code>docker</code>）；</li><li><strong>高可靠性</strong>：确保服务崩溃后能够自动重启；</li><li><strong>易于维护</strong>：配置简洁、日志清晰、便于排查问题；</li><li><strong>跨平台兼容</strong>：适用于 Linux 和 macOS 环境。</li></ul><hr><h2>🛠️ 优化方案一：使用 <code>systemd</code>（推荐）</h2><h3>✅ 优点：</h3><ul><li>系统原生支持，稳定性高；</li><li>配置简单，易于管理；</li><li>支持日志输出、自动重启等功能。</li></ul><h3>🔧 优化后的配置文件示例：</h3><pre><code class="lang-ini">[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</code></pre><h3>⚙️ 优化点说明：</h3><ul><li><strong><code>RestartSec=5s</code></strong>：服务崩溃后等待 5 秒再重启，防止频繁重启；</li><li><strong><code>Environment</code></strong>：直接在配置中定义环境变量，避免修改启动脚本；</li><li><strong><code>User=pocketbase</code></strong>：指定以非 root 用户运行，提高安全性；</li><li><strong>日志路径统一管理</strong>：便于集中查看日志。</li></ul><h3>📌 启动与验证</h3><pre><code class="lang-bash">sudo systemctl daemon-reload
sudo systemctl enable pocketbase
sudo systemctl start pocketbase
sudo systemctl status pocketbase</code></pre><hr><h2>🛠️ 优化方案二：使用 Shell 脚本 + <code>nohup</code>（轻量级）</h2><p>如果你不想使用 <code>systemd</code>，可以采用一个<strong>轻量级、易用</strong>的 Shell 脚本方式，适用于快速部署或临时测试环境。</p><h3>📜 示例脚本：<code>start-pocketbase.sh</code></h3><pre><code class="lang-bash">#!/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</code></pre><h3>📌 使用方式：</h3><pre><code class="lang-bash">chmod +x start-pocketbase.sh
nohup ./start-pocketbase.sh &amp;</code></pre><h3>⚠️ 注意事项：</h3><ul><li>此脚本会持续运行，但<strong>不具备系统级服务管理能力</strong>；</li><li>不适合生产环境，仅适合临时测试或开发环境；</li><li>若需持久运行，建议结合 <code>systemd</code> 使用。</li></ul><hr><h2>🛠️ 优化方案三：使用 Docker（容器化部署）</h2><p>如果你希望更<strong>标准化、可移植</strong>地部署 PocketBase，使用 Docker 是一种非常高效的方式。</p><h3>📦 Docker 镜像</h3><pre><code class="lang-bash">docker run -d \
  --name pocketbase \
  -p 8090:8090 \
  --restart always \
  ghcr.io/pocketbase/pocketbase:latest serve</code></pre><h3>✅ 优势：</h3><ul><li><strong>自动重启</strong>：<code>--restart always</code> 确保容器崩溃后自动重启；</li><li><strong>隔离性强</strong>：避免依赖冲突；</li><li><strong>跨平台</strong>：可在任何支持 Docker 的环境中运行；</li><li><strong>版本控制</strong>：方便回滚或升级。</li></ul><hr><h2>📊 总结：哪种方案最适合你？</h2><table><thead><tr><th>方案</th><th>适用场景</th><th>优点</th><th>缺点</th></tr></thead><tbody><tr><td><code>systemd</code></td><td>生产环境</td><td>稳定、可控、日志清晰</td><td>需要配置文件</td></tr><tr><td>Shell 脚本</td><td>开发/测试环境</td><td>快速部署、无需安装</td><td>无系统级管理</td></tr><tr><td>Docker</td><td>容器化部署</td><td>易于迁移、版本控制</td><td>依赖 Docker 环境</td></tr></tbody></table><hr><h2>🧩 最佳实践建议</h2><ul><li>如果你正在部署到<strong>生产服务器</strong>，<strong>优先使用 <code>systemd</code></strong>；</li><li>如果你在做<strong>快速原型或开发测试</strong>，可以使用 <strong>Shell 脚本</strong>；</li><li>如果你追求<strong>一致性、可扩展性</strong>，<strong>Docker 是最佳选择</strong>。</li></ul><hr><p>通过以上优化方案，你可以实现 <strong>更简洁、更可靠、更易维护</strong> 的 PocketBase 自动重启机制。根据你的具体需求选择最合适的方案即可。</p>
]]></content:encoded>
<slash:comments>0</slash:comments>
<comments>https://zzs.tdcktz.com/index.php/archives/53/#comments</comments>
<wfw:commentRss>https://zzs.tdcktz.com/index.php/feed/tag/pocketbase/archives/53/</wfw:commentRss>
</item>
</channel>
</rss>