• 已删除用户
LH
发布于 2020-04-03 / 847 阅读 / 2 评论 / 0 点赞

博客docker搬家记

背景

本博客用typecho博客程序,caddy + php-fpm + SQLite
突发奇想把vps上所有服务都放在docker上,说干就干

拉取Caddy镜像

➜  docker pull abiosoft/caddy:php

移动博客相关文件

把Caddyfile、证书、日志、网站根目录放到一个文件夹,方便管理

➜  ls
Caddyfile  cert  logs  www.zhlh6.cn

修改Caddyfile

移动文件后,网站根目录、TLS证书、日志文件路径改变,将Caddyfile修改如下:

https://www.zhlh6.cn {
        root /srv
        tls /cert/www.zhlh6.cn.crt /cert/www.zhlh6.cn.key
        log /logs/www.zhlh6.cn.access.log
        gzip
        on startup php-fpm7 #一定要加这句,不然php-fpm不会启动!!

        fastcgi / 127.0.0.1:9000 php {
                ext .php
                index index.php index.html
        }
        rewrite / {
                if {path} not_match (/usr/|/admin/)
                to /index.php{uri}
        }
}

启动容器~~(开始跳坑)~~

➜  docker run -d -p 443:443 -p 80:80  -v /home/blog/Caddyfile:/etc/Caddyfile -v /home/blog/www.zhlh6.cn:/srv -v /home/blog/logs:/logs -v /home/blog/cert:/cert abiosoft/caddy:php

填坑

No input file specified.
搜了网上很多原因,有人说是网站目录权限问题,
有人说要在php.ini加上cgi.force_redirect = 0,cgi.fix_pathinfo=1等等
我尝试过均无效。
最后留意到网站根目录上有一个隐藏文件.user.ini,打开修改里面的路径为/srv就好了
.user.ini为php防跨目录功能的配置文件,里面路径要与真实网站根目录路径一致。


Error establishing a database connection
很显然数据库连接错误,修改config.inc.ini中db->addServer参数


Database Query Error
首先打开typecho的调试信息,在config.inc.ini中添加如下代码

define('__TYPECHO_DEBUG__',true);

刷新可以看到报错:SQLSTATE[HY000]: General error: 8 attempt to write a readonly database
很显然是数据库没有写权限,docker容器内部使用www-data用户访问目录,而数据库是root用户的

➜  docker exec -it *** sh
#  chown -R www-data:www-data /srv

重启容器,done.

2020年8月22日 更新:

vps到期,说一下迁移的坑

启动caddy提示目录没权限

/etc/caddy/Caddyfile:2 - Parse error: Unable to access root path '*': stat *: permission denied

如果你的网站根目录在/home, /root, and /run/user里面,
需要在caddy的systemd配置文件caddy.service中,把ProtectHome=false给注释掉。
另外caddy默认是使用www-data用户运行的,请确保www-data用户有你的网站根目录以及网站根目录的父级目录有访问权限。

数据库驱动不存在

Adapter Typecho_Db_Adapter_Pdo_SQLite is not available

安装相关依赖:

sudo apt-get install php-sqlite3

然后把php.ini中的extension=pdo_sqlite注释给去掉


评论