为Ubuntu新创建用户创建默认.bashrc并自动加载

首先,su – 到新创建的用户

拷贝默认的.bashrc过来

cp /etc/skel/.bashrc ~/

然后创建.profile文件

vi ~/.profile

粘贴下面的内容

# ~/.profile: executed by Bourne-compatible login shells.

if [ "$BASH" ]; then
  if [ -f ~/.bashrc ]; then
    . ~/.bashrc
  fi
fi

mesg n

想立即生效,执行下面命令

source ~/.profile

 

解决中国大陆在更新Chrome 显示Flash过期的问题

前几日,我把Chrome更新到了54.0.2840.71版本,更新后发现所有含有Flash的站点均被提示Flash版本过期(Shockwave flash 23.0.0.166)。而此时Chrome已经为最新版本,无法通过升级Chrome的方式来升级Flash,而由于墙的原因,按照官方指南,到chrome://components/中点击“检查是否有更新”并没有反应(其实我已经全局用ss翻墙了,但是不知道为什么依然没有作用)。

后来找到的解决方案如下:

到下面的地址下载最新版本的PPAPI类型的Flash插件并手动安装

 

第 4 步:从 Adobe 的网站安装 Flash Player

  1. 在计算机上打开 Chrome。
  2. 转至 https://get.adobe.com/cn/flashplayer/otherversions/
  3. 在“第 1 步”下方,选择计算机的操作系统。
  4. 在“第 2 步”下方,选择列有“PPAPI”的选项。
  5. 点击立即下载,然后按照相应步骤安装 Adobe Flash Player。

安装完成后,重启Chrome。打开chrome://plugins/,发现Chrome已经自动识别最新版本

qq%e6%88%aa%e5%9b%be20161025115813

新版本Chrome已经可以自动识别我们手动安装的插件。如果你还想把Flash文件拷贝到Chrome中(以下环境为64位系统安装64位Chrome),关闭Chrome,打开运行,输入

%appdata%\..\Local\Google\Chrome\User Data\PepperFlash

打开后,按照上图的Flash版本,新建一个文件夹,比如这里是23.0.0.185,。然后把旧的文件夹删除。将C:\Windows\System32\Macromed\Flash目录里的manifest.json 和 pepflashplayer64_23_0_0_185.dll文件复制到你新建的那个目录里面,然后把pepflashplayer64_23_0_0_185.dll重命名为pepflashplayer.dll

不过,如果你是32位系统,用的32位Chrome,就到 C:\Windows\System32\Macromed\Flash 目录下找到 manifest.json 和 pepflashplayer32_23_0_0_185.dll 这样俩文件。如果你是64位系统,用的32位Chrome,就到 C:\Windows\SysWOW64\Macromed\Flash 目录下找到 manifest.json 和 pepflashplayer32_23_0_0_185.dll 这样俩文件。不要忘记对应dll改名为pepflashplayer.dll

复制完成后你就可以卸载我们刚才安装的Flash程序了

Ubuntu 编译安装shadowsocks-libev

编译安装shadowsocks-libev

shadowsocks-libev现在的默认分支为rm,clone的时候需要指定分支为master

git clone -b master https://github.com/shadowsocks/shadowsocks-libev.git
apt-get install build-essential autoconf libtool libssl-dev libpcre3 libpcre3-dev
./configure --disable-documentation && make
make install

当作为客户端使用时的配置文件

{
    "server":"服务器ip",
    "server_port":服务器端口, 
    "local_address":"127.0.0.1",
    "local_port":1080,
    "password":"密码",
    "timeout":300,
    "method":"chacha20",
    "fast_open":false,
    "workers":1
}

在Command Line Tools中使用ss代理

安装proxychains

apt-get install proxychains

编辑文件~/.proxychains/proxychains.conf

复制粘贴下面的内容

strict_chain
proxy_dns 
remote_dns_subnet 224
tcp_read_time_out 15000
tcp_connect_time_out 8000
localnet 127.0.0.0/255.0.0.0
quiet_mode

[ProxyList]
socks5  127.0.0.1 1080

