Decorative image frame

ubuntu更新php

服务器以前安装的 php7.0,最近开发任务中有部分插件,从 composer 安装提示需要 php7.2 的版本,才可以安装。
但是服务器的源里面没有 php7.2,最新的也就 7.0。添加 ppa 搞了一下。记录下步骤

安装 ppa 管理器

1
apt-get install software-properties-common

如果已经安装了,可以省略这一步,如果不安装,在执行add-apt-repository命令时会提示sudo: add-apt-repository: command not found

添加 ppa 源,并更新源

1
2
sudo add-apt-repository ppa:ondrej/php
sudo apt-get update

升级 php

1
2
sudo apt remove php7.0
sudo apt-get install php7.2

这样php7.2就安装上了。如果你希望保留老的版本,可以不执行sudo apt remove php7.0
如果希望连同系统一起升级可以执行下面的命令,会连同系统和其他软件一起升级到最新版,只有php会升级到指定的7.2版本。(不建议使用下面的命令)

1
sudo apt-get upgrade php7.2

扩展处理

升级了php7.2,还需要安装一下7.2的扩展比如mbstring,gd等执行如下命令安装就可以了

1
sudo apt-get install php7.2-gd

vue组件之插槽

这篇文章的写作时间是 vue2.6 发布后,因此适用于 2.6 以后的版本
插槽是 vue 组件中很重要的一环,他解决了组件内容自定义的问题。以及父子组件变量传递的问题(作用域插槽)。
在 2.6 以后的版本中,具名插槽和作用域插槽引入了一个新的统一的语法 (即 v-slot 指令),它取代了 slot 和 slot-scope 。这两个老的已经进入废弃期,为了保持平滑升级,目前还可以使用,但是不推荐使用。后期会被移除。

阅读全文...

Supervisord管理进程常用命令

Supervisord安装完成后有两个可用的命令行supervisor和supervisorctl,命令使用解释如下:

supervisord: 初始启动Supervisord,启动、管理配置中设置的进程。
supervisorctl stop programxxx: 停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
supervisorctl start programxxx: 启动某个进程
supervisorctl restart programxxx: 重启某个进程
supervisorctl stop groupworker: 重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop all: 停止全部进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload: 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update: 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。

注意:显示用stop停止掉的进程,用reload或者update都不会自动重启。

原文https://feilong.me/2011/03/monitor-processes-with-supervisord

省略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 帐号的身份运行的。

阅读全文...

su 与 su - 的区别

1
2
su root
su - root

两条命令输入密码后(这里输入的是 root 的密码而不是当前用户的密码),会切换到 root。

su root

只会切换账号,但 shell 还是原有用户的,目录不会切换,环境变量也不会还,与使用 sudo 执行命令差不多。

su - root

会彻底切换账户,目录会切换到/root 目录,并且环境变量也是 root 的。相当于使用 root 做了登录

使用阿里云ecs主机打造shadowsocks服务器,实现科学上网

要想打造一台自己的ss(shadowsocks)或ssr(shadowsocksR)服务器。要具备一下条件:

  1. 要有一台自己的服务器vps或ecs云主机都可以,虚拟主机是不行滴
  2. 服务器一定要在海外或中国香港。推荐日、韩、香港、新加坡服务器
    下面已阿里ecs为实例说明,主要是ecs降价了366/年的价格速度很快。比网上说的搬瓦工、Vultr强多了。

阅读全文...

linux安装java环境

下载jdk

可以到https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html下载
JDK 8u201 是稳定版本
JDK 8u202 是开发版本,包含了8u21的功能和一些其他功能,有可能会有bug
找到Java SE Development Kit 8u201点击该栏目下的Accept License Agreement单选项
在下面的列表中找到需要的版本,右键复制链接,在terminal里面用wget命令下载,下面用的是jdk-8u201-linux-x64

1
wget https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz?AuthParam=1554274626_8750d27ae1e72e03c48aa9f516d713c3

解压程序包并移动到/opt目录

1
2
3
4
5
6
# 先改个名字,要不然看着别扭
mv jdk-8u201-linux-x64.tar.gz?AuthParam=1554274626_8750d27ae1e72e03c48aa9f516d713c3 jdk-8u201-linux-x64.tar.gz
# 解压
tar zxvf jdk-8u201-linux-x64.tar.gz
# 解压后会出现jdk1.8.0_201文件夹,将其移动到/opt目录
sudo mv jdk1.8.0_201 /opt

设置环境变量

1
vi ~/.profile

在最后加入

1
2
3
4
5
#java
export JAVA_HOME=/opt/jdk1.8.0_201 #jdk的存放目录
export JRE_HOME=$JAVA_HOME/jre
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

最后让配置生效

1
source ~/.profile

运行java --version看是否生效,如果出现java版本信息标示生效了

1
2
3
java version "1.8.0_201"
Java(TM) SE Runtime Environment (build 1.8.0_201-b09)
Java HotSpot(TM) 64-Bit Server VM (build 25.201-b09, mixed mode)

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,简单点说,就是将需要的外部对象,通过构造函数参数传递或属性赋值的方式,让当前对象可以使用注入的外部对象。
注意一下几点即可

  • 低层模块尽量都要有抽象类或接口,或者两者都有。
  • 变量的声明类型尽量是抽象类或接口。
  • 使用继承时遵循里氏替换原则

这样做可以有效解耦,功能发生改变时,只需要替换外部的依赖对象,而不必修改主体功能代码。

阅读全文...