0%

公司需要将外网接口全部改为https方式,保证客户端数据传输的安全。并且将客户端连接改为长连接,这样能同时保证传输效率。客户端是自己的代码,所以使用自己的签名就行。

https自签名步骤:

1
2
3
4
openssl genrsa -des3 -out server.orig.key 2048 #生成密钥
openssl rsa -in server.orig.key -out server.key #去除密钥中的密码
openssl req -new -subj "/C=CN/ST=Beijing/L=Beijing/O=Beijing/OU=wefit/CN=*.wefit.com.cn" -key server.key -out server.csr #生成公钥
openssl x509 -req -days 36500 -in server.csr -signkey server.key -out server.crt #公钥签名生成证书

证书签名可选配置(可以不选,这里列出只是备注下)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[req]
req_extensions = v3_req

distinguished_name = req_distinguished_name

[req_distinguished_name]

[ v3_req ]

# Extensions to add to a certificate request

basicConstraints = CA:FALSE
keyUsage = nonRepudiation, digitalSignature, keyEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = *.wefit.com.cn

nginx 配置:

1
2
3
listen 443 ssl;
ssl_certificate /opt/ca/server.crt;
ssl_certificate_key /opt/ca/server.key;

一切ok。客户端长连接略过。强烈推荐python urllib3模块

公司服务器需要监控网站页面请求。
使用nginx的ngx_req_status模块刚好能满足需求。
请求结果如下:

1
2
3
4
zone_name key max_active max_bw traffic requests active bandwidth
server_name localhost 2 0 4160 4 1 0
server_url localhost/ 2 0 1432 2 0 0
server_url localhost/req-status 1 0 2728 2 1 0

可以显示每个url pv, 活跃连接数等等。
安装方法如下:

1
2
3
4
5
6
7
8
wget http://nginx.org/download/nginx-1.8.0.tar.gz
git clone https://github.com/zls0424/ngx_req_status.git
tar -zxvf nginx-1.8.0.tar.gz
cd nginx-1.8.0
patch -p1 < /home/zhangwenjin/src/ngx_req_status/write_filter-1.7.11.patch
./configure --prefix=/usr/local/nginx --add-module=/home/zhangwenjin/src/ngx_req_status
make -j2
sudo make install

nginx配置如下:
http配置:

1
2
3
req_status_zone server_name $server_name 256k;
req_status_zone server_url $server_name$request_uri$query_string 256k;
req_status server_name server_url;

server配置:

1
2
3
location /req-status {
req_status_show on;
}

网站升级为https
最近比较流行https,我也准备吧自己博客升级为https。

申请证书

申请证书参考 http://www.freehao123.com/nginx-startssl/
StartSSL 网站提供免费的证书申请。

nginx配置

将startssl提供的.key文件和.crt文件拷贝到服务器

.key文件每次nginx启动时候需要输入密码,因此需要先去掉.key文件的密码。方法如下:

1
openssl rsa -in zhangwenjin.key -out zhangwenjin.key.unsecure

nginx 配置:

1
2
3
4
5
listen       443;
ssl on;
ssl_certificate /root/zhangwenjin.crt;
ssl_certificate_key /root/zhangwenjin.key.unsecure;
ssl_session_timeout 5m;

访问 https://blog.zhangwenjin.com 即可

开启OCSP Stapling

获取startssl根证书

1
wget -O - https://www.startssl.com/certs/ca.pem https://www.startssl.com/certs/sub.class1.server.ca.pem | tee -a ca-certs.pem&gt; /dev/null

nginx 配置

1
2
3
ssl_stapling on;
ssl_stapling_verify on;
ssl_trusted_certificate /home/www/zhangwenjin.com/crtca-certs.pem;

Phalcon 是开源、全功能栈、使用C 扩展编写、针对高性能优化的PHP 5 框架

Phalcon安装:

1
2
3
4
> git clone --depth=1 git://github.com/phalcon/cphalcon.git
> cd cphalcon/build
> sudo ./install
add "extension=phalcon.so" to phalcon.ini

安裝phalcon dev tool

1
2
3
4
> git clone https://github.com/phalcon/phalcon-devtools
> ./phalcon-devtools/phalcon.sh
> ln -s ~/phalcon-devtools/phalcon.php /usr/bin/phalcon
> chmod ugo+x /usr/bin/phalcon

创建项目

1
> phalcon project test

