在此之前你需要准备：聪明的脑子，灵活的手 ，友善的嘴巴，认真的耳朵。废话不多说我们开始吧！一、环境准备与1Panel安装1.服务要求推荐系统：Ubuntu/debian（务必使用最新的系统,不建议使用Centos）硬件配置：1核CPU以上、2GB内存、20GB存储（支持轻量级MySQL运行）域名：需要自己的独立域名，可选是否备案（用于HTTPS证书申请和CDN加速）2.开始搭建首先通过你能想象到的一切方法打开你购买的服务器ssh终端连接然后输入以下命令Ubtnuncurl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.shDebiancurl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && bash quick_start.sh一路回车最后记录下ssh终端打印的1panel信息（外网/内网连接地址，用户名和密码），浏览器打开服务器的1panel网页管理地址登录到1panel管理面板后恭喜你已经完成了第一小步子 xhj016二.部署bitwarden前的准备1.登入1panel后找到侧边栏选择应用商店并打开选择安装如下软件1）mysql(数据库，最新版本即可)2）OpenResty（web平台，用于反向代理bitwarden到外网）这两个软件直接点击搜索然后一键安装即可2.创建一个mysql数据库点开1panel侧边栏的数据库按钮跳转的数据库页面后请按照如下配置创建数据库： 数据库名称（自定义） 数据库用户名（自定义） 数据库密码（自定义，建议使用复杂密码） 权限（所有人%）确定配置后点击确认即可3.创建一个网站用于反向代理bitwarden服务点开1panel侧边栏的网站按钮>网站选项跳转网站管理页面后请按照如下配置创建反向代理网站网站类型（反向代理） 分组（默认） 主域名（你为bitwarden准备的专用域名） 其他域名(默认不写) 监听IPV6(可选可不选) 代号（同网站目录地址，默认即可） 代理地址（填写bitwarden服务地址端口，本篇教程为http://127.0.0.1:8080）三.开始部署bitwarden1.打开1panel的应用商店搜索Bitwarden2.点击安装（请按照如下要求配置）名称（随意，推荐使用Bitwarden,BitwardenServer,Vaultwarden,VaultwardenServer等名字） 版本（默认即可，后续会通过自定义 compose修改安装版本） 端口（这里使用8080） 高级设置（这里要开启） 容器名字（与第一个配置“名称”一样即可） 端口外部访问（这里不要开） CPU限制（默认即可） 内存限制（默认即可） 编辑 compose文件（这里要开启） 拉取镜像（开启）3.自定义 compose配置networks: 1panel-network: external: true # 定义服务列表 services: # 服务名称：vaultwarden（Bitwarden 密码管理器的 Rust 实现） vaultwarden: # 指定容器名称（使用环境变量 CONTAINER_NAME 的值） container_name: ${CONTAINER_NAME} # 部署配置（通常用于 Docker Swarm，但单机模式也可识别） deploy: # 资源限制配置 resources: limits: # 限制 CPU 核数（使用环境变量 CPUS 的值） cpus: ${CPUS} # 限制内存使用量（使用环境变量 MEMORY_LIMIT 的值） memory: ${MEMORY_LIMIT} # 环境变量配置 environment: # 启用管理员令牌 ADMIN_TOKEN: true # MySQL 数据库连接字符串（格式：mysql://用户名:密码@主机:端口/数据库名） # 这里按照格式填写之前创建的数据库连接信息 DATABASE_URL: "mysql://vaultwarden:passwo@1Panel-mysql-OeCW:3306/vaultwarden" # 使用官方最新版镜像 image: vaultwarden/server:latest # 容器标签（用于元数据管理） labels: createdBy: Apps # 标识创建者 # 连接到的网络 networks: - 1panel-network # 使用预定义的 1panel-network # 端口映射（格式：主机IP:主机端口:容器端口） ports: - ${HOST_IP}:${PANEL_APP_PORT_HTTP}:80 # 将主机端口映射到容器 80 端口 # 重启策略：始终自动重启 restart: always # 数据卷映射 volumes: # 将宿主机 /opt/vaultwarden 目录挂载到容器 /data 目录 - /opt/vaultwarden:/data四.启动Bitward并配置自动备份以上步骤全完成后就可以尝试启动Bitwarden服务了，这时候把第二部分第三步创建的网站的域名解析到服务器上，后打开域名应该就可以访问vaultwarden了（如果不行请检查是否配置正确）这时候回到1panel管理面板页面开始配置自动备份
不想继续使用docker？教你彻底卸载docker，不留痕迹
Docker曾是开发神器…直到它变成你的噩梦。或许你厌倦了诡异的容器问题、无止境的重建、”在我电脑上能跑啊！”的甩锅现场，无论什么原因，现在你决定与Docker一刀两断——不是简单卸载，而是要彻底抹除它的所有痕迹。如果你是这种狠人，这份指南就是你的救星。我们不绕弯子，直接进入正题。0 为什么要卸载Docker？残留镜像和废弃卷占用磁盘空间频繁的版本冲突和兼容性问题复杂配置让人抓狂想尝试更轻量的替代方案既然决心已定，我们直击重点。1 步骤1：停止并删除所有容器先给运行中的容器”断气”：docker ps -q | xargs -r docker stop想一键清空所有容器/镜像/数据卷？docker system prune -a --volumes --force⚠️ 警告：这会摧毁所有Docker数据，确认不需要备份再执行2 步骤2：卸载Docker（Ubuntu/Linux系统）Docker文件散落各处，必须斩草除根：sudo apt-get purge -y docker-engine docker docker.io docker-ce docker-ce-cli containerd runc3 步骤3：清理残留文件Docker藏匿的配置文件也要消灭：sudo rm -rf /var/lib/docker sudo rm -rf /var/lib/containerd sudo rm -rf /etc/docker sudo rm -rf ~/.docker4 步骤4：删除软件源和密钥sudo rm /etc/apt/sources.list.d/docker.list sudo rm -rf /etc/apt/keyrings/docker.gpg # 如果密钥目录专为Docker创建： sudo rm -rf /etc/apt/keyrings/5 步骤5：清理孤立软件包sudo apt-get autoremove -y --purge docker docker-ce docker-ce-cli sudo apt-get clean6 步骤6：验证卸载结果docker --version# 应显示 "command not found" docker-compose --version# 同样应报错如果都提示命令不存在，恭喜！卸载成功。可选步骤：删除用户组sudo groupdel docker # 如果创建过专用用户： sudo userdel docker7 步骤7：重启系统（推荐）sudo reboot趁着重启喝口咖啡…此刻，你的系统已与Docker彻底诀别。没有残留配置，没有幽灵卷宗，就像它从未存在过。8 替代方案推荐：Podman：无需守护进程的容器工具 Minikube：轻量级Kubernetes方案 Vagrant：跨平台虚拟化工具或者干脆给自己放个假——容器化什么的，暂时见鬼去吧。再见，Docker。这段孽缘终于结束了。9 极简操作版：# 清空所有数据 docker system prune -a --volumes --force # 卸载软件包 sudo apt-get purge -y docker* # 删除残余文件 sudo rm -rf /var/lib/docker /etc/docker ~/.docker # 自动清理 sudo apt-get autoremove -y --purge docker* # 验证 docker --version # 重启 sudo reboot至此，Docker已从你的世界消失。不念，不悔。
笔记软件掌握在自己手中——使用docker自建e2ee开源笔记软件Notesnook服务器
一 前言笔记软件的类型非常多，划分的标准也不尽相同。以笔记的主要存储位置为标准，既有注重云端的 Notion， OneNote 和 FlowUs 等，也有本地优先的 Obsidian， Logseq 和思源笔记等;以编辑器类型为标准，既有专注于纯文本 / 富文本 / Markdown 编辑的，也有八面玲珑，兼顾日历、任务、书签管理功能的;以加密程度为标准，既有注重隐私安全的，也有注重便捷分享的。当一个笔记软件找到自己的定位，获得了一些目标人群的认可时，也往往会顾此失彼，让另一些潜在客户悄悄流失。例如，Obsidian 以强大的文本编辑能力、本地优先，无须网络或登录账户的快速便捷性和直接使用 .md 文档作为存储格式的开放性受到了用户的交口称赞，与此同时也因为同步的不便遭到了诟病;强调隐私保护的Standard Notes，因简洁的界面、开放源代码和经第三方审计的安全性在私人笔记市场受到欢迎，但与昂贵的订阅价格无法匹配的基础功能也令用户怨声载道。不论如何，这些赫赫有名的笔记软件都拥有自己的独门绝技。在这个硬件产品逐渐同质化的时代，软件产品的差异化，能让市场更加百花齐放，满足不同客户的需求。今天我们尝试部署的笔记软件 Notesnook 就是一个很好的例子。Notesnook 是由巴基斯坦的一个 3 人小公司 Streetwriters 开发的，在 2021 年发布了第一个版本，并在 2022 年以 GPL-3.0 许可证发布了服务端与客户端的源代码。同样以“端到端加密”的特性作为主打卖点，与拥有 8 年历史的 Standard Notes 相比，Notesnook 是一个年轻的竞争者。与 Standard Notes 较为稳健、保守的风格不同，Notesnook 广泛地听取用户意见，积极地引入各种新功能，而它比 Standard Notes 低许多的高级版定价以及相对慷慨的免费层服务吸引了不少 Standard Notes 的忠实用户。不少用户表示，“阻碍我转向 Notesnook 的唯一障碍就是不能自托管”。随着自托管进入 Alpha 阶段和服务端 Docker 镜像的发布，“不能自托管”的时代也已经结束了。尽管官方的完整版自托管文档尚未发布，但是已经有不少用户使用了 GitHub 仓库中的 Building From Source 或 成功进行了部署。docker compose我们使用 进行简便部署，并且用 Caddy 进行反代。docker compose二 安装教程1 前置条件1）Docker 和 Docker Compose2）4 个域名或者子域名，下面用 指代notes.example.io, mono.example.io, events.example.io, auth.example.io3）Caddy V22设置 compose.yml官方提供了一个开箱即用的 ：docker-compose.ymlwget https://raw.githubusercontent.com/streetwriters/notesnook-sync-server/master/docker-compose.yml大部分内容我们都是不需要修改的：x-server-discovery: &server-discovery NOTESNOOK_SERVER_PORT: 5264 NOTESNOOK_SERVER_HOST: notesnook-server IDENTITY_SERVER_PORT: 8264 IDENTITY_SERVER_HOST: identity-server SSE_SERVER_PORT: 7264 SSE_SERVER_HOST: sse-server SELF_HOSTED: 1 IDENTITY_SERVER_URL: ${AUTH_SERVER_PUBLIC_URL} NOTESNOOK_APP_HOST: ${NOTESNOOK_APP_PUBLIC_URL} x-env-files: &env-files - .env services: validate: image: vandot/alpine-bash entrypoint: /bin/bash env_file: *env-files command: - -c - | # List of required environment variables required_vars=( "INSTANCE_NAME" "NOTESNOOK_API_SECRET" "DISABLE_SIGNUPS" "SMTP_USERNAME" "SMTP_PASSWORD" "SMTP_HOST" "SMTP_PORT" "AUTH_SERVER_PUBLIC_URL" "NOTESNOOK_APP_PUBLIC_URL" "MONOGRAPH_PUBLIC_URL" "ATTACHMENTS_SERVER_PUBLIC_URL" ) # Check each required environment variable for var in "$${required_vars[@]}"; do if [ -z "$${!var}" ]; then echo "Error: Required environment variable $$var is not set." exit 1 fi done echo "All required environment variables are set." # Ensure the validate service runs first restart: "no" notesnook-db: image: mongo:7.0.12 hostname: notesnook-db volumes: - dbdata:/data/db - dbdata:/data/configdb networks: - notesnook command: --replSet rs0 --bind_ip_all depends_on: validate: condition: service_completed_successfully healthcheck: test: echo 'db.runCommand("ping").ok' | mongosh mongodb://localhost:27017 --quiet interval: 40s timeout: 30s retries: 3 start_period: 60s # the notesnook sync server requires transactions which only work # with a MongoDB replica set. # This job just runs `rs.initiate()` on our mongodb instance # upgrading it to a replica set. This is only required once but we running # it multiple times is no issue. initiate-rs0: image: mongo:7.0.12 networks: - notesnook depends_on: - notesnook-db entrypoint: /bin/sh command: - -c - | mongosh mongodb://notesnook-db:27017 <<EOF rs.initiate(); rs.status(); EOF notesnook-s3: image: minio/minio:RELEASE.2024-07-29T22-14-52Z ports: - 9000:9000 networks: - notesnook volumes: - s3data:/data/s3 environment: MINIO_BROWSER: "on" depends_on: validate: condition: service_completed_successfully env_file: *env-files command: server /data/s3 --console-address :9090 healthcheck: test: timeout 5s bash -c ':> /dev/tcp/127.0.0.1/9000' || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s # There's no way to specify a default bucket in Minio so we have to # set it up ourselves. setup-s3: image: minio/mc:RELEASE.2024-07-26T13-08-44Z depends_on: - notesnook-s3 networks: - notesnook entrypoint: /bin/bash env_file: *env-files command: - -c - | until mc alias set minio http://notesnook-s3:9000 ${MINIO_ROOT_USER:-minioadmin} ${MINIO_ROOT_PASSWORD:-minioadmin}; do sleep 1; done; mc mb minio/attachments -p identity-server: image: streetwriters/identity:latest ports: - 8264:8264 networks: - notesnook env_file: *env-files depends_on: - notesnook-db healthcheck: test: wget --tries=1 -nv -q http://localhost:8264/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/identity?replSet=rs0 MONGODB_DATABASE_NAME: identity notesnook-server: image: streetwriters/notesnook-sync:latest ports: - 5264:5264 networks: - notesnook env_file: *env-files depends_on: - notesnook-s3 - setup-s3 - identity-server healthcheck: test: wget --tries=1 -nv -q http://localhost:5264/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery MONGODB_CONNECTION_STRING: mongodb://notesnook-db:27017/?replSet=rs0 MONGODB_DATABASE_NAME: notesnook S3_INTERNAL_SERVICE_URL: "http://notesnook-s3:9000" S3_INTERNAL_BUCKET_NAME: "attachments" S3_ACCESS_KEY_ID: "${MINIO_ROOT_USER:-minioadmin}" S3_ACCESS_KEY: "${MINIO_ROOT_PASSWORD:-minioadmin}" S3_SERVICE_URL: "${ATTACHMENTS_SERVER_PUBLIC_URL}" S3_REGION: "us-east-1" S3_BUCKET_NAME: "attachments" sse-server: image: streetwriters/sse:latest ports: - 7264:7264 env_file: *env-files depends_on: - identity-server - notesnook-server networks: - notesnook healthcheck: test: wget --tries=1 -nv -q http://localhost:7264/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery monograph-server: image: streetwriters/monograph:latest ports: - 6264:3000 env_file: *env-files depends_on: - notesnook-server networks: - notesnook healthcheck: test: wget --tries=1 -nv -q http://localhost:3000/api/health -O- || exit 1 interval: 40s timeout: 30s retries: 3 start_period: 60s environment: <<: *server-discovery API_HOST: http://notesnook-server:5264 PUBLIC_URL: ${MONOGRAPH_PUBLIC_URL} autoheal: image: willfarrell/autoheal:latest tty: true restart: always environment: - AUTOHEAL_INTERVAL=60 - AUTOHEAL_START_PERIOD=300 - AUTOHEAL_DEFAULT_STOP_TIMEOUT=10 depends_on: validate: condition: service_completed_successfully volumes: - /var/run/docker.sock:/var/run/docker.sock networks: notesnook: volumes: dbdata: s3data:在这个文件中，我们可以看到，Notesnook 服务器的必需组件包括：1）Vandot2）MongoDB 数据库3）S3 存储，这里采用了自建 MinIO 实例的方式（应该和 Ente 一样，不是必须使用 MinIO，可以接入外部 S3，不过我没试过，这里先不演示）4）身份验证服务器5）同步服务器6）SSE，用于提醒事件7）Monograph，用于分享笔记的公开链接（可以加密）。其中需要映射到的宿主机端口是 5264（同步服务器），6264（Monograph），7264（SSE）和 8264（身份服务器）。如果这些端口被占用，你可以选择映射到其他的端口。3设置 .env我们需要进行个性化设置的是 .env文件，官方同样提供了一个示例：.envINSTANCE_NAME=self-hosted-notesnook-instance # 改成你的实例名称 NOTESNOOK_API_SECRET= # 随机生成一串 >32 位的长字符串 DISABLE_SIGNUPS=false # 这个变量目前（2025年4月3日，v1.0-beta.1）还不能起效， # 如果你需要禁用注册功能，请在自己注册完之后添加以下变量： # DISABLE_ACCOUNT_CREATION=1 # SMTP 配置，用于接收 2FA 代码和重设密码，可以使用你自己的邮件提供商的 SMTP 配置 SMTP_USERNAME= # 大部分情况下，是你的邮箱用户名，例如 user@example.org # 当 SMTP 用户名不是邮箱用户名的时候，会有 bug 出现， # Notesnook 会尝试把发件人地址（也就是邮件的 From） 设置为 SMTP 用户名，这在某些情况下会导致发件被拒绝。 # 我没有找到单独设置发件人地址的方法，已经提交 Issue SMTP_PASSWORD= # SMTP 密码，根据你的邮件提供商的指引设置 SMTP_HOST= # 例如 smtp.gmail.com SMTP_PORT= # SMTP 端口，例如 465 TWILIO_ACCOUNT_SID= # 不需要设置 TWILIO_AUTH_TOKEN= # 不需要设置 TWILIO_SERVICE_SID= # 不需要设置 NOTESNOOK_CORS_ORIGINS= # 不需要设置 NOTESNOOK_APP_PUBLIC_URL=https://app.notesnook.com # 换成你自己的 APP 域名，如 https://notes.example.io MONOGRAPH_PUBLIC_URL=http://localhost:6264 # 换成你的 Monograph 域名，如 https://mono.example.io AUTH_SERVER_PUBLIC_URL=http://localhost:8264 # 换成你的身份服务器域名 https://auth.example.io ATTACHMENTS_SERVER_PUBLIC_URL=http://localhost:9000 # MinIO 地址和端口，可以不用域名 MINIO_ROOT_USER= # 不需要设置 MINIO_ROOT_PASSWORD= # 不需要设置设置完直接启动即可：docker compose up -d4反向代理配置1）Nginx 和 Certbot 的配置参考这里：https://github.com/streetwriters/notesnook-sync-server/issues/20#issuecomment-2603896363server { listen 80; server_name auth.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name auth.domain.com; ssl_certificate /etc/letsencrypt/live/auth.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/auth.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:8264; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } # Notes Server - With WebSocket server { listen 80; server_name notes.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name notes.domain.com; ssl_certificate /etc/letsencrypt/live/notes.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/notes.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:5264; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 3600; proxy_send_timeout 3600; } } # Events Server - With WebSocket server { listen 80; server_name events.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name events.domain.com; ssl_certificate /etc/letsencrypt/live/events.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/events.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:7264; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_read_timeout 3600; proxy_send_timeout 3600; } } # Monograph Server - With Cache server { listen 80; server_name mono.domain.com; return 301 https://$host$request_uri; } server { listen 443 ssl; server_name mono.domain.com; ssl_certificate /etc/letsencrypt/live/mono.domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/mono.domain.com/privkey.pem; include /etc/letsencrypt/options-ssl-nginx.conf; ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem; location / { proxy_pass http://localhost:6264; proxy_cache_use_stale error timeout http_500 http_502 http_503 http_504; proxy_cache_valid 200 60m; add_header X-Cache-Status $upstream_cache_status; expires 1h; add_header Cache-Control "public, no-transform"; } }2）Caddy 的配置参考这里：https://github.com/streetwriters/notesnook-sync-server/issues/20#issuecomment-2763248500notes.example.io { reverse_proxy localhost:5264 } mono.example.io { reverse_proxy localhost:6264 } events.example.io { reverse_proxy localhost:7264 } auth.example.io { reverse_proxy localhost:8264 }正常情况下访问 能看到 Monograph 的默认页面就成功了。https://mono.example.io5在 Notesnook 客户端自定义服务器1）下载 Notesnook 的客户端，进入 Settings -> Servers，填写以下端点：同步服务器 URL：https://notes.example.io身份验证服务器 URL：https://auth.example.io事件服务器 URL：https://events.example.io专论服务器 URL：https:mono.example.io2）然后就可以输入你的邮箱注册账户了~需要注意的是，与 Vikunja 和 Vaultwarden 不同，Notesnook 的邮件验证不是可选项，所以需要填写可以接收到邮件的地址。如果需要关闭注册，可以在自己注册完后修改.env ，加入 DISABLE_ACCOUNT_CREATION=1。
免费开源的网站访问流量统计分析平台Umami的Docker安装方式实战
一 前言Umami统计功能不多，但足以用于日常小站统计使用，本站之前介绍过如何在VPS环境下安装:自建网站统计工具-免费开源的网站访问流量统计分析平台Umami。但有些生产环境的依赖不满足要求或没有安装，或者不想影响生产环境，这个时候通过docker安装Umami则是一个不错的选择。1 官网官网：https://umami.is演示：https://eu.umami.is/share/LGazGOecbDtaIwDr/umami.is项目：https://github.com/mikecao/umami部署完成后的地址：https://s.vvars.com2 要求具有 Node.js 版本 18.18 或更高版本的服务器数据库。Umami支持MariaDB（最低版本v10.5）、MySQL（最低版本v8.0）和PostgreSQL（最低版本v12.14）数据库。二 使用 Docker安装更简单的方式是使用 Docker 一键启动，在源码根目录下面有 docker-compose 的配置，默认配置构建 umami 容器并启动 Postgres 数据库。1 安装 docker-compose环境sudo apt install docker-compose有的VPS，如有些国内的VPS，可能本地环境配置问题，无法安装成功，这个时候可以一键脚本Docker 和 Docker Compose 一键安装脚本 可手动选择安装版本和下载源：bash <(curl -sSL https://linuxmirrors.cn/docker.sh)2 获取源代码并打开umami目录git clone https://github.com/umami-software/umami.git cd umami3 生成容器docker compose up -d或者，仅拉取具有 PostgreSQL 支持的 Umami Docker 映像：docker pull docker.umami.is/umami-software/umami:postgresql-latest或者使用 MySQL 支持：docker pull docker.umami.is/umami-software/umami:mysql-latest不出意外的话，已经可以用ip:3000来访问umami了，对应的用户名为admin，密码umami。三 配置反代域名此步骤用于那些需要 https 自己又没有配置好 Nginx 的同学，如果 http 满足需求可以跳过这一步。将反代代码放入nginx的配置文件中，之后就能通过https://s.vvars.com访问了。location / { proxy_pass http://127.0.0.1:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; }最终nginx配置文件代码如下：server { listen 443 ssl; http2 on; #listen [::]:443 ssl http2; server_name s.vvars.com ; index index.html index.htm index.php default.html default.htm default.php; root /home/wwwroot/default; location / { proxy_pass http://127.0.0.1:3000; proxy_set_header X-Real-IP $remote_addr; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ssl_certificate /usr/local/nginx/conf/ssl/s.vvars.com/fullchain.cer; ssl_certificate_key /usr/local/nginx/conf/ssl/s.vvars.com/s.vvars.com.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; ssl_prefer_server_ciphers on; ssl_ciphers "TLS13-AES-256-GCM-SHA384:TLS13-CHACHA20-POLY1305-SHA256:TLS13-AES-128-GCM-SHA256:TLS13-AES-128-CCM-8-SHA256:TLS13-AES-128-CCM-SHA256:EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; ssl_session_cache builtin:1000 shared:SSL:10m; # openssl dhparam -out /usr/local/nginx/conf/ssl/dhparam.pem 2048 ssl_dhparam /usr/local/nginx/conf/ssl/dhparam.pem; access_log off; }
Docker 和 Docker Compose 一键安装脚本 可手动选择安装版本和下载源
一 前言Docker CE：Docker Community Edition 镜像仓库，用于下载并安装 Docker 相关软件包。 Docker Hub：Docker Hub 镜像仓库，默认为官方提供的公共库，用于切换下载镜像时的来源仓库，又称镜像加速器。1 项目地址：https://github.com/SuperManito/LinuxMirrorshttps://gitee.com/SuperManito/LinuxMirrorshttps://linuxmirrors.cn/2 主要特点轻松使用：只需要一行命令就能直接运行，无需安装任何依赖文档提供了各种场景的解决方案，Linux 初学者也能轻松上手多元软件源适配：深入考察了国内镜像站的系统适配情况，测试了下载速度与IPv6兼容性另外提供全网搜集的国内教育网镜像站和海外镜像站供用户选择零技术门槛：无需了解相关技术，文档提供了全面的知识储备和操作指引文档还提供了一些常见问题的解决方法以及一些高级用法的示例广泛的系统支持：适配众多操作系统，涵盖主流版本，精准识别系统类型及其版本脚本兼容性较高，不支持的系统会有相应提示并无操作跳出脚本功能强大：脚本使换源变得更简单，默认交互运行，逐步引导用户选择软件源配置同时提供了强大的命令选项，可实现各种高级定制需求高度可定制：脚本命令选项设计遵循正式应用程序规范，能够满足各种高级需求代码结构清晰，易于阅读和修改，可克隆后根据需求自行定制开源，MIT：项目已设立开源许可协议，脚本代码完全开源且免费使用二 Docker 一键安装脚本及安装1 一键脚本bash <(curl -sSL https://linuxmirrors.cn/docker.sh)集成安装 Docker Engine 和 Docker Compose (插件)，支持选择或更换软件源以及镜像仓库、安装指定版本、重装等功能，支持 ARM 架构处理器。脚本参考 官方文档 采用官方提供的方法使用系统包管理工具进行安装，这意味着可安装的版本是由官方仓库决定的，本脚本不存在兼容性等问题。2 命令选项（高级用法）名称含义选项值--source指定 Docker CE 源地址(域名或IP)地址--source-registry指定镜像仓库地址(域名或IP)地址--branch指定 Docker CE 源仓库仓库名（详见下方文档）--codename指定 Debian 系操作系统的版本代号代号名称--designated-version指定 Docker CE 安装版本版本号（详见下方文档）--protocol指定 Docker CE 源的 WEB 协议http 或 https--install-latest是否安装最新版本的 Docker Enginetrue 或 false--close-firewall是否关闭防火墙true 或 false--clean-screen是否在运行前清除屏幕上的所有内容true 或 false--ignore-backup-tips忽略覆盖备份提示（即不覆盖备份）无备注：软件源完整格式 <WEB协议>://<软件源地址(域名或IP)>/<软件源仓库(路径)>1)指定 Docker CE 软件源地址bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --source mirror.example.com/docker-ce注意该地址路径需要包含镜像站的 Docker CE 软件源仓库路径即 docker-ce2)指定镜像仓库地址bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --source-registry registry.example.com3)指定 Docker CE 软件源仓库一般无需指定，脚本默认会自动判断bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --branch centos仓库名是固定的，目前只有 centos debian fedora raspbian rhel sles static ubuntu 这几个具体详见 官方安装文档 和 Docker CE 官方仓库4)指定 Docker CE 安装版本指定安装版本时会忽略 是否安装最新版本 的命令选项，格式为 主版本.次版本.补丁版本，例如 27.4.1。bash <(curl -sSL https://linuxmirrors.cn/docker.sh) --designated-version 27.0.0如果指定的版本不存在或者不支持当前系统，届时脚本会报错跳出2 安装过程：root@green-cluster-10 ~ # bash <(curl -sSL https://linuxmirrors.cn/docker.sh) +---------------------------------------------------+ | | | ============================================= | | | | 欢迎使用 Docker 一键安装脚本 | | | | ============================================= | | | +---------------------------------------------------+ ##################################################### 提供以下 Docker CE 和 Docker Hub 源可供选择： ##################################################### Docker CE ❖ 阿里云 1) ❖ 腾讯云 2) ❖ 华为云 3) ❖ Azure 4) ❖ 网易 5) ❖ 清华大学 6) ❖ 中科大 7) ❖ 官方 8) Docker Hub ❖ 阿里云（北京） 1) ❖ 阿里云（杭州） 2) ❖ 阿里云（成都） 3) ❖ 阿里云（广州） 4) ❖ 阿里云（香港） 5) ❖ 腾讯云 6) ❖ 华为云 7) ❖ Azure 8) ❖ DaoCloud 9) ❖ 中科大 10) ❖ 谷歌云 11) ❖ 官方 12) ##################################################### 运行环境 Ubuntu 18.04 x86_64 系统时间 2022-03-27 00:24:28 ##################################################### └─ 请选择并输入你想使用的 Docker CE 源 [ 1~8 ]：8 └─ 是否安装最新版本的 Docker Engine? [Y/n] y └─ 请选择并输入你想使用的 Docker Hub 源 [ 1~12 ]：12 └─ 是否安装 Docker Compose? [Y/n] y三 卸载1、CentOS 卸载 Docker 教程sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine2、Debian / Ubuntu 卸载 Docker 教程sudo apt-get remove docker docker-engine docker.io containerd runc
ZFAKA 程序因为要使用 MYSQL，对VPS还是有一定要求，至少1H1G才能跑，官方推荐是 2H2G。所以之前也只是在本地群晖上搞了Debian学习设置玩下。这次购买了 6.18元的阿里云MYSQL，准备里折腾玩一下，零成本把 ZFAKA 放到网上折腾一下ZFAKA小店Docker版之 数据的备份和迁移使用 HeidiSQL 远程连接 mysql 如图运行 sql 就可以方便恢复原来的数据了阿里云的 mysql 说做任务送20优惠券，也不知道送到哪里了修改数据库链接配置 vim code/conf/application.ini如图修改，停掉本地的MYSQL服务，测试阿里云SQL连接正常
N1教程：Openwrt安装docker webui界面(基于flippy openwrt n1固件)
N1固件可玩性不错，刷了恩山flippy大佬的openwrt 55+o固件，源固件集成docker，在服务-docker开启即可。对于博主这样的小白来说，能用webui当然首选。看了下固件安装说明，里面已经讲了怎么开启docker webui，下面就把我的折腾过程说下吧。1.千万不要按照固件里面那个说明文件更改挂载点，切记，flippy大佬已经挂载好了。2.SSH登录N1，直接输入以下命令:/etc/docker-web系统会直接下载docker的web界面并帮你安装好。3.用IP:9999访问docker web界面即可，设置管理员账号和密码，后面就是docker 的可视化操作了。
最近空闲下来，折腾着把某讯N1刷了flippy大佬的openwrt固件，开启了微力同步。刚开始用的好好的，最近大容量同步的时候，openwrt下的微力同步经常出现崩溃，无法进入管理界面，进N1后台，发现verysync还是显示运行，于是登录/etc/verysync的文件夹，删除里面的临时文件，再重启verysync，发现还是无法进入管理界面。 之前查看分区的时候发现flippy大佬留得docker空间挺大的，约莫着用docker运行会不会更好一些。安装docker可视化界面的教程可以看这里:N1教程：Openwrt安装docker webui界面(基于flippy openwrt n1固件)由于docker默认源是docker.io，里面没有微力同步，因此从官方找了安装源，为保险起见还是用命令行安装。SSH登录N1后台，按如下步骤:1.先查看文件目录绑定情况root@OpenWrt:~# df -h Filesystem Size Used Available Use% Mounted on udev 512.0K 0 512.0K 0% /dev tmpfs 181.0M 108.0K 180.9M 0% /run /dev/mmcblk2p2 720.0M 646.6M 2.6M 100% / tmpfs 905.1M 34.8M 870.3M 4% /tmp tmpfs 512.0K 0 512.0K 0% /dev /dev/sda2 1.7M 27.0K 1.5M 2% /mnt/sda2 /dev/mmcblk2p4 4.9G 187.2M 4.4G 4% /mnt/mmcblk2p4 /dev/sda1 916.8G 25.5G 844.7G 3% /mnt/sda1 /dev/mmcblk2p3 720.0M 3.4M 707.0M 0% /mnt/mmcblk2p3 /dev/mmcblk2p1 157.5M 75.7M 81.8M 48% /boot cgroup 905.1M 0 905.1M 0% /sys/fs/cgroup /dev/mmcblk2p4 4.9G 187.2M 4.4G 4% /mnt/mmcblk2p4/docker2.运行安装命令root@OpenWrt:~# docker run --name verysync -d -v /mnt/sda1:/data -p 8886:8886 jonnyan404/verysync Unable to find image 'jonnyan404/verysync:latest' locally latest: Pulling from jonnyan404/verysync 069a56d6d07f: Pull complete 09a4617851cb: Pull complete e9bc0e4c440d: Pull complete Digest: sha256:7a33c178481fe0bd84bd94d1215c0f8ac659e41d319b527b18b2ea9546ee46f4 Status: Downloaded newer image for jonnyan404/verysync:latest d77088ffa0094377e52eb7efc293da1597e2f23b61d576e46c324bbb5e4e44253.熟悉的界面又回来了，尽情玩耍吧。