mongodb安装、配置、实例

MongoDB 是一个基于分布式文件存储的数据库。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

添加yum源

1
2
3
4
5
6
7
8
vi /etc/yum.repos.d/mongodb-org-3.4.repo
[mongodb-org-3.4]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.4/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.4.asc

安装

1
yum install -y mongodb-org

启动服务,随系统启动

1
2
systemctl start mongod
systemctl enable mongod

安装PHP扩展

1
2
3
4
5
6
7
8
/usr/local/php7/bin/phpize
./configure --with-php-config=/usr/local/php7/bin/php-config
make
make install
vi /usr/local/php7/etc/php.ini
添加
extension=mongodb.so

生成

1
2
3
mongo
>

运行

模拟器运行

1
ionic cordova emulate android

手机运行

1
ionic cordova run android

部署

删除调试插件

1
ionic cordova plugin rm org.apache.cordova.console

生成apk

1
ionic cordova build android --release

生成证书

1
keytool -genkey -v -keystore xiahe.keystore -alias xiahe.keystore -keyalg RSA -keysize 2048 -validity 20000

apk签名

1
jarsigner -verbose -digestalg SHA1 -sigalg SHA256withRSA -keystore xiahe.keystore -signedjar android-release-signed.apk android-release-unsigned.apk xiahe.keystore

zipalign优化已签名apk

1
zipalign -v 4 android-release-signed.apk xiahe-erp.apk

Centos LNMP一键安装包 安装多PHP版本

背景

PHP进入7时代,部分项目未兼容PHP7,所以在原PHP5.4的版本上,新安装PHP7,实现php7和php5共存。

系统环境

Centos7.3
lnmp1.4(php5.4.45+mysql5.7.11)

编译安装PHP7.1.5

取lnmp1.4安装包中的PHP7包

1
2
3
4
5
6
wget -c --progress=bar:force http://cn2.php.net/distributions/php-7.1.5.tar.bz2
tar zxf php-7.1.5.tar.gz
cd php-7.1.5
./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --with-config-file-scan-dir=/usr/local/php7/conf.d --enable-fpm --with-fpm-user=www --with-fpm-group=www --enable-mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-iconv-dir --with-freetype-dir=/usr/local/freetype --with-jpeg-dir --with-png-dir --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-mbstring --enable-intl --enable-pcntl --with-mcrypt --enable-ftp --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --with-gettext --disable-fileinfo --enable-opcache --with-xsl
make ZEND_EXTRA_LIBS='-liconv'
make install

配置PHP7.0.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
\cp php.ini-production /usr/local/php7/etc/php.ini
sed -i 's/post_max_size =.*/post_max_size = 50M/g' /usr/local/php7/etc/php.ini
sed -i 's/upload_max_filesize =.*/upload_max_filesize = 50M/g' /usr/local/php7/etc/php.ini
sed -i 's/;date.timezone =.*/date.timezone = PRC/g' /usr/local/php7/etc/php.ini
sed -i 's/short_open_tag =.*/short_open_tag = On/g' /usr/local/php7/etc/php.ini
sed -i 's/;cgi.fix_pathinfo=.*/cgi.fix_pathinfo=0/g' /usr/local/php7/etc/php.ini
sed -i 's/max_execution_time =.*/max_execution_time = 300/g' /usr/local/php7/etc/php.ini
sed -i 's/disable_functions =.*/disable_functions = passthru,exec,system,chroot,scandir,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server/g' /usr/local/php7/etc/php.ini
mkdir -p /usr/local/php7/conf.d
cat >/usr/local/php7/conf.d/002-zendguardloader.ini<<EOF
[Zend ZendGuard Loader]
;php7 do not support zendguardloader,after support you can uncomment the following line.
;zend_extension=/usr/local/zend/ZendGuardLoader.so
;zend_loader.enable=1
;zend_loader.disable_licensing=0
;zend_loader.obfuscation_level_support=3
;zend_loader.license_path=
EOF
cat >/usr/local/php7/etc/php-fpm.conf<<EOF
[global]
pid = /usr/local/php7/var/run/php-fpm.pid
error_log = /usr/local/php7/var/log/php-fpm.log
log_level = notice
[www]
listen = /tmp/php7-cgi.sock
listen.backlog = -1
listen.allowed_clients = 127.0.0.1
listen.owner = www
listen.group = www
listen.mode = 0666
user = www
group = www
pm = dynamic
pm.max_children = 10
pm.start_servers = 2
pm.min_spare_servers = 1
pm.max_spare_servers = 6
request_terminate_timeout = 100
request_slowlog_timeout = 0
slowlog = var/log/slow7.log
EOF

