Debian下使用apt-get安装 Nginx + MySQL + PHPMyAdmin 备忘

首先添加必要的apt源,并使用下面的命令使服务器保持最新:

apt-get update
apt-get upgrade

假设服务器没有配置Web服务和MySQL数据库,首先安装Web服务,这里首选Nginx:

apt-get install nginx

其次安装MySQL数据库,尝试使用下面的命令(其间可能需要交互输入密码):

apt-get install mysql-server

接下来简单介绍一下PHP的安装,这里使用FastCGI模式,仍然使用apt-get命令,配置来至 lowendscript ,其中部分配置对于小内存VPS进行了优化,建议按要求修改,例如PHP_FCGI_CHILDREN和PHP_FCGI_MAX_REQUESTS等参数值:

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • php配置
  • nginx
  • mysql
  • Linux
  • debian

解决Django Admin管理界面样式表(CSS Style)丢失问题

配置Django Admin,关于如何启用请参考Django官方文档 《Activate the admin site》 。但是我在配置过程中登录 http://example.com/admin 后台时出现样式表丢失的问题,比如说界面变成了这样:

Django Admin管理界面样式丢失

上网搜索了不少文档,多是Apache环境下的解决方案,我配置的是Nginx服务器,所以根据Apache的解决提示进而摸索办法,最终要解决这个问题我这里总结有3步(假设已经配置好admin登录系统):

Posted in:
  • 网络编程与数据库
  • 计算机应用及维护
  • Unix/Linux/BSD系统
  • Web开发及相关
Tagged
  • python
  • django

Debian环境 Python + Django + Nginx + uWSGI + MySQL 配置备忘

最近尝试把项目迁移到Python环境下,特别新装了一台干净的Debian系统,准备重新配置环境,上网找了一些运行Python Web的环境方案,最后敲定Nginx+uWSGI组合,Nginx用得比较多,熟练些;uWSGI据说性能不错,想尝试一下。

网上大部分教程都是要求到 uWSGI官方网站 下载源码包,然后通过编译的方式安装,比如对于一台新Debian系统,可以通过下面的命令安装:

apt-get update
apt-get upgrade
apt-get install build-essential psmisc
apt-get install python-dev libxml2 libxml2-dev
apt-get install python-setuptools
cd /opt/
wget http://projects.unbit.it/downloads/uwsgi-latest.tar.gz
tar -zxvf uwsgi-latest.tar.gz
mv uwsgi-latest/ uwsgi/
cd uwsgi/
python setup.py install
Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • nginx
  • Linux
  • debian
  • python
  • django
  • uwsgi

收到疑似域名诈骗邮件

今天打开邮箱,看到一封邮件来自[email protected],落款为John Sean,正文为:

Hi We have a customer interested to buy your domain. If you are interested to sell it let me know your asking price We dont know how to contact with you, if you got this email please contact us ASAP Thanks John Sean

随后还附加了一段随机码:CSUNRCHTGBNZKRUIHSLYBTEPKQLPJQOHEBKGBL,我将这封邮件简单翻译一下:

Posted in:
  • 域名主机相关
  • Web开发及相关
Tagged
  • 主机域名
  • 垃圾邮件

解决IE下自定义HTTP错误页太小不显示并导致显示默认友好错误页问题

今天研究起WordPress的评论发布页 wp-comments-post.php ,假如我们提交一个不是期望的评论,比如我们什么都不写就点击提交评论,然后WordPress将交由 wp-comments-post.php 处理,当然这次处理将以失败告终,WordPress将显示一条错误消息,比如:“错误:请填写必填项目(姓名和电子邮件地址)。”。好了,这时如果我们右击查看源代码会找到一段奇怪的字符串:

WordPress wp-comments-post.php源文件
Posted in:
  • 前端开发与用户体验
  • Web开发及相关
Tagged
  • 浏览器兼容
  • ie浏览器
  • HTTP状态

博客基本恢复运行

今天早上的MySQL的崩溃让我下定决心要升级老旧的MySQL,哪知道遇到了一堆麻烦的事情,也让我感到服务器升级前一定要慎重再慎重的重要性。

首先就是MySQL就够我折腾的了,升级到5.5版本,本来以为只需要apt-get install就可以解决的问题,但是出现了杯具的错误,首先是 Unable to set password for the MYSQL root...This may happened because the account already has a password...subprocess installed post-installation script return error exit 。然后mysqld守护进程启动失败!于是想是不是MySQL 5.1没有卸载干净?本来是想直接从5.1升级的,结果死活升级不了,于是使用apt-get dist-upgrade,但是提示需要REMOVE mysql-server,下定决心后按下y回车,然后老旧的MySQL华丽丽的被卸掉了。好了,后来我采取下面两句罗列并删除所有和mysql有关的package:

dpkg --get-selections | grep 'mysql-' | awk '{print $1}'
# purge表示清除配置文件,也就是彻底删除
apt-get purge package1 package2 ...
Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • 网站维护
  • php配置
  • mysql

本站MySQL数据库崩溃正在尝试恢复

MySQL意外崩溃,所有的页面均出现404无法访问的问题,后台无法登录,出现绿色背景以及Updating SEO configuration options in database(猜测是All In One SEO插件问题)。通过 myisamchk -r 检测数据库,并且通过 invoke-rc.d mysql restart 重启数据库服务基本解决问题,可惜后台登录不上出现:“您没有足够的权限访问该页面。”的错误消息。检查WordPress后台登录的数据库表 wp_users 以及 wp_usermeta ,发现其中表 wp_usermeta 提示“'wp_usermeta' is marked as crashed and should be repaired”,看来 wp_usermeta 表损坏了,通过REPAIR TABLE命令处理过,然后后台登录正常。 检查数据,发现丢失了一条评论,应该是Just_fly同学的评论,在此表示抱歉了。 后来翻了一下自动备份文件夹,找到一份几个小时前的备份,立即恢复,丢失的评论也被找到了。