本次选用raid1方案,其实就是数据互备,最大限度保障数据安全。
raid 磁盘 /dev/sdb /dev/sdc

  1. 安装raid管理软件:

    1
    > yum install -y parted mdadm
  2. 将raid磁盘设置为raid格式

    1
    2
    3
    4
    5
    6
    7
    8
    > fdisk /dev/sdb
    >> n # 回车
    >> p # 回车
    >> 一直回车
    >> t # 回车
    >> fd # 输入设置raid格式
    >> w # 保持并推出
    /dev/sdc 也相同操作方式
  3. 创建raid
    在操作之前先来看看这个命令的参数

  • -C #创建软件RAID
  • -l #指定RAID级别
  • -n #指定磁盘个数
  • -x #指定备用设备个数
    1
    > mdadm -C /dev/md1 -l 1 -n 2 /dev/sdb1 /dev/sdc1
  1. 开机自动
    1
    > mdadm -Evs >> /etc/mdadm.conf
  2. 查看详情
    1
    > mdadm --detail /dev/md1
  3. 格式化
    1
    > mkfs.ext4 /dev/md1
  4. 挂载
    1
    2
    > mkdir /data
    > mount /dev/md1 /data
  5. 设置开机自动挂载
    1
    > echo "/dev/md1 /raid1 ext4 defaults 0 0" >> /etc/fstab

业务需要在一台机器上启动两个mysql进程。
解决方案有两种:

  1. 方案一:将mysql启动脚本copy一份,指向不同目录
  2. 方案二:使用mysqld_multi 管理启动多个实例。

最终我选用方案一。

方案一:

  1. 创建新数据文件目录:
    1
    2
    > mkdir -p /opt/mysql/jira_db_4406
    > chown -R mysql:mysql /opt/mysql/mysql
  2. 初始化目录
    1
    2
    3
    > mysql_install_db --datadir=/opt/mysql/jira_db_4406 --user=mysql
    > cp /etc/my.cnf /opt/mysql/jira_db_4406
    > cp /etc/init.d/mysql /etc/init.d/mysql_jira
  3. 修改/opt/mysql/jira_db_4406/my.cnf 中端口号
  4. 修改启动脚本 /etc/init.d/mysql_jira
    1
    $bindir/mysqld_safe --defaults-file=/opt/mysql/jira_db_4406/my.cnf --datadir="$datadir" --pid-file="$mysqld_pid_file_path" $other_args >/dev/null 2>&1

    (ps:重点加–defaults-file=/opt/mysql/jira_db_4406/my.cnf –defaults-file 一定要是第一个参数)

  5. 启动
    1
    2
    > /etc/init.d/mysql_jira start
    > chkconfig --level 3 mysql_jira on
  6. 修改默认密码
    1
    > mysqladmin -u root password 123456
  7. 支持远程登录
    1
    2
    3
    > mysql -h 127.0.0.1 -P 4406 -u root -p
    mysql > GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
    mysql > flush privileges;

服务器:

公网服务器A(ip:121.199.x.x) centos6
内网测试服务器B(ip:10.10.1.160) centos6
网络:

公网 121.199.x.x/24
内网 10.10.1.1/24
vpn网络 10.10.16.1/24

需求:

公网服务器A需要能访问内网,因为svn服务器在内网。
vpn拨号后需要能访问到内网
方案:

vpn 服务架设在公网服务器A上(有公网ip),并分配vpn IP:10.10.16.1,
内网测试服务器B vpn拨号连接到服务器A,分配vpn ip:10.10.16.2,虚拟网卡ppp0
服务器A增加路由增加内网ip 10.10.1.1/24 路由到 10.10.16.2
内网测试服务器B增加转发规则将ppp0流量转发到内网

步骤:

  1. 开启公网服务器A和内网测试服务器B的ip_forward
    1
    2
    3
    > vim /etc/sysctl.conf
    net.ipv4.ip_forward=1
    > sysctl -p
  2. 在公网服务器A安装vpn服务
    1
    > yum install pptpd.x86_64
    配置:
    1
    2
    3
    4
    5
    6
    > vim /etc/pptpd.conf
    localip 10.10.16.1
    remoteip 10.10.16.3-20,10.10.16.245
    > vim /etc/ppp/options.pptpd
    ms-dns 8.8.8.8
    ms-dns 8.8.4.4
    账号设置
    1
    2
    3
    > vim /etc/ppp/chap-secrets
    # client server secret IP addresses
    vpn pptpd xxx 10.10.16.2
    重启vpn服务
    1
    > service pptpd restart
  3. 公网服务器A设置内网路由
    1
    > sudo route add -net 10.10.1.0/24 gw 10.10.16.2 dev ppp0
  4. 公网服务器设置转发规则
    1
    2
    > iptables -A POSTROUTING -s 10.10.16.0/24 ! -d 10.10.16.0/24 -j MASQUERADE

  5. 内网测试服务器B 安装vpn客户端
    1
    > yum install pptpsetup pptp
  6. 内网测试服务器B拨号
    1
    > pptpsetup --create test1 --server admin.wefit.com.cn --username vpn --password xxx --encrypt --start
  7. 内网测试服务器B流量转发
    1
    > iptables -A POSTROUTING -s 10.10.16.0/24 ! -d 10.10.16.0/24 -j MASQUERADE
  8. 内网测试服务B FORWARD
    1
    > iptables -I FORWARD -i ppp0 -o br0 -j ACCEPT

