Decorative image frame

1.docker基础概念

docker介绍

Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从 Apache2.0 协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。

容器是完全使用沙箱机制,相互之间不会有任何接口(类似 iPhone 的 app),更重要的是容器性能开销极低。

Docker 从 17.03 版本之后分为 CE(Community Edition: 社区版) 和 EE(Enterprise Edition: 企业版)。

社区办免费使用。企业版由公司支持,可在经过认证的操作系统和云提供商中使用,并可运行来自Docker Store的、经过认证的容器和插件。

阅读全文...

python mysql-connector简要说明

安装插件

1
python -m pip install mysql-connector

建立链接

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
import mysql.connector

# 接收参数:user, password, host, port=3306, unix_socket and database
# 返回一个MySQLConnection Object
config = {
'host': '127.0.0.1',
'user': 'root',
'password': 'root',
'port': 3306,
'database': 'test',
'charset': 'utf8'
}
try:
cnn = mysql.connector.connect(**config)
except mysql.connector.Error as e:
print('connect fails!{}'.format(e))

conn就是mysql的链接对象,它可以提交开启事务、提交、回滚,也可以关闭来mysql断开链接

查询操作

执行查询,需要经过以下几个过程:

  1. 获取一个游标,数据操作都是基于游标来处理。链接的cursor方法会返回一个游标,如上面conn.cursor()就会返回游标。
  2. 调用游标的execute方法,执行sql。
  3. 获取执行结果,我们可以用fetchone()一次获取一条记录,也可以用fetchall(),一次性获取所有记录。
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    cursor = cnn.cursor()
    try:
    sql_query = 'select name,age from stu ;'
    cursor.execute(sql_query)
    for name, age in cursor:
    print (name, age)
    except mysql.connector.Error as e:
    print('query error!{}'.format(e))
    finally:
    cursor.close()
    cnn.close()

阅读全文...

linux 为php7.0安装redis扩展

先决条件

php一定要有phpise组件,如果是编译安装一般是有的,如果是apt或yum不一定有。也很简单,安装个php-dev就可以了。
另外gcc等必备的包,安装过程中缺什么就按什么。
笔记以apt安装php环境为基础做记录

开始安装

  1. 安装扩展

    1
    2
    3
    4
    5
    wget https://github.com/phpredis/phpredis/archive/4.0.2.tar.gz
    tar -zxvf 4.0.2.tar.gz
    cd phpredis-4.0.2
    ./configure --with-php-config=/usr/bin/php-config7.0
    make && make install

    php-config是一个获取php配置的程序,一般在php安装目录的bin目录下。多版本共存的情况下安装扩展可以让扩展准确知道,这是给哪个版本安装。
    如果是apt安装的php,可以使用whereis php-config查看该文件所在目录。如果是自己编译安装更容易找,到安装目录下的bin目录就找到了。

  2. 启用扩展
    找到vi /etc/php/7.0/fpm/php.ini 在里面添加 extension=redis.so 就可以了。
    如果想在命令行模式下也使用这个扩展,可以在/etc/php/7.0/cli/php.ini里也添加 extension=redis.so

  3. 重启php-fpm和nginx

    1
    2
    service php-fpm7.0 restart
    systemctl restart nginx

    经过这些处理redis扩展就可以正常使用了。

参考资料

https://www.cnblogs.com/eeds-wangwei/p/11016160.html
https://github.com/phpredis/phpredis

解决深度终端链接远程后假死问题

起因

这是最近才出现的问题,忽然发现,深度终端链接远程服务器后,过一会就假死了。还以为是不小心安了ctrl+s,于是用ctrl+q也无法解开。依然不能输入任何内容。链接状态是保持的,但就是假死了。

在网上搜索了一下找到了解决办法。

解决方法

可以修改配置文件, 在~/.bash_profile 或者~/.bashrc的配置文件里面加上下面的参数了:

1
stty -ixon

保持退出,执行下面的命令让配置生效

1
source  .bashrc

这样就不会出现假死了。

还有一种方式,链接ssh之前增加一个-o ServerAliveInterval=60参数

1
ssh -o ServerAliveInterval=60 root@192.168.0.2

阅读全文...

shadowsocks客户端启动报错问题

问题描述

1
sslocal -c shadowsocks.json