php7-fpm设为系统服务

1
2
3
4
\cp sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm
chmod +x /etc/init.d/php7-fpm
/etc/init.d/php7-fpm start
chkconfig --add php7-fpm

创建enable-php7.conf脚本

1
2
cp /usr/local/nginx/conf/enable-php.conf /usr/local/nginx/conf/enable-php7.conf
vi /usr/local/nginx/conf/enable-php7.conf


fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_pass unix:/tmp/php7-cgi.sock;

1
2
cp /usr/local/nginx/conf/enable-php-pathinfo.conf /usr/local/nginx/conf/enable-php7-pathinfo.conf
vi /usr/local/nginx/conf/enable-php7-pathinfo.conf


fastcgi_pass unix:/tmp/php-cgi.sock;

fastcgi_pass unix:/tmp/php7-cgi.sock;

修改vhost的conf文件使用PHP7

1
vi /usr/local/nginx/conf/vhost/xxxxxx.conf


include enable-php.conf;

include enable-php7.conf;

修改lnmp脚本(/usr/bin/lnmp)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
PHPFPMPIDFILE=/usr/local/php/var/run/php-fpm.pid
PHP7FPMPIDFILE=/usr/local/php7/var/run/php-fpm.pid
/etc/init.d/php-fpm start
/etc/init.d/php7-fpm start
/etc/init.d/php-fpm stop
/etc/init.d/php7-fpm stop
/etc/init.d/php-fpm reload
/etc/init.d/php7-fpm reload
killall php-fpm
killall php7-fpm
lnmp_status()
{
/etc/init.d/nginx status
if [ -f $PHPFPMPIDFILE ]; then
echo "php-fpm is runing!"
else
echo "php-fpm is stop!"
fi
if [ -f $PHP7FPMPIDFILE ]; then
echo "php7-fpm is runing!"
else
echo "php7-fpm is stop!"
fi
/etc/init.d/mysql status
}

阿里云提示DISCUZ uc.key泄漏导致代码注入漏洞修复

查找

1
2
3
4
foreach($post as $k => $v) {
$data['findpattern'][$k] = $v['findpattern'];
$data['replace'][$k] = $v['replacement'];
}

改成

1
2
3
4
5
6
7
8
9
foreach ($post as $k => $v) {
//dz uc-key修改开始
if (substr($v['findpattern'], 0, 1) != '/' || substr($v['findpattern'], -3) != '/is') {
$v['findpattern'] = '/' . preg_quote($v['findpattern'], '/') . '/is';
}
//end 修改结束
$data['findpattern'][$k] = $v['findpattern'];
$data['replace'][$k] = $v['replacement'];
}

查找

1
$UC_API = $post['UC_API'];

改成

1
2
3
4
5
6
7
8
//$UC_API = $post['UC_API'];
//dz uc-key修改开始
$UC_API = '';
if ($post['UC_API']) {
$UC_API = str_replace(array('\'', '"', '\\', "\0", "\n", "\r"), '', $post['UC_API']);
unset($post['UC_API']);
}
//end修改结束

Cordova热更新

通过使用cordova插件cordova-hot-code-push实现实现iOS与Android端代码『热更新』功能,可不必发布应用市场经平台审核,便可动态更新App源码的目的。

全局安装 cordova-hot-code-push-cli

1
npm install -g cordova-hot-code-push-cli

安装热更新插件

1
cordova plugin add cordova-hot-code-push-plugin

修改 config.xml ,添加

1
2
3
4
<chcp>
<native-interface version="1" />
<config-file url="http://gc.51os.xyz/chcp.json" />
</chcp>

启动 hcp server 服务