ps:

如果客户端提示:
LCP: timeout sending Config-Requests
sudo modprobe nf_conntrack_pptp

服务器需要通过邮件发送统计数据。
直接通过mail命令发送容易被当垃圾邮件。所以打算找一个靠谱的邮件服务商,通过smtp发送邮件就不会被当作垃圾邮件。
mail stmp配置:

1
2
3
4
5
6
vim /etc/mail.rc
#append
set [email protected]
set smtp=smtp.zhangwenjin.com
set [email protected]
set smtp-auth-password=xxxx

发送方式:

1
echo "test" | mail -v -s 四川统计-`date +'%Y-%m-%d'` -c [email protected] -c [email protected] [email protected]

测试服务器为centos7系统。
使用场景需求:
每一个开发人员有一个独立虚拟linux系统(系统要求centos6)(方便随便折腾)
虚拟系统需要独立内网ip

lxc是最优方案,对资源消耗最少,并且每台虚拟机可以共享所有资源。例如我们测试服务器有16G内存,每台虚拟机都能看到16G内存。
虚拟系统需要独立ip,需要使用桥接模式。

lxc安装:

1
> yum install lxc.x86_64 lxc-templates.x86_64

guest系统安装:

  1. 查看可选的系统:

    1
    2
    3
    > ls /usr/share/lxc/templates
    lxc-alpine lxc-archlinux lxc-centos lxc-debian lxc-fedora lxc-openmandriva lxc-oracle lxc-sshd lxc-ubuntu-cloud
    lxc-altlinux lxc-busybox lxc-cirros lxc-download lxc-gentoo lxc-opensuse lxc-plamo lxc-ubuntu
  2. 我需要的centos6, 模版中没有,选择下载系统:

    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
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    > lxc-create -t download -n template
    Setting up the GPG keyring
    Downloading the image index


    DIST RELEASE ARCH VARIANT BUILD

    centos 6 amd64 default 20150619_02:16
    centos 6 i386 default 20150619_02:16
    centos 7 amd64 default 20150619_02:16
    debian jessie amd64 default 20150619_19:16
    debian jessie armel default 20150620_22:42
    debian jessie armhf default 20150620_22:42
    debian jessie i386 default 20150619_19:16
    debian sid amd64 default 20150619_19:16
    debian sid armel default 20150620_22:42
    debian sid armhf default 20150620_22:42
    debian sid i386 default 20150619_19:16
    debian squeeze amd64 default 20150619_19:16
    debian squeeze armel default 20150620_22:42
    debian squeeze i386 default 20150619_19:16
    debian wheezy amd64 default 20150619_19:16
    debian wheezy armel default 20150620_22:42
    debian wheezy armhf default 20150620_22:42
    debian wheezy i386 default 20150619_19:16
    fedora 19 amd64 default 20150618_01:27
    fedora 19 armhf default 20150621_01:27
    fedora 19 i386 default 20150619_01:27
    fedora 20 amd64 default 20150619_01:27
    fedora 20 armhf default 20150621_01:27
    fedora 20 i386 default 20150619_01:27
    gentoo current amd64 default 20150619_14:12
    gentoo current armhf default 20150620_14:12
    gentoo current i386 default 20150619_14:12
    oracle 6.5 amd64 default 20150619_11:40
    oracle 6.5 i386 default 20150619_11:40
    plamo 5.x amd64 default 20150618_21:36
    plamo 5.x i386 default 20150618_21:36
    ubuntu precise amd64 default 20150619_19:15
    ubuntu precise armel default 20150621_03:49
    ubuntu precise armhf default 20150621_03:49
    ubuntu precise i386 default 20150619_19:15
    ubuntu trusty amd64 default 20150619_19:15
    ubuntu trusty arm64 default 20150604_03:49
    ubuntu trusty armhf default 20150621_03:49
    ubuntu trusty i386 default 20150619_03:49
    ubuntu trusty ppc64el default 20150621_03:49
    ubuntu utopic amd64 default 20150619_19:15
    ubuntu utopic arm64 default 20150605_03:49
    ubuntu utopic armhf default 20150621_03:49
    ubuntu utopic i386 default 20150619_19:15
    ubuntu utopic ppc64el default 20150621_03:49
    ubuntu vivid amd64 default 20150619_19:15
    ubuntu vivid arm64 default 20150604_03:49
    ubuntu vivid armhf default 20150621_03:49
    ubuntu vivid i386 default 20150619_19:15
    ubuntu vivid ppc64el default 20150621_03:49
    ubuntu wily amd64 default 20150619_03:49
    ubuntu wily arm64 default 20150604_03:49
    ubuntu wily armhf default 20150621_03:49
    ubuntu wily i386 default 20150619_19:15
    ubuntu wily ppc64el default 20150621_03:49


    Distribution:
  3. 等待系统下载完成

    1
    2
    > lxc-ls
    template
  4. 设置桥接模式:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    > vim /etc/sysconfig/network-scripts/ifcfg-enp3s0f0
    TYPE=Ethernet
    DEVICE=enp3s0f0
    ONBOOT=yes # 开机自动启动
    BRIDGE=br0 # 这是重点,不用设置ip, 需要新增br0网桥

    > vim /etc/sysconfig/network-scripts/ifcfg-br0
    DEVICE=br0
    TYPE=Bridge #网桥
    ONBOOT=yes
    BOOTPROTO=dhcp #使用dhcp获取ip
  5. 设置虚拟机配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    > /var/lib/lxc/template/config
    lxc.arch = x86_64
    lxc.rootfs = /var/lib/lxc/template/rootfs
    lxc.utsname = template

    # Network configuration
    lxc.network.type = veth #桥接
    lxc.network.flags = up #开机启动
    lxc.network.link=br0 #桥接网桥
    lxc.network.hwaddr=00:00:00:00:00:02 #一定要设置,方便dhcp设置

    lxc.start.auto = 1
    lxc.start.delay = 5
    lxc.start.order = 100
  6. 启动

    1
    2
    > lxc-start -n template
    进入虚拟机,查看虚拟机ip
  7. 创建更多虚拟机

    1
    > lxc-clone template test
  8. 查看每台虚拟机使用情况

    1
    > lxc-top

    ps:

    虚拟机根目录:/var/lib/lxc/template/rootfs
    改变虚拟机账户密码: chroot /var/lib/lxc/template/rootfs passwd

