Linux网站搭建手册

2013.08.08/2016.08.18发布于笔记暂无评论/目录

本手册的内容主要包括需要安装的软件及其配置,和常见问题及其解决方案。

  • OS : debian6 squeeze
  • Php : php5
  • Wiki : dokuwiki
  • CMS : wordpress3
  • Server: nginx 1.2.4
  • DB : mysql 5.1
  • DB-UI : phpmyadmin

debian5 lenny

有些vps服务商(比如diahosting)只支持debian5,下面是一些常见的问题和升级到debian6的步骤。

软件源问题

如果在使用apt-get update命令的时候出现404错误,可能是因为debian5的软件仓库已被转移到archive.debian.org,而默认的软件源列表依然使用ftp.debian.org。因此正常使用之前需要先修改/etc/apt/sources.list,可参考下面的软件源列表。

# debian5 lenny

deb http://archive.debian.org/debian/ lenny main contrib non-free
deb-src http://archive.debian.org/debian/ lenny main contrib non-free

deb http://archive.debian.org/debian-security lenny/updates main contrib non-free
deb-src http://archive.debian.org/debian-security lenny/updates main contrib non-free

deb http://archive.debian.org/debian-volatile lenny/volatile main contrib non-free
deb-src http://archive.debian.org/debian-volatile lenny/volatile main contrib non-free

修改sources.list之后需要安装archive.debian.org的key。

apt-get install debian-archive-keyring

最后,运行apt-get update更新列表。

升级到debian6

debian支持无缝升级,因此从debian5升级到debian6很方便。按照这里的教程执行相关的步骤即可。

修改本机的hostname

hostname保存于/etc/hostname,修改后运行hostname -F /etc/hostname设置域名。

更新软件源

将软件源列表修改为debian6的软件源,可参考下面的sources.list文件。

# debian6 squeeze

deb http://ftp.debian.org/debian/ squeeze main
deb-src http://ftp.debian.org/debian/ squeeze main

deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main

# dotdeb key: http://www.dotdeb.org/dotdeb.gpg

deb http://packages.dotdeb.org stable all
deb-src http://packages.dotdeb.org stable all

# varnish

# deb http://repo.varnish-cache.org/debian/ squeeze varnish-3.0

修改sources.list后记得运行apt-get update更新软件列表。

开始升级

到这里,升级前的准备工作基本都已完成。如果是通过ssh远程连接到服务器进行升级的话,为了防止网络异常等问题导致升级失败,可以使用screen辅助升级,screen可以保证在ssh断开的情况下继续在服务器上运行升级程序,针对screen的详细介绍可参考这里。 首先使用apt-get install screen安装screen程序,然后运行screen -S debian-upgrade开启一个名为debian-upgrade的screen会话。之后即可运行apt-get dist-upgrade升级系统。升级期间ssh如果断开,则重新连接后运行screen -r debian-upgrade便可恢复到之前的screen会话。

debian6 squeeze

常用软件

常用软件列表可参考这里

Oracle JDK

命令行下载需要设置一个头,例如:

wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u51-b16/jdk-8u51-linux-x64.tar.gz

邮件设置

exim4 安装和配置

安装exim4。 apt-get install exim4 参考这篇文章配置exim4。

dpkg-reconfigure exim4-config

第一个页面选择internet site,之后的默认即可。这些配置会保存在/etc/exim4/update-exim4.conf.conf里,以后也可以直接修改这个文件,不过修改后记得运行下update-exim4.conf命令,更新配置。

重启exim4

service exim4 restart

修改配置文件以允许发送超过50M的文件。在/etc/exim4/update-exim4.conf.conf的末尾添加如下一行。

MESSAGE_SIZE_LIMIT=1000m

然后运行update-exim4.conf更新配置文件即可。需要注意,如果存在/etc/exim4/exim4.conf,将以该配置为准。

mutt安装和使用

安装mutt apt-get install mutt

设置mutt,mutt的默认配置文件在~/.muttrc,如果不存在,则从例子里拷贝并修改之,详细的配置说明可参考mutt的相关文档和archlinux wiki的mutt

cp /usr/share/doc/mutt/examples/sample.muttrc.gz ~
gzip -d ~/sample.muttrc.gz
mv ~/sample.muttrc ~/.muttrc

最好在~/.muttrc里添加以下配置:

set from = 'your-name <your-name@your-domain>' # 设置发件人地址
set use_envelope_from = yes                    # 设置envelope_from为发件人地址

在mutt里配置return_path一般没用,因为exim默认会重写return_path。

下面的命令将发送一份邮件给a@hotmail.com和a@qq.com,邮件的发件人是'bob bob@domain.com',主题是host backup,邮件内容是host backup on wishome.name,附件是file_a。注意不要漏掉命令中的'--',在-a选项后添加邮件地址时这是必须的。

echo 'host backup from wishome.name' | \
    mutt -e 'send-hook . \"my_hdr From: bob <bob@domain.com>\"' \
    -a 'file_a' \
    -s 'host backup' \
    -- a@hotmail.com a@qq.com

常用系统配置

  1. 设置常用编辑器。

     update-alternatives --config editor
    

安装和配置php

FastCgi

PHP-FPM (FastCGI Process Manager)是一种常用的fastcgi的实现方式。使用如下命令安装: apt-get install php5-fpm{bash} 日后使用service php5-fpm start/stop/restart进行管理即可。

另外,若不想使用php-fpm,可参考这里的教程自己编写fastcgi的实现。

安装和配置nginx

安装nginx

为了安装最新的nginx,在软件源/etc/apt/sources.list中添加以下两条记录

deb http://nginx.org/packages/debian/ squeeze nginx
deb-src http://nginx.org/packages/debian/ squeeze nginx

