申请Let’s Encrypt泛域名证书并自动更新(CloudFlare DNS验证,certbot)

首先登录CloudFlare的个人中心获取 Global API key

My Profile --> API Token --> Global API Key

创建配置文件

mkdir .secrets
vim /root/.secrets/cloudflare.ini
sudo chmod 0700 /root/.secrets/
sudo chmod 0400 /root/.secrets/cloudflare.ini

内容

dns_cloudflare_email = cloudflare@example.com //cloudflare邮箱
dns_cloudflare_api_key = 0123456789abcdef0123456789abcdef01234 //Global API key

安装certbot

pip3 install certbot

安装cloudflare dns 验证插件

sudo apt -y install python3-certbot-dns-cloudflare

生成证书 注意这里的通配符域名必须加引号 '*.biubiu.run'

certbot certonly \
  --dns-cloudflare \
  --dns-cloudflare-credentials /root/.secrets/cloudflare.ini \
  -d biubiu.run \
  -d '*.biubiu.run'

校验证书

openssl x509 -in /etc/letsencrypt/live/biubiu.run/cert.pem  -noout -text

如果看到输出有如下内容,则表示成功

X509v3 Subject Alternative Name: 
    DNS:*.biubiu.run, DNS:biubiu.run

配置定时更新脚本

15 2 * * * certbot renew --pre-hook "systemctl stop nginx" --post-hook "systemctl start nginx"

参考文献

Wildcard certificate from Let’s Encrypt with CloudFlare DNS
Welcome to certbot-dns-cloudflare’s documentation!

安装phalcon报错 php 5 is no longer supported

最近项目中有用到 phalcon框架进行开发

于是帮助测试是同学在centos下搭建phalcon环境,

直接打开根据官网文档源码安装,
phalcon官方文档

sudo yum install php-devel pcre-devel gcc make

git clone https://github.com/phalcon/cphalcon

cd cphalcon/build
sudo ./install

出现报错

php 5 is no longer supported

但是 php -v 得到的版本是 7.0.30

经过一番追查发现主机上有多个 php 版本 ,

php默认是php7.0

但是 phpize 的默认版本却不是 php7.0 自带的 而是系统自带的php5.0的版本,

所以安装的时候需要使用指定的phpize

安装命令改为

sudo ./install --phpize /usr/local/php7.0.30/bin/phpize --php-config /usr/local/php7.0.30/bin/php-config

编译成功 !

当php.ini添加extension=phalcon.so后,重启php-fpm,
报错

PHP Warning:  Cannot load module 'phalcon' because required module 'psr' is not loaded in Unknown on line 0

执行

php -m|gerp phalcon

发现扩展并没有加载进来

一追查才发现phalcon4.0加了依赖条件,必须先安装psr扩展

而3.X的版本不需要,

直接依据官方文档编译安装3.4 的版本,搞定!

centos7搭建wordpress

安装nginx

yum install -y nginx

# 配置开机自启
systemctl enable nginx

centos7,yum 安装Mariadb的默认版本是 5.5,我们先对之前的版本进行卸载

安装mariadb

#卸载之前的版本
yum remove mariadb mariadb-server

#安装最新版mariadb
vim /etc/yum.repos.d/MariaDB.repo

#添加以下内容 (这里使用的是国内中科大的源,速度快)
# MariaDB 10.4 CentOS repository list - created 2020-01-04 13:32 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://mirrors.ustc.edu.cn/mariadb/yum/10.4/centos7-amd64/
gpgkey=http://mirrors.ustc.edu.cn/mariadb/yum/RPM-GPG-KEY-MariaDB
gpgcheck=1

#清除 yum 缓存 
yum clean all 
yum makecache

#安装 MariaDB 新版本 
yum install MariaDB-server MariaDB-client

#配置服务自启动
systemctl enable mariadb

#启动mariadb
systemctl start mariadb

#设置mariadb密码
mysql -u root -p

#然后直接回车进入修改密码
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

#创建用户
create user 'blog'@'localhost' identified by '123456';

