Hero Image
vimrc設定教學

vimrc 設定教學 :set nu 顯示行號:對於 debug 相當有幫助! :set ai 自動對齊縮排:如果上一行有兩個 tab 的寬度,按 enter 繼續編輯下一行時會自動保留兩個 tab 鍵的寬度。 :set cursorline 光標底線:光標所在的那一行會有底線,幫助尋找光標位置 :set bg=light 上色模式-針對亮背景上色 預設為亮背景(白色等)上色,但是終端機的初始背景色為深紫色,會出現文字失蹤 ( 例如註解為深藍色 ) 的情況。將這一行換成 :set bg=dark 即可。 :set tabstop=4 縮排間隔數 ( 預設為 8 個空白對齊 ) 也就是說按一次 tab 鍵,游標會自動跳 4 格空白字元的寬度。雖有多個空格但實際上只有一個 tab 字元。 注意:也就是說,在其他環境下,看到 tab 字元,依舊是 8 個空白寬 :set shiftwidth=4 自動縮排對齊間隔數:向右或向左一個縮排的寬度 以下可以斟酌使用 :set mouse=a 啟用游標選取:游標可以直接選取文字,滾輪可以直接滑動頁面 ( 非移動游標 )。 可以取代用 v 選取字元的功能,配合 ctrl+insert ( 複製 ) 及 shift+inset ( 貼上 ),相當方便 :set mouse="" 停用游標選取:游標無法選取文字,滾輪只會移動光標的位置。 :set ruler ( 預設就有 ) 顯示右下角的 行,列 目前在文件的位置 % 的資訊 :set backspace=2 ( 預設就有 ) 在 insert 模式啟用 backspace 鍵 :set formatoptions+=r 自動註解(注意:若要貼上的文件某一行有註解,會因為此項設定而讓其以下每一行都變成註解) :set history=100 保留 100 個使用過的指令 :set incsearch 在關鍵字尚未完全輸入完畢前就顯示結果 如果覺得這功能太過熱心的話,可以使用 ctrl+n 來達成自動補完的功能

Hero Image
CDN 相关 https 证书的申请

dehydrated letsencrypt-cloudflare-hook 由于我们不能上传文件到 CDN 服务器,所以我们不能采用文件验证方式来申请 https 证书。所幸 Let’s Encrypt 支持 dns-01 challenge 通过 DNS 验证方式来申请 https 证书。我们使用 Dehydrated 配合 CloudFlare hook 来申请 https 证书。 # 首先 clone dehydrated 这个仓库 git clone https://github.com/lukas2511/dehydrated # 在 clone 出来的 dehydrated 目录下创建 config 文件,内容参考 config 文件(https://github.com/dehydrated-io/dehydrated/blob/master/docs/examples/config) # 在 config 文件的末尾加上 Cloudflare 相关的信息 echo "export CF_EMAIL=user@example.com" >> config echo "export CF_KEY=K9uX2HyUjeWg5AhAb" >> config # clone Cloudflare hook mkdir hooks git clone https://github.com/kappataumu/letsencrypt-cloudflare-hook hooks/cloudflare # 安装依赖 pip install -r hooks/cloudflare/requirements-python-2.txt # 创建 domains.txt 文件,每行一个域名 [root@db-slave01 dehydrated]# cat domains.txt apk.kosungames.com sp-res.kosungames.com cpweb.kosungames.com # 申请 https 证书 ./dehydrated -c -k hooks/cloudflare/hook.py # 使用 Python 脚本上传证书。脚本需在 dehydrated 目录下 #!/usr/bin/env python from aliyunsdkcore import client from aliyunsdkcdn.request.v20141111 import SetDomainServerCertificateRequest import uuid def upload(domain): cli = client.AcsClient("LTAI7zSXga2D", "ed03Mt9xcNkRgmadx0XtpyDje", "cn-hongkong") request = SetDomainServerCertificateRequest.SetDomainServerCertificateRequest() request.set_accept_format("json") request.set_DomainName(domain) request.set_CertName(domain + str(uuid.uuid1())) #request.set_CertName(domain) #certificate = open("certs/" + domain + "/fullchain.pem").read() certificate = open("certs/" + domain + "/cert.pem").read() with open("certs/" + domain + "/chain.pem") as f: f.readline() f.readline() chain = f.read() certificate += chain key = open("certs/" + domain + "/privkey.pem").read() request.set_ServerCertificateStatus('on') request.set_ServerCertificate(certificate) request.set_PrivateKey(key) result = cli.do_action_with_exception(request) domain_file="domains.txt" with open(domain_file) as f: for line in f: domain = line.split()[0] upload(domain)