报如下错误

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
INFO: loading config from shadowsocks.json
2020-02-11 10:50:45 INFO loading libcrypto from libcrypto.so.1.1
Traceback (most recent call last):
File "/usr/local/bin/sslocal", line 11, in <module>
sys.exit(main())
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/local.py", line 39, in main
config = shell.get_config(True)
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py", line 262, in get_config
check_config(config, is_local)
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/shell.py", line 124, in check_config
encrypt.try_cipher(config['password'], config['method'])
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py", line 44, in try_cipher
Encryptor(key, method)
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py", line 83, in __init__
random_string(self._method_info[1]))
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/encrypt.py", line 109, in get_cipher
return m[2](method, key, iv, op)
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/rc4_md5.py", line 33, in create_cipher
return openssl.OpenSSLCrypto(b'rc4', rc4_key, b'', op)
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py", line 76, in __init__
load_openssl()
File "/usr/local/lib/python2.7/dist-packages/shadowsocks/crypto/openssl.py", line 52, in load_openssl
libcrypto.EVP_CIPHER_CTX_cleanup.argtypes = (c_void_p,)
File "/usr/lib/python2.7/ctypes/__init__.py", line 379, in __getattr__
func = self.__getitem__(name)
File "/usr/lib/python2.7/ctypes/__init__.py", line 384, in __getitem__
func = self._FuncPtr((name_or_ordinal, self))
AttributeError: /usr/lib/x86_64-linux-gnu/libcrypto.so.1.1: undefined symbol: EVP_CIPHER_CTX_cleanup

阅读全文...

nginx配置结构说明

最近做项目发现服务器上nginx的配置很混乱,主要原因就是配置的人不太了解nginx的配置。从网上查了资料之后就复制了。

配置结构

nginx的配置其实很简单,总共也就分为4部分:main(全局设置)、server(主机设置)、upstream(负载均衡服务器设置)和 location(URL匹配特定位置的设置)
他们的关系是,server继承main,location继承server,upstream既不会继承其他设置也不会被继承。
所以配置的优先级就是 location > server > main

阅读全文...

limits.conf配置说明

最近发生了奇怪的事情,mysql总是会连不上,查了半天原因,最后发现进程文件没有生成。es报警“Too many open files”。搜索才发现是,打开文件太多了,超过了限制。解决方法是修改/etc/security/limits.conf。另外还牵扯到了另一个配置file-max。经过调试还是踩了不少坑的。坐下笔记,防止重复踩坑。

阅读全文...

ssh提速

最近ssh链接超慢,但是ping发现网速还是很快的。记录一下解决方法
修改/etc/ssh/sshd_config两个参数

1
2
UseDNS no
GSSAPIAuthentication no

保存后重启ssh服务

1
systemctl restart sshd

9.上传到远程仓库

小白的故事

本故事纯属虚构,如有雷同,^0^那可太巧了

这几天以来,小白学会了很多git的使用技巧。让他在应对问题的时候可以比较从容。比如需求反复修改。处理一些临时功能,后期要删除等比较繁琐的事情。

今天是小白负责的第一个项目发布的日子。

BOSS让小白把代码提交到远程仓库,这样负责发布的小伙伴就可以将代码进行发布了。

小白询问了老鸟如何将代码上传到github。回来开始操作。

  1. 创建线上仓库

进入github.com登录自己的账号,点击右上角的加号,选择new repository

new repository

填写仓库名称然后点击绿色的cteate repository按钮

create repository

创建成功会有如下提示

repository

这时候说明已经创建成功了。这里会显示项目的远程地址,同时介绍了两种使用情况

  • 没有项目时可以先创建一个目录,进行git init初始化,然后用git remote add进行关联
  • 如果已经有了本地项目直接使用git remote add进行关联

小白一看我属于第二种情况。果断进入项目目录执行

1
2
3
$ git remote add origin https://github.com/shooke/learngit.git
$ git push -u origin master

提示让Username for 'https://github.com':让输入git账号,小白果断输入,然后回车
再次提示Password for 'https://xiaobai@163.com@github.com':这里让输入密码

“奇怪怎么没有显示*啊”小白疑惑,这时候正好老鸟走过来
“BOSS让你上传代码,搞定了吗”,老鸟说
“就差一步了,为啥没法输入密码啊”小白问
“傻子,git命令行工具跟windows的cmd不一样的,这里是不会有星号提示的,但其实你的密码已经输入了,不行你可以试试”老鸟回答

小白重新输入密码,回车。出现了以下提示

1
2
3
4
5
6
7
8
9
10
Counting objects: 26, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (22/22), done.
Writing objects: 100% (26/26), 4.36 KiB | 4.36 MiB/s, done.
Total 26 (delta 7), reused 0 (delta 0)
remote: Resolving deltas: 100% (7/7), done.
To https://github.com/shooke/learngit.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.

“出现[new branch] master -> master是不是就表示上传成功了”小白问
“对啊,这个提示代表你本地的master分支,上传到了远程的master分支”老鸟回答

“啥事分支啊” 小白好奇的问
“分支啊,这可是好东西,多人协作全靠它了,我还有事明天给你讲” 老鸟回去忙自己的事了

小结

  • git remote add [shortname] [url]可以让本地仓库和远程仓库建立联系。shortname是仓库名称,方便执行命令时使用,一般情况下都用originurl就是远程仓库的地址,比如上面例子中的https://github.com/shooke/learngit.git
  • git remote -v 显示所有远程仓库
  • git remote show [remote] 显示某个远程仓库的信息