目前还在做扫尾工作,查看了MySQL的所有日志,竟然没有找到任何有效信息,由于这次崩溃导致WordPress出现诡异的找不到数据404错误,而不是连接不到数据库503错误,所以外部监控网站没有能够及时捕获这次故障时间,我是临近中午才发现问题的。好了,看来准备把这个老旧的MySQL数据库升级一下了,之前还考虑这个运行蛮稳定的就不升级了,看来不升级不行哎。

这是第200篇文章,没想到出现这样的问题,也算是个纪念吧,经常备份是个好习惯哦。

Posted in:
  • 我的生活点滴
Tagged
  • 网站维护
  • mysql
  • wordpress

解决PHP加速器eAccelerator导致php-cgi占用内存过多的问题

一台小内存的VPS,总共才128MB保证内存(Guaranteed RAM),最大256MB的突发内存(Burstable RAM),今天调用 free ,发现内存占用达到150MB~170MB,这还了得,长期占用服务商的突发内存也会被K掉的,使用 ps aux 分析当前的进程列表,找到php-cgi这个进程占用了至少50MB~60MB的内存,这个是PHP的FastCGI服务,我已经将其控制在两个进程范围内了,除了master进程,另外一个php-cgi就占用了大量的内存,看来要好好精简一下了。

首先去掉不必要的扩展,一些当前站点并没有使用到的扩展程序,可以省略,这么一去除,感觉内存没下降多少,我又查阅了一下当前加载的扩展找到了eAccelerator,前面我写过一篇文章 《Debian/CentOS VPS安装PHP加速器eAccelerator笔记》 介绍关于eAccelerator,以及如何获取安装等信息。其实我们可以从其源代码包中找到control.php。将这个文件复制到Web服务器目录下,并且通过浏览器执行,得到一些关于eAccelerator的信息,其中一项Total memory标记的是32MB,下面还有个Memory in use标记的是50%左右已经使用,假如这时再浏览新的PHP页面,这个数据还将上升,直到占满Total memory为止。

Posted in:
  • 计算机应用及维护
  • Unix/Linux/BSD系统
Tagged
  • php配置
  • Linux
  • vps

VBA/VBScript裁剪拆分Word文档为多个文件(分解为多个独立页面)

标题可能不是很恰当,准确的来说就是将一个有很多页面的Word文档按照指定的页数分解为多个独立的Word文档。本来想通过复制指定页内容然后再新建Word来实现的,后来发现这样做一是很麻烦,二是格式容易错。最后想到了一个比较笨的办法:复制一份原稿,然后除了要保留的页面外,其余的统统删去,然后下个页面再复制一份,以此反复,直到完成全部的拆分。

对于页面的删除,可以通过先选中这个页面内容,然后再执行 Selection.Delete 方法。这样删除不需要的页面后留下的就是我们需要保留的页面了,这份文档算是完成。

这里有个需要注意的地方,保留Word文档N页中第M页共P页,需要执行两步删除,第一步是删除M页之前的所有页面,第二步是删除M+P页之后的所有页面,然后得到的就是所要的。细节方面就是当执行第一步后,第M页会自动转为第1页(因为前面的都删除了),所以我们接下来执行第二步的时候需要从第1+P页开始,另外如果M=1,说明需要保留从第一页开始,那么第一步可以略去,如果M+P>=总页数,则说明需要保留的包含最后一页,那么第二步就可以略去。

下面提供一份VBScript Class msoWord_SplitPages,其中演示了上面的算法思路,供大家参考:

Posted in:
  • VBScript/JavaScript/Python
  • 系统应用程序开发
Tagged
  • vba
  • word
  • vbscript

WScript/VBScript脚本全兼容打开文件选择对话框(VBS Open File Dialog)

前面有一篇文章 《WScript脚本打开文件夹选择对话框》 向大家介绍如何通过VBS打开文件夹选择对话框,其中用到了Shell.Application,这个组件一般Windows系统都自带,所以在兼容方面不需要我们操心。打开/保存文件对话框我们可能在脚本编程中用得到,本来以为打开文件和打开文件夹一样简单,没想到费了一番周折。

起初使用了UserAccounts.CommonDialog组件,代码如下:

' dir is the initial directory; if no directory is
' specified "Desktop" is used.
' filter is the file type filter; format "File type description|*.ext"
Function GetOpenFileName(dir, filter)
    Dim objDialog
    Set objDialog = WSH.CreateObject("UserAccounts.CommonDialog")
    If VarType(dir) <> vbString Or dir="" Then
        objDialog.InitialDir = _
            CreateObject( "WScript.Shell" ).SpecialFolders( "Desktop" )
    Else
        objDialog.InitialDir = dir
    End If
    
    If VarType(filter) <> vbString Or filter="" Then
        objDialog.Filter = "All files|*.*"
    Else
        objDialog.Filter = filter
    End If
    
    If objDialog.ShowOpen Then
        GetOpenFileName = objDialog.FileName
    Else
        GetOpenFileName = ""
    End If
    Set objDialog = Nothing
End Function

' Test
Dim strFileName
strFileName = GetOpenFileName("C:\","All files|*.*|Microsoft Word|*.doc")
Posted in:
  • VBScript/JavaScript/Python
  • 系统应用程序开发
Tagged
  • wscript
  • vbscript

© Wang Ye / 王 晔. All rights reserved.