├── docs ├── favicon.ico ├── gh.txt └── github加速.md ├── png ├── touming.jpg ├── v2board.png ├── jichangurl.png └── stalwart │ ├── 10.png │ ├── 11.png │ ├── 12.png │ ├── 13.png │ ├── 14.png │ ├── 15.png │ ├── 16.png │ ├── 17.png │ ├── 18.png │ ├── 19.png │ ├── 2.png │ ├── 20.png │ ├── 21.png │ ├── 22.png │ ├── 23.png │ ├── 24.png │ ├── 3.png │ ├── 4.png │ ├── 5.png │ ├── 6.png │ ├── 7.png │ ├── 8.png │ └── 9.png ├── docker ├── 青龙面板.md ├── 网速测速.md ├── liunx文件管理面板.md ├── adguardhome.md ├── ddns域名动态解析.md ├── synctv一起追剧.md ├── 文件快传.md ├── 直播录制.md ├── 批量管理SSH面板.md ├── 容器使用指定的IP地址.md ├── 问答社区.md ├── docker v2rayA.md ├── Docker定时任务.md ├── docker bilibili tool.md ├── astrbot机器人.md ├── SRS直播系统.md ├── xiaoya媒体库.md ├── 站点分析.md ├── 彩虹聚合DNS.md ├── RustDesk远程工具.md ├── TG代理.md ├── docker emby.md ├── Nginx Proxy Manager面板.md ├── docker ffmpeg.md ├── firefox浏览器.md ├── PHP-Laravel框架.md ├── SSH隧道反向代理.md ├── gitlab.md ├── halo博客.md ├── typecho轻量级博客.md ├── docker xray.md ├── 异次元发卡.md ├── 云vscode.md ├── maccms影视站.md ├── 数据库管理面板.md ├── frp内网穿透.md ├── new-api.md ├── 1panel面板.md ├── java.md ├── docker warp.md ├── flarum论坛网站.md ├── Drupal网站系统.md ├── cloudreve网盘系统.md ├── docker windows.md ├── 域名SSL申请.md ├── 自建rust轻量邮箱服务.md ├── mitmproxy抓包.md ├── 极光转发面板.md ├── docker mysql.md ├── docker xui.md ├── L2TP.md ├── docker dujiaoka.md ├── docker wordpress.md ├── Docker-bake.md ├── tailscale组网.md ├── Minecraft服务端.md ├── alist网盘挂载.md ├── Poste.io邮局.md ├── 自建客服系统.md ├── docker xrayr.md ├── docker epusdt.md ├── 哪吒监控.md ├── docker xboard.md └── tokenpay支付.md ├── workflows ├── github-pages.yml ├── docker-ghcr-cron.yml ├── docker-ghcr.yml ├── docker-ghcr-dev.yml ├── docker-hub.yml └── README.md └── README.md /docs/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/docs/favicon.ico -------------------------------------------------------------------------------- /png/touming.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/touming.jpg -------------------------------------------------------------------------------- /png/v2board.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/v2board.png -------------------------------------------------------------------------------- /png/jichangurl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/jichangurl.png -------------------------------------------------------------------------------- /png/stalwart/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/10.png -------------------------------------------------------------------------------- /png/stalwart/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/11.png -------------------------------------------------------------------------------- /png/stalwart/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/12.png -------------------------------------------------------------------------------- /png/stalwart/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/13.png -------------------------------------------------------------------------------- /png/stalwart/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/14.png -------------------------------------------------------------------------------- /png/stalwart/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/15.png -------------------------------------------------------------------------------- /png/stalwart/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/16.png -------------------------------------------------------------------------------- /png/stalwart/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/17.png -------------------------------------------------------------------------------- /png/stalwart/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/18.png -------------------------------------------------------------------------------- /png/stalwart/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/19.png -------------------------------------------------------------------------------- /png/stalwart/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/2.png -------------------------------------------------------------------------------- /png/stalwart/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/20.png -------------------------------------------------------------------------------- /png/stalwart/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/21.png -------------------------------------------------------------------------------- /png/stalwart/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/22.png -------------------------------------------------------------------------------- /png/stalwart/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/23.png -------------------------------------------------------------------------------- /png/stalwart/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/24.png -------------------------------------------------------------------------------- /png/stalwart/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/3.png -------------------------------------------------------------------------------- /png/stalwart/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/4.png -------------------------------------------------------------------------------- /png/stalwart/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/5.png -------------------------------------------------------------------------------- /png/stalwart/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/6.png -------------------------------------------------------------------------------- /png/stalwart/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/7.png -------------------------------------------------------------------------------- /png/stalwart/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/8.png -------------------------------------------------------------------------------- /png/stalwart/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/sky22333/Docker-Hub/HEAD/png/stalwart/9.png -------------------------------------------------------------------------------- /docker/青龙面板.md: -------------------------------------------------------------------------------- 1 | ### docker部署青龙面板(自动化脚本) 2 | 3 | ``` 4 | docker run -idt \ 5 | -v $PWD/ql:/ql/data \ 6 | -p 5700:5700 \ 7 | --name qinglong \ 8 | --hostname qinglong \ 9 | --restart unless-stopped \ 10 | whyour/qinglong:latest 11 | ``` 12 | -------------------------------------------------------------------------------- /docker/网速测速.md: -------------------------------------------------------------------------------- 1 | ### 自建网速测速 2 | - 基于GO实现 3 | - [Github地址](https://github.com/xiaoxinpro/speedtest-go-zh) 4 | 5 | ``` 6 | docker run -d \ 7 | --name speedtest \ 8 | --restart always \ 9 | -p 8989:8989 \ 10 | -v $(pwd)/config:/app/config \ 11 | chishin/speedtest-go-zh:latest 12 | ``` 13 | -------------------------------------------------------------------------------- /docker/liunx文件管理面板.md: -------------------------------------------------------------------------------- 1 | ### Liunx文件管理器 2 | 3 | ``` 4 | docker run -d \ 5 | -v /:/srv \ 6 | -v /home:/database \ 7 | -e PUID=$(id -u) \ 8 | -e PGID=$(id -g) \ 9 | -p 7777:80 \ 10 | filebrowser/filebrowser:s6 11 | ``` 12 | 13 | 使用`ip:7777`进入文件管理器,账户名为`admin`密码为`admin` 14 | 15 | 设置—用户管理—用户编辑—增加文件管理命令`unzip tar chmod` 16 | 17 | 示例`unzip you.zip` / `chmod -R 777 home` 18 | -------------------------------------------------------------------------------- /docker/adguardhome.md: -------------------------------------------------------------------------------- 1 | ### adguardhome自建DNS 2 | 3 | - 需要占用系统的53端口 4 | 5 | ``` 6 | services: 7 | adguardhome: 8 | image: adguard/adguardhome 9 | container_name: adguardhome 10 | restart: always 11 | network_mode: "host" 12 | volumes: 13 | - ./work:/opt/adguardhome/work 14 | - ./conf:/opt/adguardhome/conf 15 | environment: 16 | - TZ=Asia/Shanghai 17 | ``` 18 | -------------------------------------------------------------------------------- /docker/ddns域名动态解析.md: -------------------------------------------------------------------------------- 1 | ## docker部署ddns-go域名动态解析服务 2 | 3 | - 挂载主机目录, docker host模式。 4 | ``` 5 | docker run -d --name ddns-go --restart=always --net=host -v ./ddns:/root jeessy/ddns-go 6 | ``` 7 | 8 | > 在浏览器中打开`http://主机IP:9876`并修改你的配置。 9 | > 10 | > 进入面板后先设置用户名和密码,否则无法开启公网访问。 11 | 12 | 13 | - 重置密码 14 | ``` 15 | docker exec ddns-go ./ddns-go -resetPassword 自定义密码 16 | 17 | docker restart ddns-go 18 | ``` 19 | -------------------------------------------------------------------------------- /docker/synctv一起追剧.md: -------------------------------------------------------------------------------- 1 | ## 直播和观影平台synctv 2 | 3 | ``` 4 | docker run -d --name synctv -p 8080:8080 synctvorg/synctv:latest 5 | ``` 6 | 7 | 默认管理员账户: 8 | ``` 9 | root 10 | ``` 11 | ``` 12 | root 13 | ``` 14 | 15 | [官方地址](https://github.com/synctv-org/synctv) 16 | 17 | 18 | 19 | 如果你想改前端文件,需要clone前端项目,然后修改,编译出前端文件 20 | 21 | 然后运行docker的时候映射编译好的前端文件:`-v /路径/dist:/dist`,同时添加环境变量`-e WEB_PATH=/dist` 22 | 23 | 24 | 例如: 25 | ``` 26 | docker run -d --name synctv -p 8080:8080 -e WEB_PATH=/dist -v /路径/dist:/dist synctvorg/synctv:latest 27 | ``` 28 | 29 | 30 | -------------------------------------------------------------------------------- /docker/文件快传.md: -------------------------------------------------------------------------------- 1 | ### Docker部署文件快传 2 | 3 | `docker-compose.yaml`配置 4 | 5 | ``` 6 | services: 7 | send: 8 | image: registry.gitlab.com/timvisee/send 9 | container_name: send 10 | ports: 11 | - "1443:1443" 12 | environment: 13 | - BASE_URL=https://域名 14 | - MAX_FILE_SIZE=4294967296 # 4GB 15 | - REDIS_HOST=redis # Redis地址 16 | volumes: 17 | - ./uploads:/uploads 18 | restart: always 19 | 20 | redis: 21 | image: redis:alpine 22 | restart: always 23 | volumes: 24 | - ./redis-data:/data 25 | ``` 26 | 27 | 文档:https://gitlab.com/timvisee/send/-/blob/master/docs/docker.md 28 | -------------------------------------------------------------------------------- /docker/直播录制.md: -------------------------------------------------------------------------------- 1 | ### 循环值守直播录制 2 | 3 | 项目地址:https://github.com/ihmily/DouyinLiveRecorder 4 | 5 | 6 | ### `docker-compose`部署 7 | ``` 8 | services: 9 | app: 10 | image: ihmily/douyin-live-recorder:latest 11 | environment: 12 | - TERM=xterm-256color 13 | tty: true 14 | stdin_open: true 15 | #build: . 16 | volumes: 17 | - ./config:/app/config 18 | - ./logs:/app/logs 19 | - ./backup_config:/app/backup_config 20 | - ./downloads:/app/downloads 21 | restart: always 22 | ``` 23 | 24 | 直播间链接配置文件:`./config/URL_config.ini`,手动配置一行一个,自动热重载。 25 | 26 | 自定义配置文件:`./config/config.ini` 可选项 27 | 28 | 视频文件保存在:`./downloads` 29 | -------------------------------------------------------------------------------- /docker/批量管理SSH面板.md: -------------------------------------------------------------------------------- 1 | ### Docker部署easynode批量管理SSH面板 2 | 3 | ``` 4 | docker run -d \ 5 | --net=host \ 6 | --restart=always \ 7 | -v /root/easynode/db:/easynode/app/db \ 8 | chaoszhu/easynode 9 | ``` 10 | 11 | 默认信息 12 | ``` 13 | 默认账户密码 admin/admin 14 | web端口:8082 15 | ``` 16 | 17 | - `docker-compose.yaml`配置 18 | 19 | ``` 20 | services: 21 | easynode: 22 | image: chaoszhu/easynode 23 | container_name: easynode 24 | restart: always 25 | network_mode: host 26 | volumes: 27 | - ./easynode/db:/easynode/app/db 28 | ``` 29 | 30 | 变量:`-e ALLOWED_IPS=127.0.0.1,127.0.0.2` 指定IP白名单才能访问 31 | 32 | SSH与监控服务都将以`该服务器作为中转` 33 | 34 | --- 35 | 36 | [项目地址](https://github.com/chaos-zhu/easynode) 37 | -------------------------------------------------------------------------------- /docker/容器使用指定的IP地址.md: -------------------------------------------------------------------------------- 1 | ### 多个公网IP的情况下,给容器使用指定的IP地址 2 | 3 | #### 1:创建`macvlan`网络 4 | ``` 5 | docker network create -d macvlan \ 6 | --subnet=1.2.3.0/24 \ 7 | --gateway=1.2.3.1 \ 8 | -o parent=eth0 macvlan_net 9 | ``` 10 | 11 | - `--subnet`:公网网段 12 | - `--gateway`:系统默认网关 13 | - `parent=eth0`:使用的物理网卡 14 | 15 | 16 | #### 2:给容器分配公网IP 17 | 18 | `ip`就是你要分配的公网IP,这个公网IP必须在宿主机网卡可以查看到 19 | 20 | ``` 21 | docker run -it --rm \ 22 | --network macvlan_net \ 23 | --ip=1.2.3.5 \ 24 | alpine:curl 25 | ``` 26 | 27 | ``` 28 | docker run -it --rm \ 29 | --network macvlan_net \ 30 | --ip=1.2.3.6 \ 31 | alpine:curl 32 | ``` 33 | 34 | #### 说明 35 | 36 | 容器网络类似于host,无需映射端口,但是宿主机无法直接访问容器 37 | 38 | 每个容器都使用指定的公网IP,所以不存在端口冲突问题,在容器内部执行`ip a`也能查看到分配的公网IP 39 | -------------------------------------------------------------------------------- /docker/问答社区.md: -------------------------------------------------------------------------------- 1 | ### Docker部署轻量级论坛社区 2 | 3 | ``` 4 | docker run -d -p 8080:80 -v ./answer_data:/data --name answer --restart always apache/answer:latest 5 | ``` 6 | 7 | 生产环境: 8 | ``` 9 | services: 10 | answer: 11 | image: apache/answer:latest 12 | container_name: answer 13 | ports: 14 | - "9080:80" 15 | volumes: 16 | - ./answer_data:/data 17 | restart: always 18 | depends_on: 19 | - db 20 | 21 | db: 22 | image: mysql:8.0 23 | container_name: mysql 24 | environment: 25 | MYSQL_ROOT_PASSWORD: yourpassword 26 | MYSQL_DATABASE: answer 27 | MYSQL_USER: answer 28 | MYSQL_PASSWORD: answerpassword 29 | restart: always 30 | volumes: 31 | - ./mysql_data:/var/lib/mysql 32 | ``` 33 | -------------------------------------------------------------------------------- /docker/docker v2rayA.md: -------------------------------------------------------------------------------- 1 | ### Liunx系统代理工具V2rayA 2 | 3 | ``` 4 | docker run -d \ 5 | --restart=always \ 6 | --privileged \ 7 | --network=host \ 8 | --name v2raya \ 9 | -e V2RAYA_LOG_FILE=/tmp/v2raya.log \ 10 | -e V2RAYA_V2RAY_BIN=/usr/local/bin/v2ray \ 11 | -e V2RAYA_NFTABLES_SUPPORT=off \ 12 | -e IPTABLES_MODE=legacy \ 13 | -v /lib/modules:/lib/modules:ro \ 14 | -v /etc/resolv.conf:/etc/resolv.conf \ 15 | -v /etc/v2raya:/etc/v2raya \ 16 | mzz2017/v2raya 17 | ``` 18 | 19 | web面板地址:`http://公网IP:2017` 20 | 21 | 22 | #### 环境变量 23 | ``` 24 | export http_proxy=socks5://127.0.0.1:20170 25 | export https_proxy=socks5://127.0.0.1:20170 26 | ``` 27 | 默认情况下 v2rayA 会通过内核开放 20170(socks5), 20171(http) 28 | 29 | 30 | #### 透明代理配置 31 | 32 | ![alt](/png/touming.jpg) 33 | -------------------------------------------------------------------------------- /docker/Docker定时任务.md: -------------------------------------------------------------------------------- 1 | ### 容器化定时任务 2 | 3 | [项目地址](https://github.com/mcuadros/ofelia) 4 | 5 | Ofelia是一款基于 Go 语言构建的现代、低资源占用的Docker环境作业调度程序。Ofelia 旨在取代老式的cron ⁠。 6 | 7 | 特点: 8 | ``` 9 | job-exec:在已经运行的容器里执行命令。 10 | job-run:每次任务都启动一个新的容器来执行命令。 11 | job-local:直接在 Ofelia 自己容器里执行命令。 12 | job-service-run:在 Docker Swarm 集群中启动一个临时服务来执行命令。 13 | ``` 14 | 15 | 16 | #### 在别的容器里执行任务示例 17 | `config.ini`配置示例 18 | ``` 19 | [job-exec "curl-task"] 20 | # 每2秒执行一次 21 | schedule = @every 2s 22 | # 要执行的命令 23 | command = curl -s 127.0.0.1 24 | # 在nginx容器中执行 25 | container = nginx 26 | ``` 27 | 28 | `docker`启动命令 29 | ``` 30 | docker run -d --name ofelia \ 31 | -v /var/run/docker.sock:/var/run/docker.sock:ro \ 32 | -v ./ofelia.ini:/etc/ofelia/config.ini \ 33 | --restart always \ 34 | mcuadros/ofelia:latest 35 | ``` 36 | -------------------------------------------------------------------------------- /docker/docker bilibili tool.md: -------------------------------------------------------------------------------- 1 | B站自动执行任务的工具 2 | 3 | 点赞,投币,涨经验,签到等等功能 4 | 5 | 6 | 7 | ``` 8 | docker run -d --name="bili" \ 9 | -v /bili/Logs:/app/Logs \ 10 | -e Ray_DailyTaskConfig__Cron="0 15 * * *" \ 11 | -e Ray_LiveLotteryTaskConfig__Cron="0 22 * * *" \ 12 | -e Ray_UnfollowBatchedTaskConfig__Cron="0 6 1 * *" \ 13 | -e Ray_VipBigPointConfig__Cron="7 1 * * *" \ 14 | ghcr.io/raywangqvq/bilibili_tool_pro 15 | ``` 16 | 17 | 18 | 19 | 20 | 21 | 22 | 扫码登录启动脚本 23 | ``` 24 | docker exec -it bili bash -c "dotnet Ray.BiliBiliTool.Console.dll --runTasks=Login" 25 | ``` 26 | 27 | 28 | 查看日志 29 | ``` 30 | docker logs -f bili 31 | ``` 32 | 33 | 34 | 每天的日志记录存放在`/bili/Logs`目录下 35 | 36 | 可以查看有没有出异常,或者掉登录的情况。 37 | 38 | 39 | [官方配置说明 40 | ](https://github.com/RayWangQvQ/BiliBiliTool.Docs/blob/main/configuration.md) 41 | 42 | 43 | --- 44 | -------------------------------------------------------------------------------- /docker/astrbot机器人.md: -------------------------------------------------------------------------------- 1 | ### `astrbot`QQ微信机器人支持大模型 2 | 3 | `docker-compose.yml` 4 | ``` 5 | services: 6 | astrbot: 7 | image: soulter/astrbot:latest 8 | container_name: astrbot 9 | ports: 10 | - "6180-6200:6180-6200" 11 | - "11451:11451" 12 | volumes: 13 | - ./data:/AstrBot/data 14 | tty: true 15 | stdin_open: true 16 | restart: always 17 | 18 | caddy: 19 | image: caddy:alpine 20 | container_name: caddy 21 | restart: always 22 | cap_add: 23 | - NET_ADMIN 24 | ports: 25 | - "80:80" 26 | - "443:443" 27 | - "443:443/udp" 28 | volumes: 29 | - ./Caddyfile:/etc/caddy/Caddyfile 30 | ``` 31 | 32 | `Caddyfile` 33 | ``` 34 | bot.example.com { 35 | reverse_proxy astrbot:6196 36 | } 37 | ``` 38 | 39 | 面板后台端口`11451` 40 | 41 | [官方地址](https://github.com/Soulter/AstrBot) 42 | -------------------------------------------------------------------------------- /docker/SRS直播系统.md: -------------------------------------------------------------------------------- 1 | ### SRS流媒体推流直播系统 2 | 3 | ``` 4 | docker run --restart always -d --name oryx -v $HOME/data:/data -p 8080:2022 -p 8443:2443 -p 1935:1935 -p 8000:8000/udp -p 10080:10080/udp ossrs/oryx:v5 5 | ``` 6 | 7 | 8 | 9 | `docker-compose.yml` 10 | ``` 11 | services: 12 | oryx: 13 | image: ossrs/oryx:v5 14 | container_name: oryx 15 | restart: always 16 | volumes: 17 | - ./data:/data 18 | ports: 19 | - "80:2022" 20 | - "443:2443" 21 | - "1935:1935" 22 | - "8000:8000/udp" 23 | - "10080:10080/udp" 24 | ``` 25 | 26 | 后台web端口为`8080` 27 | 28 | 29 | ##### [SRS官方文档](https://ossrs.net/lts/zh-cn/docs/v5/doc/flv) 30 | 31 | ### 将播放器嵌入网站(以WordPress为例) 32 | 33 | ### SRS播放器 34 | 35 | WP插件商城搜索`SRS Player` 36 | 37 | 文章插入简码: 38 | ``` 39 | [srs_player url="视频链接"] 40 | ``` 41 | 42 | 视频链接必须使用HTTPS。 43 | 44 | --- 45 | -------------------------------------------------------------------------------- /docker/xiaoya媒体库.md: -------------------------------------------------------------------------------- 1 | ### 小雅媒体库 2 | 3 | ``` 4 | version: '3.8' 5 | services: 6 | alist: 7 | image: 'xiaoyaliu/alist:latest' 8 | container_name: xiaoya 9 | environment: 10 | - TZ=${TZ:-Asia/Shanghai} 11 | volumes: 12 | - '/home/xiaoya:/www/data' 13 | - '/home/xiaoya:/data' 14 | ports: 15 | - '2346:2346' 16 | - '2345:2345' 17 | - '5678:80' 18 | restart: unless-stopped 19 | ``` 20 | 21 | #### 教程 22 | 23 | 配置`home/xiaoya`文件内的参数,然后重启 24 | 25 | [配置文档](https://xiaoyaliu.notion.site/xiaoya-docker-69404af849504fa5bcf9f2dd5ecaa75f#bc572531d09e4baa80afdf3f52653c7d) 26 | 27 | 端口:5678 28 | 29 | webdav 账号密码 30 | 用户: `guest` 密码: `guest_Api789` 31 | 32 | 重启就会自动更新数据库及搜索索引文件 33 | ``` 34 | docker restart xiaoya 35 | ``` 36 | 37 | #### 定时重启 38 | ``` 39 | crontab -e 40 | ``` 41 | 输入配置 42 | ``` 43 | 0 6 * * * docker restart xiaoya 44 | ``` 45 | -------------------------------------------------------------------------------- /docker/站点分析.md: -------------------------------------------------------------------------------- 1 | ### Docker部署开源站点分析系统 2 | 3 | #### `umami`简约轻量级 4 | 5 | [项目地址](https://github.com/umami-software/umami) 6 | 7 | ``` 8 | services: 9 | umami: 10 | image: ghcr.io/umami-software/umami:postgresql-latest 11 | container_name: umami 12 | restart: always 13 | ports: 14 | - "3000:3000" 15 | environment: 16 | - DATABASE_URL=postgresql://umami:umamipassword@db:5432/umami 17 | - DATABASE_TYPE=postgresql 18 | - HASH_SALT=replace-me-with-a-random-string 19 | depends_on: 20 | - db 21 | 22 | db: 23 | image: postgres:15-alpine 24 | container_name: postgres 25 | restart: always 26 | environment: 27 | - POSTGRES_DB=umami 28 | - POSTGRES_USER=umami 29 | - POSTGRES_PASSWORD=umamipassword 30 | volumes: 31 | - ./postgres_data:/var/lib/postgresql/data 32 | ``` 33 | 34 | - 注意:SSL跨域限制原因,需要开启HTTPS 35 | -------------------------------------------------------------------------------- /docker/彩虹聚合DNS.md: -------------------------------------------------------------------------------- 1 | ### Docker部署彩虹聚合DNS系统 2 | 3 | [项目地址](https://github.com/netcccyun/dnsmgr) 4 | 5 | 创建`my.cnf`配置 6 | ``` 7 | [mysqld] 8 | sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION 9 | ``` 10 | 11 | `docker-compose.yml` 12 | ``` 13 | services: 14 | dnsmgr: 15 | image: netcccyun/dnsmgr 16 | container_name: dnsmgr 17 | ports: 18 | - 8080:80 19 | volumes: 20 | - ./dnsmgr/web:/app/www 21 | depends_on: 22 | - mysql 23 | 24 | mysql: 25 | image: mysql:5.7 26 | container_name: mysql 27 | restart: always 28 | volumes: 29 | - ./my.cnf:/etc/mysql/my.cnf 30 | - ./mysql:/var/lib/mysql 31 | environment: 32 | - MYSQL_DATABASE=dnsmgr 33 | - MYSQL_USER=dnsmgr 34 | - MYSQL_PASSWORD=dnsmgr123456 35 | - MYSQL_ROOT_PASSWORD=dnsmgr123456 36 | - TZ=Asia/Shanghai 37 | ``` 38 | -------------------------------------------------------------------------------- /docker/RustDesk远程工具.md: -------------------------------------------------------------------------------- 1 | RustDesk是一个开源的远程工具,[项目地址](https://github.com/rustdesk/rustdesk) 2 | 3 | 4 | 自建服务端 5 | ``` 6 | services: 7 | rustdesk-server: 8 | container_name: rustdesk-server 9 | ports: 10 | - 21115:21115 11 | - 21116:21116 12 | - 21116:21116/udp 13 | - 21117:21117 14 | - 21118:21118 15 | - 21119:21119 16 | image: rustdesk/rustdesk-server-s6:latest 17 | environment: 18 | - "RELAY=域名:21117" #域名不可开启小云朵,只是伪装IP使用 19 | - "ENCRYPTED_ONLY=1" 20 | volumes: 21 | - ./data:/data 22 | restart: unless-stopped 23 | ``` 24 | 25 | 26 | 点击 ID 右侧的菜单按钮如下,选择“ ID/中继服务器”。 27 | 28 | ID/中继服务器ID/中继服务器 29 | 30 | ID 服务器:域名:21116 #域名不可开启小云朵,只是伪装IP使用 31 | 32 | 中继服务器:域名:21117 #域名不可开启小云朵,只是伪装IP使用 33 | 34 | Key 35 | 36 | 第一次运行时,会自动产生一对加密私钥和公钥(分别位于运行目录下的id_ed25519和id_ed25519.pub文件中),其主要用途是为了通讯加密。 37 | 38 | 如果您在上一步骤中没有填写Key:(公钥文件id_ed25519.pub中的内容),将无法连接。 39 | 40 | 日志中可以看到 Key信息 41 | 42 | 查看日志:`docker logs rustdesk-server` 43 | -------------------------------------------------------------------------------- /docker/TG代理.md: -------------------------------------------------------------------------------- 1 | **创建白名单镜像:** 2 | 3 | ``` 4 | docker run -d --name mtproxy \ 5 | --restart=always \ 6 | -e domain="swift.com" \ 7 | -p 8080:80 \ 8 | -p 8443:443 \ 9 | ellermister/mtproxy 10 | ``` 11 | 12 | 13 | 14 | **创建普通镜像:** 15 | 16 | ``` 17 | docker run -d --name mtproxy \ 18 | --restart=always \ 19 | -e domain="swift.com" \ 20 | -e secret="548593a9c0688f1f7d9d57377897d321" \ 21 | -e ip_white_list="OFF" \ 22 | -p 8080:80 \ 23 | -p 8443:443 \ 24 | ellermister/mtproxy 25 | ``` 26 | 27 | `-e ip_white_list="OFF"` 此行表示关闭白名单 28 | 29 | `-e secret="548593a9c0688f4f7d9d57377897d964"` 此行表示指定密钥,格式为:32位十六进制字符。 30 | 31 | `-e provider=2 \` 此行代表MTG第三方代理程序, 官方只支持 x86_64 32 | 33 | **在日志中查看链接参数配置**: 34 | 35 | ``` 36 | docker logs -f mtproxy 37 | ``` 38 | 39 | 40 | 连接端口记得修改为你映射后的外部端口,如上文例子中都是 8443 41 | 42 | 白名单镜像默认所有访客都不被允许连接,只有当访客尝试访问了下面的地址,才会将访客IP加入到白名单中。 43 | IP 和端口取决于你 docker 的配置: 44 | ``` 45 | http://服务器IP/add.php 46 | ``` 47 | 48 | 49 | 50 | 51 | --- 52 | -------------------------------------------------------------------------------- /docker/docker emby.md: -------------------------------------------------------------------------------- 1 | #### emby Web界面的端口为 `8096` 2 | 3 | 使用容器存储数据: 4 | 5 | ``` 6 | sudo docker run -it --name emby -e TZ=Asia/Shanghai -p 8096:8096 -p 8920:8920 \ 7 | -p 7359:7359/udp -p 1900:1900/udp -d emby/embyserver 8 | ``` 9 | 10 | 11 | 12 | 13 | 14 | 使用宿主机存储数据: 15 | 16 | 确保`/path/to/directory`和`/path/to/media`这两个路径替换为实际的目录路径,这些目录将用于挂载到容器内 17 | 18 | ``` 19 | sudo docker run -it --name emby -e TZ=Asia/Shanghai -p 8096:8096 -p 8920:8920 \ 20 | -p 7359:7359/udp -p 1900:1900/udp \ 21 | -v /path/to/directory:/config \ 22 | -v /path/to/media:/media -d emby/embyserver 23 | ``` 24 | 25 | 26 | 27 | 28 | 29 | 环境变量: 30 | 31 | TZ- 配置时区 `TZ=Asia/Shanghai` 为中国上海 32 | 33 | USERID- 设置应用程序用户的UID 34 | 35 | GROUPID- 为应用程序用户设置GID 36 | 37 | 不同架构的镜像: 38 | 39 | `emby/embyserver_arm32v7` 40 | 41 | `emby/embyserver_arm64v8` 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | --- 51 | -------------------------------------------------------------------------------- /docker/Nginx Proxy Manager面板.md: -------------------------------------------------------------------------------- 1 | ### docker部署Nginx Proxy Manager 2 | 3 | 4 | ``` 5 | docker run -d \ 6 | --name=npm \ 7 | -p 80:80 \ 8 | -p 81:81 \ 9 | -p 443:443 \ 10 | -v ./npm/data:/data \ 11 | -v ./npm/letsencrypt:/etc/letsencrypt \ 12 | --restart=always \ 13 | jc21/nginx-proxy-manager:latest 14 | ``` 15 | 16 | > 中文镜像:`chishin/nginx-proxy-manager-zh:release` 17 | 18 | 面板端口为`81` 19 | 20 | 21 | 默认用户名: 22 | ``` 23 | admin@example.com 24 | ``` 25 | 26 | 默认密码: 27 | ``` 28 | changeme 29 | ``` 30 | 31 | 注意:申请证书需要用 `80` 端口,可以申请完证书再改成反代端口。 32 | 33 | 34 | 35 | [官方文档](https://nginxproxymanager.com/advanced-config/) 36 | 37 | --- 38 | 39 | ### `docker-compose.yaml`配置 40 | 41 | ``` 42 | services: 43 | app: 44 | image: jc21/nginx-proxy-manager:latest 45 | container_name: npm 46 | restart: always 47 | ports: 48 | - '80:80' 49 | - '81:81' 50 | - '443:443' 51 | volumes: 52 | - ./data:/data 53 | - ./letsencrypt:/etc/letsencrypt 54 | ``` 55 | -------------------------------------------------------------------------------- /docker/docker ffmpeg.md: -------------------------------------------------------------------------------- 1 | ### docker版ffmpeg无人值守推流直播: 2 | 3 | 先把MP4视频放入同目录下 4 | 5 | ``` 6 | services: 7 | ffmpeg: 8 | image: linuxserver/ffmpeg 9 | restart: always 10 | network_mode: host 11 | volumes: 12 | - ./:/video 13 | command: > 14 | -re -stream_loop -1 -i /video/视频文件名.mp4 15 | -c:v libx264 -preset veryfast -b:v 1500k 16 | -c:a aac -b:a 92k 17 | -f flv "推流地址和推流码" 18 | ``` 19 | 20 | 或者使用 https://github.com/sky22333/zhibo 21 | 22 | --- 23 | 24 | ## 带宽码率推荐: 25 | 26 | | 视频清晰度 | 建议视频码率 (kbps) | 音频码率 (kbps) | 大约占用带宽 (Mbps) | 27 | |-------------|-------------------|----------------|------------------| 28 | | 标清 480p | 500 - 1500 | 128 | 1 - 2 | 29 | | 高清 720p | 1500 - 4000 | 128 | 2 - 4 | 30 | | 超清 1080p | 3000 - 6000 | 128 | 4 - 7 | 31 | | 2K | 8000 - 20000 | 128 | 9 - 20 | 32 | | 4K | 15000 - 50000 | 128 | 15 - 50 | 33 | 34 | 35 | 36 | --- 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /docker/firefox浏览器.md: -------------------------------------------------------------------------------- 1 | ### docker部署火狐云浏览器 2 | - 创建项目文件 3 | ``` 4 | mkdir -p firefox && cd firefox && touch docker-compose.yaml 5 | ``` 6 | `docker-compose.yaml`配置 7 | 8 | ``` 9 | services: 10 | firefox: 11 | image: jlesage/firefox:latest 12 | container_name: firefox 13 | ports: 14 | - "5800:5800" # noVNC/Web访问端口 15 | - "5900:5900" # VNC访问端口 16 | volumes: 17 | - ./appdata/firefox:/config:rw # 映射配置文件到本地 18 | - /dev/shm:/dev/shm 19 | environment: 20 | - LANG=zh_CN.UTF-8 21 | - LANGUAGE=zh_CN:zh 22 | - LC_ALL=zh_CN.UTF-8 23 | - ENABLE_CJK_FONT=1 24 | - WEB_AUDIO=1 # 启用音频 25 | - TZ=Asia/Shanghai # 设置时区为上海 26 | - SECURE_CONNECTION=0 # 启用HTTPS,0为关闭,配合反代使用 27 | - VNC_PASSWORD=admin222 # 设置VNC访问密码 28 | restart: always 29 | ``` 30 | - 浏览器下载的文件在 `/firefox/appdata/firefox/downloads/`目录下 31 | - 容器环境变量可用于快速轻松地配置单个用户。用户名和密码通过以下环境变量定义: 32 | ``` 33 | - WEB_AUTHENTICATION_USERNAME=admin 34 | - WEB_AUTHENTICATION_PASSWORD=admin 35 | ``` 36 | 37 | - 重启 38 | ``` 39 | docker restart firefox 40 | ``` 41 | -------------------------------------------------------------------------------- /docker/PHP-Laravel框架.md: -------------------------------------------------------------------------------- 1 | ### `PHP-Laravel`框架镜像打包模板 2 | 3 | - 配置基于`BeikeShop`商城项目 4 | - 源码基于[官网下载页](https://beikeshop.cn/download)的`v1.5.6`版本 5 | 6 | `Dockerfile`配置 7 | ``` 8 | FROM webdevops/php-nginx:8.1-alpine 9 | 10 | # 设置站点运行目录 11 | ENV WEB_DOCUMENT_ROOT /app/public 12 | 13 | # 设置伪静态规则 14 | ENV NGINX_REWRITE_RULES "location / { try_files \$uri \$uri/ /index.php?\$query_string; }" 15 | 16 | COPY . /app 17 | 18 | RUN chmod -R 777 /app 19 | 20 | EXPOSE 80 21 | 22 | CMD ["supervisord"] 23 | ``` 24 | 25 | `docker-compose.yml`配置 26 | ``` 27 | services: 28 | mysql: 29 | image: mysql:5.7 30 | container_name: mysql 31 | environment: 32 | MYSQL_DATABASE: dulizhan 33 | MYSQL_USER: dulizhan 34 | MYSQL_PASSWORD: dulizhan7890 35 | MYSQL_ROOT_PASSWORD: dulizhan7890 36 | volumes: 37 | - ./mysql:/var/lib/mysql 38 | restart: always 39 | 40 | web: 41 | build: . 42 | ports: 43 | - "8080:80" 44 | restart: always 45 | depends_on: 46 | - mysql 47 | ``` 48 | 49 | ### `webdevops/php-nginx`镜像环境变量文档 50 | 51 | - [文档地址](https://dockerfile.readthedocs.io/en/latest/content/DockerImages/dockerfiles/php-nginx.html) 52 | -------------------------------------------------------------------------------- /docker/SSH隧道反向代理.md: -------------------------------------------------------------------------------- 1 | ### SSH隧道反向代理 2 | 3 | 适用于简单SSH隧道内网穿透 4 | 5 | ### 服务端 6 | 7 | - 修改`/etc/ssh/sshd_config`文件允许远程转发 8 | ``` 9 | AllowTcpForwarding yes 10 | GatewayPorts yes 11 | ``` 12 | - 重启SSH服务 13 | ``` 14 | sudo systemctl restart sshd 15 | ``` 16 | 17 | --- 18 | 19 | ### 客户端 20 | - 前台运行 21 | ``` 22 | ssh -R 80:localhost:8080 root@服务器地址 -p 22 23 | ``` 24 | 25 | 这会将服务器的`80`端口转发到本地的`8080`端口,通过SSH隧道的方式 26 | 27 | - 客户端win系统使用后台进程的方式运行 28 | ``` 29 | Start-Process -NoNewWindow -FilePath "ssh" -ArgumentList "-R 80:localhost:8080 root@服务器地址 -p 22" 30 | ``` 31 | 32 | - 客户端liunx系统使用后台服务的方式运行 33 | 34 | 创建一个`ssh-tunnel.service`文件,位于`/etc/systemd/system/`目录下: 35 | 36 | ``` 37 | sudo vim /etc/systemd/system/ssh-tunnel.service 38 | ``` 39 | 40 | ``` 41 | Description=SSH Tunnel Service 42 | After=network.target 43 | 44 | [Service] 45 | ExecStart=/usr/bin/ssh -R 80:localhost:8080 root@服务器地址 -p 22 46 | Restart=always 47 | User=root 48 | # 或者根据需要修改为你的用户 49 | 50 | [Install] 51 | WantedBy=multi-user.target 52 | ``` 53 | 54 | ``` 55 | sudo systemctl daemon-reload 56 | sudo systemctl enable ssh-tunnel.service 57 | sudo systemctl start ssh-tunnel.service 58 | ``` 59 | 60 | ### 公益SSH隧道 61 | 62 | https://serveo.net/ 63 | -------------------------------------------------------------------------------- /docker/gitlab.md: -------------------------------------------------------------------------------- 1 | ### Docker部署自托管gitlab 2 | 3 | 官方镜像大约`3.4G` 基于`ubuntu:22.04`镜像构建 4 | 5 | [官方仓库](https://gitlab.com/gitlab-org/omnibus-gitlab) 6 | 7 | `docker-compose.yml`配置 8 | ``` 9 | services: 10 | gitlab: 11 | image: gitlab/gitlab-ce:latest 12 | container_name: gitlab 13 | restart: always 14 | volumes: 15 | - './gitlab-data:/var/opt/gitlab' 16 | - './gitlab-config:/etc/gitlab' 17 | - './gitlab-logs:/var/log/gitlab' 18 | environment: 19 | GITLAB_OMNIBUS_CONFIG: | 20 | external_url 'https://example.com' # 设置域名 21 | 22 | caddy: 23 | image: caddy:alpine 24 | container_name: caddy 25 | ports: 26 | - "80:80" 27 | - "443:443" 28 | volumes: 29 | - ./Caddyfile:/etc/caddy/Caddyfile 30 | restart: always 31 | 32 | ``` 33 | 34 | `Caddyfile`配置 35 | 36 | ``` 37 | https://example.com { 38 | encode zstd gzip 39 | reverse_proxy gitlab:80 40 | 41 | # 启用 WebSocket 连接 42 | header { 43 | Upgrade "websocket" 44 | Connection "upgrade" 45 | } 46 | } 47 | ``` 48 | 49 | 50 | 默认用户名为:`root` 51 | 52 | 默认密码在`./gitlab-config/initial_root_password`文件里查看 53 | 54 | 更多个性化配置在`./gitlab-config/gitlab.rb`文件里修改 55 | -------------------------------------------------------------------------------- /workflows/github-pages.yml: -------------------------------------------------------------------------------- 1 | name: 部署到 GitHub Pages 2 | 3 | on: 4 | push: 5 | branches: [ main ] 6 | workflow_dispatch: 7 | 8 | permissions: 9 | contents: read 10 | pages: write 11 | id-token: write 12 | 13 | concurrency: 14 | group: "pages" 15 | cancel-in-progress: true 16 | 17 | jobs: 18 | build: 19 | runs-on: ubuntu-latest 20 | steps: 21 | - name: 检出代码 22 | uses: actions/checkout@v4 23 | 24 | - name: 设置 Node.js 25 | uses: actions/setup-node@v4 26 | with: 27 | node-version: '20' 28 | 29 | - name: 安装 pnpm 30 | uses: pnpm/action-setup@v4 31 | 32 | - name: 安装依赖 33 | run: pnpm install 34 | 35 | - name: 构建站点 36 | run: pnpm build 37 | 38 | - name: 设置 Pages 39 | uses: actions/configure-pages@v4 40 | 41 | - name: 上传构建产物 42 | uses: actions/upload-pages-artifact@v3 43 | with: 44 | path: './dist' 45 | 46 | deploy: 47 | needs: build 48 | runs-on: ubuntu-latest 49 | environment: 50 | name: github-pages 51 | url: ${{ steps.deployment.outputs.page_url }} 52 | steps: 53 | - name: 部署到 GitHub Pages 54 | id: deployment 55 | uses: actions/deploy-pages@v4 56 | -------------------------------------------------------------------------------- /docker/halo博客.md: -------------------------------------------------------------------------------- 1 | ### Docker部署halo博客 2 | 3 | ``` 4 | docker run -it -d --name halo -p 8090:8090 -v ./halo2:/root/.halo2 halohub/halo:2 5 | ``` 6 | 7 | 8 | 9 | 地址: `IP:8090` 10 | 11 | 后台路径:`/console` 12 | 13 | 14 | --- 15 | 16 | ***国内阿里云镜像*** 17 | ``` 18 | registry.fit2cloud.com/halo/halo 19 | ``` 20 | 21 | --- 22 | 23 | ### `docker-compose.yaml`部署 24 | 25 | ``` 26 | services: 27 | halo: 28 | image: halohub/halo:2 29 | restart: always 30 | depends_on: 31 | - mysql 32 | ports: 33 | - "8090:8090" 34 | volumes: 35 | - ./halo2:/root/.halo2 36 | command: 37 | - --spring.r2dbc.url=r2dbc:pool:mysql://mysql:3306/halo 38 | - --spring.r2dbc.username=halo 39 | - --spring.r2dbc.password=halo_password 40 | - --spring.sql.init.platform=mysql 41 | - --halo.external-url=http://公网IP:8090/ 42 | 43 | mysql: 44 | image: mysql:5.7 45 | container_name: mysql 46 | environment: 47 | MYSQL_DATABASE: halo # 数据库名称 48 | MYSQL_USER: halo # 数据库用户名 49 | MYSQL_PASSWORD: halo_password # 数据库密码 50 | MYSQL_ROOT_PASSWORD: halo_password # 数据库root密码 51 | volumes: 52 | - ./data/mysql:/var/lib/mysql # 映射数据库文件 53 | restart: always 54 | ``` 55 | -------------------------------------------------------------------------------- /docker/typecho轻量级博客.md: -------------------------------------------------------------------------------- 1 | ## Docker部署typecho 2 | 3 | 4 | 5 | ``` 6 | services: 7 | mysql: 8 | image: mysql:5.7 9 | restart: always 10 | environment: 11 | MYSQL_ROOT_PASSWORD: typechoPASSWORD 12 | MYSQL_DATABASE: typecho 13 | MYSQL_USER: typecho 14 | MYSQL_PASSWORD: typechoPASSWORD 15 | volumes: 16 | - ./mysql-data:/var/lib/mysql 17 | 18 | typecho: 19 | image: joyqi/typecho:nightly-php8.2-apache 20 | restart: always 21 | depends_on: 22 | - mysql 23 | ports: 24 | - "8080:80" 25 | environment: 26 | TIMEZONE: Asia/Shanghai 27 | TYPECHO_SITE_URL: https://your-domain.com 28 | TYPECHO_DB_HOST: mysql 29 | TYPECHO_DB_NAME: typecho 30 | TYPECHO_DB_USER: typecho 31 | TYPECHO_DB_PASS: typechoPASSWORD 32 | volumes: 33 | - ./typecho-data:/var/www/html 34 | ``` 35 | 36 | `https://your-domain.com`替换为你的网址,提前反代好。 37 | 38 | (可选)重置后台管理员密码:删除站点目录的`config.inc.php`文件,然后重新安装选择保留原有数据库即可 39 | 40 | #### 主题文件目录`usr/themes` 41 | 42 | 安装git: 43 | ``` 44 | sudo apt install git 45 | ``` 46 | 47 | 下载主题: 48 | ``` 49 | git clone 主题Git仓库地址 50 | ``` 51 | 复制到主题目录: 52 | ``` 53 | docker cp 主题文件路径 typecho-server:/app/usr/themes 54 | ``` 55 | 56 | [仓库地址](https://hub.docker.com/r/joyqi/typecho) 57 | -------------------------------------------------------------------------------- /docker/docker xray.md: -------------------------------------------------------------------------------- 1 | ## docker运行xray 2 | 3 | ### 创建配置文件`/etc/xray/config.json` 4 | 5 | ### 配置文件示例: 6 | ``` 7 | { 8 | "log": { 9 | "loglevel": "warning" 10 | }, 11 | "inbounds": [ 12 | { 13 | "listen": "0.0.0.0", 14 | "port": 8080, 15 | "protocol": "vmess", 16 | "settings": { 17 | "clients": [ 18 | { 19 | "id": "d6fe7c7e-dc2d-4339-aadc-e15e4d1a97d8" 20 | } 21 | ] 22 | }, 23 | "streamSettings": { 24 | "network": "ws", 25 | "security": "none", 26 | "wsSettings": { 27 | "path": "/dockerlnmp" 28 | } 29 | } 30 | } 31 | ], 32 | "outbounds": [ 33 | { 34 | "protocol": "freedom", 35 | "tag": "direct" 36 | } 37 | ] 38 | } 39 | ``` 40 | 41 | 42 | #### host网络运行: 43 | ``` 44 | docker run -d --network="host" --name xray --restart=always -v /etc/xray:/etc/xray teddysun/xray 45 | ``` 46 | #### 端口映射运行: 47 | 这里的端口要与配置文件里的入站端口相同 48 | 49 | ``` 50 | docker run -d -p 8080:8080 --name xray --restart=always -v /etc/xray:/etc/xray teddysun/xray 51 | ``` 52 | 53 | 54 | --- 55 | --- 56 | -------------------------------------------------------------------------------- /docs/gh.txt: -------------------------------------------------------------------------------- 1 | https://gh-proxy.com 2 | https://gh-proxy.llyke.com 3 | https://ghproxy.net 4 | https://gitproxy.click 5 | https://gh.chaoyi996.com 6 | https://ghproxy.imciel.com 7 | https://gh.idayer.com 8 | https://githubapi.jjchizha.com 9 | https://gh.monlor.com 10 | https://g.blfrp.cn 11 | https://hub.gitmirror.com 12 | https://ghp.keleyaa.com 13 | https://gh.tryxd.cn 14 | https://ghp.miaostay.com 15 | https://gh.xx9527.cn 16 | https://gh.qninq.cn 17 | https://gitproxy.mrhjx.cn 18 | https://github.limoruirui.com 19 | https://ghfast.top 20 | https://mirrors.chenby.cn 21 | https://gh.zwy.me 22 | https://git.886.be 23 | https://gh.noki.icu 24 | https://gh-proxy.ygxz.in 25 | https://gh.catmak.name 26 | https://github.xxlab.tech 27 | https://gh.pylas.xyz 28 | https://ghp.arslantu.xyz 29 | https://cdn.moran233.xyz 30 | https://gh.zhaojun.im 31 | https://gp.zkitefly.eu.org 32 | https://firewall.lxstd.org 33 | https://github.ednovas.xyz 34 | https://proxy.yaoyaoling.net 35 | https://git.669966.xyz 36 | https://ghproxy.1888866.xyz 37 | https://git.40609891.xyz 38 | https://gh.jasonzeng.dev 39 | https://gh.222322.xyz 40 | https://ghproxy.cianogame.top 41 | https://gh.ddlc.top 42 | https://gh.nxnow.top 43 | https://gh.noki.eu.org 44 | https://tvv.tw 45 | https://gh-proxy.net 46 | -------------------------------------------------------------------------------- /docker/异次元发卡.md: -------------------------------------------------------------------------------- 1 | ## docker部署异次元发卡 2 | 3 | #### 拉取源码 4 | ``` 5 | git clone https://github.com/sky22333/acg-faka.git 6 | ``` 7 | >[地址](https://github.com/sky22333/acg-faka) 8 | 9 | #### 一键编译启动 10 | ``` 11 | cd acg-faka 12 | ``` 13 | ``` 14 | docker compose up -d 15 | ``` 16 | 17 | #### 配置 18 | 19 | `http://你的IP:8080`进入网站,后台路径为`/admin` 20 | 21 | 22 | ``` 23 | 数据库地址:mysql 24 | 数据库名称:acgfakadb 25 | 数据库账号:acgfakauser 26 | 数据库密码:acgfakapassword 27 | ``` 28 | 29 | 30 | 31 | #### 更改后台路径 32 | 33 | 异次元目录`/kernel/kernel.php`,21行  34 | ``` 35 | } elseif (trim($_GET['s'], "/") == 'admin') { 36 | PHP 37 | ``` 38 | 修改`admin` 39 | 40 | #### 退出插件市场账号 41 | `/config/store.php`删除`store.php`这个文件 42 | 43 | #### 联系方式改为不用填 44 | `app/Service/Impl/OrderService.php`第`292`行改为`0` 45 | 46 | 47 | #### 邮件测试 48 | [根据这里的代码](https://github.com/sky22333/acg-faka/blob/fe8fb4460f3bcf5782c3de4ba27d3782867ebc45/app/Controller/Admin/Api/Config.php#L181) 49 | 50 | 发送测试邮件时需要使用`SSL`端口`465`,正式使用的话`ssl`和`tls`都支持 51 | 52 | ### 对接易支付的tokenpay支付 53 | 54 | 易支付插件目录,增加支付标识 55 | 56 | 萌次元`/app/Plugin/Epay/Config/Pay.php` 57 | 58 | #### 启动插件后自动取消 59 | 60 | 一般是是服务器时间不同步的问题 61 | 62 | 打开`/etc/php/8.1/fpm/php.ini`配置文件`php.ini`修正下面的配置,保存并重启 63 | 64 | `date.timezone = Asia/Shanghai` 65 | 66 | 重启 67 | ``` 68 | sudo systemctl restart php8.1-fpm 69 | ``` 70 | -------------------------------------------------------------------------------- /workflows/docker-ghcr-cron.yml: -------------------------------------------------------------------------------- 1 | name: ghcr镜像构建 2 | on: 3 | workflow_dispatch: 4 | inputs: 5 | version: 6 | description: 'Version number' 7 | required: true 8 | default: 'latest' 9 | schedule: 10 | # 每周一凌晨 2 点自动运行 11 | - cron: '0 2 * * 1' 12 | 13 | jobs: 14 | build: 15 | runs-on: ubuntu-latest 16 | permissions: 17 | contents: write 18 | packages: write 19 | steps: 20 | - name: Checkout repository 21 | uses: actions/checkout@v4 22 | - name: Set up Docker Buildx 23 | uses: docker/setup-buildx-action@v3 24 | 25 | - name: Log in to GitHub Docker Registry 26 | uses: docker/login-action@v3 27 | with: 28 | registry: ghcr.io 29 | username: ${{ github.actor }} 30 | password: ${{ secrets.GITHUB_TOKEN }} 31 | 32 | - name: Set version from input 33 | run: echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV 34 | - name: Build and push Docker image 35 | run: | 36 | docker buildx build --push \ 37 | --platform linux/amd64 \ 38 | --tag ghcr.io/${{ github.repository }}:${{ env.VERSION }} \ 39 | --build-arg VERSION=${{ env.VERSION }} . 40 | # 这里结尾的点代表仓库的根目录,如果需要更改子目录则更改这里即可,例如:./node 41 | env: 42 | GHCR_PUBLIC: true 43 | -------------------------------------------------------------------------------- /workflows/docker-ghcr.yml: -------------------------------------------------------------------------------- 1 | # github镜像自动构建和推送示例,手动触发 2 | name: ghcr镜像构建 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | version: 7 | description: 'Version number' 8 | required: true 9 | default: 'latest' 10 | 11 | jobs: 12 | build: 13 | runs-on: ubuntu-latest 14 | permissions: 15 | contents: write 16 | packages: write 17 | steps: 18 | - name: Checkout repository 19 | uses: actions/checkout@v4 20 | 21 | - name: Set up Docker Buildx 22 | uses: docker/setup-buildx-action@v3 23 | 24 | - name: Log in to GitHub Docker Registry 25 | uses: docker/login-action@v3 26 | with: 27 | registry: ghcr.io 28 | username: ${{ github.actor }} 29 | password: ${{ secrets.GITHUB_TOKEN }} 30 | 31 | - name: Set version from input 32 | run: echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV 33 | 34 | - name: Build and push Docker image 35 | run: | 36 | docker buildx build --push \ 37 | --platform linux/amd64,linux/arm64 \ 38 | --tag ghcr.io/${{ github.repository }}:${{ env.VERSION }} \ 39 | --build-arg VERSION=${{ env.VERSION }} \ 40 | . 41 | # 这里结尾的点代表仓库的根目录,如果需要更改子目录则更改这里即可,例如:./node 42 | env: 43 | GHCR_PUBLIC: true 44 | -------------------------------------------------------------------------------- /docker/云vscode.md: -------------------------------------------------------------------------------- 1 | ### Docker部署云vscode编辑器 2 | 3 | 创建项目文件 4 | ``` 5 | mkdir -p code-server && cd code-server && touch docker-compose.yaml 6 | ``` 7 | 8 | 9 | 10 | `docker-compose.yaml`配置 11 | 12 | ``` 13 | services: 14 | code-server: 15 | image: linuxserver/code-server:latest 16 | container_name: code-server 17 | environment: 18 | - PUID=1000 19 | - PGID=1000 20 | - TZ=Asia/Shanghai 21 | - PASSWORD=admin123 # 设置 code-server 的登录密码 22 | - SUDO_PASSWORD= # 设置服务器 sudo 权限的密码(可选) 23 | volumes: 24 | - ./code-server/config:/config # 挂载配置文件 25 | ports: 26 | - 8443:8443 27 | restart: always 28 | ``` 29 | 30 | 31 | 32 | 33 | 34 | [官方文档](https://docs.linuxserver.io/images/docker-code-server/) 35 | 36 | 37 | #### 挂载服务器根目录和赋予容器root权限 38 | 39 | - 此配置将赋予容器最高权限,服务器所有的文件都可读写可修改(生产环境慎重使用) 40 | 41 | ``` 42 | services: 43 | code-server: 44 | image: linuxserver/code-server:latest 45 | container_name: code-server 46 | environment: 47 | - PUID=0 48 | - PGID=0 49 | - TZ=Asia/Shanghai 50 | - PASSWORD=admin123ASD789@ # 设置code-server的登录密码(建议强密码) 51 | - SUDO_PASSWORD= # 设置服务器sudo权限的密码(可选) 52 | volumes: 53 | - /:/config/workspace # 宿主机根目录设置为工作目录 54 | ports: 55 | - 8443:8443 56 | privileged: true 57 | cap_add: 58 | - ALL 59 | security_opt: 60 | - seccomp:unconfined 61 | - apparmor:unconfined 62 | restart: always 63 | ``` 64 | 65 | -------------------------------------------------------------------------------- /docker/maccms影视站.md: -------------------------------------------------------------------------------- 1 | ## 使用docker-compose部署苹果cms 2 | 3 | #### 创建相关文件 4 | 5 | ``` 6 | mkdir -p maccms && cd maccms && touch docker-compose.yml 7 | ``` 8 | 9 | #### 编辑`docker-compose.yml`配置 10 | 11 | ``` 12 | services: 13 | maccms: 14 | depends_on: 15 | - mysql 16 | image: esme518/docker-maccms10:latest 17 | restart: always 18 | ports: 19 | - "8090:80" 20 | container_name: maccms 21 | volumes: 22 | - ./data/maccms:/var/www/html 23 | 24 | mysql: 25 | image: mysql:5.7 26 | container_name: mysql 27 | restart: always 28 | environment: 29 | - MYSQL_DATABASE=maccms 30 | - MYSQL_USER=maccms 31 | - MYSQL_PASSWORD=maccms_password 32 | - MYSQL_ROOT_PASSWORD=maccms_password 33 | volumes: 34 | - ./data/mysql:/var/lib/mysql 35 | ``` 36 | 37 | 38 | #### 运行 39 | ``` 40 | docker compose up -d 41 | ``` 42 | 43 | 44 | #### 进入安装页面 45 | 46 | ``` 47 | 启动成功后,浏览器输入IP:8090端口就进入了系统安装界面 48 | 49 | 数据库地址:mysql 50 | 数据库端口:3306 51 | 数据库名称:maccms 52 | 数据库账号:maccms 53 | 数据库密码:maccms_password 54 | ``` 55 | 56 | 57 | 然后浏览器输入`http://IP:8090/cmsadmin.php`进入站点后台 58 | 59 | 60 | #### 更换模板 61 | 62 | 文件已经映射到本地,把模板文件放在`./data/maccms/template`目录 63 | 64 | 65 | 66 | --- 67 | --- 68 | 69 | #### [图图采集插件](https://maccmsbox.com/details416.html) 70 | 71 | #### [萌芽采集插件](https://www.mycj.pro/mycj-down) 72 | 73 | 下载插件上传到网站根目录,并使用`unzip`命令解压 74 | 75 | 赋予权限`addons/mycj`目录下的全部权限 76 | 77 | 然后后台应用商城刷新并启用 78 | 79 | #### [免费模板推荐](https://www.maccmsbox.com/) 80 | 81 | 模板文件放在`template`目录,有的模板需要直接放在网站根目录 82 | -------------------------------------------------------------------------------- /docker/数据库管理面板.md: -------------------------------------------------------------------------------- 1 | ### 基于官方`adminer`的`docker`镜像 2 | 3 | ## 直接运行 4 | ``` 5 | docker run -d --name adminer --network host -p 8080:8080 ghcr.io/sky22333/adminer 6 | ``` 7 | 加入到指定网络的变量:`--network mynetwork` 8 | 9 | host网络模式:`--network host` 10 | 11 | 连接地址可以指定端口,例如:`127.0.0.1:3307` 12 | 13 | --- 14 | 15 | #### 查看容器网络 16 | ``` 17 | docker inspect -f '{{.HostConfig.NetworkMode}}' 容器名称或ID 18 | ``` 19 | 20 | ## SQLite数据库 21 | 22 | 数据库无密码的连接方式 23 | ``` 24 | services: 25 | adminer: 26 | image: ghcr.io/sky22333/adminer 27 | container_name: adminer 28 | ports: 29 | - "8080:8080" 30 | environment: 31 | - ADMINER_PLUGINS=login-password-less 32 | - ADMINER_PASSWORD=admin7890 33 | volumes: 34 | - ./demo.db:/data/demo.db:rw 35 | ``` 36 | #### 使用示例 37 | 进入面板选择`SQLite`数据库 38 | 39 | 输入面板密码 40 | 41 | 选择使用容器内的`/data/demo.db`数据库 42 | 43 | 44 | ## mysql数据库 45 | ``` 46 | services: 47 | mysql: 48 | image: mysql:5.7 49 | container_name: mysql 50 | environment: 51 | MYSQL_DATABASE: demo 52 | MYSQL_USER: demo 53 | MYSQL_PASSWORD: demo123456 54 | MYSQL_ROOT_PASSWORD: demo123456 55 | restart: always 56 | 57 | adminer: 58 | image: ghcr.io/sky22333/adminer 59 | container_name: adminer 60 | ports: 61 | - "8080:8080" 62 | restart: always 63 | ``` 64 | #### 使用示例 65 | 进入面板选择`mysql`数据库 66 | 67 | 输入对应的数据库信息即可 68 | 69 | 注意`adminer`面板需要和数据库在同一个`docker`网络内 70 | 71 | --- 72 | 73 | ### 数据库分析工具 74 | ``` 75 | docker run -d -p 3000:3000 --network bridge --name metabase metabase/metabase 76 | ``` 77 | -------------------------------------------------------------------------------- /workflows/docker-ghcr-dev.yml: -------------------------------------------------------------------------------- 1 | # github镜像自动构建和推送示例,手动触发,可选分支 2 | name: dev分支镜像构建 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | version: 7 | description: '镜像标签' 8 | required: true 9 | default: 'dev' # 默认设置为 dev 标签 10 | branch: 11 | description: '选择分支' 12 | required: true 13 | default: 'dev' # 默认构建 dev 分支 14 | 15 | jobs: 16 | build: 17 | runs-on: ubuntu-latest 18 | permissions: 19 | contents: write 20 | packages: write 21 | steps: 22 | - name: Checkout repository 23 | uses: actions/checkout@v4 24 | with: 25 | ref: ${{ github.event.inputs.branch }} # 使用输入的分支 26 | 27 | - name: Set up Docker Buildx 28 | uses: docker/setup-buildx-action@v3 29 | 30 | - name: Log in to GitHub Docker Registry 31 | uses: docker/login-action@v3 32 | with: 33 | registry: ghcr.io 34 | username: ${{ github.actor }} 35 | password: ${{ secrets.GITHUB_TOKEN }} 36 | 37 | - name: Set version from input 38 | run: echo "VERSION=${{ github.event.inputs.version }}" >> $GITHUB_ENV 39 | 40 | - name: Build and push Docker image 41 | run: | 42 | docker buildx build --push \ 43 | --platform linux/amd64 \ 44 | --tag ghcr.io/${{ github.repository }}:${{ env.VERSION }} \ 45 | --build-arg VERSION=${{ env.VERSION }} \ 46 | . 47 | # 这里结尾的点代表仓库的根目录,如果需要更改子目录则更改这里即可,例如:./node 48 | env: 49 | GHCR_PUBLIC: true 50 | -------------------------------------------------------------------------------- /docker/frp内网穿透.md: -------------------------------------------------------------------------------- 1 | ### Docker部署frp内网穿透 2 | 3 | **可选项:`Docker CLI`启动命令示例** 4 | 5 | ``` 6 | docker run --restart=always --network host -d -v ./frps.toml:/etc/frp/frps.toml --name frps snowdreamtech/frps 7 | ``` 8 | 9 | ### `docker-compose`部署服务端(有公网IP) 10 | 11 | 创建配置文件 12 | ``` 13 | touch docker-compose.yml frps.toml 14 | ``` 15 | `docker-compose.yaml`配置 16 | ``` 17 | services: 18 | frps: 19 | image: snowdreamtech/frps 20 | container_name: frps 21 | network_mode: host 22 | volumes: 23 | - ./frps.toml:/etc/frp/frps.toml 24 | restart: always 25 | ``` 26 | 服务端`frps.toml`配置 27 | ``` 28 | bindPort = 7000 29 | auth.token = "admin123" 30 | ``` 31 | 32 | --- 33 | 34 | ### `docker-compose`部署客户端(内网) 35 | 36 | 创建配置文件 37 | ``` 38 | touch docker-compose.yml frpc.toml 39 | ``` 40 | `docker-compose.yaml`配置 41 | ``` 42 | services: 43 | frpc: 44 | image: snowdreamtech/frpc 45 | container_name: frpc 46 | network_mode: host 47 | volumes: 48 | - ./frpc.toml:/etc/frp/frpc.toml 49 | restart: always 50 | ``` 51 | 52 | 客户端`frpc.toml`配置 53 | ``` 54 | serverAddr = "8.8.8.8" # 公网服务器IP 55 | serverPort = 7000 # 对接端口和frps一致 56 | auth.token = "admin123" # 认证令牌和frps一致 57 | 58 | # 暴露SSH服务 59 | [[proxies]] 60 | name = "ssh" 61 | type = "tcp" 62 | localIP = "127.0.0.1" 63 | localPort = 22 # 本地服务端口 64 | remotePort = 6000 # 让frps暴露的公网端口 65 | ``` 66 | 67 | --- 68 | 69 | 70 | ### 二进制文件部署 71 | 72 | 官方二进制文件下载地址:https://github.com/fatedier/frp/releases 73 | 74 | 配置文件和上面一样 75 | 76 | 服务端启动命令`./frps -c ./frps.toml` 77 | 78 | 客户端启动命令`./frpc -c ./frpc.toml` 79 | -------------------------------------------------------------------------------- /docker/new-api.md: -------------------------------------------------------------------------------- 1 | ### Docker部署new-api 2 | 3 | ``` 4 | services: 5 | one-api: 6 | image: calciumion/new-api 7 | container_name: new-api 8 | restart: always 9 | ports: 10 | - "3000:3000" 11 | environment: 12 | - TZ=Asia/Shanghai 13 | volumes: 14 | - ./new-api:/data 15 | ``` 16 | 17 | - 启动容器后需要等待初始化完成才能正常访问 18 | - 初始管理员账户:`root` `123456` 19 | 20 | ### `Docker run`命令 21 | 22 | ``` 23 | docker run --name new-api -d --restart always -p 3000:3000 -e TZ=Asia/Shanghai -v $(pwd)/new-api:/data calciumion/new-api 24 | ``` 25 | 26 | 27 | ### 商业环境 28 | ``` 29 | services: 30 | new-api: 31 | image: calciumion/new-api:latest 32 | container_name: new-api 33 | restart: always 34 | command: --log-dir /app/logs 35 | ports: 36 | - "3000:3000" 37 | volumes: 38 | - ./data:/data 39 | - ./logs:/app/logs 40 | environment: 41 | - SQL_DSN=root:123456@tcp(mysql:3306)/new-api 42 | - REDIS_CONN_STRING=redis://redis 43 | - TZ=Asia/Shanghai 44 | 45 | depends_on: 46 | - redis 47 | - mysql 48 | healthcheck: 49 | test: ["CMD-SHELL", "wget -q -O - http://localhost:3000/api/status | grep -o '\"success\":\\s*true' | awk -F: '{print $$2}'"] 50 | interval: 30s 51 | timeout: 10s 52 | retries: 3 53 | 54 | redis: 55 | image: redis:alpine 56 | container_name: redis 57 | restart: always 58 | 59 | mysql: 60 | image: mysql:8.2 61 | container_name: mysql 62 | restart: always 63 | environment: 64 | MYSQL_ROOT_PASSWORD: 123456 65 | MYSQL_DATABASE: new-api 66 | volumes: 67 | - ./mysql_data:/var/lib/mysql 68 | ``` 69 | -------------------------------------------------------------------------------- /docker/1panel面板.md: -------------------------------------------------------------------------------- 1 | ### 官方安装脚本 2 | ``` 3 | curl -sSL https://resource.fit2cloud.com/1panel/package/quick_start.sh -o quick_start.sh && sudo bash quick_start.sh 4 | ``` 5 | 6 | 7 | 8 | ### 使用docker安装1panel面板 9 | 10 | ### Docker方式安装 11 | ``` 12 | docker run -d \ 13 | --name 1panel \ 14 | --restart always \ 15 | --network host \ 16 | -v /var/run/docker.sock:/var/run/docker.sock \ 17 | -v /var/lib/docker/volumes:/var/lib/docker/volumes \ 18 | -v /opt:/opt \ 19 | -v /root:/root \ 20 | -e TZ=Asia/Shanghai \ 21 | moelin/1panel:latest 22 | ``` 23 | 24 | *** 25 | - 默认端口:`10086` 26 | - 默认账户:`1panel` 27 | - 默认密码:`1panel_password` 28 | - 后台路径:`entrance` 29 | *** 30 | - 不可调整参数 31 | - `/var/run/docker.sock`的相关映射 32 | *** 33 | - 可调整参数 34 | > **推荐使用/opt路径,否则有些调用本地文件的应用可能出现异常** 35 | - `/opt:/opt` 文件存储映射 36 | - `TZ=Asia/Shanghai` 时区设置 37 | - `1panel` 容器名 38 | - `/var/lib/docker/volumes:/var/lib/docker/volumes` 存储卷映射 39 | *** 40 | 41 | [官方仓库](https://github.com/okxlin/docker-1panel) 42 | 43 | 44 | ### Docker-compose方式安装 45 | 46 | 创建一个`docker-compose.yaml`文件 47 | ``` 48 | services: 49 | 1panel: 50 | container_name: 1panel # 容器名 51 | restart: always 52 | network_mode: "host" 53 | volumes: 54 | - /var/run/docker.sock:/var/run/docker.sock 55 | - /var/lib/docker/volumes:/var/lib/docker/volumes 56 | - /opt:/opt # 文件存储映射 57 | - /root:/root # 可选的文件存储映射 58 | environment: 59 | - TZ=Asia/Shanghai # 时区设置 60 | image: moelin/1panel:latest 61 | labels: 62 | createdBy: "Apps" 63 | ``` 64 | 65 | 然后`docker compose up -d`运行 66 | 67 | 68 | --- 69 | 70 | [项目地址](https://github.com/okxlin/docker-1panel) 71 | -------------------------------------------------------------------------------- /workflows/docker-hub.yml: -------------------------------------------------------------------------------- 1 | # Docker hub构建并推送示例,请替换用户名和密钥,手动触发,自动推送 2 | name: Docker-hub构建并推送 3 | on: 4 | workflow_dispatch: 5 | inputs: 6 | version: 7 | description: 'Version number' 8 | required: true 9 | default: 'latest' 10 | image_name: 11 | description: 'Docker image name (without username)' 12 | required: true 13 | default: 'my-image' 14 | jobs: 15 | build: 16 | runs-on: ubuntu-latest 17 | steps: 18 | - name: Checkout repository 19 | uses: actions/checkout@v4 20 | with: 21 | submodules: true 22 | 23 | - name: Docker meta 24 | id: meta 25 | uses: docker/metadata-action@v5 26 | with: 27 | images: | 28 | ${{ secrets.DOCKER_USERNAME }}/${{ github.event.inputs.image_name }} 29 | tags: | 30 | ${{ github.event.inputs.version }} 31 | latest 32 | 33 | - name: Set up QEMU 34 | uses: docker/setup-qemu-action@v3 35 | 36 | - name: Set up Docker Buildx 37 | uses: docker/setup-buildx-action@v3 38 | 39 | - name: Login to Docker Hub 40 | uses: docker/login-action@v3 41 | with: 42 | username: ${{ secrets.DOCKER_USERNAME }} 43 | password: ${{ secrets.DOCKER_TOKEN }} 44 | 45 | - name: Build and push 46 | uses: docker/build-push-action@v6 47 | with: 48 | # 这里的点代表仓库的根目录,如果需要更改子目录则更改这里即可,例如:./src 49 | context: . 50 | push: true 51 | platforms: linux/amd64 52 | tags: ${{ steps.meta.outputs.tags }} 53 | labels: ${{ steps.meta.outputs.labels }} 54 | -------------------------------------------------------------------------------- /docker/java.md: -------------------------------------------------------------------------------- 1 | ### 前后端分离java项目构建示例 2 | 3 | `Dockerfile` 4 | 5 | > JDK 1.8 `maven:3.8-openjdk-8` 6 | ``` 7 | # 前端构建 8 | FROM node:20 AS frontend-build 9 | 10 | WORKDIR /app 11 | 12 | COPY ./blogui ./blogui 13 | 14 | WORKDIR /app/blogui 15 | RUN npm i 16 | RUN npm run build 17 | 18 | # 后端构建 19 | FROM maven:3.8-openjdk-17 AS backend-build 20 | 21 | WORKDIR /app 22 | 23 | COPY ./blogjava ./blogjava 24 | 25 | WORKDIR /app/blogjava 26 | RUN mvn clean package -DskipTests 27 | 28 | # 最终运行阶段 - 使用Caddy镜像运行前后端 29 | FROM caddy:alpine 30 | 31 | RUN apk update && \ 32 | apk add --no-cache openjdk17 && \ 33 | rm -rf /var/cache/apk/* 34 | 35 | WORKDIR /usr/share/caddy 36 | 37 | COPY --from=frontend-build /app/blogui/dist /usr/share/caddy/html 38 | COPY --from=backend-build /app/blogjava/target/blogjava.jar /usr/share/caddy/ 39 | COPY ./Caddyfile /etc/caddy/Caddyfile 40 | 41 | CMD ["sh", "-c", "java -jar /usr/share/caddy/blogjava.jar & caddy run --config /etc/caddy/Caddyfile"] 42 | ``` 43 | 44 | `docker-compose.yml` 45 | ``` 46 | services: 47 | mysql: 48 | image: mysql:8.0 49 | environment: 50 | MYSQL_ROOT_PASSWORD: blog123456 # 数据库root密码 51 | MYSQL_DATABASE: blog # 数据库名称 52 | MYSQL_USER: blog # 数据库用户名 53 | MYSQL_PASSWORD: blog123456 # 数据库密码 54 | volumes: 55 | - ./sql:/docker-entrypoint-initdb.d # 挂载SQL文件目录,自动执行sql脚本,如果有多个则按照数字或者字母顺序依次执行 56 | restart: always 57 | 58 | redis: 59 | image: redis:alpine 60 | restart: always 61 | 62 | 63 | caddy: 64 | build: . 65 | ports: 66 | - "80:80" 67 | - "443:443" 68 | environment: 69 | - DOMAIN=example.com 70 | restart: always 71 | depends_on: 72 | - mysql 73 | - redis 74 | ``` 75 | 76 | `Caddyfile`vue前端,java后端`8080`端口 77 | ``` 78 | {$DOMAIN} { 79 | root * /usr/share/caddy/html 80 | file_server 81 | 82 | route /api/* { 83 | reverse_proxy localhost:8080 84 | } 85 | 86 | try_files {path} /index.html 87 | } 88 | ``` 89 | -------------------------------------------------------------------------------- /docker/docker warp.md: -------------------------------------------------------------------------------- 1 | ### Docker版基于warp的sk5代理 2 | 3 | [项目地址](https://hub.docker.com/r/monius/docker-warp-socks) 4 | 5 | ### 1:普通部署 6 | 7 | ``` 8 | docker run --privileged --restart=always -itd \ 9 | --name warp_socks \ 10 | --cap-add NET_ADMIN \ 11 | --cap-add SYS_MODULE \ 12 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 13 | --sysctl net.ipv4.conf.all.src_valid_mark=1 \ 14 | -v /lib/modules:/lib/modules \ 15 | -p 127.0.0.1:9091:9091 \ 16 | monius/docker-warp-socks 17 | ``` 18 | 19 | 此时你的9091端口的所有流量将通过WARP出站 20 | 21 | 查看你的warp的IP:`curl -x "socks5h://127.0.0.1:9091" -fsSL "https://ifconfig.co"` 22 | 23 | 24 | ### 2:WARP Plus 账户 25 | ``` 26 | docker run --privileged --restart=always -itd \ 27 | --name warp_socks_plus \ 28 | -e WGCF_LICENSE_KEY=你的plus密钥 \ 29 | --cap-add NET_ADMIN \ 30 | --cap-add SYS_MODULE \ 31 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 32 | --sysctl net.ipv4.conf.all.src_valid_mark=1 \ 33 | -v /lib/modules:/lib/modules \ 34 | -p 127.0.0.1:9091:9091 \ 35 | monius/docker-warp-socks 36 | ``` 37 | 运行`curl -x "socks5h://127.0.0.1:9091" -fsSL "https://www.cloudflare.com/cdn-cgi/trace"` 看到`plus`则表示WARP Plus密钥应用成功。 38 | 39 | ### 3:sk5增加密码 40 | 41 | ``` 42 | docker run --privileged --restart=always -itd \ 43 | --name warp_socks_passwd \ 44 | -e SOCK_USER=用户名 \ 45 | -e SOCK_PWD=密码 \ 46 | --cap-add NET_ADMIN \ 47 | --cap-add SYS_MODULE \ 48 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 49 | --sysctl net.ipv4.conf.all.src_valid_mark=1 \ 50 | -v /lib/modules:/lib/modules \ 51 | -p 9091:9091 \ 52 | monius/docker-warp-socks 53 | ``` 54 | 验证是否成功`curl -U "用户名:密码" -x "socks5h://127.0.0.1:9091" -fsSL "https://ifconfig.co"` 55 | 56 | 57 | ### 4:自定义wireguard配置 58 | ``` 59 | docker run --privileged --restart=always -itd \ 60 | --name warp_socks \ 61 | --cap-add NET_ADMIN \ 62 | --cap-add SYS_MODULE \ 63 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 64 | --sysctl net.ipv4.conf.all.src_valid_mark=1 \ 65 | -p 127.0.0.1:9091:9091 \ 66 | -v /lib/modules:/lib/modules \ 67 | -v ~/wireguard/:/opt/wireguard/:ro \ 68 | monius/docker-warp-socks 69 | ``` 70 | 创建`wireguard`目录,并创建`danted.conf`文件填入你的`wireguard`配置 71 | -------------------------------------------------------------------------------- /docker/flarum论坛网站.md: -------------------------------------------------------------------------------- 1 | ### docker部署flarum论坛网站 2 | 3 | - 创建项目文件 4 | ``` 5 | mkdir -p flarum && cd flarum && touch docker-compose.yaml flarum.env 6 | ``` 7 | 8 | - `docker-compose.yaml`配置 9 | 10 | ``` 11 | services: 12 | flarum: 13 | image: mondedie/flarum:latest 14 | container_name: flarum 15 | env_file: 16 | - ./flarum.env # 站点配置文件 17 | volumes: 18 | - ./flarum/assets:/flarum/app/public/assets 19 | - ./flarum/extensions:/flarum/app/extensions 20 | 21 | ports: 22 | - 8888:8888 23 | restart: always 24 | depends_on: 25 | - mariadb 26 | 27 | mariadb: 28 | image: mariadb:10.5 29 | container_name: mariadb 30 | environment: 31 | - MYSQL_ROOT_PASSWORD=abc123456 32 | - MYSQL_DATABASE=flarum 33 | - MYSQL_USER=flarum 34 | - MYSQL_PASSWORD=abc123456 35 | volumes: 36 | - ./mysql:/var/lib/mysql # 数据映射到本地 37 | restart: always 38 | ``` 39 | 40 | 41 | - `flarum.env`配置 42 | 43 | ``` 44 | DEBUG=false 45 | FORUM_URL=https://xxxxxxxxx.com # 论坛域名 46 | 47 | # 数据库信息 48 | DB_HOST=mariadb 49 | DB_NAME=flarum 50 | DB_USER=flarum 51 | DB_PASS=abc123456 52 | DB_PREF=flarum_ 53 | DB_PORT=3306 54 | 55 | # 站点环境变量 56 | FLARUM_ADMIN_USER=admin # 管理员用户名 57 | FLARUM_ADMIN_PASS=admin123456 # 管理员密码 58 | FLARUM_ADMIN_MAIL=admin@admin.com # 管理员邮箱 59 | FLARUM_TITLE=Test flarum # 论坛标题 60 | ``` 61 | 62 | 63 | - 启动 64 | 65 | ``` 66 | docker compose up -d mariadb # 必须先启动数据库,等待数据库初始化完成 67 | 68 | docker compose up -d flarum # 启动站点 69 | ``` 70 | 71 | 72 | - 扩展使用示例 73 | ``` 74 | 查看所有插件 75 | docker exec -ti flarum extension list 76 | 77 | 删除插件 78 | docker exec -ti flarum extension remove 作者/插件名 79 | 80 | 安装插件 81 | docker exec -ti flarum extension require 作者/插件名 82 | ``` 83 | 84 | 中文语言 85 | ``` 86 | docker exec -ti flarum extension require flarum-lang/chinese-simplified:dev-master 87 | ``` 88 | 私信功能插件 89 | ``` 90 | docker exec -ti flarum extension require neoncube/flarum-private-messages:"*" 91 | ``` 92 | 93 | HubUi-X主题 94 | ``` 95 | docker exec -ti flarum extension require kk14569/flarum-hubui-x 96 | ``` 97 | 98 | 99 | 100 | > 官网-[更多插件](https://flarum.org/extensions?tableSortColumn=downloads&tableSortDirection=desc) 101 | 102 | 103 | -------------------------------------------------------------------------------- /docker/Drupal网站系统.md: -------------------------------------------------------------------------------- 1 | ### `Docker-compose`部署`drupal`网站系统 2 | 3 | ``` 4 | services: 5 | drupal: 6 | image: drupal:latest 7 | container_name: drupal 8 | ports: 9 | - "8111:80" 10 | depends_on: 11 | - mysql 12 | - redis 13 | environment: 14 | DRUPAL_DB_HOST: mysql 15 | DRUPAL_DB_NAME: drupal 16 | DRUPAL_DB_USER: drupal 17 | DRUPAL_DB_PASSWORD: drupal_password 18 | restart: always 19 | 20 | mysql: 21 | image: mysql:8.0 22 | container_name: mysql 23 | environment: 24 | MYSQL_DATABASE: drupal 25 | MYSQL_USER: drupal 26 | MYSQL_PASSWORD: drupal_password 27 | MYSQL_ROOT_PASSWORD: root_password 28 | volumes: 29 | - ./mysql:/var/lib/mysql 30 | restart: always 31 | 32 | redis: 33 | image: redis:alpine 34 | container_name: redis 35 | restart: always 36 | ``` 37 | 38 | - 进入容器 39 | ``` 40 | docker exec -it drupal /bin/sh 41 | ``` 42 | - 安装`Drush`和`redis` 43 | ``` 44 | composer require drush/drush drupal/redis 45 | ``` 46 | 47 | ``` 48 | echo 'export PATH="/var/www/html/vendor/bin:$PATH"' >> ~/.bashrc 49 | source ~/.bashrc 50 | ``` 51 | - 容器内使用命令添加配置(全部复制执行) 52 | ``` 53 | echo " 54 | $settings['redis.connection']['interface'] = 'PhpRedis'; // 使用 PHP 的 Redis 扩展 55 | $settings['redis.connection']['host'] = 'redis'; // Redis 容器的服务名 56 | $settings['redis.connection']['port'] = 6379; // Redis 默认端口 57 | 58 | // 将默认缓存设置为 Redis 59 | $settings['cache']['default'] = 'cache.backend.redis'; 60 | 61 | // 可选配置:禁用缓存的内部页面 62 | $settings['cache']['bins']['render'] = 'cache.backend.redis'; 63 | $settings['cache']['bins']['dynamic_page_cache'] = 'cache.backend.redis'; 64 | $settings['cache']['bins']['page'] = 'cache.backend.redis'; 65 | 66 | // 锁定系统使用 Redis(提升性能) 67 | $settings['container_yamls'][] = 'modules/contrib/redis/example.services.yml'; 68 | 69 | // 禁用 Drupal 内置的缓存压缩,因为 Redis 已经进行了压缩 70 | $settings['cache']['bins']['bootstrap'] = 'cache.backend.redis'; 71 | $settings['cache']['bins']['discovery'] = 'cache.backend.redis'; 72 | " >> /var/www/html/sites/default/settings.php 73 | ``` 74 | - `drupal`容器内启用`redis`模块 75 | ``` 76 | drush en redis -y 77 | ``` 78 | 79 | - 安装并启用中文语言 80 | 81 | ``` 82 | drush pm:enable language interface_translation locale -y 83 | drush language:add zh-hans 84 | drush language:default zh-hans 85 | drush locale:update 86 | drush cache:rebuild 87 | ``` 88 | 89 | 90 | 91 | - 重启容器 92 | ``` 93 | docker compose restart drupal 94 | ``` 95 | -------------------------------------------------------------------------------- /docker/cloudreve网盘系统.md: -------------------------------------------------------------------------------- 1 | ### Docker-compose安装私人网盘Cloudreve 2 | 3 | 创建项目文件夹 4 | ``` 5 | mkdir -p cloudreve && cd cloudreve && touch docker-compose.yaml 6 | ``` 7 | 创建配置文件 8 | ``` 9 | mkdir -vp cloudreve/{uploads,avatar} \ 10 | && touch cloudreve/conf.ini \ 11 | && touch cloudreve/cloudreve.db \ 12 | && mkdir -p aria2/config \ 13 | && mkdir -p data/aria2 \ 14 | && chmod -R 777 data/aria2 15 | ``` 16 | 17 | `docker-compose.yaml`配置 18 | 19 | ``` 20 | services: 21 | cloudreve: 22 | container_name: cloudreve 23 | image: cloudreve/cloudreve:latest 24 | restart: unless-stopped 25 | ports: 26 | - "5212:5212" # 映射端口 27 | volumes: 28 | - temp_data:/data 29 | - ./cloudreve/uploads:/cloudreve/uploads 30 | - ./cloudreve/conf.ini:/cloudreve/conf.ini 31 | - ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db 32 | - ./cloudreve/avatar:/cloudreve/avatar 33 | depends_on: 34 | - aria2 35 | aria2: 36 | container_name: aria2 37 | image: p3terx/aria2-pro 38 | restart: unless-stopped 39 | environment: 40 | - RPC_SECRET=aria_rpc_token-asjSADKKMkdhasjk67788 # 随意设置个强密码 41 | - RPC_PORT=6800 42 | volumes: 43 | - ./aria2/config:/config 44 | - temp_data:/data 45 | volumes: 46 | temp_data: 47 | driver: local 48 | driver_opts: 49 | type: none 50 | device: $PWD/data 51 | o: bind 52 | ``` 53 | 54 | ``` 55 | docker compose up -d 56 | ``` 57 | 58 | 查看默认管理员信息 59 | ``` 60 | docker logs cloudreve 61 | ``` 62 | 63 | 64 | 65 | --- 66 | > [官方文档](https://docs.cloudreve.org/manage/db-script) 67 | 68 | 69 | 70 | --- 71 | 72 | ### `nextcloud`网盘系统 73 | 74 | ``` 75 | services: 76 | mysql: 77 | image: mysql:5.7 78 | container_name: mysql 79 | environment: 80 | MYSQL_ROOT_PASSWORD: nextcloud_password 81 | MYSQL_DATABASE: nextcloud 82 | MYSQL_USER: nextcloud 83 | MYSQL_PASSWORD: nextcloud_password 84 | volumes: 85 | - ./mysql-data:/var/lib/mysql 86 | restart: always 87 | 88 | nextcloud: 89 | image: nextcloud 90 | container_name: nextcloud 91 | ports: 92 | - "8080:80" 93 | volumes: 94 | - ./nextcloud:/var/www/html # 文件存储目录 95 | environment: 96 | MYSQL_PASSWORD: nextcloud_password 97 | MYSQL_DATABASE: nextcloud 98 | MYSQL_USER: nextcloud 99 | MYSQL_HOST: mysql 100 | depends_on: 101 | - mysql 102 | restart: always 103 | ``` 104 | -------------------------------------------------------------------------------- /docker/docker windows.md: -------------------------------------------------------------------------------- 1 | ### Docker安装windows系统 2 | 3 | 4 | #### 配置中会默认开启KVM优化性能 5 | 要验证您的系统是否支持 KVM,请运行以下命令: 6 | ``` 7 | sudo apt install cpu-checker 8 | sudo kvm-ok 9 | ``` 10 | > 如果没有KVM导致启动失败,说明你的服务器不允许虚拟化嵌套,可以在环境变量中添加`KVM: "N"`来取消KVM加速,并且注释或删除`devices部分`,不过这样会导致性能下降,使用会非常卡顿。 11 | 12 | ### Docker-compose配置 13 | ``` 14 | services: 15 | windows: 16 | image: dockurr/windows 17 | container_name: win 18 | environment: 19 | VERSION: "11" 20 | LANGUAGE: "Chinese" 21 | CPU_CORES: "4" 22 | RAM_SIZE: "8G" 23 | DISK_SIZE: "64G" 24 | USERNAME: "用户名" 25 | PASSWORD: "密码" 26 | devices: 27 | - /dev/kvm 28 | - /dev/net/tun 29 | cap_add: 30 | - NET_ADMIN 31 | ports: 32 | - 8006:8006 33 | - 3389:3389/tcp 34 | - 3389:3389/udp 35 | stop_grace_period: 2m 36 | ``` 37 | 启动 38 | ``` 39 | docker compose up -d 40 | ``` 41 | 42 | - 启动容器并使用您的 Web 浏览器连接到端口 `8006` 可查看进度 43 | - 安装完成后通过`3389`端口远程连接 44 | 45 | 指定镜像链接,环境变量: 46 | `VERSION: "https://example.com/win.iso"` 47 | 48 | 映射镜像文件: 49 | ``` 50 | volumes: 51 | - /home/example.iso:/custom.iso 52 | ``` 53 | 54 | 文件映射: 55 | ``` 56 | volumes: 57 | - /home:/data 58 | ``` 59 | 打开`文件资源管理器`,点击`网络`部分,找到名为`host.lan`的计算机。双击它,有个名为`Data`的文件夹,映射的文件在此目录。 60 | 61 | --- 62 | 63 | 项目地址:https://github.com/dockur/windows 64 | 65 | MAC系统:https://github.com/dockur/macos 66 | 67 | 68 | 69 | | **变量** | **版本** | **镜像大小** | 70 | |---|---|---| 71 | | `11` | Windows 11 Pro | 5.4 GB | 72 | | `11l` | Windows 11 LTSC | 4.7 GB | 73 | | `11e` | Windows 11 Enterprise | 4.0 GB | 74 | |||| 75 | | `10` | Windows 10 Pro | 5.7 GB | 76 | | `10l` | Windows 10 LTSC | 4.6 GB | 77 | | `10e` | Windows 10 Enterprise | 5.2 GB | 78 | |||| 79 | | `8e` | Windows 8.1 Enterprise | 3.7 GB | 80 | | `7u` | Windows 7 Ultimate | 3.1 GB | 81 | | `vu` | Windows Vista Ultimate | 3.0 GB | 82 | | `xp` | Windows XP Professional | 0.6 GB | 83 | | `2k` | Windows 2000 Professional | 0.4 GB | 84 | |||| 85 | | `2025` | Windows Server 2025 | 5.6 GB | 86 | | `2022` | Windows Server 2022 | 4.7 GB | 87 | | `2019` | Windows Server 2019 | 5.3 GB | 88 | | `2016` | Windows Server 2016 | 6.5 GB | 89 | | `2012` | Windows Server 2012 | 4.3 GB | 90 | | `2008` | Windows Server 2008 | 3.0 GB | 91 | | `2003` | Windows Server 2003 | 0.6 GB | 92 | 93 | 94 | > [!TIP] 95 | > 要安装 ARM64 版本的 Windows,请使用[ dockur/windows-arm ](https://github.com/dockur/windows-arm/) 96 | -------------------------------------------------------------------------------- /docker/域名SSL申请.md: -------------------------------------------------------------------------------- 1 | ## certbot申请域名证书 2 | 3 | --- 4 | --- 5 | 6 | ### HTTP方式 7 | **1:安装certbot** 8 | ``` 9 | apt update && apt install certbot -yq 10 | ``` 11 | **2:申请证书** 12 | 临时占用80端口 13 | ``` 14 | sudo certbot certonly --standalone --non-interactive --agree-tos --email 123youremail@gmail.com -d example.com 15 | ``` 16 | 替换`example.com`示例域名,多个`-d`可为多个域名申请 17 | 18 | **3:查看自动续期任务** 19 | ``` 20 | sudo certbot renew --dry-run 21 | ``` 22 | 默认情况下,Certbot会将证书存储在`/etc/letsencrypt/live/`目录下 23 | 24 | --- 25 | --- 26 | 27 | ### Cloudflare的DNS方式 28 | 29 | 1:`Cloudflare`进入`我的个人资料` -> `API令牌`,创建一个新的令牌,权限为:`区域——DNS——编辑`,区域资源为:`包括——特定区域——选择域名`。 30 | 31 | 2:安装DNS插件 32 | ``` 33 | sudo apt install python3-certbot-dns-cloudflare -yq 34 | ``` 35 | 3:创建配置文件`cloudflare.ini`,配置文件填入`api_token` 36 | ``` 37 | dns_cloudflare_api_token = YOUR_API_TOKEN 38 | ``` 39 | 40 | 4:申请 41 | ``` 42 | sudo certbot certonly --dns-cloudflare --dns-cloudflare-credentials ./cloudflare.ini --non-interactive --agree-tos -d example.com 43 | ``` 44 | 45 | 46 | --- 47 | --- 48 | 49 | ### 阿里云DNS方式 50 | 51 | 1:进入`访问控制` -> `Access Keys`,创建一个`Access Key ID`和`Access Key Secret` 52 | 53 | 2:安装插件 54 | ``` 55 | sudo apt install python3-certbot-dns-aliyun -yq 56 | ``` 57 | 3:配置`aliyun.ini` 58 | ``` 59 | dns_aliyun_access_key = YOUR_ACCESS_KEY_ID 60 | dns_aliyun_secret_key = YOUR_ACCESS_KEY_SECRET 61 | ``` 62 | 63 | 4:申请 64 | ``` 65 | sudo certbot certonly --dns-aliyun --dns-aliyun-credentials ./aliyun.ini --non-interactive --agree-tos -d example.com 66 | ``` 67 | 68 | 69 | 70 | 71 | 72 | --- 73 | --- 74 | --- 75 | 76 | ## Docker-compose申请 77 | 78 | ``` 79 | services: 80 | https-portal: 81 | image: steveltn/https-portal 82 | ports: 83 | - '80:80' 84 | - '443:443' 85 | environment: 86 | DOMAINS: 'example.com' # 你的域名 87 | STAGE: 'production' # 生产环境 88 | volumes: 89 | - ./https-data:/var/lib/https-portal # 证书存储文件 90 | restart: always 91 | ``` 92 | 93 | 94 | - 强制续期证书:`FORCE_RENEW: 'true'` 95 | 96 | #### dns方式申请 97 | 98 | ``` 99 | services: 100 | https-portal: 101 | image: steveltn/https-portal 102 | environment: 103 | DOMAINS: 'example.com' # 你的域名 104 | STAGE: 'production' 105 | DNS_PROVIDER: 'cloudflare' # 或 'alidns' 106 | CLOUDFLARE_EMAIL: 'email@example.com' # 对于Cloudflare 107 | CLOUDFLARE_API_KEY: 'cloudflare-api-token' # 对于Cloudflare 108 | # ALI_KEY: 'ali-access-key-id' # 对于阿里云 109 | # ALI_SECRET: 'ali-access-key-secret' # 对于阿里云 110 | volumes: 111 | - ./https-data:/var/lib/https-portal # 证书存储文件 112 | restart: always 113 | ``` 114 | 115 | - 强制续期证书:`FORCE_RENEW: 'true'` 116 | -------------------------------------------------------------------------------- /docker/自建rust轻量邮箱服务.md: -------------------------------------------------------------------------------- 1 | ### docker-compose.yml 部署邮件服务 2 | ``` 3 | services: 4 | stalwart: 5 | image: stalwartlabs/stalwart:latest 6 | container_name: stalwart 7 | restart: always 8 | ports: 9 | - "443:443" 10 | - "8080:8080" 11 | - "25:25" 12 | - "587:587" 13 | - "465:465" 14 | - "143:143" 15 | - "993:993" 16 | - "4190:4190" 17 | - "110:110" 18 | - "995:995" 19 | volumes: 20 | - ./mail:/opt/stalwart 21 | ``` 22 | 23 | ### 1:打开`http://IP:8080` 24 | 25 | ![image](/png/stalwart/2.png) 26 | ### 2:点击Settings——Network ,然后修改Hostname ,然后点击Save & Reload 27 | 28 | ![image](/png/stalwart/3.png) 29 | ![image](/png/stalwart/4.png) 30 | 31 | ### 3:点击Management——Directory——Domains,创建个域名 32 | 33 | ![image](/png/stalwart/5.png) 34 | ![image](/png/stalwart/6.png) 35 | ![image](/png/stalwart/7.png) 36 | 37 | ### 4:点击Management——Directory——Accounts,创建用户并设置用户密码 38 | 39 | ![image](/png/stalwart/8.png) 40 | ![image](/png/stalwart/9.png) 41 | ![image](/png/stalwart/10.png) 42 | ![image](/png/stalwart/11.png) 43 | 44 | ### 5:点击Management——Directory——Domains,查看需要配置的DNS记录 45 | 46 | 按照记录,一条一条添加到域名中做解析 47 | 这个时候我们还需要再添加两条 48 | A记录,将baidu.com解析到服务器IP上 49 | A记录,将mail.baidu.com解析到服务器IP上 50 | 接下来再来添加系统要求配置的DNS记录 51 | 52 | ![image](/png/stalwart/12.png) 53 | ![image](/png/stalwart/13.png) 54 | 55 | ### 6:点击TLS——ACME Providers,创建个自动申请证书的ACME任务,设置完后点击Save & Reload 56 | 57 | ![image](/png/stalwart/14.png) 58 | ![image](/png/stalwart/15.png) 59 | ![image](/png/stalwart/16.png) 60 | 61 | 如果你在国内服务器部署的话,ACME可能会不成功,你可以手动申请SSl证书再复制到系统里,有了证书后,这时你打开https://mail.baidu.com:4443就能正常打开了 62 | 63 | ### 7:修改服务监听 64 | 点击Server——Listeners,修改IMAP4、POP3、SMTP、的TLS选项都打开 65 | ![image](/png/stalwart/17.png) 66 | ![image](/png/stalwart/18.png) 67 | ![image](/png/stalwart/19.png) 68 | ![image](/png/stalwart/20.png) 69 | ![image](/png/stalwart/21.png) 70 | 71 | ### 8:登陆邮件客户端 72 | 下载个163的客户端,然后填入我们邮件服务器的参数 73 | ![image](/png/stalwart/22.png) 74 | ![image](/png/stalwart/23.png) 75 | 76 | ### 然后就可以正常发送邮件了 77 | ![image](/png/stalwart/24.png) 78 | 79 | ### DNS配置后续 80 | 虽然你的DNS在前面配置好了,但是有条记录自己是配不了的,需要找服务器提供商配置,那就是rDNS,也就是所谓的PTR记录,反向解析;前面我们做的都是正向解析,正向解析是指通过域名可以解析出IP,反向解析则是通过IP解析出域名。 81 | 为什么要做反向解析?PTR 反向解析主要应用在邮件服务器中,因为多数垃圾邮件发送方使用动态分配或者没有注册域名的 IP 发送垃圾邮件,以逃避追踪,所以可以在邮件服务器中拒绝接收来自无法反向解析到域名的 IP 地址发送的信息,作为一种拒收垃圾邮件的手段,启用反向解析,可以拒绝接收所有没有注册域名发来的信息,从而提升服务器IP 的信誉度。 82 | 所以你需要找到你的服务器提供商来帮你做,但是一般大厂商都能自行操作就是,像腾讯、阿里这种大厂是可以在管理台上自行操作的,境外的许多服务器提供商也支持自行操作,而运营商的服务器则不支持,需要提工单审核,审核通过后才能给配置。 83 | ### 总结 84 | 85 | 部署邮件服务器其实挺简单的,就是起个Docker容器,然后进入后台配置个主机名、域、账号、SSL证书和开启服务监听的TLS选项,配置个DNS就能用了。部署邮件服务器其实挺简单的,就是起个Docker容器,然后进入后台配置个主机名、域、账号、SSL证书和开启服务监听的TLS选项,配置个DNS就能用了。 86 | 87 | 88 | ``` 89 | 文章作者:StephenJose_Dai 90 | 91 | 原始链接:https://daishenghui.club/2025/06/12/categories/Linux/Linux部署企业级邮件服务器 92 | 93 | 文章转载许可协议: "署名-非商用-相同方式共享 3.0" 转载请保留原文链接及作者。 94 | ``` 95 | 96 | -------------------------------------------------------------------------------- /docker/mitmproxy抓包.md: -------------------------------------------------------------------------------- 1 | ## 使用docker-compose部署`mitmproxy`抓包工具 2 | ``` 3 | services: 4 | mitmproxy: 5 | image: mitmproxy/mitmproxy 6 | container_name: mit 7 | network_mode: "host" 8 | volumes: 9 | - ./mitmproxy:/home/mitmproxy/.mitmproxy 10 | command: mitmweb --web-host 0.0.0.0 --web-port 8081 11 | ``` 12 | 13 | 默认占用`8080`(代理端口),和`8081`(面板端口) 14 | 15 | 证书在挂载的目录,`Debian`系统信任证书: 16 | ``` 17 | sudo cp ./mitmproxy/mitmproxy-ca-cert.pem /usr/local/share/ca-certificates/mitmproxy.crt 18 | ``` 19 | ``` 20 | sudo update-ca-certificates 21 | ``` 22 | 23 | 打开面板查看流量日志 24 | 25 | [透明代理配置教程](https://docs.mitmproxy.org/stable/howto-transparent/) 26 | 27 | [普通命令代理](https://github.com/mzz2017/gg/blob/main/README_zh.md) 28 | 29 | ``` 30 | # 开启系统级流量重定向 31 | iptables -t nat -A OUTPUT -o lo -j RETURN 32 | iptables -t nat -A PREROUTING -i lo -j RETURN 33 | iptables -t nat -A OUTPUT -d 192.168.1.100 -j RETURN 34 | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080 35 | iptables -t nat -A PREROUTING -p tcp --dport 443 -j REDIRECT --to-port 8080 36 | iptables -t nat -A OUTPUT -p tcp --dport 80 -j REDIRECT --to-port 8080 37 | iptables -t nat -A OUTPUT -p tcp --dport 443 -j REDIRECT --to-port 8080 38 | 39 | # 清除规则 40 | iptables -t nat -F 41 | ``` 42 | 43 | --- 44 | 45 | 46 | ## win系统安装 mitmproxy 47 | 48 | ### 1. 下载 Windows 安装包 49 | 1. 访问 [mitmproxy 官网下载](https://mitmproxy.org/)。 50 | 2. 下载并安装适合 Windows 的 `.exe` 安装包。 51 | 52 | ## 2. 启动 mitmproxy 53 | 1. 打开 **命令提示符** 或 **PowerShell**。 54 | 2. 启动 mitmproxy,默认监听 `8080` 端口: 55 | ``` 56 | mitmproxy --listen-host 0.0.0.0 --listen-port 8080 --web-host 0.0.0.0 --web-port 8081 57 | ``` 58 | 59 | ## 3. 配置系统使用代理 60 | ### 设置系统代理 61 | 1. 打开 **设置** -> **网络和互联网** -> **代理**。 62 | 2. 在 **手动代理设置** 中,开启 **使用代理服务器**。 63 | - 代理地址:`127.0.0.1` 64 | - 端口:`8080` 65 | 66 | ### 命令行设置系统代理 67 | 1. 通过PowerShell设置全局代理: 68 | 69 | `netsh winhttp set proxy 127.0.0.1:8080` 70 | 71 | 2. 验证代理设置: 72 | 73 | `netsh winhttp show proxy` 74 | 75 | ## 4. 信任 mitmproxy 证书 76 | 77 | ### 下载 mitmproxy 证书 78 | 1. 在浏览器中访问 `http://mitm.it`。 79 | 2. 下载并安装根证书。 80 | 81 | ### 安装证书到 Windows 系统(全局信任) 82 | 83 | 1. **打开证书管理器**: 84 | - 按下 **Win + R** 键,输入 `certmgr.msc` 并按回车,打开证书管理器。 85 | 86 | 2. **导入 mitmproxy 证书**: 87 | - 在证书管理器中,右键点击 **受信任的根证书颁发机构** 文件夹,选择 **所有任务** -> **导入**。 88 | - 在导入向导中选择下载的证书文件(`mitmproxy-ca-cert.pem`),然后选择 **放入以下存储**,并选择 **受信任的根证书颁发机构**。 89 | - 完成导入并确认证书已经被信任。 90 | 91 | ### 在浏览器中安装证书 92 | 1. **Chrome/Edge**: 93 | - 打开 **设置** -> **隐私与安全** -> **安全** -> **管理证书**。 94 | - 导入证书并信任它。 95 | 2. **Firefox**: 96 | - 打开 **设置** -> **隐私与安全** -> **证书** -> **查看证书**。 97 | - 导入并信任证书。 98 | 99 | ## 5. 测试代理 100 | 1. 打开浏览器访问任意网站,查看 `mitmproxy` 控制台是否显示日志。 101 | 102 | ## 常见问题 103 | - **证书未信任**:确保证书已正确安装并信任。可以尝试重新启动系统以确保证书生效。 104 | - **代理不生效**:确认代理配置正确,`mitmproxy` 正在运行。 105 | - **某些应用未生效**:某些应用程序可能不遵循系统代理设置,需单独配置代理。 106 | -------------------------------------------------------------------------------- /docker/极光转发面板.md: -------------------------------------------------------------------------------- 1 | ## Docker-compose 安装极光转发面板 2 | 3 | ### 创建文件: 4 | ``` 5 | mkdir -p aurora && cd aurora && touch docker-compose.yml 6 | ``` 7 | 8 | ### 写入配置: 9 | 10 | ``` 11 | services: 12 | worker: 13 | image: leishi1313/aurora-admin-backend:latest 14 | restart: always 15 | command: bash worker.sh 16 | environment: 17 | TZ: 'Asia/Shanghai' 18 | ENABLE_SENTRY: 'yes' 19 | DATABASE_URL: 'postgresql://aurora:AuroraAdminPanel321@postgres:5432/aurora' 20 | TRAFFIC_INTERVAL_SECONDS: 600 21 | DDNS_INTERVAL_SECONDS: 120 22 | volumes: 23 | - $HOME/.ssh/id_rsa:/app/ansible/env/ssh_key 24 | - app-data:/app/ansible/priv_data_dirs 25 | depends_on: 26 | - redis 27 | networks: 28 | - aurora 29 | - worker 30 | 31 | backend: 32 | image: leishi1313/aurora-admin-backend:latest 33 | restart: always 34 | command: bash -c "while ! 105 | ``` 106 | >恢复当前目录内的`./backup/`文件,需替换具体文件名称 107 | > 108 | >如果恢复成功,会输出`Restore succeeded` 否则会输出`Restore failed` 109 | > 110 | >添加变量`- INIT_BACKUP=1`则在容器启动时立即创建备份 111 | > 112 | >如果要使用宿主机网络则移除网络配置,增加`network_mode: host`配置 113 | 114 | [文档](https://github.com/fradelg/docker-mysql-cron-backup) 115 | 116 | [定时备份PostgresSQL数据库](https://github.com/prodrigestivill/docker-postgres-backup-local) 117 | -------------------------------------------------------------------------------- /docker/docker xui.md: -------------------------------------------------------------------------------- 1 | ### docker部署3xui 2 | 3 | ``` 4 | docker run -itd \ 5 | -e XRAY_VMESS_AEAD_FORCED=false \ 6 | -v $PWD/db/:/etc/x-ui/ \ 7 | -v $PWD/cert/:/root/cert/ \ 8 | --network=host \ 9 | --restart=always \ 10 | --name 3x-ui \ 11 | xiangnile/3x-ui 12 | ``` 13 | 14 | ``` 15 | 端口:2053 16 | 用户名:admin 17 | 密码:admin 18 | ``` 19 | 面板数据在`root/db`目录下 20 | 21 | ### `docker-compose.yml` 22 | ``` 23 | services: 24 | xui: 25 | image: xiangnile/3x-ui 26 | container_name: xui 27 | restart: always 28 | network_mode: host 29 | environment: 30 | XRAY_VMESS_AEAD_FORCED: "false" 31 | volumes: 32 | - ./db:/etc/x-ui 33 | - ./cert:/root/cert 34 | ``` 35 | 36 | 37 | #### 容器里的命令 38 | 查看面板信息 39 | ``` 40 | /app/x-ui setting -show true 41 | ``` 42 | 修改用户名和密码 43 | ``` 44 | /app/x-ui setting -username 用户名 -password 密码 45 | ``` 46 | 修改面板路径 47 | ``` 48 | /app/x-ui setting -webBasePath "admin" 49 | ``` 50 | 修改面板端口 51 | ``` 52 | /app/x-ui setting -port 端口 53 | ``` 54 | 清除安全令牌 55 | ``` 56 | /app/x-ui setting -remove_secret 57 | ``` 58 | 重置面板所有设置为默认值(用户名和密码除外) 59 | ``` 60 | /app/x-ui setting -reset 61 | ``` 62 | 重启容器 63 | ``` 64 | docker restart 3x-ui 65 | ``` 66 | 67 | #### 127.0.0.1:62789监听失败是因为服务器没有配置本地环回地址 68 | 查看 69 | ``` 70 | ip addr show lo 71 | ``` 72 | 分配 73 | ``` 74 | sudo ip addr add 127.0.0.1/8 dev lo 75 | ``` 76 | 77 | --- 78 | ### 脚本 79 | ``` 80 | bash <(curl -Ls https://raw.githubusercontent.com/admin8800/3x-ui/main/install.sh) 81 | ``` 82 | 83 | --- 84 | 85 | ### 官方最新3x-ui 86 | ``` 87 | docker run -dit \ 88 | --name 3x-ui \ 89 | --network host \ 90 | --restart unless-stopped \ 91 | -e XRAY_VMESS_AEAD_FORCED=false \ 92 | -e XUI_ENABLE_FAIL2BAN=true \ 93 | -v "$(pwd)/db:/etc/x-ui" \ 94 | -v "$(pwd)/cert:/root/cert" \ 95 | ghcr.io/mhsanaei/3x-ui 96 | ``` 97 | 98 | ### `docker-compose.yml` 99 | ``` 100 | services: 101 | xui: 102 | image: ghcr.io/mhsanaei/3x-ui 103 | container_name: 3x-ui 104 | restart: unless-stopped 105 | network_mode: host 106 | environment: 107 | XRAY_VMESS_AEAD_FORCED: "false" 108 | XUI_ENABLE_FAIL2BAN: "true" 109 | volumes: 110 | - ./db:/etc/x-ui 111 | - ./cert:/root/cert 112 | ``` 113 | 114 | 115 | ### s-ui面板sing-box 116 | ``` 117 | docker run -itd \ 118 | --name s-ui \ 119 | --restart unless-stopped \ 120 | --network host \ 121 | -v $(pwd)/db:/app/db \ 122 | -v $(pwd)/cert:/app/cert \ 123 | alireza7/s-ui 124 | ``` 125 | 126 | `docker-compose.yml` 127 | ``` 128 | services: 129 | s-ui: 130 | image: alireza7/s-ui 131 | container_name: s-ui 132 | volumes: 133 | - ./db:/app/db 134 | - ./cert:/app/cert 135 | tty: true 136 | restart: unless-stopped 137 | network_mode: host 138 | ``` 139 | 140 | --- 141 | ### Reality域名推荐列表 142 | ``` 143 | addons.mozilla.org 144 | s0.awsstatic.com 145 | d1.awsstatic.com 146 | m.media-amazon.com 147 | www.amazon.com 148 | 149 | player.live-video.net 150 | one-piece.com 151 | www.lovelive-anime.jp 152 | www.swift.com 153 | academy.nvidia.com 154 | www.cisco.com 155 | update.microsoft 156 | www.tesla.com 157 | slack.com 158 | www.ibm.com 159 | www.ebay.com 160 | store.steampowered.com 161 | www.riotgames.com 162 | www.xbox.com 163 | www.icloud.com 164 | ``` 165 | 166 | ### cf优选域名推荐列表 167 | ``` 168 | www.wetest.vip 169 | 170 | # 稳定大厂域名 171 | unpkg.com 172 | www.visa.com.sg 173 | www.okcupid.com 174 | www.udemy.com 175 | visa.cn 176 | ``` 177 | 178 | ### 反向代理连接内网家宽 179 | 180 | - 公网服务器部署`3xui`并创建`2`个节点,例如一个`9988`端口,一个`19988`端口,基本模板-阻止配置-关掉私人IP 181 | - 182 | - 家宽内网环境部署`3xui`创建一个出站,填入服务端的`19988`端口的节点,然后添加反向代理配置,`互连`选择刚刚添加的`19988`端口的出站节点,`出站`选择`direct`,然后保存并重启,基本模板-阻止配置-关掉私人IP 183 | - 184 | - 公网服务器的面板添加反向代理,类型选择`门户`,互连选择`19988`端口的节点,入站选择`9988`端口的节点,然后保存并重启 185 | - 186 | - 然后使用代理软件连接公网服务器的`9988`端口的节点即可,此时这个节点的出站IP就是内网家宽的IP 187 | -------------------------------------------------------------------------------- /docker/L2TP.md: -------------------------------------------------------------------------------- 1 | ### Docker部署 2 | ``` 3 | services: 4 | softether-vpn: 5 | image: siomiz/softethervpn:alpine 6 | container_name: softether 7 | restart: always 8 | ports: 9 | - "443:443" # SSTP使用的端口 10 | - "1194:1194/udp" # OpenVPN使用的端口 11 | - "500:500/udp" # IPsec/IKE使用的端口 12 | - "4500:4500/udp" # IPsec NAT-T使用的端口 13 | - "1701:1701/udp" # L2TP使用的端口 14 | environment: 15 | - PSK=adminl2tpAAA # 预共享密钥,用于IPsec连接 16 | - USERNAME=admin # VPN用户名 17 | - PASSWORD=admin7890 # VPN密码 18 | - OPENVPN_ENABLE=1 # 启用OpenVPN 19 | - SSTP_ENABLE=1 # 启用SSTP 20 | cap_add: 21 | - NET_ADMIN 22 | volumes: 23 | - /lib/modules:/lib/modules 24 | ``` 25 | 26 | > 或者可以直接使用host网络模式:`network_mode: host` 27 | > 部分协议不需要可以去掉 28 | 29 | 30 | 31 | **L2TP多用户配置** 32 | ``` 33 | services: 34 | softether-vpn: 35 | image: siomiz/softethervpn:4.38-alpine 36 | container_name: l2tp 37 | restart: always 38 | ports: 39 | - "500:500/udp" 40 | - "4500:4500/udp" 41 | - "1701:1701/udp" 42 | environment: 43 | - PSK=adminl2tpAAA # 预共享密钥 44 | - USERS=user1:password1;user2:password2;user3:password3 # 多用户配置 45 | cap_add: 46 | - NET_ADMIN 47 | volumes: 48 | - /lib/modules:/lib/modules 49 | ``` 50 | 51 | **mihomo** 52 | 53 | l2tp 容器必须使用host网络模式:`network_mode: host` 54 | ``` 55 | mixed-port: 7890 56 | allow-lan: false 57 | mode: rule 58 | log-level: info 59 | external-controller: 127.0.0.1:9090 60 | 61 | tun: 62 | enable: true 63 | stack: system 64 | auto-route: true 65 | auto-detect-interface: true 66 | 67 | 68 | dns: 69 | enable: true 70 | listen: 0.0.0.0:53 71 | enhanced-mode: fake-ip 72 | nameserver: 73 | - 8.8.8.8 74 | - 1.1.1.1 75 | 76 | proxies: 77 | - name: anytls-out 78 | type: anytls 79 | server: 192.168.2.1 # 服务端地址 80 | port: 10002 # 节点端口 81 | password: "vDsdasdda4S8WVPdRI12312o9890890" # 协议认证密码 82 | idle-session-check-interval: 30 83 | idle-session-timeout: 30 84 | min-idle-session: 0 85 | tls: true 86 | udp: true 87 | skip-cert-verify: true # 跳过证书认证 88 | servername: www.bing.com # 你的域名 89 | 90 | proxy-groups: 91 | - name: "PROXY" 92 | type: select 93 | proxies: 94 | - anytls-out 95 | 96 | rules: 97 | - MATCH,PROXY 98 | ``` 99 | 100 | --- 101 | **电脑内置l2tp协议连接方法:** 102 | 103 | 1:搜索防火墙和网络保护,打开高级设置,打开出站规则,放行l2tp出站 104 | 105 | 2:电脑开始菜单搜索服务,打开服务后,查找`IPsec Policy Agent`设置启动类型为`自动`,系统默认是手动并且禁用的。 106 | 107 | 3:修改系统注册表。Win+R 运行,输入`regedit`后,打开系统注册表,注册表编辑器中,找到并单击以下注册表子项: 108 | ``` 109 | HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Rasman\Parameters 110 | ``` 111 | 4:然后找到子项`allowL2TPweakcryphto`,双击修改值为`1`。 112 | 113 | 5:然后在空白处新建,选择DWORD(32)值(D),名称为:`ProhibitIpSec`,设置值为`1`。 114 | 115 | 6:以上步骤均完成后,重启计算机。 116 | 117 | 118 | --- 119 | 120 | IOS端使用: 121 | 122 | 在服务器上下载后缀为`.mobileconfig`的配置文件——>通过app把文件上传到iPhone——>找到对应的配置文件——>点击配置文件——>点击用其他应用打开——>存储到`文件`——>点击存储 123 | 124 | 点击设置——>点击通用——>找到VPN与设备管理——>点击含有服务器IP的配置文件——>点击安装——>输入密码——>再次点击安装——>点击安装——>点击完成 125 | 126 | 点击设置——>点击VPN——>选择对应服务器IP的VPN——>点击连接 127 | 128 | 129 | --- 130 | 131 | ### WireGuard VPN 132 | 133 | 134 | 135 | ``` 136 | services: 137 | wg-easy: 138 | image: ghcr.io/wg-easy/wg-easy 139 | container_name: wg-easy 140 | ports: 141 | - "51820:51820/udp" # 映射 WireGuard 的 UDP 端口 142 | - "51821:51821/tcp" # 映射 Web 界面的 TCP 端口 143 | restart: always 144 | cap_add: 145 | - NET_ADMIN 146 | - SYS_MODULE 147 | sysctls: 148 | - net.ipv4.ip_forward=1 149 | - net.ipv4.conf.all.src_valid_mark=1 150 | environment: 151 | - LANG=en 152 | - WG_HOST=主机IP或者域名 153 | - PASSWORD_HASH=面板密码的哈希值 154 | volumes: 155 | - ./wireguard:/etc/wireguard 156 | ``` 157 | 158 | [在线生成密码哈希](https://uutool.cn/php-password/) 159 | 160 | 需要将哈希值的`$`替换为`$$`才是正确的 161 | 162 | 163 | [官方文档](https://github.com/wg-easy/wg-easy) 164 | 165 | 166 | 167 | --- 168 | 169 | 170 | -------------------------------------------------------------------------------- /docker/docker dujiaoka.md: -------------------------------------------------------------------------------- 1 | # docker快速部署独角数卡 2 | - [安装时不支持post方法去掉`do-`可解决](https://github.com/sky22333/dujiaoka/blob/da5f055e9afa8cc7920e1f3b52674351ff0c5f25/routes/common/web.php#L41) 3 | - 先把域名反代到`8111`端口并开启HTTPS 4 | 5 | **Docker-compose配置:** 6 | ``` 7 | services: 8 | mysql: 9 | image: mysql:5.7 10 | environment: 11 | MYSQL_DATABASE: dujiaoka # 数据库名称 12 | MYSQL_USER: dujiaoka # 数据库用户名 13 | MYSQL_PASSWORD: dujiaoka_password # 数据库密码 14 | MYSQL_ROOT_PASSWORD: dujiaoka_password # 数据库root密码 15 | volumes: 16 | - ./data/mysql:/var/lib/mysql # 映射数据库文件 17 | restart: always 18 | 19 | redis: 20 | image: redis:alpine 21 | restart: always 22 | 23 | dujiaoka: 24 | image: jiangjuhong/dujiaoka:latest 25 | container_name: dujiaoka 26 | ports: 27 | - "8111:80" 28 | environment: 29 | - APP_URL=https://域名 # 替换域名 30 | - ADMIN_HTTPS=true 31 | - ADMIN_ROUTE_PREFIX=/admin 32 | - WEB_DOCUMENT_ROOT=/app/public 33 | - TZ=Asia/Shanghai 34 | restart: always 35 | ``` 36 | 37 | 输入域名进入安装页面 38 | ``` 39 | 40 | 数据库地址:mysql 41 | 端口:3306 42 | 数据库名称:dujiaoka 43 | 用户名:dujiaoka 44 | 密码:dujiaoka_password 45 | 46 | redis地址:redis 47 | ``` 48 | 49 | 50 | 51 | 用户名和密码都是`admin`,`admin` 52 | 53 | 后台路径为`admin` 54 | 55 | --- 56 | --- 57 | 58 | ### 支付配置 59 | 易支付对接地址示例:`http://xxxxx.com/submit.php` 60 | 61 | epusdt对接示例:`http://127.0.0.1:8000/api/v1/order/create-transaction`,同一台服务器可以填本地IP 62 | 63 | 64 | > 易支付改不跳支付方式:`app/Http/Controllers/Pay/YipayController.php`去掉第`19`行。 65 | 66 | 67 | ## 进入容器 68 | 69 | ``` 70 | docker exec -it dujiaoka /bin/sh 71 | ``` 72 | 73 | #### 重置密码 74 | 在容器内执行`php artisan admin:reset-password`然后输入需要重置密码的用户名,然后输入新密码 75 | 76 | 忘记管理员用户名可在数据库的`admin_users`表查看 77 | 78 | --- 79 | 80 | #### 修改`¥`标识 81 | 82 | hyper:`resources/lang/zh_CN/hyper.php`第`11`行 83 | 84 | unicorn:`resources/lang/zh_CN/dujiaoka.php`第`91`行 85 | 86 | 首页`/app/resources/views/lang/static_pages/home.blade.php` 87 | 88 | 商品页`/app/resources/views/lang/static_pages/buy.blade.php` 89 | 90 | 订单页`/app/resources/lang/zh_CN/dujiaoka.php` 91 | 92 | --- 93 | 94 | #### 下单邮箱改为不用必填 95 | 96 | 1:`app/Service/OrderService.php`文件第`62`行,将`required`改为`nullable` 97 | 98 | 2:`app/Http/Controllers/Home/OrderController.php`第`77`行删除,替换为以下代码 99 | 100 | > 如果`$email`为空,生成一个随机邮箱 101 | ``` 102 | $email = $request->input('email'); 103 | if (empty($email)) { 104 | $randomString = bin2hex(random_bytes(5)); 105 | $email = $randomString . uniqid() . '@aa.com'; 106 | } 107 | $this->orderProcessService->setEmail($email); 108 | ``` 109 | 110 | 3:`resources/views/unicorn/static_pages/buy.blade.php`文件第`63`行,去掉`required`代码,`luna`在`126`行,`hyper`则需要删除第`176`行的整个判断。 111 | 112 | > 如果要留空则需要数据库修改`email`表结构。 113 | 114 | --- 115 | 116 | #### 底部版权路径 117 | ``` 118 | resources/views/unicorn/layouts/_footer.blade.php 119 | ``` 120 | 121 | #### 主题路径 122 | ``` 123 | /app/resources/views 124 | ``` 125 | #### css样式路径 126 | ``` 127 | /app/public/assets 128 | ``` 129 | 主题背景路径 130 | ``` 131 | /app/public/assets/luna/img/ 132 | ``` 133 | 134 | --- 135 | 136 | #### 底部运行时间代码 137 | ``` 138 |
139 | 本站已运行: 140 |
141 | 142 | 163 | ``` 164 | -------------------------------------------------------------------------------- /docker/docker wordpress.md: -------------------------------------------------------------------------------- 1 | ### Docker-compose部署wordpress 2 | 3 | 4 | 5 | 创建项目文件夹 6 | 7 | ``` 8 | mkdir wordpress && cd wordpress 9 | ``` 10 | 11 | 创建`docker-compose.yml`文件并写入以下代码配置: 12 | 13 | 14 | ``` 15 | services: 16 | db: 17 | image: mysql:5.7 18 | volumes: 19 | - ./data/mysql:/var/lib/mysql 20 | restart: always 21 | environment: 22 | MYSQL_ROOT_PASSWORD: wordpressyyds 23 | MYSQL_DATABASE: wordpress 24 | MYSQL_USER: wordpress 25 | MYSQL_PASSWORD: wordpress 26 | networks: 27 | - wp 28 | 29 | wordpress: 30 | container_name: wordpress 31 | depends_on: 32 | - db 33 | image: wordpress:latest 34 | volumes: 35 | - ./data/wp:/var/www/html 36 | ports: 37 | - "8000:80" 38 | restart: always 39 | environment: 40 | WORDPRESS_DB_HOST: db:3306 41 | WORDPRESS_DB_USER: wordpress 42 | WORDPRESS_DB_PASSWORD: wordpress 43 | WORDPRESS_DB_NAME: wordpress 44 | networks: 45 | - wp 46 | 47 | networks: 48 | wp: 49 | ``` 50 | 51 | 运行: 52 | 53 | ``` 54 | docker compose up -d 55 | ``` 56 | 57 | 站点端口为 `8000` 后台路径 `/wp-admin` 58 | 59 | --- 60 | 61 | 62 | 63 | 64 | #### 修改docker中wordpress的上传限制。 65 | 66 | 67 | 进入 wordpress 容器 68 | ``` 69 | docker exec -it wordpress /bin/bash 70 | ``` 71 | wordpress 容器中的这个路径`/usr/local/etc/php/`,是存放 `php.ini` 的地方,但是默认是没有 `php.ini` 这个文件的,所以我们要通过复制一份`php.ini-production`文件,来生成 `php.ini` 文件。 72 | ``` 73 | cd /usr/local/etc/php/ 74 | ``` 75 | ``` 76 | cp php.ini-production php.ini 77 | ``` 78 | 然后使用vim编辑器修改即可,如果没有则需要安装一下 79 | 80 | 更新及安装vim,使用如下代码 81 | ``` 82 | apt-get update 83 | apt-get install vim 84 | ``` 85 | 安装完成vim,现在就可以对php.ini进行编辑了。 86 | ``` 87 | vim php.ini 88 | ``` 89 | 找到这几个变量,根据自己需求修改。 90 | ``` 91 | upload_max_filesize = 2M # PHP最大上传文件大小 92 | post_max_size = 8M # 服务器最大数据量和文件大小 93 | memory_limit = 128M # PHP内存占用限制 94 | ``` 95 | 最后一步! 96 | 97 | 重启wordpress 98 | ``` 99 | docker restart wordpress 100 | ``` 101 | 102 | --- 103 | 104 | --- 105 | 106 | ### 启用redis缓存的示例 107 | 108 | ``` 109 | services: 110 | db: 111 | image: mysql:5.7 112 | volumes: 113 | - ./data/mysql:/var/lib/mysql 114 | restart: always 115 | environment: 116 | MYSQL_ROOT_PASSWORD: wordpressyyds 117 | MYSQL_DATABASE: wordpress 118 | MYSQL_USER: wordpress 119 | MYSQL_PASSWORD: wordpress 120 | networks: 121 | - wp 122 | 123 | wordpress: 124 | container_name: wordpress 125 | depends_on: 126 | - db 127 | - redis # 添加redis 128 | image: wordpress:latest 129 | volumes: 130 | - ./data/wp:/var/www/html 131 | ports: 132 | - "8000:80" 133 | restart: always 134 | environment: 135 | WORDPRESS_DB_HOST: db:3306 136 | WORDPRESS_DB_USER: wordpress 137 | WORDPRESS_DB_PASSWORD: wordpress 138 | WORDPRESS_DB_NAME: wordpress 139 | WORDPRESS_REDIS_HOST: redis 140 | networks: 141 | - wp 142 | 143 | redis: 144 | image: redis:alpine 145 | container_name: redis 146 | restart: always 147 | networks: 148 | - wp 149 | 150 | networks: 151 | wp: 152 | ``` 153 | 154 | - 在`wp-config.php`文件中添加以下代码 155 | ``` 156 | define('WP_REDIS_HOST', 'redis'); 157 | define('WP_CACHE', true); 158 | 159 | // 确保添加在这个代码上面 160 | /* That's all, stop editing! Happy blogging. */ 161 | ``` 162 | 163 | - 容器内安装redis扩展 164 | ``` 165 | docker exec -it wordpress /bin/bash 166 | ``` 167 | ``` 168 | apt-get update && apt-get install -y libz-dev libssl-dev 169 | 170 | pecl install redis # 这里直接一路回车 171 | 172 | docker-php-ext-enable redis 173 | ``` 174 | - 重启容器 175 | ``` 176 | docker restart wordpress 177 | ``` 178 | 179 | - 插件商城搜索安装插件:`Redis Object Cache` 并启用`redis`缓存 180 | --- 181 | - 修改后台路径插件`WPS Hide Login` 182 | - 备份插件`WPvivid` 183 | - 直播播放器插件`SRS Player` 184 | - 优化性能缓存插件`WP Fastest Cache` 185 | - 压缩图片和懒加载插件`Smush` 186 | 187 | 188 | --- 189 | 190 | ### woocommerce汉化 191 | 192 | [woocommerce汉化插件下载](https://translate.wordpress.org/locale/zh-cn/default/wp-plugins/woocommerce/) 193 | 194 | 1:选择第一个稳定版本 195 | 196 | 2:滚动到页面底部,导出为机器对象消息目录 `.mo`文件 197 | 198 | 3:将导出的文件重命名为`woocommerce-zh_CN.mo` 199 | 200 | 4:然后上传到`wp-content/languages/plugins/`文件夹 201 | 202 | > 或者:在`wp-content\languages`下面新建`woocommerce`目录,然后把`woocommercer-zh_CN.mo`文件放进去 203 | -------------------------------------------------------------------------------- /docker/Docker-bake.md: -------------------------------------------------------------------------------- 1 | ## Docker bake 2 | 3 | docker bake 是 Docker 官方在 BuildKit 里提供的一个高级构建命令 4 | 5 | 主要作用是支持 多目标、多平台的并行构建,并且可以用一个 bake 文件(通常是 docker-bake.hcl 或者 docker-bake.json)定义复杂的构建任务 6 | 7 | 8 | ### `docker bake`命令 9 | 10 | 执行`docker bake`命令,会自动寻找当前目录的`docker-bake.hcl`文件来自动构建 11 | 12 | 13 | ### 配置文件解释 14 | 15 | 1:`docker-bake.hcl`仅构建多架构镜像,并且每个架构的镜像分开 16 | ``` 17 | # 定义一个构建组,组名叫 default 18 | # 这个组包含两个目标:hello1 和 hello2 19 | group "default" { 20 | targets = ["hello1", "hello2"] 21 | } 22 | 23 | # 定义第一个构建目标 hello1 24 | target "hello1" { 25 | context = "." # 构建上下文,当前目录(包含 Dockerfile) 26 | dockerfile = "Dockerfile" # 指定 Dockerfile 文件路径 27 | tags = ["hello/alpine:amd64"] 28 | platforms = ["linux/amd64"] # 构建平台为 linux amd64 架构 29 | } 30 | 31 | # 定义第二个构建目标 hello2 32 | target "hello2" { 33 | context = "." # 构建上下文,当前目录(包含 Dockerfile) 34 | dockerfile = "Dockerfile" # 指定 Dockerfile 文件路径 35 | tags = ["hello/alpine:arm64"] 36 | platforms = ["linux/arm64"] # 构建平台为 linux arm64 架构 37 | } 38 | ``` 39 | 40 | 2:`docker-bake.hcl`构建完成后自动推送到仓库 41 | 42 | 需要事先`docker login`登录仓库 43 | ``` 44 | # 定义构建组 default,只包含一个多平台目标 hello 45 | group "default" { 46 | targets = ["hello"] 47 | } 48 | 49 | # 定义多平台构建目标 hello 50 | target "hello" { 51 | context = "." # 构建上下文,当前目录(包含 Dockerfile) 52 | dockerfile = "Dockerfile" # 指定 Dockerfile 文件路径 53 | 54 | # 镜像标签,自动推送到远程仓库,记得替换 hello 为你的用户名或仓库名 55 | tags = ["hello/alpine:latest"] 56 | 57 | # 同时构建 amd64 和 arm64 多个平台 58 | platforms = ["linux/amd64", "linux/arm64"] 59 | 60 | # 开启构建完成后自动推送镜像,需要事先docker login登录仓库 61 | push = true 62 | } 63 | ``` 64 | 65 | 3:`docker-bake.hcl`同时构建多个任务,并自动推送到仓库 66 | 67 | 需要事先`docker login`登录仓库 68 | ``` 69 | group "default" { 70 | targets = ["php", "nginx"] 71 | } 72 | 73 | target "php" { 74 | context = "." # 构建上下文 75 | dockerfile = "Dockerfile.php" # 第一个 Dockerfile 76 | tags = ["hello/alpine:latest"] 77 | platforms = ["linux/amd64", "linux/arm64"] 78 | push = true # 动推送到仓库 79 | } 80 | 81 | target "nginx" { 82 | context = "." # 构建上下文 83 | dockerfile = "Dockerfile.nginx" # 第二个 Dockerfile 文件 84 | tags = ["hello/ubuntu:latest"] 85 | platforms = ["linux/amd64", "linux/arm64"] 86 | push = true # 动推送到仓库 87 | } 88 | ``` 89 | 90 | ### 指定某个任务文件构建 91 | 92 | ``` 93 | docker bake --file my-bake.hcl 94 | ``` 95 | 96 | 97 | ### 利用Docker bake批量并发拉取镜像 98 | 99 | `Dockerfile`: 100 | ```Dockerfile 101 | ARG BASE_IMAGE=scratch 102 | FROM ${BASE_IMAGE} 103 | ``` 104 | 105 | 106 | `docker-bake.hcl`: 107 | ``` 108 | group "default" { 109 | targets = ["nginx", "alpine", "redis", "mysql", "caddy", "busybox", "python", "node", "golang", "httpd"] 110 | } 111 | 112 | target "nginx" { 113 | context = "." 114 | dockerfile = "Dockerfile" 115 | args = { BASE_IMAGE = "nginx:latest" } 116 | tags = ["nginx:latest"] 117 | } 118 | 119 | target "alpine" { 120 | context = "." 121 | dockerfile = "Dockerfile" 122 | args = { BASE_IMAGE = "alpine:latest" } 123 | tags = ["alpine:latest"] 124 | } 125 | 126 | target "redis" { 127 | context = "." 128 | dockerfile = "Dockerfile" 129 | args = { BASE_IMAGE = "redis:latest" } 130 | tags = ["redis:latest"] 131 | } 132 | 133 | target "mysql" { 134 | context = "." 135 | dockerfile = "Dockerfile" 136 | args = { BASE_IMAGE = "mysql:latest" } 137 | tags = ["mysql:latest"] 138 | } 139 | 140 | target "caddy" { 141 | context = "." 142 | dockerfile = "Dockerfile" 143 | args = { BASE_IMAGE = "caddy:latest" } 144 | tags = ["caddy:latest"] 145 | } 146 | 147 | target "busybox" { 148 | context = "." 149 | dockerfile = "Dockerfile" 150 | args = { BASE_IMAGE = "busybox:latest" } 151 | tags = ["busybox:latest"] 152 | } 153 | 154 | target "python" { 155 | context = "." 156 | dockerfile = "Dockerfile" 157 | args = { BASE_IMAGE = "python:3.11-slim" } 158 | tags = ["python:3.11-slim"] 159 | } 160 | 161 | target "node" { 162 | context = "." 163 | dockerfile = "Dockerfile" 164 | args = { BASE_IMAGE = "node:18-alpine" } 165 | tags = ["node:18-alpine"] 166 | } 167 | 168 | target "golang" { 169 | context = "." 170 | dockerfile = "Dockerfile" 171 | args = { BASE_IMAGE = "golang:1.21-alpine" } 172 | tags = ["golang:1.21-alpine"] 173 | } 174 | 175 | target "httpd" { 176 | context = "." 177 | dockerfile = "Dockerfile" 178 | args = { BASE_IMAGE = "httpd:latest" } 179 | tags = ["httpd:latest"] 180 | } 181 | ``` 182 | 执行拉取命令 183 | ``` 184 | docker buildx bake --load 185 | ``` 186 | -------------------------------------------------------------------------------- /docker/tailscale组网.md: -------------------------------------------------------------------------------- 1 | ### Docker部署`tailscale`内网组网 2 | 3 | 4 | #### 使用链接登录 5 | ``` 6 | docker run -d \ 7 | --name tailscale \ 8 | --privileged \ 9 | --network host \ 10 | --restart always \ 11 | -v $(pwd)/tailscale:/var/lib/tailscale \ 12 | tailscale/tailscale:latest \ 13 | tailscaled --state=/var/lib/tailscale/tailscaled.state 14 | ``` 15 | 16 | 进入容器: 17 | ``` 18 | docker exec -it tailscale sh 19 | ``` 20 | 生成登录链接: 21 | ``` 22 | tailscale up 23 | ``` 24 | 25 | 或者使用密钥连接: 26 | ``` 27 | tailscale up --auth-key=<你的AuthKey> 28 | ``` 29 | 30 | 查看公共节点网络 31 | ``` 32 | tailscale netcheck 33 | ``` 34 | 35 | 查看是否点对点直连 36 | ``` 37 | tailscale status 38 | ``` 39 | 如果看到`relay "tok"`则说明使用了公共中继连接,`tok`代表日本公共节点 40 | 41 | 42 | #### 指定密钥运行 43 | 44 | `docker-compose.yml` 45 | 46 | ``` 47 | services: 48 | tailscale: 49 | image: tailscale/tailscale:latest 50 | container_name: tailscale 51 | privileged: true 52 | network_mode: host 53 | restart: always 54 | volumes: 55 | - ./tailscale:/var/lib/tailscale 56 | command: 57 | - tailscaled 58 | - --state=/var/lib/tailscale/tailscaled.state 59 | - --tun=tailscale0 60 | - --auth-key=你的AuthKey 61 | ``` 62 | #### 宿主机部署 63 | ``` 64 | sudo apt install tailscale -y 65 | 66 | sudo tailscale up 67 | 68 | sudo systemctl status tailscaled 69 | ``` 70 | 71 | #### 自建`derper` 72 | 73 | 自动申请证书 74 | ``` 75 | services: 76 | derper: 77 | image: fredliang/derper:latest 78 | container_name: derper 79 | restart: unless-stopped 80 | environment: 81 | - DERP_DOMAIN=derper.your-domain.com # 替换为您的域名 82 | - DERP_CERT_MODE=letsencrypt 83 | - DERP_STUN=true 84 | - DERP_HTTP_PORT=80 85 | - DERP_ADDR=:443 86 | - DERP_VERIFY_CLIENTS=true # 本地 tailscaled 实例验证客户端,只允许自己使用 87 | ports: 88 | - "80:80" 89 | - "443:443" 90 | - "3478:3478/udp" 91 | volumes: 92 | - ./certs:/app/certs # 证书持久化存储 93 | - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock 94 | ``` 95 | 96 | 手动配置证书 97 | ``` 98 | services: 99 | derper: 100 | image: fredliang/derper:latest 101 | container_name: derper 102 | restart: unless-stopped 103 | environment: 104 | - DERP_DOMAIN=derper.your-domain.com # 替换为您的域名 105 | - DERP_CERT_MODE=manual 106 | - DERP_CERT_DIR=/app/certs 107 | - DERP_STUN=true 108 | - DERP_HTTP_PORT=80 109 | - DERP_ADDR=:443 110 | - DERP_VERIFY_CLIENTS=true # 通过本地 tailscaled 实例验证客户端 111 | ports: 112 | - "80:80" 113 | - "443:443" 114 | - "3478:3478/udp" 115 | volumes: 116 | - ./certs:/app/certs # 手动挂载证书 117 | - /var/run/tailscale/tailscaled.sock:/var/run/tailscale/tailscaled.sock 118 | ``` 119 | 120 | [修改Tailscale的配置文件](https://login.tailscale.com/admin/acls/file) 添加如下内容 121 | ``` 122 | "derpMap": { 123 | "OmitDefaultRegions": true, 124 | // OmitDefaultRegions 忽略官方的中继节点 125 | "Regions": { 126 | // 这里的 901 从 900 开始随便取数字 127 | "901": { 128 | // RegionID 和上面的相等 129 | "RegionID": 901, 130 | // RegionCode 名称 131 | "RegionCode": "Vultr-SG", 132 | "Nodes": [ 133 | { 134 | // Name 保持 1不动 135 | "Name": "1", 136 | // 这个也和 RegionID 一样 137 | "RegionID": 901, 138 | // 域名 139 | "HostName": "<你的域名>", 140 | // 端口号 141 | "DERPPort": 443, 142 | }, 143 | ], 144 | }, 145 | }, 146 | }, 147 | ``` 148 | 149 | 150 | | 变量名 | 必需 | 描述 | 默认值 | 151 | |----------------|------|------|--------| 152 | | DERP_DOMAIN | 是 | derper 服务器主机名 | your-hostname.com | 153 | | DERP_CERT_DIR | 否 | 存储证书的目录 (如果地址端口是 :443) | /app/certs | 154 | | DERP_CERT_MODE| 否 | 获取证书的模式。可选项: manual, letsencrypt | letsencrypt | 155 | | DERP_ADDR | 否 | 服务器监听地址 | :443 | 156 | | DERP_STUN | 否 | 是否同时运行 STUN 服务器 | true | 157 | | DERP_HTTP_PORT| 否 | 提供 HTTP 服务的端口。设置为 -1 禁用 | 80 | 158 | | DERP_VERIFY_CLIENTS | 否 | 是否通过本地 tailscaled 实例验证此 DERP 服务器的客户端 | false | 159 | 160 | 161 | 162 | --- 163 | 164 | [官网](https://tailscale.com/) 165 | 166 | --- 167 | 168 | 169 | 170 | ### CF-`Zero Trust`-`Tunnels`免费内网穿透 171 | 172 | ``` 173 | docker run -d --network host cloudflare/cloudflared:latest tunnel --no-autoupdate run --token 你的密钥 174 | ``` 175 | 176 | 177 | 178 | `docker-compose.yml` 179 | ``` 180 | services: 181 | cloudflared: 182 | image: cloudflare/cloudflared:latest 183 | container_name: cf 184 | restart: always 185 | command: tunnel --no-autoupdate run --token 你的密钥 186 | ``` 187 | -------------------------------------------------------------------------------- /docker/Minecraft服务端.md: -------------------------------------------------------------------------------- 1 | ### docker-compose部署mc服务端 2 | 3 | ``` 4 | services: 5 | minecraft: 6 | image: itzg/minecraft-server 7 | environment: 8 | EULA: "true" 9 | TYPE: "FORGE" # 可选使用 Forge 服务器 10 | VERSION: "1.20.1" # 可选指定 Minecraft 版本 11 | ports: 12 | - "25565:25565" 13 | volumes: 14 | - ./data:/data 15 | stdin_open: true 16 | tty: true 17 | restart: always 18 | ``` 19 | 20 | 21 | - 更多变量 22 | 23 | ### 1. **基础配置** 24 | | 变量名 | 默认值 | 说明 | 25 | |----------------------|--------------|----------------------------------------------------------------------| 26 | | `EULA` | `"false"` | 必须设置为 `"true"` 以接受 Minecraft 的最终用户许可协议(EULA)。 | 27 | | `TYPE` | `"VANILLA"` | 服务器类型,例如 `"FORGE"`、`"FABRIC"`、`"SPIGOT"` 等。 | 28 | | `VERSION` | `"LATEST"` | Minecraft 版本,例如 `"1.20.1"`。 | 29 | | `MEMORY` | `"1G"` | 分配给服务器的内存大小,例如 `"2G"` 或 `"4G"`。 | 30 | | `JVM_OPTS` | `""` | 自定义 JVM 参数,例如 `"-XX:+UseG1GC"`。 | 31 | | `JVM_XX_OPTS` | `""` | 自定义 JVM 的 `-XX` 参数,例如 `"-XX:+UseStringDeduplication"`。 | 32 | 33 | ### 2. **服务器类型相关** 34 | | 变量名 | 默认值 | 说明 | 35 | |----------------------|--------------|----------------------------------------------------------------------| 36 | | `FORGE_VERSION` | `""` | 指定 Forge 版本,例如 `"47.3.0"`。 | 37 | | `FABRIC_VERSION` | `""` | 指定 Fabric 版本,例如 `"0.14.22"`。 | 38 | | `SPIGOT_DOWNLOAD_URL`| `""` | 自定义 Spigot 的下载 URL。 | 39 | 40 | ### 3. **网络和连接** 41 | | 变量名 | 默认值 | 说明 | 42 | |----------------------|--------------|----------------------------------------------------------------------| 43 | | `SERVER_NAME` | `"Minecraft Server"` | 服务器名称,显示在客户端服务器列表中。 | 44 | | `MOTD` | `"A Minecraft Server"` | 服务器欢迎信息(MOTD)。 | 45 | | `ONLINE_MODE` | `"true"` | 是否启用正版验证,设置为 `"false"` 允许非正版玩家连接。 | 46 | | `MAX_PLAYERS` | `"20"` | 服务器最大玩家数量。 | 47 | | `VIEW_DISTANCE` | `"10"` | 玩家视野距离(区块数)。 | 48 | | `ENABLE_RCON` | `"false"` | 是否启用 RCON(远程控制)。 | 49 | | `RCON_PASSWORD` | `""` | RCON 密码。 | 50 | | `RCON_PORT` | `"25575"` | RCON 端口。 | 51 | 52 | ### 4. **世界和游戏设置** 53 | | 变量名 | 默认值 | 说明 | 54 | |----------------------|--------------|----------------------------------------------------------------------| 55 | | `LEVEL` | `"world"` | 世界名称。 | 56 | | `LEVEL_TYPE` | `"default"` | 世界类型,例如 `"flat"`、`"largebiomes"`。 | 57 | | `GAMEMODE` | `"survival"` | 默认游戏模式,例如 `"creative"`、`"adventure"`。 | 58 | | `DIFFICULTY` | `"easy"` | 游戏难度,例如 `"normal"`、`"hard"`。 | 59 | | `ALLOW_FLIGHT` | `"false"` | 是否允许飞行。 | 60 | | `ALLOW_NETHER` | `"true"` | 是否允许下界传送门。 | 61 | | `SPAWN_ANIMALS` | `"true"` | 是否生成动物。 | 62 | | `SPAWN_MONSTERS` | `"true"` | 是否生成怪物。 | 63 | | `SPAWN_NPCS` | `"true"` | 是否生成村民。 | 64 | | `GENERATE_STRUCTURES`| `"true"` | 是否生成结构(如村庄、神庙)。 | 65 | 66 | ### 5. **插件和模组** 67 | | 变量名 | 默认值 | 说明 | 68 | |----------------------|--------------|----------------------------------------------------------------------| 69 | | `MODS` | `""` | 自动下载并安装模组的 URL 列表(以逗号分隔)。 | 70 | | `REMOVE_OLD_MODS` | `"false"` | 是否在启动时删除旧的模组文件。 | 71 | | `REMOVE_OLD_MODS_INCLUDE` | `""` | 指定要删除的模组文件(支持通配符)。 | 72 | | `REMOVE_OLD_MODS_EXCLUDE` | `""` | 指定要保留的模组文件(支持通配符)。 | 73 | 74 | ### 6. **备份和日志** 75 | | 变量名 | 默认值 | 说明 | 76 | |----------------------|--------------|----------------------------------------------------------------------| 77 | | `ENABLE_AUTOMATIC_BACKUPS` | `"false"` | 是否启用自动备份。 | 78 | | `BACKUP_INTERVAL` | `"24h"` | 自动备份的时间间隔。 | 79 | | `BACKUP_TARGET` | `"world"` | 备份的目标文件夹。 | 80 | | `LOG_TIMESTAMP` | `"false"` | 是否在日志中添加时间戳。 | 81 | 82 | ### 7. **其他配置** 83 | | 变量名 | 默认值 | 说明 | 84 | |----------------------|--------------|----------------------------------------------------------------------| 85 | | `OPS` | `""` | 管理员列表(以逗号分隔的玩家名称)。 | 86 | | `WHITELIST` | `""` | 白名单列表(以逗号分隔的玩家名称)。 | 87 | | `BANNED_IPS` | `""` | 封禁的 IP 列表(以逗号分隔)。 | 88 | | `BANNED_PLAYERS` | `""` | 封禁的玩家列表(以逗号分隔)。 | 89 | | `ENABLE_COMMAND_BLOCK` | `"false"` | 是否启用命令方块。 | 90 | | `MAX_TICK_TIME` | `"60000"` | 服务器最大 tick 时间(毫秒)。 | 91 | | `MAX_WORLD_SIZE` | `"29999984"` | 最大世界大小(区块数)。 | 92 | -------------------------------------------------------------------------------- /workflows/README.md: -------------------------------------------------------------------------------- 1 | ### 工作流默认用户变量`GITHUB_TOKEN`的提权语法 2 | > 开启工作流的仓库文件路径`.github/workflows/xxxxx.yml` 3 | 4 | | 资源类别 | 类别说明 | 权限 | 权限说明 | 配置语法示例 | 5 | |--------------------|-----------------------|------------|-----------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------| 6 | | **contents** | 仓库内容(代码、文件) | `read` | 只读权限,允许读取仓库内容,如查看文件和提交历史。 | `contents: read` | 7 | | | | `write` | 写权限,允许修改、推送、更改文件。 | `contents: write` | 8 | | | | `delete` | 删除权限,允许删除仓库内容。 | `contents: delete` | 9 | | **metadata** | 仓库元数据(标签、Release)| `read` | 只读权限,允许读取仓库的标签和 Release 信息。 | `metadata: read` | 10 | | | | `write` | 写权限,允许创建、更新或删除仓库的标签、Release 等元数据。 | `metadata: write` | 11 | | **packages** | GitHub 容器(GHCR) | `read` | 只读权限,允许读取容器镜像或包。 | `packages: read` | 12 | | | | `write` | 写权限,允许推送容器镜像或其他包。 | `packages: write` | 13 | | | | `delete` | 删除权限,允许删除 GitHub 容器中的镜像或包。 | `packages: delete` | 14 | | **actions** | GitHub Actions | `read` | 只读权限,允许查看工作流和运行状态。 | `actions: read` | 15 | | | | `write` | 写权限,允许触发、管理和更新工作流的状态。 | `actions: write` | 16 | | | | `delete` | 删除权限,允许删除工作流运行历史记录。 | `actions: delete` | 17 | | **issues** | 问题(Issue) | `read` | 只读权限,允许查看、评论问题。 | `issues: read` | 18 | | | | `write` | 写权限,允许创建、编辑、关闭问题。 | `issues: write` | 19 | | **pull-requests** | 拉取请求(PR) | `read` | 只读权限,允许查看和评论 PR。 | `pull-requests: read` | 20 | | | | `write` | 写权限,允许创建、更新、合并拉取请求。 | `pull-requests: write` | 21 | | **workflows** | 工作流(workflow) | `read` | 只读权限,允许查看工作流定义和状态。 | `workflows: read` | 22 | | | | `write` | 写权限,允许触发、管理、更新工作流。 | `workflows: write` | 23 | | **commit-status** | 提交状态 | `read` | 只读权限,允许查看提交的状态。 | `commit-status: read` | 24 | | | | `write` | 写权限,允许设置提交的状态。 | `commit-status: write` | 25 | | **contents** | 文件树和内容操作 | `read` | 只读权限,允许查看文件、目录等内容。 | `contents: read` | 26 | | | | `write` | 写权限,允许修改、创建或删除文件。 | `contents: write` | 27 | | **deployments** | 部署操作 | `read` | 只读权限,允许查看部署的状态。 | `deployments: read` | 28 | | | | `write` | 写权限,允许触发部署操作。 | `deployments: write` | 29 | 30 | ### 示例:完整的权限配置 31 | 32 | ```yaml 33 | jobs: 34 | build: 35 | runs-on: ubuntu-latest 36 | permissions: 37 | contents: write # 允许推送代码,修改仓库文件 38 | metadata: write # 允许操作仓库的 Release 和标签 39 | packages: write # 允许推送 Docker 镜像到 GitHub 容器注册表 40 | actions: read # 允许查看工作流执行状态和日志 41 | workflows: write # 允许触发和管理工作流 42 | issues: write # 允许创建、编辑和关闭问题 43 | pull-requests: write # 允许创建和合并拉取请求 44 | -------------------------------------------------------------------------------- /docker/alist网盘挂载.md: -------------------------------------------------------------------------------- 1 | ### alist网盘挂载 2 | ``` 3 | docker-compose.yaml 4 | ``` 5 | ``` 6 | services: 7 | alist: 8 | image: xhofe/alist:latest 9 | container_name: alist 10 | restart: always 11 | volumes: 12 | - ./alist:/opt/alist/data 13 | ports: 14 | - "54321:5244" 15 | environment: 16 | - PUID=0 17 | - PGID=0 18 | - UMASK=022 19 | ``` 20 | 21 | 22 | ##### 修改密码 23 | 24 | ``` 25 | docker exec -it alist ./alist admin set 你的密码 26 | ``` 27 | 28 | 进入方式为:`ip:54321` 29 | 30 | 用户名为:`admin` 31 | 32 | 端口可自行修改 33 | 34 | 管理路径为`/@manage` 35 | 36 | 37 | 38 | ### 美化 39 | 40 | 替换自定义头部代码 41 | 42 | ``` 43 | 44 | 45 | 46 | 173 | ``` 174 | 175 | ### 看板娘 176 | 177 | 放入自定义内容部分 178 | 179 | ``` 180 | 181 | 182 | 183 | 184 | 185 | ``` 186 | 187 | ### 滚动字幕(放入元信息——顶部说明) 188 | 189 | 黑色字体 190 | 191 | ``` 192 | 193 | (。・∀・)ノ゙嗨,欢迎来到我的小破站。帅气漂亮的小哥哥小姐姐 194 | 195 | ``` 196 | 197 | 炫彩字体 198 | 199 | ``` 200 |
201 | (。・∀・)ノ゙嗨,欢迎来到我的小破站。帅气漂亮的小哥哥小姐姐
202 | ``` 203 | 204 | ### ICP备案 205 | ``` 206 | 207 | 209 |