使用方法

proxychains curl https://www.google.com
proxychains bash

 

Ubuntu通过gitolite快速部署git server并开启master分支网站代码自动部署

安装git和gitolite

首先,通过下面的命令安装git和gitolite

apt-get install git-core
apt-get install gitolite

添加git用户组

adduser --system --group --shell /bin/bash --disabled-password git

配置密钥

接下来在本地机器生成ssh密钥,使用下面的命令

ssh-keygen -t rsa -C "[email protected]"

当然,如果你想为你的gitolite分配单独的密钥,可以使用下面的命令(生成名为git-admin的密钥)

ssh-keygen -C "[email protected]" -f ~/.ssh/git-admin

如果你使用了单独分配的密钥,你需要配置你的git在连接指定域名时使用不同的密钥,比如我们这里gitolite的管理域名是admin.xxx.com 。我们在刚才的.ssh文件夹新建config 文件(没有扩展名),内容如下

Host admin.xxx.com
	IdentityFile ~/.ssh/git-admin

这样就可以在连接admin.xxx.com的时候使用git-admin这组密钥了

初始化gitolite

下一步,将你的ssh公钥上传到服务器的某个位置,比如/tmp/git-admin.pub

然后切换到git用户,使用这个公钥初始化gitolite

su - git 
gl-setup /tmp/git-admin.pub

然后在持有私钥的机器管理gitolite即可,下面是clone命令,注意修改ip地址

git clone [email protected]_server_IP_address:gitolite-admin

关于gitolite的官方文档在这里:http://gitolite.com/gitolite/gitolite.html

自动部署

然后关于配置自动部署,首先我需要部署的网站目录权限为www-data:www-data

我把git用户添加到了www-data组中,通过后面权限设置为770保证网站和git都有足够的权限操作文件。使用下面的命令

usermod -a -G www-data git

然后网站目录,比如创建/home/nginx/xxx ,我们要把这个目录的用户组改成www-data并给予770权限,这样以后我们的git用户才能操作

然后我们切换到git用户,在/home/nginx/xxx 目录克隆本地库,使用下面的命令。注意clone后面最后有一个参数.

su - git
git clone ~/repositories/xxx.git .

这样网站目录就初始化完成了,我们继续下面的操作(还是git用户的身份)

钩子文件创建在项目库的hooks文件夹~/repositories/xxx.git/hooks ,新建post-receive 文件,复制粘贴下面的内容,最后别忘了给予本脚本执行权限。就可以退出git用户身份了

#!/bin/bash

while read oldrev newrev ref
do
	branch=`echo $ref | cut -d/ -f3`
	echo "--- Current branch is : "$branch	
	if [ "master" == "$branch" ]; then
		unset GIT_DIR
		NowPath=`pwd`
		echo "--- Now path is :"$NowPath
		DeployPath="/home/nginx/xxx"
		echo "--- Deploy path is :"$DeployPath
		cd $DeployPath
		echo "--- Go to deploy path"
		git add -A && git fetch origin && git reset --hard origin/master
		chmod -f -R 770 *
		chown -f -R git:www-data *
		echo "--- Deploy done"
		cd $NowPath
		echo "--- Fine"
	fi
done
exit 0

解释一下:

首先我们循环读取所有push的请求,当发现是push到master(也就是我们的部署分支)时,触发部署脚本,首先要清楚GIT_DIR环境变量,这样才能切换工作目录。然后我们切换到nginx的网站目录,使用git add -A && git fetch origin && git reset –hard origin/master 强制清除本地变化并更新到远程master分支。如果有网站自动生成的文件(比如用户上传的附件目录)不想被清空的,别忘了要写在.gitignore 文件里。当然网站生成的文件请确保权限在770以上,否则可能会导致git无权操作。在更新完远程master分支的代码后,更新文件权限为770,并将所有者改成www-data组(chmod使用末尾的*可以确保不会修改网站目录下.git这个隐藏目录内部的权限,同时-f用来屏蔽错误信息)

 

在编写本篇文章的时候感谢下面这位非常热心的博主解答我好多问题
https://argcv.com/articles/2078.c