在项目根目录生成 .chcpenv 文件。生成文件后停止。

1
cordova-hcp server

修改 .chcpenv

1
2
3
4
{
"content_url": "http://gc.51os.xyz",
"config_url": "http://gc.51os.xyz/chcp.json"
}

在项目根目录中添加模板文件 cordova-hcp.json

1
2
3
4
5
6
7
{
"autogenerated": true,
"content_url": "http://gc.51os.xyz",
"min_native_interface": 1,
"ios_identifier": "https://itunes.apple.com/cn/app/xiahegc",
"update": "now"
}

每次修改完成后,生成

1
cordova-hcp build

上传到 gc.51os.xyz

Cordova项目操作实战

Apache Cordova是一个开源的移动开发框架。允许你用标准的web技术-HTML5,CSS3和JavaScript做跨平台开发。 应用在每个平台的具体执行被封装了起来,并依靠符合标准的API绑定去访问每个设备的功能,比如说:传感器、数据、网络状态等。

创建应用程序

1
cordova create gc_app me.xiahe.gc yun

gc_app 是创建应用程序的目录名称。
me.xiahe.gc 是默认的反向域值。
yun 是您应用的标题。

添加 .gitignore 文件

1
2
3
4
5
6
# Specifies intentionally untracked files to ignore when using Git
# http://git-scm.com/docs/gitignore
node_modules/
platforms/
plugins/

初始化Git仓库

1
2
git init
git remote add origin http://git.51os.xyz/master/gc_app.git

添加android和ios平台,并确保他们保存在了config.xml中

1
2
cordova platform add android --save
cordova platform add ios --save

添加android和ios平台,并确保他们保存在了config.xml中

1
2
cordova platform add android --save
cordova platform add ios --save

添加插件

1
cordova build android

运行

模拟器运行

1
cordova emulate android

手机运行

1
cordova run android

部署

删除调试插件

1
cordova plugin rm org.apache.cordova.console

生成apk

1
cordova build android --release

生成证书

1
keytool -genkey -v -keystore xiahe.keystore -alias xiahe.keystore -keyalg RSA -keysize 2048 -validity 20000

apk签名

1
jarsigner -verbose -digestalg SHA1 -sigalg SHA256withRSA -keystore xiahe.keystore -signedjar android-release-signed.apk android-release-unsigned.apk xiahe.keystore

zipalign优化已签名apk

1
zipalign -v 4 android-release-signed.apk xiahe-erp.apk

ionic常用操作

ionic是一个用来开发混合手机应用的,开源的,免费的代码库。可以优化html、css和js的性能,构建高效的应用程序,而且还可以用于构建Sass和AngularJS的优化。

nodejs使用淘宝镜像

1
npm config set registry https://registry.npm.taobao.org

安装

1
npm install -g ionic cordova

创建项目

1
2
ionic start testa blank --type=ionic1
ionic start testb blank

添加平台

1
2
ionic cordova platform add android
ionic cordova platform add ios

生成

1
ionic cordova build android

运行

模拟器运行

1
ionic cordova emulate android

手机运行

1
ionic cordova run android

部署

删除调试插件

1
ionic cordova plugin rm org.apache.cordova.console

生成apk

1
ionic cordova build android --release

生成证书

1
keytool -genkey -v -keystore xiahe.keystore -alias xiahe.keystore -keyalg RSA -keysize 2048 -validity 20000

apk签名

1
jarsigner -verbose -digestalg SHA1 -sigalg SHA256withRSA -keystore xiahe.keystore -signedjar android-release-signed.apk android-release-unsigned.apk xiahe.keystore

zipalign优化已签名apk

1
zipalign -v 4 android-release-signed.apk xiahe-erp.apk

跨域资源共享 CORS

CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。
它允许浏览器向跨域服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同域使用的限制。

简介

CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。
整个CORS通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同域的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨域,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨域通信。实现非常简单,只需由服务器发送一个响应头即可。

PHP

1
header("Access-Control-Allow-Origin: *");

apache

1.修改httpd.conf,启用头信息自定义模块

1
LoadModule headers_module modules/mod_headers.so

2.修改虚拟主机配置,添加头信息到Directory内

