月度归档:2016年07月

Flask-User跳转的问题

Flask的模板索引是以第一个匹配为准的,这条规则乍一看没什么感觉,今天就被震撼到了。起因是昨天把jade模板迁移回了jinja,实在没办法,flask和jinja是难舍难分。然后发现有个地址的页面莫名其妙的到了myapp的空页面,汗,仔细一看原来是flask-user内置的页面,差点以为来黑客了。开始以为是处理逻辑哪里的问题或者是flask-user侵入太厉害,调试了好久,最后从模板找原因,不找不知道,一搜碰到类似的问题的人太多了,全是这个匹配规则惹的祸。翻阅了flask-user的文档,原来它内置了一个base.html跟我的冲突,优先使用了那个模板,无语了。类似问题也很好解决,要么文件名唯一要么指定模板时加上上级目录就好。

最快的找到你的树莓派IP

如果确定只有一块树莓派在你的局域网中,那么肯定是ping最快了

ping raspberrypi

有好几块那就不一定ping的到自己想要的了,所以试下来最快的莫过于安装了nmap和awk的类unix下了。这里用了树莓派默认的地址所以非常fast

sudo nmap -sP 192.168.1.0/24 | awk '/^Nmap/{ip=$NF}/B8:27:EB/{print ip}'

如果上面的都还不能满足你的需要或者找不到可以试试Adafruit出的find my raspberry pi ,会比较慢因为会扫描整个网络。

 

Chocolatey让windows的powershell 更像一个unix shell

logo-choco

官网:https://chocolatey.org/

启动时最好以管理员身份启动。

安装包的命令:choco install 包名称 -y

卸载包的命令:choco uninstall 包名称

很好的包管理工具,就是可能用的人不多,开发维护也不是很积极,很多库都非常旧,又因为本身只是个包管理器,所以不能解决一些程序本身在win下的兼容问题,更多的只是省去了去官方下载这么一个过程。当然懒人必备。国内很多包下载比较慢,最好在vpn环境下用。

Nginx和php-fpm配置WordPress

在Ubuntu14.04下配置,debian系应该都差不多。

apt-get update

apt-get install -y nginx mysql-server php5-mysql php5-fpm

上面安装了所需要的软件,可能需要输入两次数据库的密码。

nano /etc/php5/fpm/php.ini

cgi.fix_pathinfo=0

在php.ini中找到上面的变量改为0,增强相对地址的安全性。

wget http://wordpress.org/latest.tar.gz

tar -xzvf latest.tar.gz

第一行下载最新版本的wp,然后解压缩,假设是在home目录下。

mysql -u root -p

CREATE DATABASE wordpress;
Query OK, 1 row affected (0.00 sec)

CREATE USER wordpressuser@localhost;
Query OK, 0 rows affected (0.00 sec)

SET PASSWORD FOR wordpressuser@localhost= PASSWORD(“password”);
Query OK, 0 rows affected (0.00 sec)

GRANT ALL PRIVILEGES ON wordpress.* TO wordpressuser@localhost IDENTIFIED BY ‘password’;
Query OK, 0 rows affected (0.00 sec)

FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.00 sec)

exit

上面的输入需要根据自己的需要修改几个变量,[wordpress]指的是数据库名,[wrodpressuser]指的是访问数据库的用户名,全小写的[password]指的是访问数据库的密码。

cp ~/wordpress/wp-config-sample.php ~/wordpress/wp-config.php

sudo nano ~/wordpress/wp-config.php

// ** MySQL settings – You can get this info from your web host ** //
/** The name of the database for WordPress */
define(‘DB_NAME’, ‘wordpress’);

/** MySQL database username */
define(‘DB_USER’, ‘wordpressuser’);

/** MySQL database password */
define(‘DB_PASSWORD’, ‘password’);

复制一份示例配置文件到网站目录,并根据之前的数据库设置修改。

sudo mkdir -p /var/www