Nginx对新版本PHP7.0.11关于PATH_INFO问题的修正

从这个版本以后,使用下面的配置使得Nginx支持ThinkPHP

server {
	listen		80;
	server_name	xxx.dev.onlyke.com;
	index		index.html index.htm index.php;
	root		/home/nginx/xxx;
	
	location ~ .*\.(gif|jpg|jpeg|png|bmp|ico|webp)$
	{
		expires 30d;
	}
	location ~ .*\.(woff|ttf|svg|otf|eot)$
	{
		expires 180d;
	}
	location ~ .*\.(js|css)?$
	{
		expires 12h;
	}
	location /
	{
		if (!-e $request_filename) { 
			rewrite ^(.*)$ /index.php/$1 last;
			break;
		}
	}
	location ~ \.php($|/)
	{
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		fastcgi_param PATH_INFO $fastcgi_script_name;
		include	fastcgi_params;
	}
}

 

Ubuntu 配置Node.js+Nginx+PHP+MySQL最新版本

配置环境

#有的vps需要解决php源乱码的问题
sudo apt-get install -y language-pack-en-base
vi /etc/profile
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
source /etc/profile
#解决php源乱码的问题 ending

#安装add-apt-repository
apt-get install software-properties-common

#安装nodejs源
curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -

#新版本Ubuntu16.04默认支持openssl 1.0.2h
add-apt-repository ppa:nginx/stable

#老版本Ubuntu 14.04建议使用 PPA for NGINX with HTTP/2 on Ubuntu 12.04 LTS and higher,使用下面的源可以同时升级openssl,可以开启http2
#https://launchpad.net/~ondrej/+archive/ubuntu/nginx/
add-apt-repository ppa:ondrej/nginx

#下面安装php7 mysql5.7源
add-apt-repository ppa:ondrej/php
add-apt-repository ppa:ondrej/mysql-5.7

apt-get update
apt-get install nodejs openssl nginx mysql-server php7.3 php7.3-gd php7.3-mbstring php7.3-xml php7.3-zip php7.3-curl php7.3-fpm php7.3-mysql php7.3-bcmath php7.3-dev

#查看openssl版本
openssl version

nginx.conf配置

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
	worker_connections 768;
	# multi_accept on;
}

