结合redis和lua实现个性化域名登录

使用场景: 客户只要通过后台绑定了自己的域名,解析到我们服务器之后。就能通过绑定的域名类型访问到相应的对应资源。实现原理是:在绑定的时候程序会将绑定域名和类型写入到redis中,并永久保存,NGINX通过lua读取redis里面的数据,指定不同的root路径。

安装

  • 安装luajit
yum -y install lua lua-devel  ## 编译的时候会依赖这个
cd /opt && wget http://luajit.org/download/LuaJIT-2.0.5.tar.gz
tar zxvf LuaJIT-2.0.5.tar.gz && cd LuaJIT-2.0.5
make install PREFIX=/opt/luajit
export LUAJIT_LIB=/opt/luajit/lib   ## 编译nginx需要的变量
export LUAJIT_INC=/opt/luajit/include/luajit-2.0  ## 编译nginx需要的变量
  • 安装cjson库,用来解析json格式数据的
cd /opt && wget https://www.kyne.com.au/~mark/software/download/lua-cjson-2.1.0.tar.gz
tar zxvf lua-cjson-2.1.0.tar.gz && cd lua-cjson-2.1.0
##编辑Makefile修改以下几个参数
vim Makefile
PREFIX =            /opt/luajit
LUA_INCLUDE_DIR =   /opt/luajit/include/luajit-2.0
LUA_CMODULE_DIR =   /opt/luajit/lib
LUA_MODULE_DIR =    /opt/luajit/share/lua/5.1
LUA_BIN_DIR =       /opt/luajit/bin
##编译并安装
make && make install
  • 安装cmsgpack库,主要用来序列化和反序列化的
cd /opt && git clone https://github.com/antirez/lua-cmsgpack.git && cd /opt/lua-cmsgpack
mkdir build && cd build && cmake .. && make
  • nginx编译需要的模块
cd /opt && git clone https://github.com/simplresty/ngx_devel_kit.git
cd /opt && git clone https://github.com/openresty/lua-nginx-module.git
cd /opt && git clone https://github.com/openresty/lua-resty-redis.git
  • 解决一些模块和库文件依赖问题
cp /opt/lua-cmsgpack/build/cmsgpack.so /opt/luajit/lib/
cp /opt/lua-cmsgpack/build/cmsgpack.so /opt/luajit/lib/lua/5.1/
cp /opt/luajit/lib/cjson.so /opt/luajit/lib/lua/5.1/
echo "/usr/local/lib/" >> /etc/ld.so.conf.d/libc.conf
echo "/opt/luajit/lib" >> /etc/ld.so.conf.d/libc.conf
ldconfig
  • 编译nginx,复制编译好的nginx二进制文件替换原来的nginx(原来的nginx二进制文件做备份)
tar zxvf nginx-1.14.0.tar.gz && cd nginx-1.14.0
./configure --add-module=/opt/lua-nginx-module --add-module=/opt/ngx_devel_kit --prefix=/opt/nginx --user=nginx --group=nginx --with-http_ssl_module --with-http_dav_module --with-http_flv_module --with-http_realip_module --with-http_addition_module --with-http_xslt_module --with-http_stub_status_module --with-http_sub_module --with-http_random_index_module --with-http_degradation_module --with-http_secure_link_module --with-http_gzip_static_module --with-http_perl_module --with-pcre --with-debug --with-file-aio --with-mail --with-mail_ssl_module --with-stream --with-ld-opt=-Wl,-E
make -j2

下面是一个示例代码

  • 在nginx.conf中http下加入redis的支持: “lua_package_path “/opt/lua-resty-redis/lib/?.lua;;”;”
  • lua.conf的配置文件如下:
server {
    listen 80 default;
    server_name _;  ## 这儿做默认解析
    access_log  logs/lua.log;
    error_log  logs/lua.error.log;
    index index.html;

    location / {
        add_header 'Access-Control-Allow-Origin' '*';
        set $defaultroot /opt/web/default;
        access_by_lua_file '/opt/nginx/conf/vhost/lua.lua';
        root $defaultroot;
        try_files $uri $uri/ /index.html;
    }
  • lua.lua的配置文件如下:
local redis = require "resty.redis"
local cjson = require "cjson"
local cmsgpack  = require "cmsgpack" 

local red = redis:new()
red:set_timeout(1000)
local ok, err = red:connect("127.0.0.1", 6379)
if not ok then
   ngx.say("failed to connect: ", err)
   return
end
red:select(1)

local redisData = red:get("domain.key")
local getdata = cjson.decode(redisData);

for i,w in ipairs(getdata) do
     if ngx.var.host == w.domain
          then
          if w.type == "app1"
          then
               ngx.var.defaultroot = "/opt/web/app1"
          elseif w.type == "app2"
          then
               ngx.var.defaultroot = "/opt/web/app2"
          else
               ngx.var.defaultroot = "/opt/web/default"
          end
     end
end
red:close()
  • redis中取出来的json格式如下:
[
  {
    "domain":"domain1_name",
    "id":"123456",
    "type":"app1"
  },
  {
    "domain":"domain2_name",
    "id":"123457",
    "type":"app2"
  },
  {
    "domain":"domain3_name",
    "id":"123458",
    "type":"app3"
  }
]

NAS中使用qbittorrent来离线下载种子文件

  1. 在套件中心安装 docker 组件
  2. 打开刚刚安装好的 docker 组件,在注册表中搜索”linuxserver/qbittorrent”,并安装
  3. 创建两个文件夹”/docker/download/qbittorrent/config” 和 “/docker/download/qbittorrent/downloads”,并赋予everyone的权限
  4. 在“映像”列表里选择刚刚下载好的镜像点击“启动”,并把第三步创建的两个文件夹挂载到”/config”和”/downloads”下面
  5. 在端口设置这儿将8080改为8999,本地端口也改为8999
  6. 在配置环境变量这儿填入以下三个变量:
WEBUI_PORT          8999
SavePath            /downloads
TempPath            /downloads
  1. 最后”http://172.16.50.2:8999/” 使用该地址访问qb,用户名是:admin 密码是:adminadmin

YAPI的安装

  • YAPI是一个高效、易用、功能强大的API管理平台旨在为开发、产品、测试人员提供更优雅的接口管理服务,这是官网上面说的
  • 安装Node,参考 Centos下安装node
  • 安装mongodb, 参考 mongodb的安装和常用配置项的含义
  • 安装 yapi “npm install -g yapi-cli –registry https://registry.npm.taobao.org”
  • “yapi server” 启动yapi配置向导,包括yapi的安装位置,mongodb数据库等信息
  • “npm install pm2 -g”安装pm2来管理yapi,可以方便的停止 启动等操作
  • 启动yapi “pm2 start /your_install_path/vendors/server/app.js –name yapi”,默认的启动端口是3000;登录的默认用户名是:admin@admin.com ; 默认密码:ymfe.org

Centos下安装node

安装node很简单,运行下面的脚本就可以了

#!/bin/bash
cd /opt && wget https://nodejs.org/dist/v12.19.0/node-v12.19.0-linux-x64.tar.xz
xz -d node-v12.19.0-linux-x64.tar.xz && tar xvf node-v12.19.0-linux-x64.tar
mv node-v10.16.0-linux-x64 node
chown -R root:root /opt/node
ln -s /opt/node/bin/node /usr/bin/node
ln -s /opt/node/bin/npm /usr/bin/npm
[ -f /opt/node-v12.19.0-linux-x64.tar.xz ] && rm /opt/node-v12.19.0-linux-x64.tar.xz -rf

git常用命令整理

## 忽略https错误
git -c http.sslverify=false clone https://gitlab.aiqinqin.info/root/jiang.git

## 永久保存用户名和密码
git config --global credential.helper store

##配置全局用户信息
git config --global user.email "qq@qq.com"
git config --global user.name "root"

##git清除用户名密码
git config --system --unset credential.helper

##全局关闭git的ssl认证
git config --system http.sslverify false

##创建一个分支 release-1.0是你自己的版本号
git checkout -b release-1.0

##本地提交修改过的代码
git add .

##版本注释
git commit -m"First commit"

##提交分支
git push origin release-1.0

## 查看本地分支
git branch

## 查看所有分支情况
git branch -a

## 切换到新分支
git checkout branchName