纯手搓-nginx+vaultwarden+obsidanlivesync+wordpress
本文最后更新于 701 天前,其中的信息可能已经有所发展或是发生改变。

实现目标

  • nginx启用tcp级别分流,通过sni实现复用443端口,服务器仅对外开放443、80端口
  • 自建bitwarden
  • 自建obsidian的同步服务器,使用的是couchdb数据库+self-hosted lifeSync插件
  • wordpress
  • acme
  • 除acme外,其他全部用docker容器实现

没有使用宝塔面板、1pannel、npm之类的面板

折腾记录

环境

debian12

配置服务器安全措施

  • 更换ssh端口
  • 密钥登录

安装docker

其他版本系统的安装方法请参考docker官方 docker安装
添加源

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update

安装

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

我是用非root用户执行安装的,装完后经常碰到permission问题
解决方法:
查看用户组的情况

ls -l /lib/systemd/system/docker.socket

结果为-rw-r--r-- 1 root root 295 Oct 26 17:06 /lib/systemd/system/docker.socket 表示docker为root用户组的权限,非root用户要做的就是添加docker用户组,并将自己添加到docker用户组

sudo usermod -aG docker $USER
sudo usermod -aG docker mming
sudo chgrp docker /lib/systemd/system/docker.socket
sudo chmod g+w /lib/systemd/system/docker.socket

acme自动维护证书

获得api令牌后进行测试

curl -X GET "https://api.cloudflare.com/client/v4/user/tokens/verify" \
     -H "Authorization: Bearer 4DomSfJrHGs5bYLQ5SGM5KWykebV" \
     -H "Content-Type:application/json"

测试通过后配置必要的环境变量

export CF_Token="your_token"
export CF_Account_ID="your_id"
export CF_Zone_ID="your_zone_id"

执行命令

acme.sh --issue --force -d exsample1.com -d exsample2.com --dns dns_cf -k ec-256 --days 60 && acme.sh --installcert -d exsample1.com -d exsample2.com \
 --key-file    /path/to/dockers/ca/private.key  \
 --fullchain-file /path/to/dockers/ca/cert.crt \
 --reloadcmd  "docker restart nginx"

/path/to/ 要换成你自己的想存放证书的路径!~
为了正确执行--reloadcmd "docker restart nginx",我一般会先用docker pull 个nginx下来运行着

字段信息 解释
-issue 签发请求
-days [days] 请求签发证书的周期,配合 –issue 使用
-server [ACME 目录 URL] 证书服务商的 ACME 目录 URL,配合 –issue 使用
-installcert 安装证书
-d [网站域名] 配置证书的域名信息
-webroot [网站跟文件路径] 文件验证需要的网站跟文件路径
-dns [DNS类型] 配置验证域名的DNS信息
-cert-file [证书保存的路径] 安装证书保存的路径
-key-file [私钥保存的路径] 安装私钥保存的路径
-fullchain-file [证书链保存的路径] 安装证书链保存的路径
-reloadcmd [Web 重载命令] 安装证书完成之后Web服务的重载命令

各类配置文件

nginx

vaultwarden

couchdb

dockercompose

version: '3'
services:
  nginx:
    restart: always
    container_name: nginx
    image: nginx
    networks:
      - nginx_share_network
    ports:
      - 80:80
      - 443:443
    volumes:
      - /path/to/nginx/data/html:/usr/share/nginx/html
      - /path/to/nginx/data/www:/var/www
      - /path/to/nginx/data/logs:/var/log/nginx
      # 有可能会出现不能挂载,这个时候用手动拷贝配置文件就行
      - /path/to/nginx/data/nginx.conf:/etc/nginx/nginx.conf
      - /path/to/ca:/etc/nginx/cert
      - /path/to/nginx/data/conf.d:/etc/nginx/conf.d
      - /path/to/nginx/data/stream.conf.d:/etc/nginx/stream.conf.d
    environment:
      - NGINX_PORT=80
      - TZ=Asia/Shanghai

  vaultwarden:
    restart: always
    image: vaultwarden/server:latest
    container_name: vaultwarden
    networks:
      - nginx_share_network
    environment:
      - DOMAIN=https://exsample.com/vault/ # 这是您希望与您的Vaultwarden实例关联的域名。
      - LOGIN_RATELIMIT_MAX_BURST=10 # 允许在一阵登录/两步验证尝试中的最大请求次数。
      - LOGIN_RATELIMIT_SECONDS=60 # 这是来自同一IP的登录请求之间的平均秒数,在Vaultwarden限制登录次数之前。
      - ADMIN_RATELIMIT_MAX_BURST=10 # 这与LOGIN_RATELIMIT_MAX_BURST相同,只争对admin面板。
      - ADMIN_RATELIMIT_SECONDS=60 # 这与LOGIN_RATELIMIT_SECONDS相同
      - ADMIN_SESSION_LIFETIME=20 # 会话持续时间
