折腾下闲置的VPS,部署Bitwarden_rs和sharelist

1 折腾下闲置的VPS

本科时同学推荐搬瓦工的VPS,当然那时我连VPS是什么都不知道,听说能够翻过围墙所以就买了。对Linux一窍不通的我在曾经的doubi根据地上的文章指引下,也能够搭建一个比较舒服的上网环境,当时感到十分愉快(用的当然是那些一键脚本)。
过了一年除了IP被封过两次、换了几个机房、换了几个一键脚本以外,倒也还没觉得有啥不满;毕竟如果是买市面上那些服务每个月的钱也差不多。
人总是在不断学习进步的,我总算学会了一些linux基本操作,可以用XShell登一登我的VPS没事ls一下。但看到大佬们用自己的VPS搭各种服务器到时候,还是非常羡慕的,于是忍不住也尝试下,顺便学习下后端相关知识。

由于时间有限,以能用为唯一目的,多余的知识没时间更没必要去掌握(毕竟专业和这个毫不相关),操作全部记录在这方便以后换VPS时再搭一遍。

2 Bitwarden_rs部署

2.1 前言

好用的密码管理软件之一,_rs版本相对于官方版精简了不少,部署也比较简单。网上大多数bitwarden_rs部署教程的文章我基本上都过了一遍,我遇到的主要问题有:

  1. 部署后用Chrome浏览器无法登录与注册账号,IOS系统无法登录 (——后确定为未用https的原因)
  2. 网上关于申请https这部分往往一笔带过,什么Nginx反向代理啦….看得我这样的零基础玩家云里雾里。

结果大量时间都花在如何启用https上了,真让人头大。

2.2 步骤

2.2.1 VPS初始配置

经过几次重装OS后学乖了,把初始配置做成一个脚本。

sudo -i
apt-get install curl -y
apt-get install git -y
apt-get install vim -y
#=========================
#Vim配置
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
    https://cdn.jsdelivr.net/gh/junegunn/vim-plug/plug.vim
#=========================
git clone https://github.com/chengpengzhao/My_vimrc.git
cd My_vimrc
git checkout dev-WSL
cp ./'.vimrc(ssh)' ~/.vimrc
#=========================
#安装Docker、docker-compose
sudo curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun
sudo curl -L "https://github.com/docker/compose/releases/download/1.24.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
systemctl start docker
systemctl enable docker
#=========================
# 安装acme.sh
apt-get install cron socat -y
curl https://get.acme.sh | sh
source ~/.bashrc
export Namesilo_Key="xxxxxxxxxxxxx"(我的域名提供商)

apt install firewalld -y

firewall-cmd --permanent --add-service=http 
firewall-cmd --permanent --add-service=https 
firewall-cmd --reload 
service docker restart

步骤因人而异,大致都差不多。

2.2.2 一般部署

mkdir -p /opt/bitwarden && cd /opt/bitwarden

cat >> docker-compose.yml << EOF
version: "3"

services:
  bitwarden:
    image: bitwardenrs/server
    restart: always
    ports:
    - "8080:80"
    - "8081:3012"
    volumes:
      - ./bw-data:/data
    environment:
      WEBSOCKET_ENABLED: "true"
      SIGNUPS_ALLOWED: "true"
      WEB_VAULT_ENABLED: "true"
EOF

docker-compose up -d

端口相关知识我真的一窍不通…反正能用ip:8081访问就行。

2.2.3 启用https

稀里糊涂的装了个acme.sh脚本、在NameSilo申请了个API key;

acme.sh --issue --dns dns_namesilo --dnssleep 900 -d my_domain_name.com

看到没有报错的时候真的松了口气,然而证书是申请了,怎么绑到之前的bitwarden_rs的domain里我还是不会。
后面发现这篇教程和其他的都有些不一样,于是抱着一丝希望试了下…总算是解决了问题。

cat >> docker-compose.yml << EOF
version: "3"

services:
  bitwarden:
    image: bitwardenrs/server
    restart: always
    volumes:
      - ./bw-data:/data
    environment:
      WEBSOCKET_ENABLED: "true"
      SIGNUPS_ALLOWED: "true"

  caddy:
    image: abiosoft/caddy
    restart: always
    volumes:
      - ./Caddyfile:/etc/Caddyfile:ro
      - caddycerts:/root/.caddy
    ports:
      - 80:80
      - 443:443
    environment:
      ACME_AGREE: "true" 
      DOMAIN: "bitwarden.koko.cat"
      EMAIL: "[email protected]"
volumes:
  caddycerts:
EOF

cat >> Caddyfile << EOF
{$DOMAIN} {
    tls {$EMAIL}

    header / {
        Strict-Transport-Security "max-age=31536000;"
        X-XSS-Protection "1; mode=block"
        X-Frame-Options "DENY"
    }

    proxy /notifications/hub/negotiate bitwarden:80 {
        transparent
    }

    # Notifications redirected to the websockets server
    proxy /notifications/hub bitwarden:3012 {
        websocket
    }

    # Proxy the Root directory to Rocket
    proxy / bitwarden:80 {
        transparent
    }
}
EOF