http {

	##
	# Basic Settings
	##

	sendfile on;
	tcp_nopush on;
	tcp_nodelay on;
	keepalive_timeout 65;
	types_hash_max_size 2048;
	# server_tokens off;

	# server_names_hash_bucket_size 64;
	# server_name_in_redirect off;

	include /etc/nginx/mime.types;
	default_type application/octet-stream;

	##
	# SSL Settings
	##

	ssl_protocols               TLSv1 TLSv1.1 TLSv1.2;
	ssl_ciphers                 EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5;
	ssl_prefer_server_ciphers   on;

	client_max_body_size 2m;

	##
	# Logging Settings
	##

	access_log /var/log/nginx/access.log;
	error_log /var/log/nginx/error.log;

	##
	# Gzip Settings
	##

	gzip on;
	gzip_disable "msie6";
	gzip_min_length 1k;
	gzip_buffers 4 16k;
	gzip_comp_level 2;
	gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png font/ttf font/otf image/svg+xml;
	gzip_vary on;

	##
	# Virtual Host Configs
	##

	include /etc/nginx/conf.d/*.conf;
	include /etc/nginx/sites-enabled/*;
}


#mail {
#	# See sample authentication script at:
#	# http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#	# auth_http localhost/auth.php;
#	# pop3_capabilities "TOP" "USER";
#	# imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#	server {
#		listen     localhost:110;
#		protocol   pop3;
#		proxy      on;
#	}
# 
#	server {
#		listen     localhost:143;
#		protocol   imap;
#		proxy      on;
#	}
#}

默认服务器,ip返回403配置

server_tokens off;
proxy_hide_header X-Powered-By;


server {
	listen 80 default_server;
	server_name _;
	return      403;
}

server {
	listen 443 ssl http2 default_server;
	server_name _;
	ssl			on;
	ssl_certificate		/etc/letsencrypt/live/xxx/fullchain.pem;
	ssl_certificate_key	/etc/letsencrypt/live/xxx/privkey.pem;
	return 403;
}

fastcgi_params限制PHP脚本执行目录

#PHP Prohibit cross-Hosting
fastcgi_param  PHP_VALUE  "open_basedir=$document_root:/tmp/";

纯静态配置

server {
	listen		80;
	server_name	xxxx;
	root		/home/nginx/xxxx;
	index		index.html index.htm index.php;
	location ~ .*\.(gif|jpg|jpeg|png|bmp)$
	{
		expires 30d;
	}
	location ~ .*\.(woff|ttf|svg)$
	{
		expires 180d;
	}
	location ~ .*\.(js|css)?$
	{
		expires 12h;
	}
	location /
	{
 	 	 try_files $uri $uri/ =404;
	}
}

PHP一般通用配置

server {
	listen			80;
	server_name		xxxx;
	index			index.php index.html index.htm;
	root			/home/nginx/xxx;
	
	location ~ .*\.(gif|jpg|jpeg|png|bmp)$
	{
		expires 30d;
	}
	location ~ .*\.(woff|ttf|svg)$
	{
		expires 180d;
	}
	location ~ .*\.(js|css)?$
	{
		expires 12h;
	}
	location ~ \.php($|/)
	{
		try_files $uri = 404;
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
		fastcgi_index index.php;
		fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
		include fastcgi_params;
	}
}

开启fix_pathinfo(一般默认已开启)

#确认php.ini中的如下配置,其实默认已经为1,当框架出现问题时可以来检查一下
cgi.fix_pathinfo = 1

PHP通用框架配置

server {
	listen		80;
	server_name	xxxx;
	index		index.html index.htm index.php;
	root		/home/nginx/xxxx;
	
	location ~ .*\.(gif|jpg|jpeg|png|bmp|ico|webp)$
	{
		expires 30d;
	}
	location ~ .*\.(woff|ttf|svg|otf|eot)$
	{
		expires 180d;
	}
	location ~ .*\.(js|css)?$
	{
		expires 12h;
	}
	location ^~ /.svn
	{
		deny all;
	}
	location ^~ /.git
	{
		deny all;
	}
	location /
	{
		if (!-e $request_filename) { 
			rewrite ^(.*)$ /index.php/$1 last;
			break;
		}
	}
	location ~ \.php($|/)
	{
		fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
		fastcgi_param PATH_INFO $fastcgi_path_info;
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
		fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		include	fastcgi_params;
	}
}

SSL+HTTP2的PHP框架配置

server {
	listen				443 ssl http2;
	server_name			xxx;
	index				index.html index.htm index.php;
	root				/home/nginx/xxx;

	ssl_session_cache		shared:SSL:10m;
	ssl_session_timeout		60m;

	ssl_session_tickets		on;

	ssl_certificate			/etc/letsencrypt/live/xxx/fullchain.pem;
	ssl_certificate_key		/etc/letsencrypt/live/xxx/privkey.pem;

	location ~ .*\.(gif|jpg|jpeg|png|bmp|ico|webp)$
	{
		expires 30d;
	}
	location ~ .*\.(woff|ttf|svg|otf|eot)$
	{
		expires 180d;
	}
	location ~ .*\.(js|css)?$
	{
		expires 12h;
	}
	location ^~ /.svn
	{
		deny all;
	}
	location ^~ /.git
	{
		deny all;
	}
	location /
	{
		if (!-e $request_filename) { 
			rewrite ^(.*)$ /index.php/$1 last;
			break;
		}
	}
	location ~ \.php($|/)
	{
		fastcgi_split_path_info ^((?U).+.php)(/?.+)$;
		fastcgi_param PATH_INFO $fastcgi_path_info;
		fastcgi_pass unix:/run/php/php7.0-fpm.sock;
		fastcgi_param SCRIPT_FILENAME  $document_root$fastcgi_script_name;
		include	fastcgi_params;
	}
}