#      - ADMIN_TOKEN=yourtoken # 此值是Vaultwarden管理员面板的令牌(一种密码)。为了安全起见,
      - ADMIN_TOKEN=$$argon2id$$v=19$$m=65540,t=3,p=yours  #新的admin验证方式,这儿是hash值,web进入admin页面的时候输入生成hash的密码就可以
      - SENDS_ALLOWED=true  # 此设置决定是否允许用户创建Bitwarden发送 - 一种凭证共享形式。
      - EMERGENCY_ACCESS_ALLOWED=true # 此设置控制用户是否可以启用紧急访问其账户的权限。例如,这样做可以在用户去世后,配偶可以访问密码库以获取账户凭证。>
      - WEB_VAULT_ENABLED=true # 此设置决定了网络保险库是否可访问。一旦您配置了您的账户和客户端,停止您的容器,然后将此值切换为false并重启Vaultwarden,[>
      - SIGNUPS_ALLOWED=false # 此设置控制新用户是否可以在没有邀请的情况下注册账户。可能的值:true / false。
      - WEBSOCKET_ENABLED=true
      - IP_HEADER:X-Forwarded-For
      - LOG_FILE=/var/log/vaultwarden/vaultwarden.log
#    ports:
#      - '127.0.0.1:8200:80'
    volumes:
      - vaultwarden-data:/data/
      - ./vaultwarden_log:/var/log/vaultwarden

  backup:
    restart: always
    image: ttionya/vaultwarden-backup:latest
    container_name: vw-backup
    networks:
      - nginx_share_network
    environment:
    #   RCLONE_REMOTE_NAME: 'BitwardenBackup'
    #   RCLONE_REMOTE_DIR: '/BitwardenBackup/'
    #   RCLONE_GLOBAL_FLAG: ''
    #   CRON: '5 * * * *'
    #   ZIP_ENABLE: 'TRUE'
    #   ZIP_PASSWORD: 'WHEREISMYPASSWORD?'
    #   ZIP_TYPE: 'zip'
    #   BACKUP_FILE_SUFFIX: '%Y%m%d'
       BACKUP_KEEP_DAYS: 10
    #   PING_URL: ''
    #   MAIL_SMTP_ENABLE: 'FALSE'
    #   MAIL_SMTP_VARIABLES: ''
    #   MAIL_TO: ''
    #   MAIL_WHEN_SUCCESS: 'TRUE'
    #   MAIL_WHEN_FAILURE: 'TRUE'
    #   TIMEZONE: 'UTC'
       TIMEZONE: 'Asia/Shanghai'

    volumes:
      - vaultwarden-data:/bitwarden/data/
      - vaultwarden-rclone-data:/config/
    #   - /path/to/env:/.env

  couchdb:
    restart: always
    image: couchdb
    container_name: obsidian-livesync
    networks:
      - nginx_share_network
    environment:
      - COUCHDB_USER=admin
      - COUCHDB_PASSWORD=yours # 密码
      - PUID=1000
      - PGID=1000
      - LETSENCRYPT_HOST=couchdb.exsample.com #域名 好像不加这参数也行
      - VIRTUAL_HOST=couchdb.exsample.com #域名 好像不加这参数也行
      - VIRTUAL_PORT=5984
    volumes:
      - ./data-couch:/opt/couchdb/data
      - ./cfg-couch:/opt/couchdb/etc/local.d 这里面又个ini文件要配置好

  db:
    image: mysql:8.0 # 使用mysql镜像,不建议修改版本号,后续如果要升级,千万记得备份数据库
    container_name: wordpress-db
    restart: unless-stopped
    command: --max-binlog-size=200M --expire-logs-days=2
    environment:
      MYSQL_ROOT_PASSWORD: passwd1 # 这里是上面的root密码
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: passwd2 # 这里是原来的密码
    volumes:
      - './blog/db:/var/lib/mysql'
    networks:
      - nginx_share_network

  app:
    image: wordpress:latest
    container_name: wordpress-app
    restart: unless-stopped
#    ports:
#      - 8080:80  # 按需修改,左边的8080可以改成服务器上没有用过的端口
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_NAME: wordpress
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: passwd3 # 按需修改
    volumes:
      - './blog/app:/var/www/html'
    links:
      - db:db
    depends_on:
      - redis
      - db
    networks:
      - nginx_share_network

  redis:
    image: redis:alpine
    container_name: wordpress-redis
    restart: unless-stopped
    volumes:
      - ./blog/redis-data:/data
    networks:
      - nginx_share_network

volumes:
  vaultwarden-data:
    # Specify the name of the volume where you save the vaultwarden data,
    # use vaultwarden-data for new users
    # and bitwardenrs-data for migrated users
    name: vaultwarden-data
    # name: bitwardenrs-data
  vaultwarden-rclone-data:
    external: true
    # Specify the name of the volume where you save the rclone configuration,
    # use vaultwarden-rclone-data for new users
    # and bitwardenrs-rclone-data for migrated users
    name: vaultwarden-rclone-data
    # name: bitwardenrs-rclone-data

networks:
  nginx_share_network:
    driver: bridge

vaultwarden的hash模式密码参考:
Secure the ADMIN_TOKEN

搁浅,虽然自己折腾完了,但是要再写成教程的话并不容易,😓

https://blog.0001024.xyz/nginx-reverseproxy-vaultwarden-obsidanlivesync-wordpress/

评论

  1. biu
    2 年前
    2024-1-05 23:49:47

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