• Twikoo私有化部署教程--迁移腾讯云


    作者:小牛呼噜噜 | https://xiaoniuhululu.com
    计算机内功、JAVA底层、面试相关资料等更多精彩文章在公众号「小牛呼噜噜 」

    给我的小破站,换了许多独立的评论系统,twikoo还是用的最舒服的。

    可是该评论系统 一直用的是腾讯的云开发CloudBase免费版的,2022-08-08 腾讯收费模式正式,变成了收费,再也白嫖不了,看了下价格 每月39.9每月19.9,提价太高,有点吃不消,后面可能还会继续提价,像微信读书一样。

    正好twikoo作者也放出了私有化部署的版本,那就连夜进行迁移, 结果坑不少呢,笔者花了3天才搞好,故简单记录一下

    备份数据

    决定迁移前,得先把腾讯云开发CloudBase的聊天数据备份下来

    1. 登录 腾讯云
    2. 打开云开发 CloudBase;
    3. 选择要导出的环境;
    4. 点击左侧的数据库,点击 comment 集合,点击导出按钮;
    5. 导出格式选择 JSON(推荐,如果想用 Excel 等软件查看,可以选择 CSV),字段不填;

    私有化部署

    创建容器

    由于之前的博客已迁移到腾讯云服务器上,顺便把评论系统也迁过来

    可以参考: 博客迁移腾讯云 https://mp.weixin.qq.com/s/O_-dAgKxk64hiClul0vDQw

    由于已安装docker ,那我就选中twikoo docker版 安装

    1. 拉取镜像
    docker pull imaegoo/twikoo
    
    1. 创建并启动容器
    docker run -p 8099:8080 -v /root/twikoo/data:/app/data -d imaegoo/twikoo
    
    1. 别忘了,把服务器的防火墙8099端口放开

    2. 测试容器是否正常工作

    我博客使用Hexo+Next来生成的,直接修改主题配置文件

    twikoo:
      enable: true
      visitor: true
      envId: xxxxxxxxxxxxxxx #将 envId 从之前的腾讯云开发 ID 换成 http://ip地址:port 
    

    然后hexo clean;hexo g;hexo s启动本地hexo测试环境,就可以连上了

    导入数据

    第一次打开twikoo面板,需要设置密码

    然后选择导入按钮

    将刚刚从腾讯云开发上下载的文件导入进去即可

    重新配置twikoo面板设置

    导入的数据只是评论内容,需要照着线上腾讯云开发的管理面板,把设置重新配一下

    其中比较烦的就是邮件通知,需要从邮箱商重新获取SMTP_PASS

    引入前端CDN

    <script src="https://cdn.staticfile.org/twikoo/1.6.4/twikoo.all.min.js">script>
    

    这样基本上twikoo评论系统就迁移过来了,下面讲讲最重要的nginx https反代http

    Nginx https反代http

    由于twikoo本身不支持https, 而如今http 传输数据还是不够安全的,需要我们通过nginx来实现 https反向代理http

    由于我博客本身,已经用了ssl正式了,我需要再加一个端口8099

    1. 方案一:通过一个域名、一个ssl证书、来用https再代理一个端口

    这个方案 目前网上没有特别好的方法,笔者查遍了中文、英文相关的博客,没有特别好的办法,最后想出了个折中的办法

    nginx.conf:

    upstream twi { #需要配置upstream
            server xxxx.com:8099; #你的域名+加端口
        }  
    
    
    server {
        listen       443 ssl;
        server_name  xxx.com;#你的域名
    
        ssl_certificate      /etc/nginx/ssl/com_bundle.crt;#证书
        ssl_certificate_key  /etc/nginx/ssl/com.key;#证书.key
    
        # ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;
        ssl_prefer_server_ciphers  on;
    
        location / {
            root /usr/share/nginx/html/hexo;
            index  index.html index.htm;
        }
    
        location /twi/ {
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection "upgrade"; 
            proxy_pass_header Set-Cookie;
    
            proxy_set_header Host $host:$server_port; 
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For $remote_addr;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_redirect off;
    
            add_header Access-Control-Allow-Origin *;
            add_header Access-Control-Allow-Methods "POST, GET,PUT,DELETE, OPTIONS";
            add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
            add_header Access-Control-Allow-Credentials true;
    
            proxy_headers_hash_max_size 512;
            proxy_headers_hash_bucket_size 128; 
            
    
            #proxy_pass http://localhost:8099/;
            proxy_pass http://twi; # 这边只能这样写,不然服务转发不过去
        }
    
    
    }
    

    这样达到的效果是 访问https://xxx.com/twi nginx 会将转发到http://xxx.com:8099,访问一下,twikoo提示一切正常

    但坑爹的是,把将 envId 从之前的腾讯云开发 ID 换成 https://xxx.com/twi后,发现twikoo 不支持 这样的写法,这样其会无法获取 accessToken, 就是这个值强行塞进去,还是绕不开内部的校验,所以花了许多时间,但只能放弃

    1. 方案二 :通过多个域名、多个ssl证书、来用https再代理一个端口

    突然小牛灵感一闪,可以申请子域名啊(这个去域名提供商再添一条解析规则即可,笔者这里是阿里云),这样也不用再额外花钱啦,又去阿里云又申请了一个免费ssl证书(腾讯只能免费申请一个ssl证书,阿里可以免费申请20个呢!!!)

    nginx.conf: 添加下面配置

    upstream twi {#需要配置upstream
            server xxxx.com:8099; #你的域名+加端口
        }  
    
    server {
        listen  443 ssl;
        server_name  twikoo.xxx.com; #子域名
    
        ssl_certificate      /etc/nginx/ssl/twikoo.xxx.com/twikoo.xxx.com.pem;
        ssl_certificate_key  /etc/nginx/ssl/twikoo.xxx.com/twikoo.xxx.com.key;
    
        # ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        
        ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
        ssl_ciphers  HIGH:!ADH:!EXPORT56:RC4+RSA:+MEDIUM;
        ssl_prefer_server_ciphers  on;
    
        location / {
            #proxy_pass http://localhost:8099;
            #proxy_pass http://twi; #这种方法,会导致twikoo邮件通知出现bug:getaddrinfo ENOTFOUND!!!
            proxy_pass http://xxx.com:8099;#建议这种写法,和主域名保持一致
    
            # add_header Access-Control-Allow-Origin "*" always; #这个不要加
            # add_header Access-Control-Allow-Methods "POST, GET,PUT,DELETE, OPTIONS";
            # add_header Access-Control-Allow-Headers "Origin, Authorization, Accept";
        }
            
    }
                 
    
    

    发现这样是最快最稳的写法!

    注意的是add_header Access-Control-Allow-Origin "*" always;这个跨越设置不要加,好像nginx会默认将一个子域名对顶级域名放开跨域限制,加了的话,会提示only allow one异常

    这样就实现了:访问https://twikoo.xxx.com nginx 会将转发到http://xxx.com:8099

    把将 envId 从之前的腾讯云开发 ID 换成 https://twikoo.xxx.com后,发现twikoo一切正常

    终于把twikoo成功私有化部署了!完结撒花~~


    参考资料:
    https://www.imaegoo.com/2022/twikoo-data-export/


    本篇文章到这里就结束啦,很感谢你能看到最后,如果觉得文章对你有帮助,别忘记关注我!更多精彩的文章

  • 相关阅读:
    JavaScript语法知识笔记(二)——typeof检测变量数据类型, 强制类型转换,其他进制的数字,运算符,一元运算符.
    JAVASE语法零基础——继承2
    第七章TCP/IP——ARP网络攻击与欺骗
    docker创建centos7下的jdk8环境变量的容器并提交hub.docker
    为什么 ArrayList的 初始容量为10?每次扩容1.5倍?
    J-Tech Talk | 6.29首播 Python文档漫谈
    JS进阶-编程思想
    vue3 Composition API 组合式api
    Linux | 关于入门Linux你有必要了解的指令
    使用dockerfile自定义Tomcat镜像
  • 原文地址:https://www.cnblogs.com/xiaoniuhululu/p/16719508.html