笔记
docker环境下php使用指南
最近由于业务原因,需要将 php7.0 升级到 7.2。升级要考虑一下几点
要满足以下需求
- php7.0 和 7.2 要共存,以免升级 7.2 以后出现问题,及时切换回来。
- 升级操作要简单,服务器数量比较多,原生方式安装太过复杂,操作步骤太多,就算携程 shell 脚本,维护起来也比较麻烦
- nginx 保持原样,只对项目相关的配置文件做简单调整即可。如果 nginx 变更日志处理等模块都收到牵连。
考虑到上面的因素,用 docker 显然是非常符合的。于是就开启了踩坑之旅。
主要遇到了两个问题,一个是502
,还有一个是File not found
。下面进行分析
省略sudo使用docker
安装 docker
1 | wget -qO- https://get.docker.com/ | sh |
或
1 | sudo apt install docker |
原理
为什么需要创建 docker 用户组?
Docker 守候进程绑定的是一个 unix socket,而不是 TCP 端口。这个套接字默认的属主是 root,其他是用户可以使用 sudo 命令来访问这个套接字文件。因为这个原因,docker 服务进程都是以 root 帐号的身份运行的。
使用阿里云ecs主机打造shadowsocks服务器,实现科学上网
要想打造一台自己的ss(shadowsocks)或ssr(shadowsocksR)服务器。要具备一下条件:
- 要有一台自己的服务器vps或ecs云主机都可以,虚拟主机是不行滴
- 服务器一定要在海外或中国香港。推荐日、韩、香港、新加坡服务器
下面已阿里ecs为实例说明,主要是ecs降价了366/年
的价格速度很快。比网上说的搬瓦工、Vultr强多了。
VirtualBox v5.2.12 Ubuntu18.04 宿主机和虚拟主机互通,都可上网配置方式
全局设置
点击管理,全局设置;
选择网络,里面只有 NAT 网络;
点击添加,列表新增 NatNetwork,点击确定。
虚拟机配置
点击管理,选择主机网络管理;
选择创建,列表新增 vboxnet0,只要这一个就够了;
选中点击 vboxnet0,点击手动配置网卡;
点击 IPv4 地址,输入配置的网关 IP,如:192.168.56.1;
如果不想使用 DHCP,取消启用 DHCP,点击应用。
给虚拟机添加网卡
右键点击一个虚拟主机,选择设置;
选择网络;
选中点击网卡 1,勾选启用网络连接;
连接方式选择网络地址转换(NAT),界面可以空着;
选中点击网卡 2,勾选启用网络连接;
连接方式选择仅主机(Host-Only)网络,界面名称为 vboxnet0,点击确认。
设计模式基本原则大白话
单一职责原则
简单点说就是最小化封装,一个方法只负责一个功能,一个类只负责一类功能。如果一个功能比较复杂,那就差分成多个小功能,然后去实现。
这样做的好处是
- 可以降低类的复杂度,一个类只负责一项职责,其逻辑肯定要比负责多项职责简单的多;
- 提高类的可读性,提高系统的可维护性;
- 变更引起的风险降低,变更是必然的,如果单一职责原则遵守的好,当修改一个功能时,可以显著降低对其他功能的影响。
里氏替换原则
简单点说就是子类可以扩展父类的功能,但不能改变父类原有的功能。
注意一下几点即可
- 子类可以实现父类的抽象方法,但不能覆盖父类的非抽象方法。
- 子类中可以增加自己特有的方法。
- 当子类的方法重载父类的方法时,方法的前置条件(即方法的形参)要比父类方法的输入参数更宽松。
- 当子类的方法实现父类的抽象方法时,方法的后置条件(即方法的返回值)要比父类更严格。
这样做可以有效避免,功能耦合度太高,改一个小功能影响到其他功能的情况
依赖倒置原则
依赖倒置就是控制翻转,又名 IOC,简单点说,就是将需要的外部对象,通过构造函数参数传递或属性赋值的方式,让当前对象可以使用注入的外部对象。
注意一下几点即可
- 低层模块尽量都要有抽象类或接口,或者两者都有。
- 变量的声明类型尽量是抽象类或接口。
- 使用继承时遵循里氏替换原则
这样做可以有效解耦,功能发生改变时,只需要替换外部的依赖对象,而不必修改主体功能代码。