准备把Mac Mini改造为测试服务器。线上环境是Centos6, 所以测试环境也需要安装为Centos 6。Mac OSX 系统需要完全废弃。
Mac Mini使用EFI引导,只有Centos 7才支持EFI,所以考虑Mac Mini 安装Centos 7,通过lxc虚拟Centos 6

安装步骤:

  1. 下载Centos(下载地址http://www.centos.org/download/):
    1
    wget http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1503-01.iso
  2. 转化镜像为Mac专用镜像模式(需要Mac 电脑)
    1
    hdiutil convert -format UDRW -o ~/Downloads/CentOS-7-x86_64-Minimal-1503-01.img ~/Downloads/CentOS-7-x86_64-Minimal-1503-01.iso

正在读取CentOS-7- (Apple_ISO:0)…
…………………………………………………………………………………………………………………………………………………………………………………………………………
正在读取(Apple_Free:1)…
经过时间: 1.236s
速度:309.6M 字节/秒
节省:0.0%

  1. 插入空白U盘,查看系统u盘设备描述符:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    > diskutil list
    /dev/disk0
    #: TYPE NAME SIZE IDENTIFIER
    0: GUID_partition_scheme *251.0 GB disk0
    1: EFI EFI 209.7 MB disk0s1
    2: Apple_CoreStorage 250.1 GB disk0s2
    3: Apple_Boot Recovery HD 650.0 MB disk0s3
    /dev/disk1
    #: TYPE NAME SIZE IDENTIFIER
    0: Apple_HFS Macintosh HD *249.8 GB disk1
    Logical Volume on disk0s2
    D438A9A0-0FF5-41F0-BB46-4E9A41133503
    Unencrypted
    /dev/disk2
    #: TYPE NAME SIZE IDENTIFIER
    0: FDisk_partition_scheme *7.8 GB disk2
    1: DOS_FAT_32 NO NAME 7.8 GB disk2s1
  2. U盘为/dev/disk2,取消U盘挂载

    1
    2
    > diskutil unmountDisk /dev/disk2
    Unmount of all volumes on disk2 was successful
  3. 将Centos系统写入U盘

    1
    > sudo dd if=~/Downloads/CentOS-7-x86_64-Minimal-1503-01.img.dmg of=/dev/disk2 bs=1m
  4. 取出u盘插入Mac Mini系统,开机按住 option(alt) 键(必须在出现苹果图标前按住),这时候能看到U盘系统,选择U盘启动,安装linux时候格式化硬盘全盘。

ps:

Centos 7安装lxc需要先安装EPEL源,默认的yum源没有lxc
Mac Mini需要恢复OSX系统,需要通过网络安装恢复,方法开机按 alt键,到选择界面 按cmd + r即可,非常容易