nginx 做laravel的https前代

前两天出去一趟,发现在国外竟然无法通过http连接国内的动态ip的服务器了,即使是非标准的都不可以,但https却无问题,那么,来加密吧。

弄了之后,发现了两个问题

  • 跳转的链接还是http的

这个在网上找了下,发现了下面的函数可以强制走https

URL::forceSchema("https");
  • 在登录后跳转到指定目标地址,自动转换为http了

经过不断的调试排错,最后发现是关于反向代理的时候,需要设置一个信任代理的列表,这个列表默认为空的,最简单的方式就是使用下面的,信任所有ip

Request::setTrustedProxies(['0.0.0.0/0']);

其他的关于nginx的配置,随便抄个就行

kubernetes or docker swarm

之前一直在部署kubernetes, 费了九牛二虎之力,前后差不多1个月,查遍各种资料,终于在1M+2N的上面部署成功了,三个节点通讯分布通讯也无问题了,然后,抽了个时间,将生产环境的一部分访问量引导进来, 没想到,仅检查了两天,节点之前的通讯再次无法访问了,光看那些云里雾里的资料,完全没有头绪,然后算了吧,还是试试其他的吧

docker swarm 的部署,头一天学习,模拟下,检查下,然后就简单部署可以了,然后进行service部分的各种参数尝试,观察效果,第二天,部署正式服务器,这个时候,已经快要休假了,导入一部分的访问量, 简单看下访问,没啥大问题,就休假了。

休完假,上去检查下各个服务器,结果发现其中的一个僵住了,反正就是docker ps 无反映了,从模拟客户端访问,发现偶尔下会有超时的现象存在,估计是访问这个僵住的节点了,然后搜索下,没找到特别明显的 故障点,重启下之后,接着跑数据。

现在,两种方式都尝试过,我再也不想碰kubernetes了。

  1. 部署对比

kubernetes相比docker swarm,要麻烦很多,更多的问题是关于网络互联的,虽然最新的kubeadm解决了一部分,但很多的情况下,你就是偏偏无法访问。而没有完全深入kubernetes的情况下,每分钟成M级别 的日志里找问题是件非常痛苦的事情。而docker swarm在这部分接省略好多,几乎没有碰到什么问题就解决了,唯一不足的是,全都是命令行部署,连个配置文件都没有。

  1. 速度对比

我没有对kubernetes进行过大量的测试,仅是在准备卸载的时候进行了下测试。从我这自己的测试来看,200次访问,大约用了40秒的样子,而docker swarm 用了23秒的样子,由于用来管理的服务器配置非常垃圾, 在取消部署在管理服务器上的配置之后,只用了8秒的样子。虽然样本太小,但也说明了不少问题了。从国外的测试资料来看,应该和架构有关系,kubernetes将系统设计的非常的复杂,而docker swarm一直秉承着 简单的原则,在网络处理方面,比kubernetes要少好多个量级,并且,问题的复杂度也小很多个量级

  1. 系统结构对比

kubernetes的结构图我自己研究了好久,才弄懂一点点,我都不知道如何对运维说这个组织,我想,需要对他们说,等他们博士后毕业后再学部署吧。大部分的集群,都需要从一个点慢慢的变成一条线,一个面, kubernetes的起步就直接是一个面了,而docker swarm要简单的多,几乎不需要解释。简单的来说,kubernetes这玩意太复杂,咱们那疙瘩农村人不懂

  1. 优缺点

kubernetes相对而言,文档很多,插件很多,内容很多,总之,一个字:多,两个字:华丽,三个字:不管用。每个人碰到的问题几乎都是独立的,每个人解决问题的方法也几乎是独立的,尤其涉及到网络部分, 我在部署的时候,虚拟机碰到的是一种问题,局域网部署又是另外一种问题,到了生产环境又是一个新的问题,而最后,有些问题得以解决,有些问题重装了系统都没有解决。但kubernetes部署起来非常的优雅, 通过ui去看部署的每个组件的结构也很方便,给你一种想要立马使用的节奏。而docker swarm的部署就非常的痛苦,通过docker service create等等命令来部署,各种插件不全,文档不全,即使通过Shipyard 这种ui去部署也会不尽人意,还不如命令行来的方便,但docker swarm胜在问题相对比较少,碰到问题解决起来也简单。