然后,获取nginx源的key并添加到apt的key列表中,记得更新软件源列表。

wget http://nginx.org/keys/nginx_signing.key -O - | apt-key add -
apt-get update
apt-get install nginx

dokuwiki rewrite配置

已测试nginx版本: 1.2.4, 1.2.5

为了让dokuwiki支持类似domain.com/wiki/syntax的简洁url,需要分两步进行设置。

dokuwiki设置

进入dokuwiki配置界面,并定位到高级设置。将userewrite修改为.htaccess

服务器rewrite设置

如果经过以下设置后重写依然失败,可以尝试清空浏览器缓存和dokuwiki的缓存rm -Rf %dokuwiki_home%/data/cache/*后再重试。

nginx1.2.4设置

参考https://www.dokuwiki.org/rewrite,为nginx添加重写规则,这里修改的文件是/etc/nginx/conf.d/default.conf。我的dokuwiki主目录位于/var/www/kb,使用mawenbao.com/wiki/访问wiki, 相关设置如下所示。

root /var/www;
# dokuwiki

location /kb {
    index doku.php;
    try_files $uri $uri/ @dokuwiki;
}

location @dokuwiki {
    rewrite ^/kb/_media/(.*) /kb/lib/exe/fetch.php?media=$1 last;
    rewrite ^/kb/_detail/(.*) /kb/lib/exe/detail.php?media=$1 last;
    rewrite ^/kb/_export/([^/]+)/(.*) /kb/doku.php?do=export_$1&id=$2 last;
    rewrite ^/kb/(.*) /kb/doku.php?id=$1 last;
}

location ~ /(data|conf|bin|inc)/ {
    deny all;
}

设置完成后运行service nginx restart重启nginx服务器即可。

该重写规则完全参考了https://www.dokuwiki.org/rewrite中的For NGINX 0.7.65 or later版本,只是根据dokuwiki的实际所在位置,在规则前添加/kb目录前缀。如果出现no input files specialfied错误,则表明php-fastcgi无法找到文件,尝试修改规则的目录前缀。如果设置无效,请尝试清空浏览器缓存和dokuwiki的缓存后再重试。

倘若使用wiki.mawenbao.com访问dokuwiki, 应当使用以下重写规则:

location / {
    index doku.php;
    try_files $uri $uri/ @dokuwiki;
}

location @dokuwiki {
    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 last;
}

location ~ /(data|conf|bin|inc)/ {
    deny all;
}

apache2.2.16设置

首先运行a2enmod rewrite启用rewrite模块。为了允许使用.htaccess文件,修改/etc/apache2/sites-enabled/000default中相关Directory的AllowOverride属性为AllowOverride All。如下即可。

DocumentRoot /var/www
`<Directory /var/www/>`
    AllowOverride All
    ...

设置好后运行service apache2 restart重启apache服务器。 之后进入dokuwiki的主目录,将.htaccess.dist拷贝为.htaccess文件,并去掉以下各行前的注释符#

RewriteEngine on
RewriteRule ^_media/(.*)              lib/exe/fetch.php?media=$1  [QSA,L]
RewriteRule ^_detail/(.*)             lib/exe/detail.php?media=$1  [QSA,L]
RewriteRule ^_export/([^/]+)/(.*)     doku.php?do=export_$1&id=$2  [QSA,L]
RewriteRule ^$                        doku.php  [L]
RewriteCond %{REQUEST_FILENAME}       !-f
RewriteCond %{REQUEST_FILENAME}       !-d
RewriteRule (.*)                      doku.php?id=$1  [QSA,L]
RewriteRule ^index.php$               doku.php

如果以上设置无效,请尝试清空浏览器缓存和dokuwiki的缓存。

phpmyadmin

Sohusin问题

当使用apache2服务器并安装了Suhosin模块时,使用phpmyadmin时可能会在页面下方看到类似链接表的额外特性尚未激活。要查出原因,请点击此处。Server running with Suhosin. Please refer to documentation for possible issues的错误提示。 参考这里,我的解决方案分为如下两步。

为phpmyadmin禁用Suhosin

修改php.ini,添加以下项。假设phpmyadmin安装于/usr/share/phpmyadmin。

[PATH=/usr/share/phpmyadmin]
suhosin.simulation = On

关闭Suhosin警告

修改/etc/phpmyadmin/config.inc.php,添加如下项。

$cfg['SuhosinDisableWarning']='true';

备份设置

使用python脚本进行备份和恢复,可以通过配置文件自定义备份选项。备份后的数据可以发送到多个邮件地址,在邮件服务器上设置邮件收信规则即可自动管理数据备份。

计划任务cron

推荐阅读:

  1. man crontab
  2. man cron
  3. Cron Howto
  4. Crontab examples

下面是我的计划任务,使用这个备份脚本在每天凌晨备份一下dokuwiki的数据和wordpress的数据库,备份的数据都会被发送到邮箱里。

00 01 * * * /root/bin/host-admin/host-admin.py -c /root/bin/host-admin/daily-backup.ini -b

需要注意的是:

  1. /etc/crontab是系统cron任务,不管怎样一定会执行。使用crontab命令管理的是用户cron任务,不可将二者混淆。
    • crontab /path/to/mycrontab: 配置当前用户的cron任务
    • crontab -l: 列出当前用户的cron任务
    • crontab -r: 清空当前用户的cron任务(不会影响系统cron任务)
  2. 如果使用/etc/cron.*来放置任务脚本,脚本名(或软链接名)中不能包含点号.,否则任务将无法执行且没有任何提示信息,详细信息可参考Ubuntu CronHowto wiki

阅读资料

#install#linux_server#教程

评论