docker-compose down && docker-compose up -d

2.2.4 定时备份

直接用github备份算了,或者定时手动导出到你觉得安全的位置。

cd ~
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub
#之后在github上导入,新建私人repository
cd /opt/bitwarden/bw-data
git init
git remote add origin [email protected]:xxxx/xxxx.git
git add -A
git commit -m "first push"
git push -u origin master

建立脚本并定时运行:

cd ~
cat >> backup.sh << EOF
#!/bin/bash
date=$(date '+%Y-%m-%d %H:%M')
cd /opt/bitwarden/bw-data
git add -A
git commit -m "backup at $date"
git push
EOF

bash ~/gitback.sh试运行,设置定时任务

echo "15 05 * * * bash ~/gitback.sh > ~/siteback.log 2>&1 &" > bt.cron
crontab bt.cron
rm -rf bt.cron

自动备份部分白嫖的Rat’s Blog
查看定时任务可通过crontab -l

3 Sharelist分享云盘

项目地址
这个搭起来就简单多了,dockerr都给你准备好了,只需要注意安装完成后配置云盘可能比较复杂;我选用的是链接分享的方式,可以自己指定文件夹且不需要获取API之类的复杂操作。

wget --no-check-certificate -qO-  https://cdn.jsdelivr.net/gh/reruin/sharelist/netinstall.sh | bash
cd sharelist
docker-compose up



以下内容更新于2020-06-23 13:48:33

4 更新:加入Nginx学习与使用 (推荐从这部分看起)

之前配置好的bitwarden用了几个月,昨天忽然发现移动端没法同步了,因为刚开始配置的时候就出现过这个问题所以一下子就定位到是https的问题。ping了一下域名竟然没ping通,不知道又是不是DNS服务器抽风了。正好对namesilo不太了解,干脆直接把域名转移到了cloudflare下。选择cloudflare是因为它的种种优点,而且设置起来比较方便。

4.1 namesilo域名转移到cloudflare

  1. cloudflare中添加要转移的域名,在namesilo中将DNS解析改为cloudflare(会提示你怎么做)。
  2. cloudflare里要有付款方式;我之前已经用过很久cloudflare了,所以这步略过。
  3. namesilo里将域名解锁(unlock图标),之后在cloudflare中申请转移,会要求输入一个授权码;
  4. namesilo里找到send email,授权码会发到邮箱里,在cloudflare输入后会提示正在转移中(这步会付款)。
  5. 过一会儿namesilo会再发邮件提示正在转移域名,点进相关网址可以立即通过转移(省时间)。

4.2 cloudflare的ssl-tls设置

一般将加密模式设置为完全cloudflare前一阵子出了简体中文版网页,更香了有没有),之后再到源服务器选项下创建源证书,之后要放到VPS上的。(我直接创了个15年有效期的),将公钥和私钥保存为cert.pemcert.key

4.3 cloudflare的DNS设置

虽然对这些方面一窍不通,但在用的过程中还是有点心得之类的东西:
比如在解析像Github Page这种时可以只用CNAME记录,而在解析ip地址时一般只用A记录就行了。另外通常会设置多条记录,一条给根域名(@表示或直接输入完整域名)、另一条给www(名称)的前缀,之后可以根据喜好随便加几条(如0000…)。
这些记录的内容都是指向同一个ip地址、即VPS的ip,在没有用Nginx配置时,无论是用www.yoursite还是yoursite0.yoursite000.yoursitez访问,页面应该都是相同的。

4.4 VPS上启动docker-compose容器

先以bitwarden为例讲下吧:

  1. 去网上学习下常用的几个命令如docker psdocker-compose down && docker-compose up -ddocker-compose restart,大概了解下怎么使用;

  2. 按照一般部署这部分创建好docker-compose.yml文件,这里80808081可以改成别的,后面访问网页就是通过8080端口。

  3. 部署成功后用docker ps应该能看到运行状态,并且通过VPS的ip地址:8080的方式能够访问bitwarden网页,这时已经完成了一大半。(浏览器会提示不安全,因为还没有SSL证书)

  4. 最后用NginxVPS的ip地址:8080准备好的域名“绑在一起”就好了。

4.5 Nginx学习与使用