kubernetes ceph rbd 文件同步

ceph真不错, 也支持多点只读挂载, 但如果多点挂载的话,文件同步就是问题了,尤其在kubernetes集群中。 不过,可以将rbd以读写的方式挂载到master节点,然后在master节点上运行一个nfs服务器,而nfs服务器支持多点挂载,多点同时读取,写入,这样就可以完美解决了。 至于是放入到kubernetes集群中以docker节点的形式还是本地服务的形式,就完全看喜好了。

无意之中发现一个不错的网站

今天在使用google搜索ctex的时候,输入了ctext,然后进入了一个叫ctext.org的网站,发现竟然是一个介绍古代文献的库。 我对于古代文献仅限于上学时的古诗,发现这个网站在这方面的内容非常的全,以表面上的语言而论,就已经包涵英文/繁体/简体了。 而相关的分类,原文,批注等等也非常不错。

网站的地址:http://ctext.org

使用spacemacs

比较愚钝,前两天才知道有spacemacs这个东东,研究了下,发现确实不错,至少我不需要手动配置N多参数了,还有模式兼容比我之前自己管理要好的多。所以将emacs的配置管理升级为使用spacemacs了

我对emacs-lisp几乎属于完全不懂的地步,原来的管理都是在org-mode下配置的,这个不想更改,因为相关的配置说明或者遇到问题做标注还是很方便的。

直接上配置:

私人配置

(org-babel-load-file (expand-file-name “person.org” “~/emacs_config”))

emacs 初始化配置

.emacs 中的配置

  • windows上首先设置HOME路径,如果在环境变量中设置了则不用
  • 然后设置配置文件所在目录的路径
  • 设置org-mode的路径,在第一次初始化配置的时候,会使用系统自带的org版本,完全初始化成功后,变成安装后的
  • 加载配置文件
(setenv "HOME" "C:\\work")
(setq user-emacs-directory "~/emacs_config")
(setq load-path (cons "~/emacs_config/elpa/org-plus-contrib-20161118" load-path))
(org-babel-load-file (expand-file-name "tips.org" user-emacs-directory))

patch

ntemacs 24的bug:调用grep会出现下面的错误

grep: warning: GREP_OPTIONS is deprecated; please use an alias or script

注释掉emacs/24.4/lisp/progmodes/grep.el::470的下列代码