210 | ICP备案号:实际的备案号 211 |

212 |
213 |
214 | ``` 215 | -------------------------------------------------------------------------------- /docker/Poste.io邮局.md: -------------------------------------------------------------------------------- 1 | ## 自建Poste.io邮局系统 2 | 3 | **需要占用的端口** 4 | ``` 5 | 80 - HTTP(用于 web 界面和未加密的邮件服务) 6 | 443 - HTTPS(用于加密的 web 界面和邮件服务) 7 | 25 - SMTP(用于发送邮件) 8 | 587 - SMTP(用于加密的邮件发送) 9 | 993 - IMAP(用于加密的 IMAP 邮件接收) 10 | 995 - POP3(用于加密的 POP3 邮件接收) 11 | 110 - POP3(用于未加密的 POP3 邮件接收) 12 | 143 - IMAP(用于未加密的 IMAP 邮件接收) 13 | ``` 14 | 15 | 16 | ### 1:检查25端口是否能通 17 | 18 | ``` 19 | apt update && apt install telnet -y 20 | ``` 21 | ``` 22 | telnet smtp.gmail.com 25 23 | ``` 24 | - 如果显示下面的信息就代表是通的 25 | ``` 26 | Connected to smtp.gmail.com. 27 | Escape character is '^]'. 28 | 220 smtp.gmail.com ESMTP d2e1a72fcca58-71dd9d6e713sm17347b3a.23 - gsmtp 29 | ``` 30 | 31 | ### 2:域名解析(以cloudflare为例) 32 | 33 | | 类型 | 名称 | 内容 | 代理状态 | TTL | 34 | |--------|---------------------|--------------------------------------------|----------|-----------| 35 | | A | mail | 服务器IP | 仅 DNS | 1 分钟 | 36 | | CNAME | imap | mail.example.com | 仅 DNS | 自动 | 37 | | CNAME | pop | mail.example.com | 仅 DNS | 自动 | 38 | | CNAME | smtp | mail.example.com | 仅 DNS | 自动 | 39 | | MX | example.com | mail.example.com | 仅 DNS | 自动 | 40 | | TXT | example.com | v=spf1 mx ~all | 仅 DNS | 自动 | 41 | | TXT | s20241002362._domainkey | k=rsa; p=MIIBIjA.............xXX | 仅 DNS | 自动 | 42 | 43 | > 最后一条`TXT`记录需要部署完成后进面板查看名称和内容。 44 | > 45 | > 替换`example.com`为你的域名 46 | 47 | ### 3:`docker-compose.yaml`启动 48 | ``` 49 | services: 50 | mailer: 51 | image: analogic/poste.io 52 | container_name: mailer 53 | restart: always 54 | hostname: mail.example.com # 容器内主机名替换你的域名 55 | network_mode: host 56 | environment: 57 | - TZ=Asia/Shanghai # 时区设置 58 | - DISABLE_CLAMAV=TRUE # 禁用 ClamAV 59 | - DISABLE_RSPAMD=FALSE # 启用 Rspamd 60 | - DISABLE_ROUNDCUBE=FALSE # 启用 Roundcube 61 | volumes: 62 | - ./mailer:/data 63 | ``` 64 | 65 | 66 | ### 4:进入面板 67 | 68 | - `mail.example.com`使用这个域名进入管理面板 69 | 70 | - 第一行默认,第二行设置管理员邮箱,例如:`admin@example.com`,第三行输入管理员密码,smtp密码也是这个 71 | 72 | - 左侧选择`系统设置`,然后上面找到TLS证书,然后申请证书。通用名默认,替代名称里把`smtp`这些域名也填入进去,然后申请,查看下面的日志,申请完成后保存即可。 73 | 74 | - 然后左侧选择`虚拟域名`,然后点击域名,找到`DKlM key`,然后点击钥匙按钮激活,然后域名解析`TXT`类型的验证。 75 | 76 | - 然后用管理员邮箱登录,测试发邮件即可。 77 | 78 | 79 | --- 80 | ### 通过poste.io的CLI命令批量创建邮箱脚本 81 | ``` 82 | #!/bin/bash 83 | 84 | # Poste.io 容器ID或名称 85 | CONTAINER_ID="mailer" 86 | 87 | # 邮箱的@后缀,也就是根域名 88 | DOMAIN="example.com" 89 | 90 | # 所有邮箱账户的统一密码 91 | PASSWORD="asd123456" 92 | 93 | # 如果域名不存在,则创建域名 94 | echo "创建域名 $DOMAIN (如果不存在)" 95 | docker exec $CONTAINER_ID poste domain:create $DOMAIN 96 | 97 | # 使用for循环的方式创建邮箱账户,邮箱前缀从100开始到200结束,也就是总共100个邮箱 98 | for i in {100..200} 99 | do 100 | EMAIL="$i@$DOMAIN" 101 | echo "正在创建邮箱: $EMAIL" 102 | docker exec $CONTAINER_ID poste email:create $EMAIL $PASSWORD 103 | 104 | # 检查上一个命令的退出状态 105 | if [ $? -eq 0 ]; then 106 | echo "成功创建邮箱 $EMAIL" 107 | else 108 | echo "创建邮箱 $EMAIL 失败" 109 | fi 110 | 111 | # 可选:添加小延迟以避免对服务器造成过大压力 112 | sleep 1 113 | done 114 | 115 | echo "邮箱创建过程完成。" 116 | ``` 117 | 118 | 119 | ### 🔧 `Poste.io` 常用 API 接口汇总 120 | 121 | | 操作类型 | HTTP 方法 | 接口地址 | 请求头 | 请求体参数 | 返回格式 | 122 | |----------------|-----------|-------------------------------|-----------------------------------------------|-----------------------------------------------------------------------------|-----------| 123 | | 登录获取 Token | `POST` | `/admin/api/login` | `Content-Type: application/json` | `{ "username": "admin@domain.com", "password": "yourpassword" }` | JSON,返回 `token` | 124 | | 获取所有用户 | `GET` | `/admin/api/mailusers` | `Authorization: Bearer ` | 无 | JSON | 125 | | 添加邮箱用户 | `POST` | `/admin/api/mailusers` | `Authorization: Bearer `
`Content-Type: application/json` | `{ "name": "test@domain.com", "password": "12345678" }` | JSON | 126 | | 删除邮箱用户 | `DELETE` | `/admin/api/mailusers/{user-id}` | `Authorization: Bearer ` | 无 | JSON | 127 | | 添加别名 | `POST` | `/admin/api/aliases` | `Authorization: Bearer ` | `{ "address": "alias@domain.com", "goto": ["user@domain.com"] }` | JSON | 128 | | 添加域名 | `POST` | `/admin/api/domains` | `Authorization: Bearer ` | `{ "domain": "domain.com" }` | JSON | 129 | | 删除域名 | `DELETE` | `/admin/api/domains/{domain-id}` | `Authorization: Bearer ` | 无 | JSON | 130 | 131 | 132 | 133 | 134 | ### 🧾 `Poste.io` CLI 命令汇总(使用 docker exec 方式,方便脚本批量操作) 135 | 136 | | 操作类型 | 命令 | 示例 | 说明 | 137 | |----------------|----------------------------------------------|------------------------------------------------------------|------------------------| 138 | | 域名相关操作 | `docker exec poste domain:create ` | `docker exec poste domain:create example.com` | 创建新域名 | 139 | | | `docker exec poste domain:delete ` | `docker exec poste domain:delete example.com` | 删除指定域名 | 140 | | | `docker exec poste domain:list` | `docker exec poste domain:list` | 列出所有域名 | 141 | | 用户相关操作 | `docker exec poste user:create ` | `docker exec poste user:create user@example.com pass1234` | 创建新邮箱用户 | 142 | | | `docker exec poste user:delete ` | `docker exec poste user:delete user@example.com` | 删除邮箱用户 | 143 | | | `docker exec poste user:list` | `docker exec poste user:list` | 列出所有邮箱用户 | 144 | | 别名相关操作 | `docker exec poste alias:create ` | `docker exec poste alias:create alias@example.com user@example.com` | 创建邮箱别名 | 145 | | | `docker exec poste alias:delete ` | `docker exec poste alias:delete alias@example.com` | 删除邮箱别名 | 146 | | | `docker exec poste alias:list` | `docker exec poste alias:list` | 列出所有邮箱别名 | 147 | | 配置备份与恢复 | `docker exec poste config:backup` | `docker exec poste config:backup` | 创建配置备份 | 148 | | | `docker exec poste config:restore /data/backup.tar.gz` | `docker exec poste config:restore /data/backup.tar.gz` | 恢复配置备份 | 149 | | 查看帮助 | `docker exec poste help` | `docker exec poste help` | 查看所有命令和帮助信息 | 150 | 151 | 152 | 153 | 154 | --- 155 | 156 | ### 其他邮箱 157 | 158 | 开启SMTP服务和密码 159 | 160 | [微软outlook邮箱教程](https://garden.1900.live/22-knowledge/%E6%93%8D%E4%BD%9C%E7%B3%BB%E7%BB%9F/windows/%E5%BC%80%E5%90%AF%E5%BE%AE%E8%BD%AF-outlook-%E9%82%AE%E7%AE%B1-pop-imap-smtp-%E6%9C%8D%E5%8A%A1%E5%92%8C%E8%8E%B7%E5%8F%96%E6%9C%8D%E5%8A%A1%E5%AF%86%E7%A0%81-%E6%8E%88%E6%9D%83%E7%A0%81) 161 | 162 | SMTP服务器地址:谷歌邮箱`smtp.gmail.com`, 163邮箱`smtp.163.com`, 雅虎邮箱`smtp.mail.yahoo.com`。 163 | 164 | SMTP 端口:465 (SSL)/587 (TLS) 165 | 166 | SMTP密码:谷歌搜索`Gmail邮箱获取SMTP密码教程` 167 | 168 | 打开Gmail邮箱——点击设置——点击查看所有设置——点击转发和 POP/IMAP——启用 IMAP——点击保存更改——点击继续 169 | 170 | 点击管理你的google账号——点击安全性——点击两步验证——开启两步验证——点开两步验证——拉到最下面——点击应用专用密码——应用选择其他——自定义一个名称——点击生成 171 | -------------------------------------------------------------------------------- /docker/自建客服系统.md: -------------------------------------------------------------------------------- 1 | #### 免费客服系统 2 | 3 | [chatway](https://chatway.app/) 4 | 5 | [chaport](https://www.chaport.com/live-chat) 6 | 7 | [crisp](https://crisp.chat/zh/pricing/) 8 | 9 | [JivoChat](https://www.jivochat.com/) 10 | 11 | [chatra](https://chatra.com/cn/) 12 | 13 | [tawk.to](https://www.tawk.to/) 14 | 15 | 16 | 17 | 18 | 19 | 20 | ### Docker Compose 部署自托管强大的客服系统 21 | 22 | Docker Compose: 23 | ``` 24 | version: '3' 25 | 26 | services: 27 | base: &base 28 | build: 29 | context: . 30 | dockerfile: ./docker/Dockerfile 31 | args: 32 | BUNDLE_WITHOUT: '' 33 | EXECJS_RUNTIME: 'Node' 34 | RAILS_ENV: 'development' 35 | RAILS_SERVE_STATIC_FILES: 'false' 36 | tty: true 37 | stdin_open: true 38 | image: chatwoot:development 39 | env_file: .env 40 | 41 | rails: 42 | <<: *base 43 | build: 44 | context: . 45 | dockerfile: ./docker/dockerfiles/rails.Dockerfile 46 | image: chatwoot-rails:development 47 | volumes: 48 | - ./:/app:delegated 49 | - node_modules:/app/node_modules 50 | - packs:/app/public/packs 51 | - cache:/app/tmp/cache 52 | - bundle:/usr/local/bundle 53 | depends_on: 54 | - postgres 55 | - redis 56 | - webpack 57 | - mailhog 58 | - sidekiq 59 | ports: 60 | - 3000:3000 61 | env_file: .env 62 | environment: 63 | - WEBPACKER_DEV_SERVER_HOST=webpack 64 | - NODE_ENV=development 65 | - RAILS_ENV=development 66 | entrypoint: docker/entrypoints/rails.sh 67 | command: ["bundle", "exec", "rails", "s", "-p", "3000", "-b", "0.0.0.0"] 68 | 69 | sidekiq: 70 | <<: *base 71 | image: chatwoot-rails:development 72 | volumes: 73 | - ./:/app:delegated 74 | - node_modules:/app/node_modules 75 | - packs:/app/public/packs 76 | - cache:/app/tmp/cache 77 | - bundle:/usr/local/bundle 78 | depends_on: 79 | - postgres 80 | - redis 81 | - mailhog 82 | environment: 83 | - NODE_ENV=development 84 | - RAILS_ENV=development 85 | command: ["bundle", "exec", "sidekiq", "-C", "config/sidekiq.yml"] 86 | 87 | webpack: 88 | <<: *base 89 | build: 90 | context: . 91 | dockerfile: ./docker/dockerfiles/webpack.Dockerfile 92 | image: chatwoot-webpack:development 93 | volumes: 94 | - ./:/app:delegated 95 | - node_modules:/app/node_modules # Node modules shared across containers 96 | - packs:/app/public/packs 97 | - cache:/app/tmp/cache 98 | - bundle:/usr/local/bundle 99 | ports: 100 | - "3035" # Webpack dev server 101 | environment: 102 | - WEBPACKER_DEV_SERVER_HOST=0.0.0.0 103 | - NODE_ENV=development 104 | - NODE_OPTIONS=--openssl-legacy-provider 105 | - RAILS_ENV=development 106 | entrypoint: docker/entrypoints/webpack.sh 107 | command: bin/webpack-dev-server 108 | 109 | postgres: 110 | image: postgres:12 111 | restart: always 112 | ports: 113 | - '5432:5432' 114 | volumes: 115 | - postgres:/data/postgres 116 | environment: 117 | - POSTGRES_DB=chatwoot 118 | - POSTGRES_USER=postgres 119 | - POSTGRES_PASSWORD= 120 | 121 | redis: 122 | image: redis:alpine 123 | restart: always 124 | command: ["sh", "-c", "redis-server --requirepass \"$REDIS_PASSWORD\""] 125 | env_file: .env 126 | volumes: 127 | - redis:/data/redis 128 | ports: 129 | - '6379:6379' 130 | 131 | mailhog: 132 | image: mailhog/mailhog 133 | ports: 134 | - 1025:1025 135 | - 8025:8025 136 | 137 | volumes: 138 | postgres: 139 | redis: 140 | packs: 141 | node_modules: 142 | cache: 143 | bundle: 144 | ``` 145 | 146 | #### .env 配置 147 | ``` 148 | # 用于验证已签名cookie的完整性。因此,请确保设置了一个安全的值 149 | SECRET_KEY_BASE=replace_with_lengthy_secure_hex 150 | 151 | # 替换为您计划用于应用的URL 152 | FRONTEND_URL=http://0.0.0.0:3000 153 | # 使用专用URL用于帮助中心页面 154 | # HELPCENTER_URL=http://0.0.0.0:3000 155 | 156 | # 如果设置了该变量,所有未经认证的页面将回退到默认的语言设置。 157 | # 每当创建一个新账户时,默认语言将是 DEFAULT_LOCALE 而不是 en 158 | # DEFAULT_LOCALE=cn 159 | 160 | # 如果您计划使用CDN来存储您的资源,请设置资产CDN主机 161 | ASSET_CDN_HOST= 162 | 163 | # 强制所有访问该应用使用SSL,缺省设置为false 164 | FORCE_SSL=false 165 | 166 | # 这允许您控制在您的Chatwoot安装上的新注册 167 | # true : 缺省选项,允许注册 168 | # false : 禁用所有与注册相关的端点 169 | # api_only: 禁用注册UI,但您可以通过账户API创建注册 170 | ENABLE_ACCOUNT_SIGNUP=false 171 | 172 | # Redis配置 173 | REDIS_URL=redis://redis:6379 174 | # 如果您在使用docker-compose,请将此变量值设置为任意字符串, 175 | # 它将作为运行在docker-compose内的redis服务的密码,以确保安全 176 | REDIS_PASSWORD= 177 | # 通过传递哨兵主机和端口列表来使用Redis哨兵,例如 sentinel_host1:port1,sentinel_host2:port2 178 | REDIS_SENTINELS= 179 | # 使用哨兵时需要Redis哨兵主名称,默认值为"mymaster"。 180 | # 您可以使用"SENTINEL masters"命令找到主名称列表 181 | REDIS_SENTINEL_MASTER_NAME= 182 | 183 | # 缺省情况下Chatwoot将把REDIS_PASSWORD作为哨兵的密码值 184 | # 使用下面的环境变量自定义哨兵的密码。 185 | # 如果哨兵没有配置密码,请使用空字符串 186 | # REDIS_SENTINEL_PASSWORD= 187 | 188 | # Heroku中修复Redis高级断裂的配置 189 | # 启用以下配置 190 | # 参考:https://github.com/chatwoot/chatwoot/issues/2420 191 | # REDIS_OPENSSL_VERIFY_MODE=none 192 | 193 | # Postgres数据库配置变量 194 | # 您可以留空POSTGRES_DATABASE。生产环境中的数据库默认名称是chatwoot_production 195 | # POSTGRES_DATABASE= 196 | POSTGRES_HOST=postgres 197 | POSTGRES_USERNAME=postgres 198 | POSTGRES_PASSWORD= 199 | RAILS_ENV=development 200 | # 更改Postgres查询超时限制。默认为14秒。仅在需要时修改。 201 | # POSTGRES_STATEMENT_TIMEOUT=14s 202 | RAILS_MAX_THREADS=5 203 | 204 | # 所有发出的电子邮件都将使用该邮件地址发送 205 | # 可以使用 `email@yourdomain.com` 或 `BrandName ` 206 | MAILER_SENDER_EMAIL=Chatwoot 207 | 208 | # 为HELO检查设置的SMTP域名密钥 209 | SMTP_DOMAIN=chatwoot.com 210 | # 如果在开发环境中使用docker-compose,将值设置为"mailhog", 211 | # 在其他环境中将值设置为"localhost"或您的SMTP地址 212 | # 如果SMTP_ADDRESS为空,Chatwoot将尝试使用sendmail(postfix) 213 | SMTP_ADDRESS= 214 | SMTP_PORT=1025 215 | SMTP_USERNAME= 216 | SMTP_PASSWORD= 217 | # plain,login,cram_md5 218 | SMTP_AUTHENTICATION= 219 | SMTP_ENABLE_STARTTLS_AUTO=true 220 | # 可以是: 'none', 'peer', 'client_once', 'fail_if_no_peer_cert',见 http://api.rubyonrails.org/classes/ActionMailer/Base.html 221 | SMTP_OPENSSL_VERIFY_MODE=peer 222 | # 如果您的SMTP服务器需要,请注释掉以下环境变量 223 | # SMTP_TLS= 224 | # SMTP_SSL= 225 | # 邮件接收 226 | # 当启用会话持续性时设置回复邮件的域 227 | MAILER_INBOUND_EMAIL_DOMAIN= 228 | # 根据接收邮件的入口通道设置此值 229 | # 可能的值包括: 230 | # relay 对于 Exim、Postfix、Qmail 231 | # mailgun 对于 Mailgun 232 | # mandrill 对于 Mandrill 233 | # postmark 对于 Postmark 234 | # sendgrid 对于 Sendgrid 235 | RAILS_INBOUND_EMAIL_SERVICE= 236 | # 根据邮件入口服务使用以下之一 237 | # 参考:https://edgeguides.rubyonrails.org/action_mailbox_basics.html 238 | # 将此设置为您选择的密码,并在入站Webhook中使用 239 | RAILS_INBOUND_EMAIL_PASSWORD= 240 | 241 | # 存储 242 | ACTIVE_STORAGE_SERVICE=local 243 | 244 | # 亚马逊 S3 245 | # 文档:https://www.chatwoot.com/docs/configuring-s3-bucket-as-cloud-storage 246 | S3_BUCKET_NAME= 247 | AWS_ACCESS_KEY_ID= 248 | AWS_SECRET_ACCESS_KEY= 249 | AWS_REGION= 250 | 251 | # 日志设置 252 | # 如果您希望将日志写入文件,请禁用 253 | RAILS_LOG_TO_STDOUT=true 254 | LOG_LEVEL=info 255 | LOG_SIZE=500 256 | # 如果您想使用lograge而不是rails logger,请配置此环境变量 257 | #LOGRAGE_ENABLED=true 258 | 259 | ### 以下环境变量仅在您设置社交媒体频道时需要 260 | 261 | # Facebook 262 | # 文档:https://www.chatwoot.com/docs/facebook-setup 263 | FB_VERIFY_TOKEN= 264 | FB_APP_SECRET= 265 | FB_APP_ID= 266 | # Twitter 267 | # 文档:https://www.chatwoot.com/docs/twitter-app-setup 268 | TWITTER_APP_ID= 269 | TWITTER_CONSUMER_KEY= 270 | TWITTER_CONSUMER_SECRET= 271 | TWITTER_ENVIRONMENT= 272 | 273 | # Slack集成 274 | SLACK_CLIENT_ID= 275 | SLACK_CLIENT_SECRET= 276 | 277 | # Google OAuth 278 | GOOGLE_OAUTH_CLIENT_ID= 279 | GOOGLE_OAUTH_CLIENT_SECRET= 280 | GOOGLE_OAUTH_CALLBACK_URL= 281 | 282 | # 如果您正在使用定制构建的移动应用,更改此环境变量 283 | # 移动应用环境变量 284 | IOS_APP_ID=L7YLMN4634.com.chatwoot.app 285 | ANDROID_BUNDLE_ID=com.chatwoot.app 286 | 287 | # 为移动应用配置 288 | # FCM服务器密钥 289 | 290 | # 性能和错误监控配置 291 | # Elastic APM 292 | # Sentry 293 | # LogRocket 294 | # Microsoft Clarity 295 | # Google Tag Manager 296 | 297 | # 环境配置结束 298 | ``` 299 | 300 | 301 | #### [Docker部署教程](https://www.chatwoot.com/docs/self-hosted/deployment/docker) 302 | 303 | #### [集成到网页的教程](https://www.chatwoot.com/docs/product/channels/live-chat/create-website-channel) 304 | 305 | #### [环境变量教程](https://www.chatwoot.com/docs/self-hosted/configuration/environment-variables#the-env-file) 306 | 307 | 308 | -------------------------------------------------------------------------------- /docs/github加速.md: -------------------------------------------------------------------------------- 1 | # GitHub加速方法 2 | 3 | # 方法一: 4 | 5 | 首先你需要有一个可以直连的sk5代理,建议用外国服务器安装xui面板自建 6 | ``` 7 | sudo vim ~/.bashrc 8 | ``` 9 | ``` 10 | export all_proxy="socks5://user:pass@127.0.0.1:20170" 11 | export HTTP_PROXY="socks5://user:pass@127.0.0.1:20170" 12 | export HTTPS_PROXY="socks5://user:pass@127.0.0.1:20170" 13 | ``` 14 | ``` 15 | source ~/.bashrc 16 | ``` 17 | 18 | 此时输入```curl ip.sb```查看本机IP判断是否配置成功 19 | 20 | 如需删除并停止,只需清空文件并重新加载即可 21 | 22 | 注意:如果脚本命令前面带`sudo`,则需要添加`-E`传递环境变量才会生效 23 | 24 | 25 | 26 | 27 | --- 28 | 29 | # 方法二:v2rayA代理 30 | 31 | #### [官方文档](https://v2raya.org/docs/prologue/installation/debian/) 32 | 33 | #### 手动使用软件源安装 34 | [手动下载v2rayA软件源](https://github.com/v2rayA/v2raya-apt/tree/master/pool/main/v/v2raya)上传到服务器 35 | 36 | [手动下载xray软件源](https://github.com/v2rayA/v2raya-apt/tree/master/pool/main/x/xray)上传到服务器 37 | 38 | 安装 39 | ``` 40 | sudo apt install xray.deb路径 v2rayA.deb路径 41 | ``` 42 | 替换两个deb包所在的实际路径 43 | 44 | 启动 45 | ``` 46 | sudo systemctl start v2raya.service 47 | ``` 48 | ``` 49 | 默认端口: 50 | 2017: v2rayA面板端口 51 | 20170: SOCKS协议 52 | 20171: HTTP协议 53 | 20172: 带分流规则的HTTP协议 54 | 32345: tproxy透明代理所需 55 | ``` 56 | 57 | 卸载 58 | ``` 59 | sudo apt-get remove v2raya xray 60 | ``` 61 | 62 | 63 | 64 | ### 快捷安装方式 65 | v2ray内核 66 | ``` 67 | sudo apt install snapd 68 | ``` 69 | ``` 70 | sudo snap install v2raya 71 | ``` 72 | 需要修改配置文件 73 | ``` 74 | sudo vim /etc/systemd/system/snap.v2raya.v2raya.service 75 | ``` 76 | `ExecStart`参数后面增加` --address 0.0.0.0:2017`,只需增加即可,注意空格需保留。 77 | 78 | 加载并重启 79 | ``` 80 | sudo systemctl daemon-reload 81 | sudo systemctl restart snap.v2raya.v2raya.service 82 | ``` 83 | 84 | 卸载 85 | ``` 86 | sudo snap remove v2raya 87 | ``` 88 | ### win系统安装 89 | 以管理员身份运行PowerShell 90 | ``` 91 | winget install --id v2rayA.v2rayA 92 | ``` 93 | 94 | 会自动安装到桌面,启动后自动配置系统代理,端口为`52345` 95 | 96 | 97 | 部分应用(比如命令行程序)可能不读取或者不使用系统代理,你可能需要`proxychains`来强行让它们走代理,或者使用程序自身的代理配置。 98 | 99 | 如果 v2rayA 意外退出,那么 v2rayA 无法在退出的时候帮你取消系统代理,这种情况下你需要自行去`Internet`选项或者系统设置里面关掉代理。 100 | 101 | 102 | 更新 103 | ``` 104 | winget upgrade --id v2rayA.v2rayA 105 | ``` 106 | 卸载 107 | ``` 108 | winget uninstall --id v2rayA.v2rayA 109 | ``` 110 | 111 | 开机自启 112 | 113 | 将你`scoop\shims`目录下的`start-v2raya.cmd`复制到`启动`文件夹(一般位于 `C:\Users\YourUserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup`)。 114 | 115 | 命令运行示例: 116 | ``` 117 | Copy-Item -Path '~\scoop\shims\start-v2raya.cmd' -Destination '~\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup' 118 | ``` 119 | 120 | 121 | --- 122 | 123 | --- 124 | 125 | ## 国内Debian / Ubuntu切换系统源教程 126 | 127 | 128 | 国内Gitee一键换源脚本 129 | ``` 130 | bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/ChangeMirrors.sh) 131 | ``` 132 | 133 | 134 | 海外切换官方源 135 | ``` 136 | bash <(curl -sSL https://raw.githubusercontent.com/SuperManito/LinuxMirrors/main/ChangeMirrors.sh) --use-official-source true 137 | ``` 138 | 139 | 140 | #### 手动换源 141 | 需要root权限 142 | 143 | 先备份`sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak` 144 | 145 | 打开文件`/etc/apt/sources.list` 146 | 147 | 国内清华大学`debian 11`源 148 | ``` 149 | deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free 150 | deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye main contrib non-free 151 | 152 | deb https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free 153 | deb-src https://mirrors.tuna.tsinghua.edu.cn/debian-security bullseye-security main contrib non-free 154 | 155 | deb https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free 156 | deb-src https://mirrors.tuna.tsinghua.edu.cn/debian/ bullseye-updates main contrib non-free 157 | ``` 158 | 159 | 国内清华大学`ubuntu 20.04`源 160 | 161 | ``` 162 | deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse 163 | deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse 164 | deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse 165 | deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse 166 | 167 | # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse 168 | # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse 169 | # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse 170 | # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse 171 | 172 | ## Pre-released source, not recommended. 173 | # deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse 174 | # deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-proposed main restricted universe multiverse 175 | ``` 176 | 177 | 官方`debian 11`源 178 | ``` 179 | deb https://deb.debian.org/debian/ bullseye main contrib non-free 180 | deb-src https://deb.debian.org/debian/ bullseye main contrib non-free 181 | 182 | deb https://deb.debian.org/debian/ bullseye-updates main contrib non-free 183 | deb-src https://deb.debian.org/debian/ bullseye-updates main contrib non-free 184 | 185 | deb https://deb.debian.org/debian/ bullseye-backports main contrib non-free 186 | deb-src https://deb.debian.org/debian/ bullseye-backports main contrib non-free 187 | 188 | deb https://deb.debian.org/debian-security/ bullseye-security main contrib non-free 189 | deb-src https://deb.debian.org/debian-security/ bullseye-security main contrib non-free 190 | ``` 191 | 192 | 官方`debian 12`源 193 | ``` 194 | deb http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware 195 | deb-src http://deb.debian.org/debian bookworm main contrib non-free non-free-firmware 196 | 197 | deb http://deb.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware 198 | deb-src http://deb.debian.org/debian-security/ bookworm-security main contrib non-free non-free-firmware 199 | 200 | deb http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware 201 | deb-src http://deb.debian.org/debian bookworm-updates main contrib non-free non-free-firmware 202 | ``` 203 | 204 | 更新源 205 | ``` 206 | sudo apt update 207 | ``` 208 | 209 | 切换完成 210 | 211 | 212 | --- 213 | ### 配置 APT 包管理器的代理服务器设置 214 | 215 | 编辑`/etc/apt/apt.conf.d/proxy.conf` 216 | 217 | ``` 218 | Acquire::http::Proxy "socks5h://username:password@127.0.0.1:1080"; 219 | Acquire::https::Proxy "socks5h://username:password@127.0.0.1:1080"; 220 | Acquire::socks::Proxy "socks5h://username:password@127.0.0.1:1080"; 221 | ``` 222 | ``` 223 | sudo apt update 224 | ``` 225 | 226 | --- 227 | 228 | ### 方法三:修改系统hosts文件实现加速(老方法不稳定): 229 | 230 | + 文件路径: 231 | ``` 232 | windows: C:\Windows\System32\drivers\etc 233 | linux: /etc/hosts 234 | ``` 235 | + 格式: 236 | ``` 237 | 127.0.0.11 github.com 238 | 127.0.0.11 raw.githubusercontent.com 239 | 127.0.0.11 assets-cdn.github.com 240 | 127.0.0.11 github.global.ssl.fastly.net 241 | ``` 242 | 把```127.0.0.11```替换为查询到的地址 243 | 244 | 可以从这里获取最新可用的hosts地址:https://github.com/521xueweihan/GitHub520/blob/main/hosts 245 | 246 | 该内容会每天自动更新。 247 | 248 | #### 修改 hosts 文件 249 | 250 | hosts 文件在每个系统的位置不一,详情如下: 251 | - Windows 系统:`C:\Windows\System32\drivers\etc\hosts` 252 | - Linux 系统:`/etc/hosts` 253 | - Mac(苹果电脑)系统:`/etc/hosts` 254 | - Android(安卓)系统:`/system/etc/hosts` 255 | - iPhone(iOS)系统:`/etc/hosts` 256 | 257 | 修改方法,把上面的内容复制到文本末尾: 258 | 259 | 1. Windows 使用记事本 260 | 2. Linux、Mac 使用 Root 权限:`sudo nano /etc/hosts` 261 | 3. iPhone、iPad 须越狱、Android 必须要 root 262 | 263 | #### 激活生效 264 | 大部分情况下是直接生效,如未生效可尝试下面的办法,刷新 DNS: 265 | 266 | 1. Windows:在CMD窗口输入:`ipconfig /flushdns` 267 | 268 | 2. Linux命令:`sudo systemctl restart nscd` 如报错则须安装:`sudo apt install nscd` 或 `sudo /etc/init.d/nscd restart` 269 | 270 | 3. Mac命令:`sudo killall -HUP mDNSResponder` 271 | 272 | **PS:** 上述方法无效可以尝试重启机器。 273 | 274 | 275 | ### GitHub加速站 276 | - https://www.jsdelivr.com/github 277 | - https://github.moeyy.xyz 278 | - https://tool.mintimate.cn/gh 279 | - https://github.akams.cn 280 | - https://toolwa.com/github 281 | - https://gh.api.99988866.xyz 282 | - https://mirror.ghproxy.com 283 | - https://gitclone.com 284 | - https://github.welab.eu.org 285 | - https://ghps.cc 286 | - https://github.hscsec.cn 287 | - https://ghproxy.wujiyan.cc 288 | - https://ghproxy.homeboyc.cn 289 | - https://down.npee.cn 290 | - https://github.welab.eu.org 291 | - https://ghproxy.imciel.com 292 | -------------------------------------------------------------------------------- /docker/docker xrayr.md: -------------------------------------------------------------------------------- 1 | ### docker安装 2 | 创建配置文件,并用下面的命令启动 3 | ``` 4 | docker run -d \ 5 | --restart=always \ 6 | --name xrayr \ 7 | --network=host \ 8 | -v ./config.yml:/etc/XrayR/config.yml \ 9 | cloudorz/xrayr:latest 10 | ``` 11 | 12 | 13 | 14 | [配置文件教程地址](https://xrayr-project.github.io/XrayR-doc/xrayr-pei-zhi-wen-jian-shuo-ming/config.html) 15 | 16 | --- 17 | --- 18 | --- 19 | 20 | 21 | ### 脚本安装xrayR: 22 | ``` 23 | wget -N https://raw.githubusercontent.com/XrayR-project/XrayR-release/master/install.sh && bash install.sh 24 | ``` 25 | > 配置文件路径: `/etc/XrayR` 26 | 27 | ### v2bx脚本(支持hy2,vless) 28 | ``` 29 | wget -N https://raw.githubusercontent.com/wyx2685/V2bX-script/master/install.sh && bash install.sh 30 | ``` 31 | 32 | 33 | --- 34 | --- 35 | --- 36 | 37 | 38 | ### 手动安装: 39 | 40 | [下载github上的xrayr包](https://github.com/XrayR-project/XrayR/releases) 一般下载`XrayR-linux-64.zip`的文件 41 | 42 | 43 | 创建文件 44 | ``` 45 | mkdir -p /etc/XrayR && cd /etc/XrayR 46 | ``` 47 | 将文件上传到`/etc/XrayR`目录下 48 | 49 | 解压文件 50 | ``` 51 | unzip XrayR-linux-64.zip 52 | ``` 53 | 54 | 创建系统服务 55 | ``` 56 | sudo vim /etc/systemd/system/xrayr.service 57 | ``` 58 | ``` 59 | [Unit] 60 | Description=XrayR Service 61 | After=network.target nss-lookup.target 62 | Wants=network.target 63 | 64 | [Service] 65 | User=root 66 | Group=root 67 | Type=simple 68 | LimitAS=infinity 69 | LimitRSS=infinity 70 | LimitCORE=infinity 71 | LimitNOFILE=999999 72 | WorkingDirectory=/etc/XrayR/ 73 | ExecStart=/etc/XrayR/XrayR --config /etc/XrayR/config.yml 74 | Restart=on-failure 75 | RestartSec=10 76 | 77 | [Install] 78 | WantedBy=multi-user.target 79 | ``` 80 | 81 | ``` 82 | 加载服务 83 | sudo systemctl daemon-reload 84 | 重启服务 85 | sudo systemctl restart xrayr.service 86 | 设置服务开机自启 87 | sudo systemctl enable xrayr.service 88 | 检查服务状态 89 | sudo systemctl status xrayr.service 90 | 查看日志 91 | journalctl -u xrayr.service 92 | ``` 93 | 94 | --- 95 | --- 96 | --- 97 | 98 | ## 配置 99 | 100 | ws传输配置,域名可留空,可更换伪装域名用来优选cf 101 | ``` 102 | { 103 | "path": "/docker", 104 | "headers": { 105 | "Host": "v2ray.com" 106 | } 107 | } 108 | ``` 109 | 110 | ### 二级代理 111 | `config.yml`配置中添加路由和出站配置路径 112 | 113 | ### 配置`route.json` 114 | 115 | ### 路由规则 116 | ``` 117 | { 118 | "domainStrategy": "IPOnDemand", 119 | "rules": [ 120 | { 121 | "type": "field", 122 | "domain": [ 123 | "domain:chatgpt.com", 124 | "domain:netflix.com" 125 | ], 126 | "outboundTag": "IPv4_out" //如需域名分流可改成us1路由,使用时需删掉注释 127 | }, 128 | { 129 | "type": "field", 130 | "outboundTag": "IPv4_out", //如需全局分流可改成us1路由,使用时需删掉注释 131 | "network": "udp,tcp" 132 | }, 133 | { 134 | "type": "field", 135 | "outboundTag": "block", 136 | "ip": [ 137 | "geoip:private" 138 | ] 139 | }, 140 | { 141 | "type": "field", 142 | "outboundTag": "block", 143 | "protocol": [ 144 | "bittorrent" 145 | ] 146 | }, 147 | { 148 | "type": "field", 149 | "outboundTag": "block", 150 | "port": "22,23,24,25,107,194,445,465,587,992,3389,6665-6669,6679,6697,6881-6999,7000" 151 | } 152 | ] 153 | } 154 | ``` 155 | 156 | #### 无审计版 157 | ``` 158 | { 159 | "domainStrategy": "IPOnDemand", 160 | "rules": [ 161 | { 162 | "type": "field", 163 | "domain": [ 164 | "domain:chatgpt.com", 165 | "domain:netflix.com" 166 | ], 167 | "outboundTag": "us1" 168 | }, 169 | { 170 | "type": "field", 171 | "outboundTag": "IPv4_out", 172 | "network": "udp,tcp" 173 | } 174 | ] 175 | } 176 | ``` 177 | 178 | ### 配置`custom_outbound.json` 179 | 180 | ``` 181 | [ 182 | { 183 | "tag": "IPv4_out", 184 | "protocol": "freedom", 185 | "settings": {} 186 | }, 187 | { 188 | "tag": "IPv6_out", 189 | "protocol": "freedom", 190 | "settings": { 191 | "domainStrategy": "UseIPv6" 192 | } 193 | }, 194 | { 195 | "tag": "us1", 196 | "protocol": "socks", 197 | "settings": { 198 | "servers": [ 199 | { 200 | "address": "127.0.0.1", 201 | "port": 1080, 202 | "users": [ 203 | { 204 | "user": "admin123", 205 | "pass": "admin123" 206 | } 207 | ] 208 | } 209 | ] 210 | } 211 | }, 212 | { 213 | "protocol": "blackhole", 214 | "tag": "block" 215 | } 216 | ] 217 | ``` 218 | 219 | 220 | # 配置文件解释 221 | ``` 222 | Log: 223 | Level: warning # 日志级别: none(无)、error(错误)、warning(警告)、info(信息)、debug(调试) 224 | AccessPath: # 访问日志路径,例如 /etc/XrayR/access.Log 225 | ErrorPath: # 错误日志路径,例如 /etc/XrayR/error.log 226 | DnsConfigPath: # DNS 配置路径,例如 /etc/XrayR/dns.json # 有关帮助,请查看 https://xtls.github.io/config/dns.html 227 | RouteConfigPath: # 路由配置路径,例如 /etc/XrayR/route.json # 有关帮助,请查看 https://xtls.github.io/config/routing.html 228 | InboundConfigPath: # 自定义入站配置路径,例如 /etc/XrayR/custom_inbound.json # 有关帮助,请查看 https://xtls.github.io/config/inbound.html 229 | OutboundConfigPath: # 自定义出站配置路径,例如 /etc/XrayR/custom_outbound.json # 有关帮助,请查看 https://xtls.github.io/config/outbound.html 230 | ConnectionConfig: 231 | Handshake: 4 # 握手时间限制,单位:秒 232 | ConnIdle: 30 # 连接空闲时间限制,单位:秒 233 | UplinkOnly: 2 # 在下行关闭时连接的时间限制,单位:秒 234 | DownlinkOnly: 4 # 在上行关闭后连接关闭的时间限制,单位:秒 235 | BufferSize: 64 # 每个连接的内部缓存大小,单位:KB 236 | Nodes: 237 | - PanelType: "NewV2board" # 面板类型: SSpanel、NewV2board、PMpanel、Proxypanel、V2RaySocks、GoV2Panel、BunPanel 238 | ApiConfig: 239 | ApiHost: "https://xxxxxx.com" # 面板主机地址 240 | ApiKey: "123abcd" # API 密钥 241 | NodeID: 3 # 节点ID 242 | NodeType: V2ray # 节点类型: V2ray、Vmess、Vless、Shadowsocks、Trojan、Shadowsocks-Plugin 243 | Timeout: 30 # API 请求的超时时间 244 | EnableVless: false # 是否启用 Vless(仅适用于 V2ray 类型) 245 | VlessFlow: "xtls-rprx-vision" # 仅支持 Vless 246 | SpeedLimit: 0 # Mbps,本地设置将替换远程设置,0 表示禁用 247 | DeviceLimit: 0 # 本地设置将替换远程设置,0 表示禁用 248 | RuleListPath: # /etc/XrayR/rulelist 本地规则列表文件的路径 249 | DisableCustomConfig: false # 禁用 SSpanel 的自定义配置 250 | ControllerConfig: 251 | ListenIP: 0.0.0.0 # 监听的 IP 地址 252 | SendIP: 0.0.0.0 # 发送数据包的 IP 地址 253 | UpdatePeriodic: 60 # 更新节点信息的时间间隔,单位:秒 254 | EnableDNS: false # 使用自定义 DNS 配置,请确保 dns.json 配置正确 255 | DNSType: AsIs # DNS 策略: AsIs、UseIP、UseIPv4、UseIPv6 256 | EnableProxyProtocol: false # 仅适用于 WebSocket 和 TCP 257 | AutoSpeedLimitConfig: 258 | Limit: 0 # 警告速度。设置为 0 以禁用自动速度限制(单位:Mbps) 259 | WarnTimes: 0 # 连续警告次数后,用户将被限制。设置为 0 将立即惩罚超速用户。 260 | LimitSpeed: 0 # 限制用户的速度限制(单位:Mbps) 261 | LimitDuration: 0 # 限制持续时间(单位:分钟) 262 | GlobalDeviceLimitConfig: 263 | Enable: false # 启用用户的全局设备限制 264 | RedisNetwork: tcp # Redis 协议,tcp 或 unix 265 | RedisAddr: 127.0.0.1:6379 # Redis 服务器地址,或 unix 套接字路径 266 | RedisUsername: # Redis 用户名 267 | RedisPassword: YOUR PASSWORD # Redis 密码 268 | RedisDB: 0 # Redis 数据库 269 | Timeout: 5 # Redis 请求超时时间 270 | Expiry: 60 # 过期时间(单位:秒) 271 | EnableFallback: false # 仅支持 Trojan 和 Vless 272 | FallBackConfigs: # 支持多个回退配置 273 | - SNI: # TLS SNI(服务器名称指示),为空表示匹配任意 274 | Alpn: # Alpn,为空表示匹配任意 275 | Path: # HTTP 路径,为空表示匹配任意 276 | Dest: 80 # 必需,回退的目的地,详细信息请查看 https://xtls.github.io/config/features/fallback.html 277 | ProxyProtocolVer: 0 # 发送 PROXY 协议版本,0 表示禁用 278 | DisableLocalREALITYConfig: false # 禁用本地 REALITY 配置 279 | EnableREALITY: false # 启用 REALITY 280 | REALITYConfigs: 281 | Show: true # 显示 REALITY 调试信息 282 | Dest: www.amazon.com:443 # 必需,和回退相同 283 | ProxyProtocolVer: 0 # 发送 PROXY 协议版本,0 表示禁用 284 | ServerNames: # 必需,客户端可用的服务器名称列表,* 通配符目前不支持。 285 | - www.amazon.com 286 | PrivateKey: YOUR_PRIVATE_KEY # 必需,执行 './XrayR x25519' 以生成。 287 | MinClientVer: # 可选,Xray 客户端的最小版本,格式为 x.y.z。 288 | MaxClientVer: # 可选,Xray 客户端的最大版本,格式为 x.y.z。 289 | MaxTimeDiff: 0 # 可选,允许的最大时间差,单位为毫秒。 290 | ShortIds: # 必需,客户端可用的短 ID 列表,可用于区分不同的客户端。 291 | - "" 292 | - 0123456789abcdef 293 | CertConfig: 294 | CertMode: dns # 证书获取方式: none(无)、file(文件)、http、tls、dns。选择 "none" 将强制禁用 tls 配置。 295 | CertDomain: "node1.test.com" # 证书域名 296 | CertFile: /etc/XrayR/cert/node1.test.com.cert # 如果 CertMode 是 file,则提供此项 297 | KeyFile: /etc/XrayR/cert/node1.test.com.key # 证书密钥文件 298 | Provider: alidns # DNS 证书提供者,获取完整支持列表请查看 https://go-acme.github.io/lego/dns/ 299 | Email: test@me.com # 注册证书时的邮箱 300 | DNSEnv: # DNS ENV 选项,用于 DNS 提供者 301 | ALICLOUD_ACCESS_KEY: aaa # 阿里云访问密钥 302 | ALICLOUD_SECRET_KEY: bbb # 阿里云秘密密钥 303 | ``` 304 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Docker Hub 镜像加速 2 | 3 | 国内从 Docker Hub 拉取镜像有时会遇到困难,此时可以配置镜像加速器。 4 | 5 | 6 | ### 安装Docker 7 | 官方安装脚本: 8 | 9 | ``` 10 | curl -fsSL https://get.docker.com | sh 11 | ``` 12 | 13 | 14 | 国内安装脚本 [(说明)](https://linuxmirrors.cn/other/) 15 | 16 | ``` 17 | bash <(curl -sSL https://gitee.com/SuperManito/LinuxMirrors/raw/main/DockerInstallation.sh) 18 | ``` 19 | 20 |
21 | 手动离线安装Docker 22 | 23 | #### 下载 Docker: 24 | 25 | [官方文件下载地址——下载后上传到root目录](https://download.docker.com/linux/static/stable/x86_64/) 26 | 27 | [清华大学下载地址](https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/static/stable/x86_64/) 28 | 29 | ``` 30 | tar xzvf docker-26.1.3.tgz # 替换版本号 31 | sudo mv docker/* /usr/local/bin/ 32 | ``` 33 | #### 创建 Docker 服务文件 34 | ``` 35 | sudo vim /etc/systemd/system/docker.service 36 | ``` 37 | 添加以下内容 38 | ``` 39 | [Unit] 40 | Description=Docker Application Container Engine 41 | After=network-online.target firewalld.service 42 | Wants=network-online.target 43 | 44 | [Service] 45 | Type=notify 46 | ExecStart=/usr/local/bin/dockerd 47 | ExecReload=/bin/kill -s HUP $MAINPID 48 | Restart=always 49 | RestartSec=2 50 | StartLimitBurst=3 51 | StartLimitInterval=60s 52 | LimitNOFILE=infinity 53 | LimitNPROC=infinity 54 | LimitCORE=infinity 55 | Delegate=yes 56 | KillMode=process 57 | 58 | [Install] 59 | WantedBy=multi-user.target 60 | ``` 61 | 62 | #### 启动并启用 Docker 服务 63 | ``` 64 | sudo chmod +x /usr/local/bin/dockerd 65 | sudo systemctl daemon-reload 66 | sudo systemctl start docker 67 | sudo systemctl enable docker.service 68 | ``` 69 | #### 查看版本 70 | ``` 71 | docker -v 72 | ``` 73 | 74 | 75 | 76 | 77 |
78 | 79 | 80 |
81 | 手动离线安装Docker-compose 82 | 83 | 84 | ### 国内环境手动安装Docker-compose 85 | 86 | [点这里手动下载文件](https://github.com/docker/compose/releases) 上传到服务器的`/usr/local/bin`目录 87 | 88 | 重命名为docker-compose 89 | ``` 90 | sudo cp docker-compose-linux-x86_64 /usr/local/bin/docker-compose 91 | ``` 92 | 增加执行权限 93 | ``` 94 | chmod +x /usr/local/bin/docker-compose 95 | ``` 96 | 验证安装 97 | ``` 98 | docker-compose --version 99 | ``` 100 | 101 | 102 | ### 注意: 103 | 由于是以二进制文件安装的`docker-compose`,所以运行命令有所变化,运行示例 104 | ``` 105 | docker-compose up -d 106 | ``` 107 | 108 | 区别在于中间的`-`,官方安装脚本是以插件形式安装的`docker-compose`,所以中间不需要`-` 109 | 110 | --- 111 | 112 |
113 | 114 | 115 | --- 116 | ## 配置加速地址 117 | 118 | > Ubuntu 16.04+、Debian 8+、CentOS 7+ 119 | 120 | 创建或修改 `/etc/docker/daemon.json`: 121 | 122 | ``` 123 | sudo mkdir -p /etc/docker 124 | ``` 125 | ``` 126 | sudo tee /etc/docker/daemon.json < 镜像名.tar 228 | ``` 229 | 230 | 2:手动上传到另一个服务器 231 | 232 | 3:另一个服务器解压镜像 233 | 234 | ``` 235 | docker load < 镜像名.tar 236 | ``` 237 | 4:查看镜像 238 | ``` 239 | docker images 240 | ``` 241 | 242 | --- 243 | 244 | ## Docker Hub 镜像测速 245 | 246 | 拉取镜像时,可使用 `time` 统计所花费的总时间。测速前记得移除本地的镜像。 247 | 248 | 例如:`time docker pull node:latest` 249 | 250 | 251 | ## 修改客户端并发数加快下载速度 252 | 253 | `/etc/docker/daemon.json` 254 | 255 | ``` 256 | { 257 | "registry-mirrors": [ 258 | "https://docker.1ms.run" 259 | ], 260 | "max-concurrent-downloads": 10, 261 | "max-concurrent-uploads": 10, 262 | "max-download-attempts": 5, 263 | "default-ulimits": { 264 | "nofile": { 265 | "Hard": 64000, 266 | "Name": "nofile", 267 | "Soft": 64000 268 | } 269 | } 270 | } 271 | ``` 272 | ``` 273 | sudo systemctl daemon-reload 274 | sudo systemctl restart docker 275 | ``` 276 | 277 | ## 为Docker启用IPV6 278 | 279 | 创建或修改`/etc/docker/daemon.json`文件 280 | 281 | 增加如下配置: 282 | ``` 283 | { 284 | "ipv6": true, 285 | "fixed-cidr-v6": "2001:db8:1::/64" 286 | } 287 | ``` 288 | 重启:`sudo systemctl restart docker` 289 | 290 | ## 卸载Docker 291 | ``` 292 | sudo systemctl stop docker 293 | sudo apt-get purge docker-ce docker-ce-cli containerd.io 294 | sudo rm -rf /etc/docker /var/lib/docker 295 | ``` 296 | 297 | --- 298 | ## Docker最新稳定加速源列表 299 | 300 | 提供者 | 镜像加速地址 | 说明 | 加速类型 301 | --- | --- | --- | --- 302 | [1panel](https://1panel.cn/docs/user_manual/containers/setting/) | `https://docker.1panel.live` | 无限制 | Docker Hub 303 | [轩辕镜像](https://docker.xuanyuan.me/) | `https://docker.xuanyuan.me` | 无限制 | Docker Hub 304 | [毫秒镜像](https://docker.1ms.run) | `https://docker.1ms.run` | 有黑名单&可选国内CDN | Docker Hub 305 | [DaoCloud](https://github.com/DaoCloud/public-image-mirror) | `https://docker.m.daocloud.io` |白名单和限流 | Docker Hub 306 | [华为云](https://console.huaweicloud.com/swr/#/swr/dashboard) | `https://***.mirror.swr.myhuaweicloud.com` | 需登录分配 | Docker Hub 307 | [腾讯云](https://cloud.tencent.com/document/product/1207/45596) | `https://mirror.ccs.tencentyun.com` | 仅限腾讯云机器 | Docker Hub 308 | [南京大学](https://doc.nju.edu.cn/books/e1654) | `https://ghcr.nju.edu.cn` | ghcr加速 | ghcr 309 | [南京大学](https://doc.nju.edu.cn/books/e1654) | `https://k8s.nju.edu.cn` | k8s加速 | k8s 310 | 311 | ## 参考链接 312 | 313 | + https://docs.docker.com/registry/recipes/mirror/ 314 | + https://status.1panel.top/status/docker 315 | 316 | 317 | 318 | ## Docker常用命令: 319 | 320 | | 功能 | 命令 | 说明 | 321 | |-------------|-------------------|----------------| 322 | | 编译镜像 | `docker build -t 镜像名 .` | 先`docker login`登录docker hub | 323 | | 推送镜像 | `docker push 用户名/镜像名` | 需先标记镜像 `docker tag 53321f173e 用户名/镜像名` | 324 | | 查看容器 | `docker ps` | `-a`查看包括已停止的容器 | 325 | | 容器资源占用 | `docker stats` | 查看所有容器资源占用 | 326 | | 容器详细信息 | `docker inspect` | 挂载看`Mounts`网络看`Networks` | 327 | | 进入容器内部 | `docker exec -it 容器名 sh` | 结尾使用`/bash`也行 | 328 | | 创建容器网络 | `docker network create my-network` | `my-network`为网络名称 | 329 | | 容器加入网络 | `docker network connect my-network 容器名` | 替换容器名或ID | 330 | | 宿主机网络 | `network_mode: host` | `docker-compose`使用 | 331 | | 宿主机网络 | `--network host` | `docker run`使用 | 332 | | 查看网络 | `docker network inspect my-network` | 查看`my-network`网络中的容器 | 333 | | 查看变动 | `docker diff 容器名` | 查看容器里的文件变化 | 334 | | 停止容器 | `docker stop` | `docker stop 容器名或ID` | 335 | | 启动容器 | `docker start` | `docker start 容器名或ID` | 336 | | 重启容器 | `docker restart` | `docker restart 容器名或ID` | 337 | | 删除容器 | `docker rm` | `docker rm 容器名或ID` | 338 | | 查看镜像 | `docker images` | `docker images 镜像名或ID` | 339 | | 删除镜像 | `docker rmi -f` | `docker rmi -f 镜像名或ID` | 340 | | 清除资源 | `docker system prune` | 清除所有未使用资源`容器 网络 镜像 缓存` | 341 | | 删除所有镜像 | `docker rmi -f $(docker images -aq)` | 删除所有镜像 | 342 | | 删除所有容器 | `docker container prune -f` | 删除所有已停止容器 | 343 | | 停止所有容器 | `docker stop $(docker ps -aq)` | 停止所有容器 | 344 | | 停止并删除 | `docker compose down` | 停止并删除编排容器 | 345 | | 重新创建容器 | `docker compose up -d --force-recreate` | 强制删除并重启编排容器 | 346 | | 复制文件 | `docker cp dujiaoka:/app/data.yaml /home` | 从容器复制到宿主机 | 347 | | 复制文件 | `docker cp /home/data.yaml dujiaoka:/app` | 从宿主机复制到容器 | 348 | 349 | --- 350 | [官方仓库](https://hub.docker.com/) 351 | 352 | [官方文档](https://docs.docker.com/build/building/packaging/) 353 | 354 | 容器数据路径:`/var/lib/docker/containers/` 355 | 356 | --- 357 | 358 | ### `Docker bake`命令介绍 359 | 360 | 详情见:[Docker-bake](./docker/Docker-bake.md) 361 | 362 | 它的特点和优势: 363 | 364 | - 支持多阶段(multi-target)构建,同时构建多个镜像目标 365 | 366 | - 支持多平台交叉编译构建,比如 linux/amd64、linux/arm64 等 367 | 368 | - 支持定义依赖关系,构建顺序自动管理 369 | 370 | - 配合 BuildKit,速度快且资源利用率高 371 | 372 | - 支持使用简单的 JSON 或 HCL 文件配置,清晰明了 373 | 374 | 375 | ## Stargazers over time 376 | [![Stargazers over time](https://starchart.cc/sky22333/Docker-Hub.svg?variant=adaptive)](https://starchart.cc/sky22333/Docker-Hub) 377 | -------------------------------------------------------------------------------- /docker/docker epusdt.md: -------------------------------------------------------------------------------- 1 | ## Docker部署epusdt 2 | 3 | ### 创建配置文件 4 | 5 | ``` 6 | mkdir -p epusdt && cd epusdt && touch docker-compose.yml epusdt.conf epusdt.sql 7 | ``` 8 | 9 | #### docker-compose.yml 10 | 11 | ``` 12 | services: 13 | db: 14 | image: mariadb:focal 15 | container_name: mariadb 16 | restart: always 17 | environment: 18 | - MYSQL_ROOT_PASSWORD=epusdt7890 19 | - MYSQL_DATABASE=epusdt 20 | - MYSQL_USER=epusdt 21 | - MYSQL_PASSWORD=epusdt7890 22 | volumes: 23 | - ./epusdt.sql:/docker-entrypoint-initdb.d/epusdt.sql 24 | - ./mysql:/var/lib/mysql 25 | 26 | redis: 27 | image: redis:alpine 28 | restart: always 29 | 30 | epusdt: 31 | image: stilleshan/epusdt 32 | container_name: epusdt 33 | restart: always 34 | ports: 35 | - 8000:8000 36 | depends_on: 37 | - db 38 | - redis 39 | volumes: 40 | - ./epusdt.conf:/app/.env 41 | ``` 42 | 43 | #### epusdt.conf 44 | 45 | ``` 46 | app_name=epusdt 47 | # 下面配置你的域名,收银台会需要 48 | app_uri=https://epusdt.com 49 | # 是否开启debug,默认false 50 | app_debug=false 51 | # http服务监听端口 52 | http_listen=:8000 53 | 54 | # 静态资源文件目录 55 | static_path=/static 56 | # 缓存路径 57 | runtime_root_path=/runtime 58 | 59 | # 日志配置 60 | log_save_path=/logs 61 | log_max_size=32 62 | log_max_age=7 63 | max_backups=3 64 | 65 | # mysql配置 66 | mysql_host=db 67 | mysql_port=3306 68 | mysql_database=epusdt 69 | mysql_user=epusdt 70 | mysql_passwd=epusdt7890 71 | mysql_table_prefix= 72 | mysql_max_idle_conns=10 73 | mysql_max_open_conns=100 74 | mysql_max_life_time=6 75 | 76 | # redis配置 77 | redis_host=redis 78 | redis_port=6379 79 | redis_passwd= 80 | redis_db=5 81 | redis_pool_size=5 82 | redis_max_retries=3 83 | redis_idle_timeout=1000 84 | 85 | # 消息队列配置 86 | queue_concurrency=10 87 | queue_level_critical=6 88 | queue_level_default=3 89 | queue_level_low=1 90 | 91 | # TG机器人token 92 | tg_bot_token= 93 | # TG代理url(国内服务器才需要配置) 94 | tg_proxy= 95 | # TG管理员账号的id 96 | tg_manage= 97 | # 对接的认证token 98 | api_auth_token= 99 | 100 | #订单过期时间(单位分钟) 101 | order_expiration_time=10 102 | 103 | #强制汇率(例如:7.2) 104 | forced_usdt_rate= 105 | ``` 106 | 107 | #### epusdt.sql 108 | 109 | ``` 110 | -- auto-generated definition 111 | create table orders 112 | ( 113 | id int auto_increment 114 | primary key, 115 | trade_id varchar(32) not null comment 'epusdt订单号', 116 | order_id varchar(32) not null comment '客户交易id', 117 | block_transaction_id varchar(128) null comment '区块唯一编号', 118 | actual_amount decimal(19, 4) not null comment '订单实际需要支付的金额,保留4位小数', 119 | amount decimal(19, 4) not null comment '订单金额,保留4位小数', 120 | token varchar(50) not null comment '所属钱包地址', 121 | status int default 1 not null comment '1:等待支付,2:支付成功,3:已过期', 122 | notify_url varchar(128) not null comment '异步回调地址', 123 | redirect_url varchar(128) null comment '同步回调地址', 124 | callback_num int default 0 null comment '回调次数', 125 | callback_confirm int default 2 null comment '回调是否已确认? 1是 2否', 126 | created_at timestamp null, 127 | updated_at timestamp null, 128 | deleted_at timestamp null, 129 | constraint orders_order_id_uindex 130 | unique (order_id), 131 | constraint orders_trade_id_uindex 132 | unique (trade_id) 133 | ); 134 | 135 | create index orders_block_transaction_id_index 136 | on orders (block_transaction_id); 137 | 138 | -- auto-generated definition 139 | create table wallet_address 140 | ( 141 | id int auto_increment 142 | primary key, 143 | token varchar(50) not null comment '钱包token', 144 | status int default 1 not null comment '1:启用 2:禁用', 145 | created_at timestamp null, 146 | updated_at timestamp null, 147 | deleted_at timestamp null 148 | ) 149 | comment '钱包表'; 150 | 151 | create index wallet_address_token_index 152 | on wallet_address (token); 153 | ``` 154 | 155 | 此配置勿动! 156 | 157 | 158 | #### 运行 159 | 160 | ``` 161 | docker compose up -d 162 | ``` 163 | 164 | 165 | #### 检查服务 166 | 167 | ``` 168 | docker logs epusdt 169 | ``` 170 | 171 | 查看epusdt服务出现`http server started on [::]:8000`则表示成功. 172 | 173 | 174 | 然后配置反代域名到 `8000` 175 | 176 | 177 | #### 独角数卡配置支付 178 | 179 | 商户ID填你创建的`api_auth_token=`密码 180 | 181 | 商户密钥填写API地址`https://USDT域名/api/v1/order/create-transaction` 182 | 183 | 184 | --- 185 | --- 186 | --- 187 | 188 | ### 另一个版本的bepusdt(快速部署) 189 | 190 | ``` 191 | docker run -d \ 192 | --name bepusdt \ 193 | --restart always \ 194 | -p 7000:7000 \ 195 | -e TZ=Asia/Shanghai \ 196 | -e TG_BOT_TOKEN=机器人token \ 197 | -e TG_BOT_ADMIN_ID=TG账户ID \ 198 | -e AUTH_TOKEN=认证token \ 199 | ghcr.io/sky22333/bepusdt:latest 200 | ``` 201 | 202 | --- 203 | 204 | ### xboard接口 205 | 206 | 207 | 创建文件`EpusdtPay.php`写入以下配置,然后放到支付插件目录`/www/app/Payments`。 208 | 209 | 然后修改文件权限`chown www:www TokenPay.php && chmod 775 TokenPay.php` 210 | 211 | v2b同理 212 | 213 | ``` 214 | config = $config; 224 | } 225 | 226 | public function form() 227 | { 228 | return [ 229 | 'epusdt_pay_url' => [ 230 | 'label' => 'API 地址', 231 | 'description' => '您的 Epusdt 地址(例如: https://example.com)', 232 | 'type' => 'input', 233 | ], 234 | 'epusdt_pay_apitoken' => [ 235 | 'label' => 'API Token', 236 | 'description' => '您的 Epusdt Token', 237 | 'type' => 'input', 238 | ] 239 | ]; 240 | } 241 | 242 | public function pay($order) 243 | { 244 | $params = [ 245 | "amount" => round($order['total_amount']/100,2), 246 | "order_id" => $order['trade_no'], 247 | 'redirect_url' => $order['return_url'], 248 | 'notify_url' => $order['notify_url'], 249 | ]; 250 | $params['signature'] = $this->sign($params); 251 | 252 | $curl = new Curl(); 253 | $curl->setUserAgent('EpusdtPay'); 254 | $curl->setOpt(CURLOPT_SSL_VERIFYPEER, 0); 255 | $curl->setOpt(CURLOPT_HTTPHEADER, array('Content-Type:application/json')); 256 | $curl->post($this->config['epusdt_pay_url'] . '/api/v1/order/create-transaction', json_encode($params)); 257 | $result = $curl->response; 258 | $curl->close(); 259 | if (!isset($result->status_code) || $result->status_code != 200) { 260 | abort(500, "Failed to create order. Error: {$result->message}"); 261 | } 262 | return [ 263 | 'type' => 1, // 0:qrcode 1:url 264 | 'data' => $result->data->payment_url 265 | ]; 266 | } 267 | 268 | public function notify($params) 269 | { 270 | $status = $params['status']; 271 | // 1:等待支付,2:支付成功,3:已过期 272 | if ($status != 2) { 273 | die('failed'); 274 | } 275 | //不合法的数据 276 | if (!$this->verify($params)) { 277 | die('cannot pass verification'); 278 | } 279 | return [ 280 | 'trade_no' => $params['order_id'], 281 | 'callback_no' => $params['trade_id'], 282 | 'custom_result' => 'ok' 283 | ]; 284 | } 285 | 286 | public function verify($params) { 287 | return $params['signature'] === $this->sign($params); 288 | } 289 | 290 | protected function sign(array $params) 291 | { 292 | ksort($params); 293 | reset($params); //内部指针指向数组中的第一个元素 294 | $sign = ''; 295 | $urls = ''; 296 | foreach ($params as $key => $val) { 297 | if ($val == '') continue; 298 | if ($key != 'signature') { 299 | if ($sign != '') { 300 | $sign .= "&"; 301 | $urls .= "&"; 302 | } 303 | $sign .= "$key=$val"; //拼接为url参数形式 304 | $urls .= "$key=" . urlencode($val); //拼接为url参数形式 305 | } 306 | } 307 | $sign = md5($sign . $this->config['epusdt_pay_apitoken']);//密码追加进入开始MD5签名 308 | return $sign; 309 | } 310 | } 311 | ``` 312 | 313 | --- 314 | --- 315 | 316 | --- 317 | 318 | --- 319 | ### 修复异次元epusdt支付不回调 320 | 321 | `app/Pay/Epusdt/Impl/Signature.php`这个文件。 322 | 323 | 把里面的代码清空,复制下方的代码进行保存即可 324 | 325 | ``` 326 | $v) { 350 | if ($v == '') continue; 351 | $sign .= $k . '=' . $v . '&'; 352 | } 353 | $sign = trim($sign, '&'); 354 | return md5($sign . $key); 355 | } 356 | 357 | /** 358 | * @inheritDoc 359 | */ 360 | public function verification(array $data, array $config): bool 361 | { 362 | $data = json_decode(file_get_contents('php://input'),true); 363 | $sign = $data['signature']; 364 | unset($data['signature']); 365 | $generateSignature = self::generateSignature($data, $config['key']); 366 | if ($sign != $generateSignature) { 367 | return false; 368 | } 369 | Context::set(\App\Consts\Pay::DAFA, $data); 370 | return true; 371 | } 372 | } 373 | ``` 374 | -------------------------------------------------------------------------------- /docker/哪吒监控.md: -------------------------------------------------------------------------------- 1 | ### Docker部署哪吒监控 2 | 3 | ### v1版本 4 | `docker-compose.yaml`配置 5 | ``` 6 | services: 7 | dashboard: 8 | image: ghcr.io/nezhahq/nezha 9 | restart: always 10 | ports: 11 | - "8008:8008" 12 | volumes: 13 | - ./data:/dashboard/data 14 | ``` 15 | 16 | `caddy`反代配置 17 | ``` 18 | example.com { 19 | reverse_proxy /proto.NezhaService/* h2c://127.0.0.1:8008 20 | 21 | reverse_proxy /* 127.0.0.1:8008 22 | } 23 | ``` 24 | 25 | ⚠️必须修改面板后台Agent对接地址,填`example.com:443`,并选中`使用 TLS 连接` 26 | 27 | > 如果套了`cf`,则网络配置需要开启`grpc`选项 28 | 29 | 30 | > 国内被控机替换脚本地址:`https://gitee.com/naibahq/scripts/raw/main/agent/install.sh` 31 | 32 | 33 | 后台路径 `/dashboard` 34 | 默认用户名密码 `admin` `admin` 35 | 36 | 37 | 38 | ### 配置多`oauth2`登录 39 | 40 | 41 | 42 | ``` 43 | oauth2: 44 | Gitee: 45 | clientid: "your id" 46 | clientsecret: "your secret" 47 | endpoint: 48 | authurl: "https://gitee.com/oauth/authorize" 49 | tokenurl: "https://gitee.com/oauth/token" 50 | scopes: 51 | - user_info 52 | userinfourl: "https://gitee.com/api/v5/user" 53 | useridpath: "id" 54 | GitHub: 55 | clientid: "your id" 56 | clientsecret: "your secret" 57 | endpoint: 58 | authurl: "https://github.com/login/oauth/authorize" 59 | tokenurl: "https://github.com/login/oauth/access_token" 60 | userinfourl: "https://api.github.com/user" 61 | useridpath: "id" 62 | Cloudflare: 63 | clientid: "your id" 64 | clientsecret: "your secret" 65 | endpoint: 66 | authurl: "https://XXXX.cloudflareaccess.com/cdn-cgi/access/sso/oidc/XXX/authorization" 67 | tokenurl: "https://XXX.cloudflareaccess.com/cdn-cgi/access/sso/oidc/XXX/token" 68 | scopes: 69 | - openid 70 | - profile 71 | userinfourl: "https://XXX.cloudflareaccess.com/cdn-cgi/access/sso/oidc/XXX/userinfo" 72 | useridpath: "sub" 73 | ``` 74 | 75 | 76 | 77 | 78 | ### 美化 79 | 80 | 放到自定义代码(样式和脚本) 81 | 82 |
83 | 美化一 84 | 85 | ``` 86 | 87 | 93 | 94 | 102 | 110 | 111 | 135 | ``` 136 | 137 |
138 | 139 | 140 | 141 |
142 | 视频背景 143 | 144 | ``` 145 | 146 |
147 | 148 | 153 |
154 | 324 | ``` 325 | 326 | 327 |
328 | 329 | 330 | 331 | 332 | --- 333 | 334 | ### v0版本 335 | 336 | 创建相关文件: 337 | ``` 338 | cd /homoe && mkdir -p template data 339 | ``` 340 | 341 | `docker-compose.yml`配置 342 | 343 | ``` 344 | services: 345 | nezha: 346 | image: ghcr.io/naiba/nezha-dashboard:v0.20.13 347 | container_name: nezha 348 | restart: always 349 | ports: 350 | - "8080:80" 351 | - "5555:5555" 352 | volumes: 353 | - ./data:/dashboard/data 354 | - ./template:/dashboard/resource/template 355 | ``` 356 | 357 | 358 | 在`data`目录添加`config.yaml`配置 359 | ``` 360 | debug: false 361 | language: zh-CN 362 | site: 363 | brand: 服务器监控 364 | cookiename: nezha-dashboard 365 | theme: server-status 366 | dashboardtheme: default 367 | customcode: "" 368 | customcodedashboard: "" 369 | viewpassword: "" 370 | oauth2: 371 | type: github 372 | admin: github用户名 373 | admingroups: "" 374 | clientid: 验证ID 375 | clientsecret: 验证密钥 376 | endpoint: "" 377 | oidcdisplayname: OIDC 378 | oidcissuer: "" 379 | oidclogouturl: "" 380 | oidcregisterurl: "" 381 | oidcloginclaim: sub 382 | oidcgroupclaim: groups 383 | oidcscopes: openid,profile,email 384 | oidcautocreate: false 385 | oidcautologin: false 386 | httpport: 80 387 | grpcport: 5555 388 | grpchost: grpc.example.com # 被控端连接域名(前端不开CDN可去掉这个这里的域名) 389 | proxygrpcport: 0 # 被控端连接域名套CF需改成443 390 | tls: false # 被控端连接域名套CF需改成true 391 | enableplainipinnotification: false 392 | disableswitchtemplateinfrontend: false 393 | enableipchangenotification: false 394 | ipchangenotificationtag: default 395 | cover: 0 396 | ignoredipnotification: "" 397 | location: Asia/Shanghai 398 | ignoredipnotificationserverids: {} 399 | maxtcppingvalue: 1000 400 | avgpingcount: 2 401 | dnsservers: "" 402 | ``` 403 | 404 | `oauth2`回调URL示例: 405 | ``` 406 | https://example.com/oauth2/callback 407 | ``` 408 | 409 | `caddy`配置示例 410 | ``` 411 | # 前端域名 412 | example.com { 413 | encode zstd gzip 414 | reverse_proxy localhost:8080 415 | } 416 | 417 | # 被控端连接域名(前端不开CDN可去掉这个配置) 418 | grpc.example.com { 419 | reverse_proxy { 420 | to localhost:5555 421 | transport http { 422 | versions h2c 2 423 | } 424 | } 425 | } 426 | ``` 427 | 428 | 429 | --- 430 | 431 | 将面板中复制所得的指令中的sh的raw文件url替换成 432 | ``` 433 | https://cdn.jsdelivr.net/gh/sky22333/shell@main/nezha/install.sh 434 | ``` 435 | 其他参数不变,然后去被控机安装即可。 436 | 437 | --- 438 | 439 | [官方项目地址](https://github.com/nezhahq/nezha) 440 | 441 | 442 | 443 | --- 444 | 445 | `agent`端故障排查 446 | ``` 447 | curl https://example.com:443/proto.NezhaService/ -H "Content-Type:application/grpc" -X POST -v 448 | ``` 449 | 450 | `agent`卸载 451 | ``` 452 | # 停止并禁用 453 | sudo systemctl stop nezha-agent.service 454 | sudo systemctl disable nezha-agent.service 455 | 456 | # 删除服务文件 457 | rm -f /etc/systemd/system/nezha-a*.service 458 | rm -f /lib/systemd/system/nezha-a*.service 459 | 460 | # 删除相关文件夹 461 | sudo rm -rf /opt/nezha 462 | 463 | # 重新加载 systemd 464 | sudo systemctl daemon-reload 465 | 466 | # 验证服务是否有残留 467 | systemctl list-units --type=service | grep nezha 468 | ``` 469 | 470 | 471 | 472 | #### 重置密码 473 | > 数据库路径`/opt/nezha/dashboard/data/sqlite.db` 474 | 475 | 先备份数据库 476 | ``` 477 | cp /opt/nezha/dashboard/data/sqlite.db /opt/nezha/dashboard/data/sqlite.db.bak 478 | ``` 479 | 重置用户表 480 | ``` 481 | sqlite3 /opt/nezha/dashboard/data/sqlite.db "DELETE FROM users;" 482 | ``` 483 | 然后重启面板,此时密码会重置为初始密码 484 | -------------------------------------------------------------------------------- /docker/docker xboard.md: -------------------------------------------------------------------------------- 1 | ## Docker-Compose 部署Xboard面板 2 | 3 | 4 | ### [原项目地址](https://github.com/cedar2025/Xboard) 5 | 6 | ### [备用项目](https://github.com/admin8800/Xboard) 7 | 8 | ### [部署教程](https://github.com/cedar2025/Xboard/blob/dev/docs/docker-compose%E5%AE%89%E8%A3%85%E6%8C%87%E5%8D%97.md) 9 | 10 | #### [防机器人验证](https://www.google.com/recaptcha/admin/create) 11 | --- 12 | 13 | 主题目录 14 | ``` 15 | public/theme 16 | ``` 17 | 18 | 支付插件目录 19 | ``` 20 | app/Payments 21 | ``` 22 | 修改支付回调返回的URL 23 | ``` 24 | app/Services/PaymentService.php 25 | ``` 26 | 客户端适配参考目录 27 | ``` 28 | app/Http/Controllers/Client/Protocols 29 | ``` 30 | 31 | 32 | 已购买用户不显示订阅套餐: 33 | ``` 34 | app/Services/PlanService.php 35 | ``` 36 | 注释过滤部分 37 | ``` 38 | public function getAvailablePlans(): `Collection` 39 | { 40 | return Plan::where('show', true) 41 | ->where('sell', true) 42 | ->orderBy('sort') 43 | ->get(); 44 | // ->filter(function ($plan) { 45 | // return $this->hasCapacity($plan); 46 | // }); 47 | } 48 | ``` 49 | 50 | 51 | 订阅下发文件目录 52 | ``` 53 | /www/resources/rules/custom.clash.yaml 54 | ``` 55 | https://github.com/cedar2025/Xboard/tree/5a0e59b103657ccd300204046b877f653cd2aa30/app/Protocols 56 | 57 | 58 | 强制获取订阅(URL后面加上这个参数) 59 | ``` 60 | &flag=meta&types=all 61 | ``` 62 | 63 | 忘记管理员密码可以在站点目录下执行命令找回密码 64 | ``` 65 | docker exec -it xboard-xboard-1 /bin/sh 66 | ``` 67 | ``` 68 | php artisan reset:password 管理员邮箱 69 | ``` 70 | 重启 71 | ``` 72 | cd /root/Xboard 73 | ``` 74 | ``` 75 | docker compose restart 76 | ``` 77 | --- 78 | 79 | ### 订阅被墙解决办法: 80 | 81 | 使用此方法后机场官网可以Cloudflare上打开质询,减少被墙几率和攻击几率。 82 | 83 | 订阅链接和机场官网分成两个域名,将订阅域名绑定到Cloudflare上,解析IP为你的机场原始IP,建议打开云朵。 84 | 然后添加以下配置,可以防止订阅地址被解析为机场网站,从而防止被墙。 85 | ![alt](/png/jichangurl.png) 86 | 87 | 88 | 89 | 90 | --- 91 | 92 | 93 | --- 94 | 95 | [国旗图标](https://www.emojiall.com/zh-hans/sub-categories/J2) 96 | 97 | --- 98 | 99 | 100 | 101 | ## 迁移 102 | ``` 103 | # 备份现有数据库 104 | mysqldump -u root -p --databases my_database > my_database_backup.sql 105 | 106 | # 登录 MySQL 107 | mysql -u root -p 108 | 109 | # 删除现有数据库 110 | DROP DATABASE my_database; 111 | 112 | # 创建新数据库 113 | CREATE DATABASE my_database; 114 | 115 | # 退出 MySQL 116 | exit; 117 | 118 | # 恢复备份 119 | mysql -u root -p my_database < my_database_backup.sql 120 | ``` 121 | 122 | 然后进入数据库的`v2_settings`表,修改https配置,域名配置,路径配置,即可正常进入后台 123 | 124 | 125 | --- 126 | --- 127 | 128 | ### Xboard将reCAPTCHA替换为Cloudflare Turnstile的方法 129 | 130 | 1.修改 `/vendor/google/recaptcha/src/ReCaptcha/ReCaptcha.php` 131 | 配置中的`SITE_VERIFY_URL`为`https://challenges.cloudflare.com/turnstile/v0/siteverify` 132 | 133 | 2.管理后台【主题配置】— 主题设置增加: 134 | ``` 135 | 136 | ``` 137 | 138 | 3.cloudflare turnstile 增加Turnstile站点获取密钥。然后更改管理后台密钥 139 | 140 | 141 | ## XBoard API文档 142 | 143 |
144 | XBoard API列表 145 | 146 | ## V1 版本 API 147 | 148 | ### 1. 客户端相关 (Client) 149 | - `GET /client/subscribe` - 客户端订阅 150 | - `GET /client/app/getConfig` - 获取应用配置 151 | - `GET /client/app/getVersion` - 获取应用版本 152 | 153 | ### 2. 访客相关 (Guest) 154 | - `GET /guest/plan/fetch` - 获取套餐信息 155 | - `POST /guest/telegram/webhook` - Telegram webhook 156 | - `GET|POST /guest/payment/notify/{method}/{uuid}` - 支付通知 157 | - `GET /guest/comm/config` - 获取通用配置 158 | 159 | ### 3. 认证相关 (Passport) 160 | - `POST /passport/auth/register` - 用户注册 161 | - `POST /passport/auth/login` - 用户登录 162 | - `GET /passport/auth/token2Login` - Token 登录 163 | - `POST /passport/auth/forget` - 忘记密码 164 | - `POST /passport/auth/getQuickLoginUrl` - 获取快速登录 URL 165 | - `POST /passport/auth/loginWithMailLink` - 邮件链接登录 166 | - `POST /passport/comm/sendEmailVerify` - 发送邮箱验证 167 | - `POST /passport/comm/pv` - 页面浏览统计 168 | 169 | ### 4. 服务器相关 (Server) 170 | #### UniProxy 171 | - `GET /server/UniProxy/config` - 获取配置 172 | - `GET /server/UniProxy/user` - 获取用户 173 | - `POST /server/UniProxy/push` - 推送数据 174 | - `POST /server/UniProxy/alive` - 存活检测 175 | - `GET /server/UniProxy/alivelist` - 存活列表 176 | - `POST /server/UniProxy/status` - 状态更新 177 | 178 | #### ShadowsocksTidalab 179 | - `GET /server/ShadowsocksTidalab/user` - 获取用户 180 | - `POST /server/ShadowsocksTidalab/submit` - 提交数据 181 | 182 | #### TrojanTidalab 183 | - `GET /server/TrojanTidalab/config` - 获取配置 184 | - `GET /server/TrojanTidalab/user` - 获取用户 185 | - `POST /server/TrojanTidalab/submit` - 提交数据 186 | 187 | ### 5. 用户相关 (User) 188 | - `GET /user/resetSecurity` - 重置安全设置 189 | - `GET /user/info` - 获取用户信息 190 | - `POST /user/changePassword` - 修改密码 191 | - `POST /user/update` - 更新用户信息 192 | - `GET /user/getSubscribe` - 获取订阅信息 193 | - `GET /user/getStat` - 获取统计信息 194 | - `GET /user/checkLogin` - 检查登录状态 195 | - `POST /user/transfer` - 转账 196 | - `POST /user/getQuickLoginUrl` - 获取快速登录 URL 197 | - `GET /user/getActiveSession` - 获取活跃会话 198 | - `POST /user/removeActiveSession` - 移除活跃会话 199 | 200 | #### 订单 (Order) 201 | - `POST /user/order/save` - 保存订单 202 | - `POST /user/order/checkout` - 结算订单 203 | - `GET /user/order/check` - 检查订单 204 | - `GET /user/order/detail` - 订单详情 205 | - `GET /user/order/fetch` - 获取订单列表 206 | - `GET /user/order/getPaymentMethod` - 获取支付方式 207 | - `POST /user/order/cancel` - 取消订单 208 | 209 | #### 套餐 (Plan) 210 | - `GET /user/plan/fetch` - 获取套餐列表 211 | 212 | #### 邀请 (Invite) 213 | - `GET /user/invite/save` - 保存邀请 214 | - `GET /user/invite/fetch` - 获取邀请列表 215 | - `GET /user/invite/details` - 邀请详情 216 | 217 | #### 公告 (Notice) 218 | - `GET /user/notice/fetch` - 获取公告列表 219 | 220 | #### 工单 (Ticket) 221 | - `POST /user/ticket/reply` - 回复工单 222 | - `POST /user/ticket/close` - 关闭工单 223 | - `POST /user/ticket/save` - 保存工单 224 | - `GET /user/ticket/fetch` - 获取工单列表 225 | - `POST /user/ticket/withdraw` - 撤销工单 226 | 227 | #### 服务器 (Server) 228 | - `GET /user/server/fetch` - 获取服务器列表 229 | 230 | #### 优惠券 (Coupon) 231 | - `POST /user/coupon/check` - 检查优惠券 232 | 233 | #### 礼品卡 (Gift Card) 234 | - `POST /user/gift-card/check` - 检查礼品卡 235 | - `POST /user/gift-card/redeem` - 兑换礼品卡 236 | - `GET /user/gift-card/history` - 礼品卡历史 237 | - `GET /user/gift-card/detail` - 礼品卡详情 238 | - `GET /user/gift-card/types` - 礼品卡类型 239 | 240 | #### Telegram 241 | - `GET /user/telegram/getBotInfo` - 获取 Telegram Bot 信息 242 | 243 | #### 通用 (Comm) 244 | - `GET /user/comm/config` - 获取配置 245 | - `POST /user/comm/getStripePublicKey` - 获取 Stripe 公钥 246 | 247 | #### 知识库 (Knowledge) 248 | - `GET /user/knowledge/fetch` - 获取知识库列表 249 | - `GET /user/knowledge/getCategory` - 获取知识库分类 250 | 251 | #### 统计 (Stat) 252 | - `GET /user/stat/getTrafficLog` - 获取流量日志 253 | 254 | ## V2 版本 API 255 | 256 | ### 1. 管理员相关 (Admin) 257 | 注意:管理员路径是动态的,默认为 `/{secure_path}`,其中 `secure_path` 在配置中定义。 258 | 259 | #### 配置管理 (Config) 260 | - `GET /{secure_path}/config/fetch` - 获取配置 261 | - `POST /{secure_path}/config/save` - 保存配置 262 | - `GET /{secure_path}/config/getEmailTemplate` - 获取邮件模板 263 | - `GET /{secure_path}/config/getThemeTemplate` - 获取主题模板 264 | - `POST /{secure_path}/config/setTelegramWebhook` - 设置 Telegram Webhook 265 | - `POST /{secure_path}/config/testSendMail` - 测试发送邮件 266 | 267 | #### 套餐管理 (Plan) 268 | - `GET /{secure_path}/plan/fetch` - 获取套餐列表 269 | - `POST /{secure_path}/plan/save` - 保存套餐 270 | - `POST /{secure_path}/plan/drop` - 删除套餐 271 | - `POST /{secure_path}/plan/update` - 更新套餐 272 | - `POST /{secure_path}/plan/sort` - 套餐排序 273 | 274 | #### 服务器组管理 (Server Group) 275 | - `GET /{secure_path}/server/group/fetch` - 获取服务器组列表 276 | - `POST /{secure_path}/server/group/save` - 保存服务器组 277 | - `POST /{secure_path}/server/group/drop` - 删除服务器组 278 | 279 | #### 服务器路由管理 (Server Route) 280 | - `GET /{secure_path}/server/route/fetch` - 获取服务器路由列表 281 | - `POST /{secure_path}/server/route/save` - 保存服务器路由 282 | - `POST /{secure_path}/server/route/drop` - 删除服务器路由 283 | 284 | #### 服务器管理 (Server Manage) 285 | - `GET /{secure_path}/server/manage/getNodes` - 获取节点列表 286 | - `POST /{secure_path}/server/manage/update` - 更新服务器 287 | - `POST /{secure_path}/server/manage/save` - 保存服务器 288 | - `POST /{secure_path}/server/manage/drop` - 删除服务器 289 | - `POST /{secure_path}/server/manage/copy` - 复制服务器 290 | - `POST /{secure_path}/server/manage/sort` - 服务器排序 291 | 292 | #### 订单管理 (Order) 293 | - `ANY /{secure_path}/order/fetch` - 获取订单列表 294 | - `POST /{secure_path}/order/update` - 更新订单 295 | - `POST /{secure_path}/order/assign` - 分配订单 296 | - `POST /{secure_path}/order/paid` - 标记订单为已支付 297 | - `POST /{secure_path}/order/cancel` - 取消订单 298 | - `POST /{secure_path}/order/detail` - 订单详情 299 | 300 | #### 用户管理 (User) 301 | - `ANY /{secure_path}/user/fetch` - 获取用户列表 302 | - `POST /{secure_path}/user/update` - 更新用户 303 | - `GET /{secure_path}/user/getUserInfoById` - 根据 ID 获取用户信息 304 | - `POST /{secure_path}/user/generate` - 生成用户 305 | - `POST /{secure_path}/user/dumpCSV` - 导出 CSV 306 | - `POST /{secure_path}/user/sendMail` - 发送邮件 307 | - `POST /{secure_path}/user/ban` - 封禁用户 308 | - `POST /{secure_path}/user/resetSecret` - 重置密钥 309 | - `POST /{secure_path}/user/setInviteUser` - 设置邀请用户 310 | - `POST /{secure_path}/user/destroy` - 删除用户 311 | 312 | #### 统计管理 (Stat) 313 | - `GET /{secure_path}/stat/getOverride` - 获取覆盖统计 314 | - `GET /{secure_path}/stat/getStats` - 获取统计信息 315 | - `GET /{secure_path}/stat/getServerLastRank` - 获取服务器最后排名 316 | - `GET /{secure_path}/stat/getServerYesterdayRank` - 获取服务器昨日排名 317 | - `GET /{secure_path}/stat/getOrder` - 获取订单统计 318 | - `ANY /{secure_path}/stat/getStatUser` - 获取用户统计 319 | - `GET /{secure_path}/stat/getRanking` - 获取排名 320 | - `GET /{secure_path}/stat/getStatRecord` - 获取统计记录 321 | - `GET /{secure_path}/stat/getTrafficRank` - 获取流量排名 322 | 323 | #### 公告管理 (Notice) 324 | - `GET /{secure_path}/notice/fetch` - 获取公告列表 325 | - `POST /{secure_path}/notice/save` - 保存公告 326 | - `POST /{secure_path}/notice/update` - 更新公告 327 | - `POST /{secure_path}/notice/drop` - 删除公告 328 | - `POST /{secure_path}/notice/show` - 显示/隐藏公告 329 | - `POST /{secure_path}/notice/sort` - 公告排序 330 | 331 | #### 工单管理 (Ticket) 332 | - `ANY /{secure_path}/ticket/fetch` - 获取工单列表 333 | - `POST /{secure_path}/ticket/reply` - 回复工单 334 | - `POST /{secure_path}/ticket/close` - 关闭工单 335 | 336 | #### 优惠券管理 (Coupon) 337 | - `ANY /{secure_path}/coupon/fetch` - 获取优惠券列表 338 | - `POST /{secure_path}/coupon/generate` - 生成优惠券 339 | - `POST /{secure_path}/coupon/drop` - 删除优惠券 340 | - `POST /{secure_path}/coupon/show` - 显示/隐藏优惠券 341 | - `POST /{secure_path}/coupon/update` - 更新优惠券 342 | 343 | #### 礼品卡管理 (Gift Card) 344 | ##### 模板管理 345 | - `ANY /{secure_path}/gift-card/templates` - 获取模板列表 346 | - `POST /{secure_path}/gift-card/create-template` - 创建模板 347 | - `POST /{secure_path}/gift-card/update-template` - 更新模板 348 | - `POST /{secure_path}/gift-card/delete-template` - 删除模板 349 | 350 | ##### 代码管理 351 | - `POST /{secure_path}/gift-card/generate-codes` - 生成代码 352 | - `ANY /{secure_path}/gift-card/codes` - 获取代码列表 353 | - `POST /{secure_path}/gift-card/toggle-code` - 切换代码状态 354 | - `GET /{secure_path}/gift-card/export-codes` - 导出代码 355 | - `POST /{secure_path}/gift-card/update-code` - 更新代码 356 | - `POST /{secure_path}/gift-card/delete-code` - 删除代码 357 | 358 | ##### 使用记录 359 | - `ANY /{secure_path}/gift-card/usages` - 获取使用记录 360 | 361 | ##### 统计信息 362 | - `ANY /{secure_path}/gift-card/statistics` - 获取统计信息 363 | - `GET /{secure_path}/gift-card/types` - 获取类型列表 364 | 365 | #### 知识库管理 (Knowledge) 366 | - `GET /{secure_path}/knowledge/fetch` - 获取知识库列表 367 | - `GET /{secure_path}/knowledge/getCategory` - 获取分类 368 | - `POST /{secure_path}/knowledge/save` - 保存知识库 369 | - `POST /{secure_path}/knowledge/show` - 显示/隐藏知识库 370 | - `POST /{secure_path}/knowledge/drop` - 删除知识库 371 | - `POST /{secure_path}/knowledge/sort` - 知识库排序 372 | 373 | #### 支付管理 (Payment) 374 | - `GET /{secure_path}/payment/fetch` - 获取支付列表 375 | - `GET /{secure_path}/payment/getPaymentMethods` - 获取支付方式 376 | - `POST /{secure_path}/payment/getPaymentForm` - 获取支付表单 377 | - `POST /{secure_path}/payment/save` - 保存支付 378 | - `POST /{secure_path}/payment/drop` - 删除支付 379 | - `POST /{secure_path}/payment/show` - 显示/隐藏支付 380 | - `POST /{secure_path}/payment/sort` - 支付排序 381 | 382 | #### 系统管理 (System) 383 | - `GET /{secure_path}/system/getSystemStatus` - 获取系统状态 384 | - `GET /{secure_path}/system/getQueueStats` - 获取队列统计 385 | - `GET /{secure_path}/system/getQueueWorkload` - 获取队列工作负载 386 | - `GET /{secure_path}/system/getQueueMasters` - 获取队列主控 387 | - `GET /{secure_path}/system/getSystemLog` - 获取系统日志 388 | - `GET /{secure_path}/system/getHorizonFailedJobs` - 获取 Horizon 失败任务 389 | - `POST /{secure_path}/system/clearSystemLog` - 清除系统日志 390 | - `GET /{secure_path}/system/getLogClearStats` - 获取日志清理统计 391 | 392 | #### 主题管理 (Theme) 393 | - `GET /{secure_path}/theme/getThemes` - 获取主题列表 394 | - `POST /{secure_path}/theme/upload` - 上传主题 395 | - `POST /{secure_path}/theme/delete` - 删除主题 396 | - `POST /{secure_path}/theme/saveThemeConfig` - 保存主题配置 397 | - `POST /{secure_path}/theme/getThemeConfig` - 获取主题配置 398 | 399 | #### 插件管理 (Plugin) 400 | - `GET /{secure_path}/plugin/types` - 获取插件类型 401 | - `GET /{secure_path}/plugin/getPlugins` - 获取插件列表 402 | - `POST /{secure_path}/plugin/upload` - 上传插件 403 | - `POST /{secure_path}/plugin/delete` - 删除插件 404 | - `POST /{secure_path}/plugin/install` - 安装插件 405 | - `POST /{secure_path}/plugin/uninstall` - 卸载插件 406 | - `POST /{secure_path}/plugin/enable` - 启用插件 407 | - `POST /{secure_path}/plugin/disable` - 禁用插件 408 | - `GET /{secure_path}/plugin/config` - 获取插件配置 409 | - `POST /{secure_path}/plugin/config` - 更新插件配置 410 | - `POST /{secure_path}/plugin/upgrade` - 升级插件 411 | 412 | #### 流量重置管理 (Traffic Reset) 413 | - `GET /{secure_path}/traffic-reset/logs` - 获取日志 414 | - `GET /{secure_path}/traffic-reset/stats` - 获取统计 415 | - `GET /{secure_path}/traffic-reset/user/{userId}/history` - 获取用户历史 416 | - `POST /{secure_path}/traffic-reset/reset-user` - 重置用户流量 417 | 418 | ### 2. 认证相关 (Passport) 419 | 与 V1 版本相同: 420 | - `POST /passport/auth/register` - 用户注册 421 | - `POST /passport/auth/login` - 用户登录 422 | - `GET /passport/auth/token2Login` - Token 登录 423 | - `POST /passport/auth/forget` - 忘记密码 424 | - `POST /passport/auth/getQuickLoginUrl` - 获取快速登录 URL 425 | - `POST /passport/auth/loginWithMailLink` - 邮件链接登录 426 | - `POST /passport/comm/sendEmailVerify` - 发送邮箱验证 427 | - `POST /passport/comm/pv` - 页面浏览统计 428 | 429 | ### 3. 用户相关 (User) 430 | 仅包含两个端点: 431 | - `GET /user/resetSecurity` - 重置安全设置 432 | - `GET /user/info` - 获取用户信息 433 | 434 |
435 | -------------------------------------------------------------------------------- /docker/tokenpay支付.md: -------------------------------------------------------------------------------- 1 | ### token-pay支付 虚拟货币支付 2 | 3 | #### 创建配置文件 4 | ``` 5 | mkdir -p tokenpay && cd tokenpay && touch appsettings.json TokenPay.db docker-compose.yaml 6 | ``` 7 | 8 | #### 编辑`appsettings.json`配置 9 | ``` 10 | { 11 | "Serilog": { 12 | "MinimumLevel": { 13 | "Default": "Information", 14 | "Override": { 15 | "Microsoft": "Warning", 16 | "Microsoft.Hosting.Lifetime": "Information" 17 | } 18 | } 19 | }, 20 | "AllowedHosts": "*", 21 | "ConnectionStrings": { 22 | "DB": "Data Source=TokenPay.db;" 23 | }, 24 | "TRON-PRO-API-KEY": "xxxxxx-xxxx-xxxx-xxxxxxxxxxxx", // 避免接口请求频繁被限制,此处申请 https://www.trongrid.io/dashboard/keys 25 | "BaseCurrency": "CNY", //默认货币,支持 CNY、USD、EUR、GBP、AUD、HKD、TWD、SGD 26 | "Rate": { //汇率 设置0将使用自动汇率 27 | "USDT": 0, 28 | "TRX": 0, 29 | "ETH": 0, 30 | "USDC": 0 31 | }, 32 | "ExpireTime": 1800, //单位秒 33 | "UseDynamicAddress": false, //是否使用动态地址,设为false时,与EPUSDT表现类似;设为true时,为每个下单用户分配单独的收款地址 34 | "Address": { // UseDynamicAddress设为false时在此配置TRON收款地址,EVM可以替代所有ETH系列的收款地址,支持单独配置某条链的收款地址 35 | "TRON": [ "TLUF41C386Cxxxxxxxxxxxxxxxxxxxx" ], 36 | "EVM": [ "0x9966aA2xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" ] 37 | }, 38 | "OnlyConfirmed": false, //默认仅查询已确认的数据,如果想要回调更快,可以设置为false 39 | "NotifyTimeOut": 3, //异步通知超时时间 40 | "ApiToken": "78907890", //异步通知密钥,请务必修改此密钥为随机字符串,脸滚键盘即可 41 | "WebSiteUrl": "https://tokenpay.xxxxx.com", //配置服务器外网域名 42 | "Collection": { //需要 UseDynamicAddress 为 true 才有使用归集功能的意义,静态地址收款TokenPay无法归集 43 | "Enable": false, //是否启用归集功能,false 表示关闭,true 表示启用 44 | "UseEnergy": true, //是否租用能量归集,降低归集成本,false 表示直接燃烧trx转账 45 | "ForceCheckAllAddress": false, //强制检查所有地址的余额 46 | "RetainUSDT": true, //归集USDT时是否保留0.000001,用于降低用户下次支付的成本 47 | "CheckTime": 1, //归集任务运行间隔,默认1小时运行一次,单位:小时 48 | "MinUSDT": 0.1, //只归集USDT余额大于此金额的地址 49 | "NeedEnergy": 65000, //归集USDT所需能量,此配置项通常不需要修改,发生变化时会在GitHub更新 50 | "EnergyPrice": 210, //波场当前能量单价,此配置项通常不需要修改,发生变化时会在GitHub更新 51 | "Address": "TLUF41C386Cxxxxxxxxxxxxxxxxxxxx" //归集收款地址,配置你自己的收款地址 52 | }, 53 | "Telegram": { 54 | "AdminUserId": 12345678, // 你的TG账号ID,可在 https://t.me/creationdatebot 获取ID,可以改成群组ID 55 | "BotToken": "1234567890:AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" //从https://t.me/BotFather 创建机器人时,会给你BotToken 56 | }, 57 | "RateMove": { //汇率微调,支持设置正负数,仅支持两位小数 58 | "TRX_CNY": 0, 59 | "USDT_CNY": 0 60 | }, 61 | "DynamicAddressConfig": { 62 | "AmountMove": false, //使用动态地址收款时启用动态金额,支持非准确金额支付,用于优化中心化钱包或交易所提币扣除手续费后金额不匹配的情况,可自行决定是否开启,默认false表示不启用 63 | "TRX": [ 0, 2 ], //表示下浮0,上浮2,如果实际支付金额为100TRX,根据此配置,用户支付金额在100-102TRX订单都会成功 64 | "USDT": [ 1, 2 ], //表示下浮1,上浮2,如果实际支付金额为100USDT,根据此配置,用户支付金额在99-102USDT订单都会成功 65 | "ETH": [ 0.1, 0.15 ] //表示下浮0.1,上浮0.1,如果实际支付金额为0.5ETH,根据此配置,用户支付金额在0.4-0.65ETH订单都会成功 66 | } 67 | } 68 | ``` 69 | 70 | >使用代理,添加配置 71 | ``` 72 | "WebProxy":"socks5://127.0.0.1:1080" 73 | "Temegram":{ 74 | ",,," 75 | } 76 | ``` 77 | ## `docker-compose.yml` 78 | ``` 79 | services: 80 | tokenpay: 81 | image: xiangnile/tokenpay 82 | restart: always 83 | ports: 84 | - "5000:8080" 85 | volumes: 86 | - ./appsettings.json:/app/appsettings.json 87 | - ./TokenPay.db:/app/TokenPay.db 88 | ``` 89 | 90 | 然后将外网域名反代到`5000`端口 91 | 92 | 93 | 如果需要重新部署需要清空`/TokenPay.db`文件里的内容 94 | 95 | ### 修改tokenpay付款金额小数后四位 96 | 添加到15行 97 | 98 | 改为2位示例 99 | ``` 100 | "Decimals:USDT_TRC20": 2, 101 | ``` 102 | 如果需要定义其他币种,把USDT_TRC20换成相应币种 103 | 104 | 105 | 106 | ## `v2board`对接`TokenPay` 107 | 108 | ### 1. 将插件复制到`v2board`对应目录 109 | ### 2. 到`v2board`后台-**支付配置**中添加支付方式 110 | 注意事项 111 | 1. API地址末尾请不要有斜线,如`https://token-pay.xxx.com` 112 | 2. 如果你要同时支持USDT和TRX付款,你需要添加两条支付方式,依此类推 113 | 114 | 请参考此图填写 115 | v2board支付方式配置 116 | 117 | 118 | ### 插件代码 119 | 120 | 创建文件`TokenPay.php`复制到`xboard`支付目录`/www/app/Payments` 121 | 122 | 然后修改文件权限`chown www:www TokenPay.php && chmod 775 TokenPay.php` 123 | 124 | v2b同理 125 | 126 | ``` 127 | config = $config; 137 | } 138 | 139 | public function form() 140 | { 141 | return [ 142 | 'token_pay_url' => [ 143 | 'label' => 'API 地址', 144 | 'description' => '您的 TokenPay API 接口地址(例如: https://token-pay.xxx.com)', 145 | 'type' => 'input', 146 | ], 147 | 'token_pay_apitoken' => [ 148 | 'label' => 'API Token', 149 | 'description' => '您的 TokenPay API Token', 150 | 'type' => 'input', 151 | ], 152 | 'token_pay_currency' => [ 153 | 'label' => '币种', 154 | 'description' => '您的 TokenPay 币种,如 USDT_TRC20、TRX', 155 | 'type' => 'input', 156 | ] 157 | ]; 158 | } 159 | 160 | public function pay($order) 161 | { 162 | $params = [ 163 | "ActualAmount" => $order['total_amount'] / 100, 164 | "OutOrderId" => $order['trade_no'], 165 | "OrderUserKey" => strval($order['user_id']), 166 | "Currency" => $this->config['token_pay_currency'], 167 | 'RedirectUrl' => $order['return_url'], 168 | 'NotifyUrl' => $order['notify_url'], 169 | ]; 170 | ksort($params); 171 | reset($params); 172 | $str = stripslashes(urldecode(http_build_query($params))) . $this->config['token_pay_apitoken']; 173 | $params['Signature'] = md5($str); 174 | 175 | $curl = new Curl(); 176 | $curl->setUserAgent('TokenPay'); 177 | $curl->setOpt(CURLOPT_SSL_VERIFYPEER, 0); 178 | $curl->setOpt(CURLOPT_HTTPHEADER, array('Content-Type:application/json')); 179 | $curl->post($this->config['token_pay_url'] . '/CreateOrder', json_encode($params)); 180 | $result = $curl->response; 181 | $curl->close(); 182 | 183 | if (!isset($result->success) || !$result->success) { 184 | abort(500, "Failed to create order. Error: {$result->message}"); 185 | } 186 | 187 | $paymentURL = $result->data; 188 | return [ 189 | 'type' => 1, // 0:qrcode 1:url 190 | 'data' => $paymentURL 191 | ]; 192 | } 193 | 194 | public function notify($params) 195 | { 196 | $sign = $params['Signature']; 197 | unset($params['Signature']); 198 | ksort($params); 199 | reset($params); 200 | $str = stripslashes(urldecode(http_build_query($params))) . $this->config['token_pay_apitoken']; 201 | if ($sign !== md5($str)) { 202 | die('cannot pass verification'); 203 | } 204 | $status = $params['Status']; 205 | // 0: Pending 1: Paid 2: Expired 206 | if ($status != 1) { 207 | die('failed'); 208 | } 209 | return [ 210 | 'trade_no' => $params['OutOrderId'], 211 | 'callback_no' => $params['Id'], 212 | 'custom_result' => 'ok' 213 | ]; 214 | } 215 | } 216 | ``` 217 | 218 | 219 | 220 | 221 | ### 原版部署 222 | 223 | - [官方地址](https://github.com/LightCountry/TokenPay) 224 | 225 | - `docker-compose.yaml` 226 | 227 | ``` 228 | services: 229 | token-pay: 230 | build: . 231 | restart: always 232 | ports: 233 | - "5000:8080" 234 | volumes: 235 | - ./appsettings.json:/app/appsettings.json 236 | - ./TokenPay.db:/app/TokenPay.db 237 | - ./Pay.cshtml:/app/Views/Home/Pay.cshtml 238 | ``` 239 | > `- ./EVMChains.json:/app/EVMChains.json` 更多区块链添加此文件映射进去 240 | 241 | 242 |
243 | Pay.cshtml美化代码 244 | 245 | 246 | ``` 247 | @{ 248 | ViewData["Title"] = "支付页"; 249 | var ExpireTime = ViewData.ContainsKey("ExpireTime") ? Convert.ToDateTime(ViewData["ExpireTime"]).ToUniversalTime().ToString("o") : DateTime.UtcNow.ToString("o"); 250 | } 251 | @using TokenPay.Domains; 252 | @using TokenPay.Extensions; 253 | @using TokenPay.Models.EthModel; 254 | @model TokenPay.Domains.TokenOrders; 255 | @inject List chain; 256 | 257 | @if (Model == null) 258 | { 259 |
260 |
261 |

订单不存在!

262 |
263 |
264 | } 265 | else 266 | { 267 | 268 | 369 | 370 |
371 |
372 |

支付详情

373 | 374 |
375 | 剩余时间: 376 |
377 | 378 |
请仔细核对币种和金额!
379 | 380 |
381 |

382 | 区块链:@Model.Currency.ToBlockchainName(chain) 383 | 币种:@Model.Currency.ToCurrency(chain) 384 |

385 | 386 | 收款地址 387 | 388 |
389 | @Model.ToAddress 390 |
391 | 392 |
393 | 支付金额:@Model.Amount @Model.Currency.ToCurrency(chain) 394 |
395 | 396 |

订单编号:@Model.OutOrderId

397 |
398 |
399 | 400 | 401 |
402 | 403 | @section Scripts { 404 | 476 | } 477 | } 478 | ``` 479 | 480 |
481 | 482 | 483 | ### 多链配置 484 | 映射文件 485 | ``` 486 | - ./EVMChains.json:/app/EVMChains.json 487 | ``` 488 | 489 | 490 | 配置示例 491 | ``` 492 | { 493 | "EVMChains": [ 494 | { 495 | "Enable": true, // false 表示不启用此区块链, true 表示启用 496 | "ChainName": "以太坊", 497 | "ChainNameEN": "ETH", 498 | "BaseCoin": "ETH", 499 | "Decimals": 18, 500 | "ScanHost": "https://etherscan.io", 501 | "ApiHost": "https://api.etherscan.io", 502 | "ApiKey": "QX14KU6F15xxxxxxxxxxxxxxxxxxxxxx", // 此处申请 https://etherscan.io/myapikey 503 | "ERC20Name": "ERC20", 504 | "ERC20": [ 505 | { 506 | "Name": "USDT", 507 | "ContractAddress": "0xdAC17F958Dxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 508 | }, 509 | { 510 | "Name": "USDC", 511 | "ContractAddress": "0xa0b86991c6218xxxxxxxxxxxxxxxxxxxxxxxxxxxx" 512 | } 513 | ] 514 | }, 515 | { 516 | "Enable": true, // false 表示不启用此区块链, true 表示启用 517 | "ChainName": "币安智能链", 518 | "ChainNameEN": "BSC", 519 | "BaseCoin": "BNB", 520 | "Decimals": 18, 521 | "ScanHost": "https://www.bscscan.com", 522 | "ApiHost": "https://api.bscscan.com", 523 | "ApiKey": "BF3NV71B3U3ZZ1xxxxxxxxxxxxxxxx", // 此处申请 https://bscscan.com/myapikey 524 | "ERC20Name": "BEP20", 525 | "ERC20": [ 526 | { 527 | "Name": "USDT", 528 | "ContractAddress": "0x55d398326f99xxxxxxxxxxxxxxxxxxxxxxxxxxxx" 529 | }, 530 | { 531 | "Name": "USDC", 532 | "ContractAddress": "0x8AC76a51cxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 533 | } 534 | ] 535 | }, 536 | { 537 | "Enable": true, // false 表示不启用此区块链, true 表示启用 538 | "ChainName": "Polygon", 539 | "ChainNameEN": "Polygon", 540 | "BaseCoin": "POL", 541 | "Decimals": 18, 542 | "ScanHost": "https://polygonscan.com", 543 | "ApiHost": "https://api.polygonscan.com", 544 | "ApiKey": "SPDX3KXIB81Zxxxxxxxxxxxxxxxxxxx", // 此处申请 https://polygonscan.com/myapikey 545 | "ERC20Name": "ERC20", 546 | "ERC20": [ 547 | { 548 | "Name": "USDT", 549 | "ContractAddress": "0xc2132D05D3xxxxxxxxxxxxxxxxxxxxxxxxxxxx" 550 | }, 551 | { 552 | "Name": "USDC", 553 | "ContractAddress": "0x3c499c542xxxxxxxxxxxxxxxxxxxxxxxxxxxxx" 554 | } 555 | ] 556 | } 557 | ] 558 | } 559 | ``` 560 | --------------------------------------------------------------------------------