之前看别人教程的时候都是“接下来用Nginx弄个反代…完”、这种节奏,看来是默认大家都会Nginx了(哭了出来)。
本着原理可以不弄太懂,关键不影响使用的懒人态度,直到今天我也终于开始Google搜索Nginx入门 了。

  1. 安装,想当然的输入 sudo apt-get install nginx ,嗯?能行,好、下一步。

  2. 命令,检测配置nginx -t、 重载配置nginx -s reload、启动nginx,暂时先记这几个了。

  3. 文件位置,输入whereis nginx查一查再说;

    • 噢? /usr/share/nginx目录下放有个html目录,打开VPS的ip地址显示的Welcome to nginx!原来就是这个index.html
    • /etc/nginx下的nginx.conf应该就是配置文件了,用vim打开看下吧,里面有一行include /etc/nginx/conf.d/*.conf;,也就是说我在/etc/nginx/conf.d目录下建的.conf文件也会当做配置文件读入。
  4. 随便到网上找一个配置文件例子,比如我找了个default.conf,放在conf.d目录下的:

    • 注意这里用到了之前申请的源证书cert.pemcert.key
    • 从配置文件可以发现可以有多个server,之后我们只需为bitwarden、sharelist等各配置一个server就行了。
#设定虚拟主机配置
server {
  #侦听443端口,这个是ssl访问端口
  listen    443;
  #定义使用 访问域名
  server_name  yoursite.com
  #定义服务器的默认网站根目录位置,这里的html指的是/usr/share/nginx/html目录
  root html;
  # 这些都是腾讯云推荐的配置,直接拿来用就行了,只是修改证书的路径,注意这些路径是相对于/etc/nginx
  ssl on;
  ssl_certificate cert.pem;
  ssl_certificate_key cert.key;
  ssl_session_timeout 5m;
  ssl_protocols TLSv1 TLSv1.1 TLSv1.2;      #按照这个协议配置
  ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
  ssl_prefer_server_ciphers on;
  #默认请求
  location / {
  root html;
  index index.html;
  }
  #静态文件,nginx自己处理
  location ~ ^/(images|javascript|js|css|flash|media|static)/ {
      #过期30天,静态文件不怎么更新,过期可以设大一点,
      #如果频繁更新,则可以设置得小一点。
      expires 30d;
  }
  #禁止访问 .htxxx 文件
  #    location ~ /.ht {
  #    deny all;
  #}
}
server
{
  # 80端口是http正常访问的接口
  listen 80;
  server_name  yoursite.com;
  # 在这里,我做了https全加密处理,在访问http的时候自动跳转到https
  rewrite ^(.*) https://$host$1 permanent;
}
  1. bitwarden配置server:
    Bitwarden_rs的github可以找到相应的例子,只需要粘贴到default.conf上再稍作修改,最后运行nginx -s reload就行了。下面是我的配置:
server {
  listen 443 ssl http2;
  server_name  0.yoursite.com;  #这里改成自己的域名,可以加前缀(之前DNS解析了的)
  # Specify SSL config if using a shared one.
  #include conf.d/ssl/ssl.conf;
  # Allow large attachments
  client_max_body_size 128M;
  location / {
    proxy_pass http://127.0.0.1:8080;       #这里8080对应前面的设置,127.0.0.1代表本机ip
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
  }
  location /notifications/hub {
    proxy_pass http://127.0.0.1:8081;   #8081对应前面的设置
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "upgrade";
  }
  location /notifications/hub/negotiate {
    proxy_pass http://127.0.0.1:8080;   #8080对应前面的设置
  }
  # Optionally add extra authentication besides the AUTH_TOKEN
  # If you don't want this, leave this part out
  location /admin {
    # See: https://docs.nginx.com/nginx/admin-guide/security-controls/configuring-http-basic-authentication/
    auth_basic "Private";
    auth_basic_user_file /path/to/htpasswd_file;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_pass http://127.0.0.1:8080;   #8080对应前面的设置
  }
}
  1. 顺便附上sharelist的Nginx设置:
server {
  listen 443 ssl http2;
  server_name  www.yoursite.com;
  # Specify SSL config if using a shared one.
  #include conf.d/ssl/ssl.conf;
  # Allow large attachments
  location / {
    proxy_pass http://127.0.0.1:33001;
      proxy_set_header Host  $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;

      proxy_set_header Range $http_range;
      proxy_set_header If-Range $http_if_range;
      proxy_no_cache $http_range $http_if_range;
  }
}
Author: zcp
Reprint policy: All articles in this blog are used except for special statements CC BY 4.0 reprint polocy. If reproduced, please indicate source zcp !
评论
 Previous
用八爪鱼采集器爬取COMSOL培训视频
1 前言整理邮件垃圾箱时偶然发现COMSOL(多物理场仿真软件)中国给我发了条有用的信息: COMSOL 用户,您好! 新型冠状病毒肺炎的疫情仍在持续,在疫情期间,COMSOL 中国将向所有注册用户 免费开放 15 个专题,共计
Next 
开始使用TiddlyWiki个人笔记系统和Gnucash个人财务管理系统
1 前言最近事情比较多,想看的书、想学的、不得不学的…其中很多都是无意中逛别人博客后发现的,比如财务管理、GTD、如何整理笔记、保险相关知识… 我之所以会把这些事的优先级放这么高,核心目的还是在于想让自己早点养成习惯,从而提高
  TOC