======常见运维问题=====
一些个人网站环境配置及常见问题记录。
----
====AMH====
References:
* [[https://amh.sh|AMH官方网站]]
===AMH 查看默认密码===
使用以下命令则可以查看:
cat /root/amh.log
===MySQL无法自动启动===
MYSQL 在重启服务器时不能启动,尝试以下方法:
\\
\\
删除 ''my.inf''。
cd /etc/
rm my.inf
==PID file not found==
#error msg
ERROR! MySQL server PID file could not be found!
这种情况多半是硬盘空间满了导致系统强制结束了 mysql 的进程。用下面的命令之后再重启一下 mysql 进系统看看。
rm -f /tmp/mysql-5.6.sock tmp/mysql-5.6.sock.lock
===SSL 配置===
==SSL多虚拟主机==
单IP的多个虚拟主机只需要一个 SSL证书即可。配置步骤:
- 在 ''amh.sh/ssl.htm'' 上申请证书,申请的时候将所有虚拟主机的域名输入。
- 将得到的证书在 ''amhssl'' 中添加。
- 制定自动更新的策略。
====Dokuwiki====
Rreferences:
* [[https://www.nginx.com/resources/wiki/start/topics/recipes/dokuwiki/|Nginx Official guide for Dokuwiki]]
===Dokuwiki Nginx Rewrite 规则===
将下列规则添加到 AMH 的 ''rewrite'' 模块中:
location / {
index doku.php;
try_files $uri $uri/ @dokuwiki;
}
#caching: warning: will cause picture 404 problem if your wiki is running in rewrite mode 1.
location ~ ^/lib.*\.(gif|png|ico|jpg)$ {
expires 30d;
}
#dir safety
location ^~ /conf/ { return 403; }
location ^~ /data/ { return 403; }
#rewrite
Location @dokuwiki {
# rewrites "doku.php/" out of the URLs if you set the userewrite setting to .htaccess in dokuwiki config page
rewrite ^/_media/(.*) /lib/exe/fetch.php?media=$1 last;
rewrite ^/_detail/(.*) /lib/exe/detail.php?media=$1 last;
rewrite ^/_export/([^/]+)/(.*) /doku.php?do=export_$1&id=$2 last;
rewrite ^/(.*) /doku.php?id=$1&$args last;
}
==Dokuwiki 重写后图片显示不正常(Nginx&AMH)==
Dokuwiki URL Rewrite 与以下代码冲突:
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|mp3|wma)$ {
expires 30d;
}
而 AMH 的 ''nginx.conf'' 需要到所建立的环境下的 ''vhost'' 目录下找对应虚拟主机的文件(一般是以 ''域名.conf'' 格式的 ''conf'' 文件)。找到以后然后将里面的该段代码注释掉。如果用了 Https, 则同时需要注释掉 HTTPS 版本的 ''conf'' 文件。
===Dokuwiki Nginx 安全规则===
该段代码用于防止除 ''conf'' 和 ''data'' 以外的重要文件本下载。
\\
使用:添加以下代码到 ''rewrite'' 模块中:
# Block access to data folders
location ~ /(data|conf|bin|inc)/ {
deny all;
}
# Block access to .htaccess files
location ~ /\.ht {
deny all;
}
===所有 MIMe 类型===
[[https://gist.github.com/AlekseiCherkes/690551fafa3a939c54ed|Link]]
===Dokuwiki 使用===
* 插件的安装:直接到后台的插件管理器中寻找指定的插件下载安装即可。
==常用插件==
* Add New Page:可以直接在没有创建页面的位置直接创建页面,非常方便。
* Code Prettifier:非常好用的代码高亮。
* Edittable :图形化界面的表格创建,比较方便,但有自适应问题。
* Fastwiki :优化 Dokuwiki 的访问速度(预加载)。
* Google Document Viewer :可以直接在 Dokuwiki 中查看 Google 文档。
* MathJax :数学公式插件。
* Pure SVG Insert:使 Dokuwiki 支持 SVG 的显示。
* DokuWiki Upgrade:一键升级 Dokuwiki,必备插件。
* Wrap:很好用的内容排版插件。
===Dokuwiki 相关问题===
==Dokuwiki 上传附件显示 "Failed"==
解决方法:进入服务器的 ''php.ini'' 配置文件,添加或修改以下设置:
always_populate_raw_post_data = -1
==Igor 版本 svg 缩放不正确==
官方 issue 中解释该设置是一个 guard,不应修改。推荐对指定插件进行修改。
将 ''/lib/styles/all.css'' 中 ''svg'' 的
width: 1.2em;
替换为
width: auto;
====服务器通用前端优化====
===Leverage browser caching===
如果使用 Nginx 对 **Dokuwiki** 进行 Leverage browser caching,会导致被缓存的图片无法在媒体管理器以及正文中显示。该问题出现在从 Apache 迁移到 Nginx 的过程中,怀疑是 Nginx 本身对 Dokuwiki 的支持不佳。
**解决方法(过时)**:由于 AMH 的 ''Nginx.conf'' 自带 caching,需要手动去 ''/yourwebdir/vhost/yourweb.conf'' 将如下的缓存规则删除。
解决方法:使用新版本的重写规则,请参见前面。
\\
\\
**Nginx** 版本的通用优化代码如下:
location ~* \.(jpg|jpeg|png|gif|ico|css|js)$ {
expires 365d;
}
location ~* \.(pdf)$ {
expires 30d;
}
====Typecho====
一些 Typecho 的改造 / 使用 问题收集。
===后台 Access Denied===
在 AMH 中开启 ''pathinfo'' 插件的支持即可。
===Typecho 改造指南===
==评论:添加额外样式给管理员==
Typecho 可以针对当前用户是否是管理员来添加额外的样式。一个简单的应用例子如下:
\\
\\
首先我们需要官方帮助文档中的自定义函数。该函数用于判断当前评论用户是否为管理员,通过 ''AuthorId'' 和 ''ownerid'' 是否相等来判断:
authorId) {
if ($comments->authorId == $comments->ownerId) {
$commentClass .= ' comment-by-author'; //如果是文章作者的评论添加 .comment-by-author 样式
} else {
$commentClass .= ' comment-by-user'; //如果是评论作者的添加 .comment-by-user 样式
}
}
$commentLevelClass = $comments->_levels > 0 ? ' comment-child' : ' comment-parent'; //评论层数大于0为子级,否则是父级
?>
/* 自定义评论的代码结构 */
\\
接下来会通过一段函数将增加的样式表打印出来,结果是 ''comment-by-author'' 或者 ''comment-by-user'':
\\
有了这两段函数以后,剩下的工作就很简单了。以我要替换管理员在评论中名字的背景为例。首先将打印出来的字段应用到 HTML 的调用中:
上面的代码直接把 ''$commentClass'',也就是我们要额外附加的样式表加入了 ''comment-author'' 这个样式里。如果是管理员,那么调用的样式表就是 ''.comment-author.comment-by-author'',否则就是 ''.comment-author.comment-by-user''。
\\
\\
最后去 CSS 里添加样式表即可:
.comment-author.comment-by-author {background: #636363;padding: 5px;}
==评论:重写发表评论时间==
Typecho 默认的时间输出格式是 PHP 的格式。如果我们希望将其转换为“发表于多久多久之前” 的格式,可以通过以下的手段来实现:
\\
\\
首先我们需要往 ''function.php'' 中添加一个时间重写函数:
//时间转换输出
function timesince($older_date,$comment_date = false) {
$chunks = array(
array(86400 , 'Day'),
array(3600 , 'Hour'),
array(60 , 'Minute'),
array(1 , 'Second'),
);
$newer_date = time();
$since = abs($newer_date - $older_date);
for ($i = 0, $j = count($chunks); $i < $j; $i++){
$seconds = $chunks[$i][0];
$name = $chunks[$i][1];
if (($count = floor($since / $seconds)) != 0) break;
}
/*如果是中文则不需要 count 的判断,并且也不需要空格*/
if ($count == 1) {
$output = $count.' '.$name.' '.'ago';
}
else {$output = $count.' '.$name.'s'.' '.'ago'; }
return $output;
}
这个函数会获取以前的时间作为参数,并转换成相应的字段,我们只需要拿到 ''comments.php'' 中使用即可。使用方法如下:
created);?>
==评论:回复评论自带@跳转==
首先到 ''function.php'' 中添加如下两个函数:
//获取评论的锚点链接
function get_comment_at($coid)
{
$db = Typecho_Db::get();
$prow = $db->fetchRow($db->select('parent')->from('table.comments')
->where('coid = ? AND status = ?', $coid, 'approved'));
$parent = $prow['parent'];
if ($parent != "0") {
$arow = $db->fetchRow($db->select('author')->from('table.comments')
->where('coid = ? AND status = ?', $parent, 'approved'));
$author = $arow['author'];
$href = '@' . $author . '';
echo $href;
} else {
echo '';
}
}
//输出评论内容
function get_filtered_comment($coid){
$db = Typecho_Db::get();
$rs=$db->fetchRow($db->select('text')->from('table.comments')
->where('coid = ? AND status = ?', $coid, 'approved'));
$content=$rs['text'];
echo $content;
}
?>
\\
再到 ''comments.php'' 中使用如下代码调用即可:
coid)?>
==添加自定义html标签到文章内容==
找到文件夹 ''/var'' 下的文件 ''HyperDown.php'' 第十七行,添加需要使用的标签即可。
===Typecho 升级指南===
//Typecho// 可以通过以下方式来进行升级:
- 下载最新的版本:[[https://github.com/typecho/typecho|Typecho On Github]]
- 删除服务器上三个目录的文件,如果修改了源代码可以使用 //Github// 的对比工具来进行合并。三个目录分别是:''/admin'', ''/var'', 和根目录下的 ''index.php''。
- 上传最新的对应文件即可。
===Typecho URL重写===
==Apache 重写规则==
添加如下代码到 ''.htaccess'' 文件中即可。注意:''RewriteBase'' 后是网站的目录。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php [L,E=PATH_INFO:$1]
===InstantClick===
''instantclick.js'' 是一种ajax无刷新和预加载页面的技术,对于普通博客程序,有着明显的加速作用。''instantclick.js'' ≈ ''pjax'' 加上预加载页面,而且,使用方法也十分的简单。
==安装InstantClick==
下载 [[http://instantclick.io/download|InstantClick]]
\\
\\
在 ''footer.php'' 的 ''