1
Header set Access-Control-Allow-Origin *

nginx

1
2
3
4
location /
{
add_header 'Access-Control-Allow-Origin' '*';
}

hexo部署博客到github及云服务器

工具

本地端(windows工作平台)

  • git
  • node.js

    云端(Centos阿里云)

  • gogs
  • nginx

安装hexo

1
npm install hexo-cli -g

hexo初始化及配置

初始化项目文件夹blog

1
2
3
hexo init blog
cd blog
npm install

安装相应插件

1
2
3
4
npm install hexo-deployer-git --save
npm install hexo-generator-feed --save
npm install hexo-generator-search --save
npm install hexo-generator-sitemap --save

新建标签云、关于我、404页面

1
2
3
hexo new page tags
hexo new page about
hexo new page 404

下载相应主题保存到/themes/文件夹中

修改站点和主题配置文件_config.yml

本地开启服务,查看博客(默认端口4000)

1
hexo s

本地配置SSH keys

检查是否已经存在SSH keys

在Git Bash输入

1
ls -al ~/.ssh

创建SSH keys(已存在略过)

1
ssh-keygen -t rsa -C "your_email@example.com"

复制公钥内容

1
clip < ~/.ssh/id_rsa.pub

github上部署

创建项目

登录github,创建 用户名.github.io 的Public项目。

配置SSH密钥

把本地的公钥内容粘贴到Key框内

测试SSH密钥登录

1
ssh -T git@github.com

如果通过,返回

1
Hi xxx! You've successfully authenticated, but GitHub does not provide shell access.

云服务器上部署

创建项目

登录gogs,创建项目。

设置项目的Git钩子

设置Git钩子post-receive为(/home/wwwroot/blog为博客根目录)

1
2
#!/bin/bash
git --work-tree=/home/wwwroot/blog checkout -f

设置git用户对博客根目录权限

1
chown -R git:git /home/wwwroot/blog

配置SSH密钥

把本地的公钥内容粘贴到密钥内容框内

测试SSH密钥登录

1
ssh -T git@git.xxxx.com

如果通过,返回

1
Hi there, You've successfully authenticated, but Gogs does not provide shell access.

本地部署

修改站点配置文件_config.yml

1
2
3
4
5
deploy:
type: git
repo:
github: git@github.com:xxx/xxx.github.io.git
gogs: git@git.xxxx.com:xxx/blog.git

执行生成及部署命令

1
hexo d -g

开源网盘云存储 Seafile

Seafile 是一款安全、高性能的开源网盘(云存储)软件。Seafile 提供了主流网盘(云盘)产品所具有的功能,包括文件同步、文件共享等。在此基础上,Seafile 还提供了高级的安全保护功能以及群组协作功能。由于 Seafile 是开源的,你可以把它部署在私有云的环境中,作为私有的企业网盘。Seafile 支持 Mac、Linux、Windows 三个桌面平台,支持 Android 和 iOS 两个移动平台。

Seafile 是由国内团队开发的国际型项目,目前已有50万左右的用户,以欧洲用户为多。自发布以来,Seafile 一直保持开放、国际化、高质量的宗旨,受到国内外大型机构的信赖。目前主要的大型客户包括卡巴斯基、中国平安,以及欧美多家知名大学和科研机构。

你可以把 Seafile 想象成是面向团队的开源Dropbox。

Github:https://github.com/haiwen/seafile

SSH远程会话管理 - screen

背景

SSH远程登录到Linux服务器,经常运行一些需要很长时间才能完成的任务。如果网络突然断开,或者其他情况导致不得不与远程SSH服务器链接断开,远程执行的命令会被杀掉,一切半途而废了。
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。

常用方法

安装screen

1
yum install screen

创建会话

创建名为test的会话

1
screen -S test

暂时离开,保留会话

当需要临时离开时(会话中的程序不会关闭,仍在运行)可以用快捷键Ctrl+a d(即按住Ctrl,依次再按a,d)

查看会话列表

1
screen -ls

恢复会话

恢复到名为test的会话

1
screen -r test

关闭会话

在当前会话中执行exit退出

远程演示

观众屏幕上就会出现和演示者同步

1
screen -x test