(setenv "GREP_OPTIONS"
    (concat (getenv "GREP_OPTIONS")
        " --color=" (if (eq grep-highlight-matches 'always)
                "always" "auto")))

环境变量

我在很多不同的设备和环境中使用emacs,因此,需要将不同设备的环境,配置下相关工具的位置

  • ubuntu笔记本

    (message (concat “system name=” system-name))
    (when (member system-name ‘(“rix-u-work”))
    )

  • mac笔记本

    (message (concat “system name=” system-name))
    (when (member system-name ‘(“RIX-MAC”))
    )

  • 相关配置生成文件的位置

    (setq locate-user-emacs-directory “~/.emacs.d”)
    (setq server-auth-dir “~/.emacs.d/server”)

shell 配置

windows 下没有bash,这真是一个非常痛苦的事情,这个就是在windows上配置bash的相关内容

(cond
((memq initial-window-system ‘(x w32))
(cond
((memq system-type ‘(windows-nt cygwin))
;(
(message “for windows”)
; (setq exec-path (cons “~/Git/usr/bin” exec-path))
(setq shell-file-name “bash”)
(setenv “PS1” “\\[[\\e[32m\\]\\u@\\h \\[\\e[33m\\]\\w\\[\\e[0m\\]]\\$ “)
(setenv “SHELL” shell-file-name)
;(setenv “CYWIN” “nodosfilewaring”)
(setq explicit-shell-file-name shell-file-name)
;使用方法,把光标移动到要粘贴的地方,然后用按住 Alt + 拖拉鼠标, 选择要拷贝的部分, 抬起鼠标,选择的部分就粘贴到了光标所在位置. 也就是说,一个动作完成 copy & paste 的工作,而且不改变 kill ring 的内容, 用 windows 的术语是剪切板. 和上面的方法类似, 如果按住 Alt + Shift + 拖动鼠标,那么就会完成 cut & paste 的功能.
(defun cygwin-shell()
(interactive)
(shell “*cygwin-shell*”)
; (set-buffer-process-coding-system ‘chinese-gbk-unix ‘chinese-gbk-unix)
(delete-other-windows)
)
;; enable cygwin clear, default set it does not work
(add-hook ‘shell-mode-hook ‘n-shell-mode-hook)
(defun n-shell-mode-hook ()
“12Jan2002 – sailor, shell mode customizations.”
(local-set-key ‘[up] ‘comint-previous-input)
(local-set-key ‘[down] ‘comint-next-input)
(local-set-key ‘[(shift tab)] ‘comint-next-matching-input-from-input)
(setq comint-input-sender ‘n-shell-simple-send)
)
(defun n-shell-simple-send (proc command)
“17Jan02 – sailor. Various commands pre-processing before sending to shell.”
(cond
;; Checking for clear command and execute it.
((string-match “^[ \t]*clear[ \t]*$” command)
(comint-send-string proc “\n”)
(erase-buffer)
)
;; Checking for man command and execute it.
((string-match “^[ \t]*man[ \t]*” command)
(comint-send-string proc “\n”)
(setq command (replace-regexp-in-string “^[ \t]*man[ \t]*” “” command))
(setq command (replace-regexp-in-string “[ \t]+$” “” command))
;;(message (format “command %s command” command))
(funcall ‘man command)
)
;; Send other commands to the default handler.
(t (comint-simple-send proc command))

)
)
(make-local-variable ‘comint-completion-addsuffix)
(setq comint-completion-addsuffix ‘(“/” . “”))
;; This variable is local to buffer
(setq comint-prompt-regexp “^[ \n\t]*[$] ?”)
)
((memq system-type ‘(gnu/linux)) (message “for linux”))
)))

其他内容

(setq abbrev-file-name “~/.emacs.d/.abbrev_defs”)
(setq abbreviated-home-dir nil)
(defvar ywb-emacs-lisp-path
(expand-file-name (concat data-directory “../site-lisp/”)))
(global-auto-revert-mode 1)

linux交换按键

win键盘实在难用,即使在spacemacs下,我也不想使用小手指来按ctrl键

clear Mod4
clear Control
!! keySym 格式
!! keysym  原按键 = 修改后的按键
keysym Control_L = Super_L
keysym Super_L = Control_L
!!keysym Control_R = Super_R
keysym Super_R = Control_R
add Mod4 = Super_L Super_R
add Control = Control_L Control_R

密码过期时间

(setq password-cache-expiry nil)

目录设置

(setq diary-file “~/.emacs.d/diary”)
(setq todo-file-do “~/.emacs.d/todo-do”)
(setq todo-file-done “~/.emacs.d/todone-done”)
(setq todo-file-top “~/.emacs.d/todone-top”)

spacemacs 设置

将最近打开的文件保存在默认的.emacs.d下,这样不同设备上就不会产生干扰。

将elpa配置到和配置文件指定的目录,使用同步工具进行同步在不同的设备上都不用重复下载了。

(setq dotspacemacs-configuration-layer-path “~/emacs_config”)
(setq recentf-save-file (expand-file-name “recentf” “.emacs.d”))
(setq dotspacemacs-elpa-https nil)
(setq dotspacemacs-check-for-update nil)
(setq package-user-dir (concat user-emacs-directory “/elpa”))
(setenv “SPACEMACSDIR” user-emacs-directory)
(setq spacemacs-start-directory (concat user-emacs-directory “/spacemacs/”))
(load-file (concat spacemacs-start-directory “init.el”))

快捷键设置

(global-set-key [f2] ‘shell)
(global-set-key [f3] ‘grep-find)

软件

org2blog

我用这个来写blog的

(global-set-key (kbd ““) ‘org2blog/wp-new-entry)

org2blog 使用wordpress的code方式

#+ATTR_WP: :syntaxhl light=true

分页

#+HTML: 继续阅读使用spacemacs