sudo cp -r ~/wordpress/* /var/www

cd /var/www/

sudo chown www-data:www-data * -R
sudo usermod -a -G www-data username

 

把网站文件复制到www目录下并修改为www-data权限方便网站的运行。

sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/wordpress

sudo nano /etc/nginx/sites-available/wordpress

server {
listen 80;
root /var/www;
index index.php index.html index.htm;

server_name 192.34.59.214;

location / {
try_files $uri $uri/ /index.php?q=$uri&$args;
}

error_page 404 /404.html;

error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/www;
}

# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
location ~ \.php$ {
try_files $uri =404;
#fastcgi_pass 127.0.0.1:9000;
# With php5-fpm:
fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_index index.php;
include fastcgi_params;
}

}

创建网站的配置文件,并写入配置,上面仅修改servername处把ip修改为域名即可。

sudo ln -s /etc/nginx/sites-available/wordpress /etc/nginx/sites-enabled/wordpress

sudo rm /etc/nginx/sites-enabled/default

sudo service nginx restart

sudo service php5-fpm restart

让服务开始工作,并删除nginx的示例网站。

OpenVZ装不了Docker

还是“便宜没好货”这个道理,因为openvz虚拟时容器系统和母系统公用内核,提高利用率的同时业限制了内核的版本,都是2.6.8,啊啊啊啊啊。

可以装apt-get install virt-what -y

运行virt-what查看虚拟化的方式。

Python 打包Package还有开发者模式 Develop Mod

Python打包涉及的东西很多比如

setuptools, easy_install, distribute, pip

为什么有这么多个就涉及到python的打包历史,这里假设已经学会python的基础编程,常用pip装一些包的经历。接下来希望使用pip来完成这次的打包。首先必须熟悉一个文件:

setup.py

它是python众多特殊的文件之一,用来形容当前的包比如它的内容可能如下:

from setuptools import find_packages, setup
setup(name="foo",
      version="0.1",
      description="A foo utility",
      author="Ewen Cheslack-Postava",
      author_email='me@ewencp.org',
      platforms=["any"],  # or more specific, e.g. "win32", "cygwin", "osx"
      license="BSD",
      url="http://github.com/ewencp/foo",
      packages=find_packages(),
      )

虽然很多但是最重要的是packages,它表述了此包的依赖项,类似pip中requirements.txt的作用。假如新建了一个包,咱既要让它工作又要让它方便编辑后的修改立刻生效,这里就需要说道开发者模式,原理大概类似把当前的源码文件夹指向site-pacakges,所以修改能立即被应用。

python setup.py develop

开发者模式安装,当然也可以卸载

python setup.py develop --uninstall

开发完后打包分发

python setup.py sdist

让脚本遇错停止

对脚本的认识一直很浅,最近真的用到了发现不会再错误时终止,很郁闷。原来脚本有很多环境参数可以设置。

比如Use set -e写在脚本的开头可以让当前脚本在第一次错误时终止。

让 WordPress & Nginx 拥抱Docker

xtimthumb.php,qsrc=,hwww.kaushalkishore.com,_wp-content,_uploads,_2015,_01,_Docker-Wordpress.png,aw=460,ah=180,azc=1,aq=100.pagespeed.ic.e5gC7lBLAY

Docker真是个让人开心的东西,它把所有变化的配置文件和日志集中在一起,使得迁移、升级等管理变得简单多了,让我们solo一族省下大把时间撸啊撸。

WP最早是跑在apache下的,一直用apache,后来docker的时候让我的小flask程序试着在nginx上走,发现容器和http管理分开是个很先进的理念。当时还不知道怎么用nginx托管php,所以还是用的php-apache镜像,我的天,大家都知道云服务器默认安装LAMP+wp后都是龟速,特别是小网站如果有一段静默期后再来的那个肯定就倒霉了,要等好久,好的用php-apache后不仅仅慢,连好多功能都莫名其妙的出问题,最严重的是更改了固定连接的生成方式后就无法工作,我去。因为刚用docker和nginx只好妥协先搁置了。当然docker作为容器肯定是会比原生的慢在理论上,但是我宁可牺牲这部分性能也好省下我自己的时间去享受生活。

两天前实在忍无可忍,因为网站的监控总是会提醒我站点访问不了或者特别慢,实在不能无视短信和邮件提醒了,下决心好好研究。

庆幸的是我的gg反代工作比较稳定,wp给出了很详细的配置,nginx配置顺利搞定,php镜像这次我选的是php:5.6-fpm,fpm是和nginx配合最多的php容器。

研究和学习很花时间但是做起来就快了,这里有一个小问题,docker包裹后页面文件的位置和实际位置是不一致的,最大的后果就是无法使用自动更新,懒人是不允许这种事情发生的。解决办法也很简单,就是容器里映射时把位置做成一样的就好了比如: /opt/wp:/opt/wp即可。

WordPress 也可以自动修复数据库

Repair-Your-QuickBooks-Installation

好久没写了,不是懒,因为切换到docker后发现一切管理变得简单,上次折腾wp也迁移过去,结果发现不仅占用资源还很慢,连文章都访问不了了,哭~~

迁移的时候插件特别不方便,扩展有时候维护不好也是很头疼的,好在现在搞完了只留下了精华。

之前wp有一半的时间都在折腾,就是一直不知道还有个自动修复的功能,所以总是担心数据库结构弄乱了,或者插件导致的各种问题怎么办。这次在修复时无意中浏览到/wp-admin/maint/reapire.php是个数据库修复页面,哇塞,正好解决这个问题。一般来说只要保存好数据库和上传的文件,程序文件是很稳定的,大不了再下载一份。

页面地址:http://jinzhao.me/wp-admin/maint/repare.php

当然在访问前需要在config.php加上“define(‘WP_ALLOW_REPAIR’, true);”否则会报404。