#用户授权
grant all on wordpress.* to 'blog'@'localhost';

安装最新版PHP

# 获取源
yum install -y yum-utils
yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum update -y

# 配置默认的 php 源为 7.3
yum-config-manager --enable remi-php73

# 验证默认的 php 版本信息
yum info php

# 安装php
yum install -y php

# 安装php扩展
yum -y install php-fpm php71w-mysql php-xml php-cli php-devel php-mbstring php-common php-gd php-mcrypt php-opcache php-pear zip unzip

# 配置开机自启
systemctl enable php-fpm

# 启动php-fpm
systemctl start php-fpm

安装wordpress

# 创建wordpress文件夹
cd /var/www/html


wget https://cn.wordpress.org/latest-zh_CN.tar.gz

tar -xzvf wordpress-5.3.2-zh_CN.tar.gz

#复制默认配置
cp wp-config-sample.php wp-config.php

#修改数据库配置
vim wp-config.php

配置nginx

#增加配置文件 /etc/nginx/conf.d/www.mysite.com.conf
server {
    listen 80 default_server;
    listen [::]:80 default_server;


    server_name www.mysite.com;
    root /var/www/html/wordpress;

    index index.php index.html index.htm;

    if (!-e $request_filename) {
        rewrite /wp-admin$ $scheme://$host$uri/ permanent;
    }

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

    location ~ \.php$ {
        fastcgi_pass 127.0.0.1:9000;
        #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;
    }
}

重启nginx

systemctl restart nginx

访问域名进行配置

http://服务器IP/wp-admin

大功告成!

利用mysql存储过程批量插入数据

在日常开发中经常会遇到批量增加数据的情况,手动增加少量数据还可以,若是量一大的话,便比较麻烦

用PHP或者python之类的语言批量添加的话,还要写数据库连接等等,不够快捷

利用mysql的存储过程,我们可以很快的造出自己想要的数据,具体代码如下

#创建存储过程
CREATE PROCEDURE data_insert ()
    BEGIN
        #定义变量
        DECLARE i INT DEFAULT 0;
            WHILE i<100
            DO
                #SQL
                INSERT INTO my_table set uid=1, res_id=i,update_time=0,input_time=0;
                #变量增加
                SET i=i+1;
            END WHILE ;
        commit;
    END;

执行

CALL data_insert();
  • 使用完后记得删除存储过程

删除存储过程

drop procedure data_insert ;

查看存储过程

SHOW PROCEDURE STATUS ;

查看创建存储过程的语句

SHOW CREATE PROCEDURE data_insert ;

Nginx 502 报错 upstream sent too big header while reading response header from upstream

业务中一个php的接口get信息的时候 ,会偶然引起nginx 502 错误
查看nginx错误日志 得到报错信息:

upstream sent too big header while reading response header from upstream

可以看出是header头信息过大引起nginx报错

需要修改nginx的主配置文件
在http模块加入

http {
  proxy_buffer_size   128k;
  proxy_buffers   4 128k;
  proxy_busy_buffers_size   256k;
  proxy_temp_file_write_size 256k;
}

在server块的配置中加入

location ~ .php$ {
    fastcgi_buffer_size 128k;
    fastcgi_buffers 4 128k;
    fastcgi_busy_buffers_size 256k;
}

注意 proxy_temp_file_write_size 的值必须要大于等于 proxy_buffer_size 和 proxy_buffers的值,否则nginx会报错

"proxy_temp_file_write_size" must be equal to or greater than the maximum of the value of "proxy_buffer_size" and one of the "proxy_buffers" in /usr/local/nginx/config/nginx.conf:134

参考链接

https://stackoverflow.com/questions/13894386/upstream-too-big-nginx-codeigniter

chrome地址栏显示www和https

chrome不知道什么时候开始在地址栏中,会自动隐藏 www 和 https://
这对开发人员还是造成了不少的困扰

其实在地址栏显示www和https://还是很简单的,在地址栏分别输入

显示https

chrome://flags/#omnibox-ui-hide-steady-state-url-scheme

显示www

chrome://flags/#omnibox-ui-hide-steady-state-url-trivial-subdomains


选择disable 重启后就可以啦

最终效果

年少轻狂的终结

偶然看到一个很牛的东西是同行做的,于是下意识的要去了解一下这个同行,看看他的学校,他的履历,然而最让人震撼的是同行的年龄!明明是同行,他做的比我优秀,居然还比我年轻,这样的打击是很大的。

平时遇到比自己优秀的人,总有一个心理上的优势,你现在比我厉害怎么样?你比我大好几岁,等我到你这个年龄的时候,我会比你更厉害。

也许到了那个年纪的时候,并没有对方厉害,但是那你可以拿对方的年龄永远搪塞自己,然而比你年轻的人还比你优秀的时候,你会发现没有任何东西可以搪塞了,那你只能接受这个事实。

这样的打击是巨大的,就像冬日凌冽刺骨的寒风,突然吹开了窗户,迎面扑来,将在教室昏昏欲睡你的打了一个激灵,此时你决定认真听课了,却发现老师讲的已经听不懂了,你现在唯一可以做的就是奔跑快速的奔跑,将错的东西追上来。

年少轻狂终结于另一个年少轻狂,平日里在自己的小圈子,不觉得大家差别有多大,甚至觉得自己还处在一个不错的位置,这样的想法在一个成年人心中未免是有些可笑。之前看过这样一句话:“如果你发现你是屋子里最聪明的一个,那么不好意思,你走错房间了”。

是的,如果你只是在身边的人在比较,那么你身边的人就决定了你的上限与下限,身处与时代中,其实时代才更应该你是的参考系。若做的更牛逼一点,是有人可以超越时代的,当然这未必是你未必是我,但他是客观存在的。

最后,警醒自己,告别狭隘,以时代为参考系,一步一步面向未来。

php安装扩展并使用composer引入包(以mongodb为例)

安装扩展

首先安装pecl

//php版本 > 7
wget http://pear.php.net/go-pear.phar
php go-pear.phar

安装扩展

pecl install mongodb
echo "extension=mongodb.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`

若需要安装指定版本mongodb扩展

pecl install mongodb-1.6.0
echo "extension=mongodb.so" >> `php --ini | grep "Loaded Configuration" | sed -e "s|.*:\s*||"`

检查是否安装成功

php -m |grep mongodb

使用composer 在项目中引入 mongodb

安装composer

curl -sS https://getcomposer.org/installer | php
mv composer.phar /usr/local/bin/composer

注意: 如果上述命令因为权限执行失败, 请使用 sudo 再次尝试运行 mv 那行命令

composer require mongodb/mongodb

不该发生的事故

今天项目上线后因为自己配置没有梳理全,导致搜索结果不可用。

仔细想想这样的事情是不应该发生的,在上线前自己只是做了单个服务的测试,没有做全链路测试(全链路测试涉及发布项目代码)懒!
在灰度环境中测试没有问题便想当然的认为在线上也不会有问题,却忽视了灰度是单台机器,线上是集群

以后应该杜绝这种想法,对项目的拓扑图要有深刻的认识,勿掉以轻心,切不可一知半解却觉得自己已经了解了

线上出现问题的时候也没有做到对问题了然于胸,达到庖丁解牛的地步,还需要调试好几次才能定位问题,延长了恢复故障的时间,充分说明没有对项目深刻的理解,这下算是真正理解了,不过却是有点疼

避免发生类似事故,引以为戒
补救措施(已经给出了项目时序图,并且指出了项目需关注的重点,防止后人踩坑)

地命海心

大学的时候有很多想法,对于实现却没有能力,而如今能力是有了,对实现又没有了动力。

然后终日浑浑噩噩,重复着无趣的日子,眼睁睁的看着时间将自己埋没,缺少决绝的勇气与动力,对现状不满,可改变的欲望却没有转化为行动的力量,想想也是搞笑