Merge 89bd23ee5d into c8337afad9
@ -1,54 +0,0 @@
|
||||
APP_DEBUG="false"
|
||||
APP_ENV="local"
|
||||
APP_KEY="yuBiR9dlyokasPeguSPl8oPRLpHiqAbr"
|
||||
APP_NAME="2FAuth"
|
||||
APP_TIMEZONE="Asia/Shanghai"
|
||||
APP_URL="http://192.168.123.9:40273"
|
||||
AUTHENTICATION_GUARD="web-guard"
|
||||
AUTHENTICATION_LOG_RETENTION=365
|
||||
AUTH_PROXY_HEADER_FOR_EMAIL=""
|
||||
AUTH_PROXY_HEADER_FOR_USER=""
|
||||
BROADCAST_DRIVER="log"
|
||||
CACHE_DRIVER="file"
|
||||
CONTAINER_NAME="2fauth"
|
||||
DB_DATABASE="/srv/database/database.sqlite"
|
||||
GITHUB_CLIENT_ID=""
|
||||
GITHUB_CLIENT_SECRET=""
|
||||
IS_DEMO_APP="false"
|
||||
LOGIN_THROTTLE=5
|
||||
LOG_CHANNEL="daily"
|
||||
LOG_LEVEL="notice"
|
||||
MAIL_ENCRYPTION=""
|
||||
MAIL_FROM_ADDRESS=""
|
||||
MAIL_FROM_NAME=""
|
||||
MAIL_HOST=""
|
||||
MAIL_MAILER="log"
|
||||
MAIL_PASSWORD=""
|
||||
MAIL_PORT=""
|
||||
MAIL_USERNAME=""
|
||||
MAIL_VERIFY_SSL_PEER="true"
|
||||
MIX_ENV="local"
|
||||
OPENID_AUTHORIZE_URL=""
|
||||
OPENID_CLIENT_ID=""
|
||||
OPENID_CLIENT_SECRET=""
|
||||
OPENID_TOKEN_URL=""
|
||||
OPENID_USERINFO_URL=""
|
||||
PANEL_APP_PORT_HTTP=40273
|
||||
PANEL_REDIS_ROOT_PASSWORD="redis_password"
|
||||
PROXY_FOR_OUTGOING_REQUESTS=""
|
||||
PROXY_LOGOUT_URL=""
|
||||
PUSHER_APP_CLUSTER="mt1"
|
||||
PUSHER_APP_ID=""
|
||||
PUSHER_APP_KEY=""
|
||||
PUSHER_APP_SECRET=""
|
||||
QUEUE_DRIVER="sync"
|
||||
REDIS_HOST="redis"
|
||||
REDIS_PORT=6379
|
||||
SESSION_DRIVER="file"
|
||||
SESSION_LIFETIME=120
|
||||
SITE_OWNER="admin@localhost.com"
|
||||
THROTTLE_API=60
|
||||
TRUSTED_PROXIES=""
|
||||
WEBAUTHN_ID=""
|
||||
WEBAUTHN_NAME="2FAuth"
|
||||
WEBAUTHN_USER_VERIFICATION="preferred"
|
||||
@ -1,426 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "40273"
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "2FAuth"
|
||||
edit: true
|
||||
envKey: APP_NAME
|
||||
labelEn: App Name
|
||||
labelZh: 应用名
|
||||
required: true
|
||||
type: text
|
||||
- default: "local"
|
||||
edit: true
|
||||
envKey: APP_ENV
|
||||
labelEn: App Environment
|
||||
labelZh: 应用环境
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "local"
|
||||
value: "local"
|
||||
- label: "production"
|
||||
value: "production"
|
||||
- default: "Asia/Shanghai"
|
||||
edit: true
|
||||
envKey: APP_TIMEZONE
|
||||
labelEn: Timezone
|
||||
labelZh: 时区
|
||||
required: true
|
||||
type: text
|
||||
- default: "false"
|
||||
edit: true
|
||||
envKey: APP_DEBUG
|
||||
labelEn: Debug Mode
|
||||
labelZh: 调试模式
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "admin@localhost.com"
|
||||
edit: true
|
||||
envKey: SITE_OWNER
|
||||
labelEn: Site Owner
|
||||
labelZh: 站点拥有者
|
||||
required: true
|
||||
type: text
|
||||
- default: "yuBiR9dlyokasPeguSPl8oPRLpHiqAbr"
|
||||
edit: true
|
||||
envKey: APP_KEY
|
||||
labelEn: App Key (32 characters)
|
||||
labelZh: 应用密钥 (32 位字符)
|
||||
required: true
|
||||
type: text
|
||||
- default: "http://localhost:40273"
|
||||
edit: true
|
||||
envKey: APP_URL
|
||||
labelEn: App URL (External URL)
|
||||
labelZh: 应用网址 (外部访问地址)
|
||||
required: true
|
||||
rule: paramExtUrl
|
||||
type: text
|
||||
- default: "false"
|
||||
edit: true
|
||||
envKey: IS_DEMO_APP
|
||||
labelEn: Demo Mode
|
||||
labelZh: 演示模式
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "daily"
|
||||
edit: true
|
||||
envKey: LOG_CHANNEL
|
||||
labelEn: Log Channel
|
||||
labelZh: 日志通道
|
||||
required: true
|
||||
type: text
|
||||
- default: "notice"
|
||||
edit: true
|
||||
envKey: LOG_LEVEL
|
||||
labelEn: Log Level
|
||||
labelZh: 日志级别
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "debug"
|
||||
value: "debug"
|
||||
- label: "info"
|
||||
value: "info"
|
||||
- label: "notice"
|
||||
value: "notice"
|
||||
- label: "warning"
|
||||
value: "warning"
|
||||
- label: "error"
|
||||
value: "error"
|
||||
- label: "critical"
|
||||
value: "critical"
|
||||
- label: "alert"
|
||||
value: "alert"
|
||||
- label: "emergency"
|
||||
value: "emergency"
|
||||
- default: "/srv/database/database.sqlite"
|
||||
disabled: true
|
||||
envKey: DB_DATABASE
|
||||
labelEn: Database Path
|
||||
labelZh: 数据库路径
|
||||
required: true
|
||||
type: text
|
||||
- default: "file"
|
||||
disabled: true
|
||||
envKey: CACHE_DRIVER
|
||||
labelEn: Cache Driver
|
||||
labelZh: 缓存驱动
|
||||
required: true
|
||||
type: text
|
||||
- default: "file"
|
||||
disabled: true
|
||||
envKey: SESSION_DRIVER
|
||||
labelEn: Session Driver
|
||||
labelZh: 会话驱动
|
||||
required: true
|
||||
type: text
|
||||
- default: "log"
|
||||
edit: true
|
||||
envKey: MAIL_MAILER
|
||||
labelEn: Mailer
|
||||
labelZh: 邮件发送方式
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_HOST
|
||||
labelEn: Mail Host
|
||||
labelZh: 邮件服务器
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_PORT
|
||||
labelEn: Mail Port
|
||||
labelZh: 邮件端口
|
||||
required: false
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_USERNAME
|
||||
labelEn: Mail Username
|
||||
labelZh: 邮件用户名
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_PASSWORD
|
||||
labelEn: Mail Password
|
||||
labelZh: 邮件密码
|
||||
required: false
|
||||
type: password
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_ENCRYPTION
|
||||
labelEn: Mail Encryption
|
||||
labelZh: 邮件加密方式
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_FROM_NAME
|
||||
labelEn: Mail From Name
|
||||
labelZh: 邮件发件人姓名
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_FROM_ADDRESS
|
||||
labelEn: Mail From Address
|
||||
labelZh: 邮件发件人地址
|
||||
required: false
|
||||
type: text
|
||||
- default: "true"
|
||||
edit: true
|
||||
envKey: MAIL_VERIFY_SSL_PEER
|
||||
labelEn: Mail Verify SSL Peer
|
||||
labelZh: 邮件验证 SSL 证书
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "60"
|
||||
edit: true
|
||||
envKey: THROTTLE_API
|
||||
labelEn: API Throttle
|
||||
labelZh: API 限制
|
||||
required: true
|
||||
type: number
|
||||
- default: "5"
|
||||
edit: true
|
||||
envKey: LOGIN_THROTTLE
|
||||
labelEn: Login Throttle
|
||||
labelZh: 登录限制
|
||||
required: true
|
||||
type: number
|
||||
- default: "web-guard"
|
||||
edit: true
|
||||
envKey: AUTHENTICATION_GUARD
|
||||
labelEn: Authentication Guard
|
||||
labelZh: 认证保护
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "web-guard"
|
||||
value: "web-guard"
|
||||
- label: "reverse-proxy-guard"
|
||||
value: "reverse-proxy-guard"
|
||||
- default: "365"
|
||||
edit: true
|
||||
envKey: AUTHENTICATION_LOG_RETENTION
|
||||
labelEn: Authentication Log Retention
|
||||
labelZh: 认证日志保留
|
||||
required: true
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: AUTH_PROXY_HEADER_FOR_USER
|
||||
labelEn: Authentication Proxy Header for User
|
||||
labelZh: 用户认证代理头
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: AUTH_PROXY_HEADER_FOR_EMAIL
|
||||
labelEn: Authentication Proxy Header for Email
|
||||
labelZh: 邮箱认证代理头
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PROXY_LOGOUT_URL
|
||||
labelEn: Proxy Logout URL
|
||||
labelZh: 代理注销网址
|
||||
required: false
|
||||
type: text
|
||||
- default: "2FAuth"
|
||||
edit: true
|
||||
envKey: WEBAUTHN_NAME
|
||||
labelEn: WebAuthn Name
|
||||
labelZh: WebAuthn 名称
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: WEBAUTHN_ID
|
||||
labelEn: WebAuthn ID
|
||||
labelZh: WebAuthn ID
|
||||
required: false
|
||||
type: text
|
||||
- default: "preferred"
|
||||
edit: true
|
||||
envKey: WEBAUTHN_USER_VERIFICATION
|
||||
labelEn: WebAuthn User Verification
|
||||
labelZh: WebAuthn 用户验证
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "Preferred"
|
||||
value: "preferred"
|
||||
- label: "Required"
|
||||
value: "required"
|
||||
- label: "Discouraged"
|
||||
value: "discouraged"
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: TRUSTED_PROXIES
|
||||
labelEn: Trusted Proxies
|
||||
labelZh: 信任代理
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PROXY_FOR_OUTGOING_REQUESTS
|
||||
labelEn: Proxy for Outgoing Requests
|
||||
labelZh: 出站请求代理
|
||||
required: false
|
||||
type: text
|
||||
- default: "log"
|
||||
edit: true
|
||||
envKey: BROADCAST_DRIVER
|
||||
labelEn: Broadcast Driver
|
||||
labelZh: 广播驱动
|
||||
required: true
|
||||
type: text
|
||||
- default: "sync"
|
||||
edit: true
|
||||
envKey: QUEUE_DRIVER
|
||||
labelEn: Queue Driver
|
||||
labelZh: 队列驱动
|
||||
required: true
|
||||
type: text
|
||||
- default: "120"
|
||||
edit: true
|
||||
envKey: SESSION_LIFETIME
|
||||
labelEn: Session Lifetime
|
||||
labelZh: 会话有效期
|
||||
required: true
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: REDIS_HOST
|
||||
key: redis
|
||||
labelEn: Redis Service
|
||||
labelZh: Redis服务
|
||||
required: true
|
||||
type: service
|
||||
- default: "6379"
|
||||
edit: true
|
||||
envKey: REDIS_PORT
|
||||
labelEn: Redis Service Port
|
||||
labelZh: Redis服务端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PANEL_REDIS_ROOT_PASSWORD
|
||||
labelEn: Redis Password
|
||||
labelZh: Redis 密码
|
||||
required: true
|
||||
type: password
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PUSHER_APP_ID
|
||||
labelEn: Pusher App ID
|
||||
labelZh: Pusher 应用 ID
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PUSHER_APP_KEY
|
||||
labelEn: Pusher App Key
|
||||
labelZh: Pusher 应用密钥
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PUSHER_APP_SECRET
|
||||
labelEn: Pusher App Secret
|
||||
labelZh: Pusher 应用密钥
|
||||
required: false
|
||||
type: password
|
||||
- default: "mt1"
|
||||
edit: true
|
||||
envKey: PUSHER_APP_CLUSTER
|
||||
labelEn: Pusher App Cluster
|
||||
labelZh: Pusher 应用集群
|
||||
required: true
|
||||
type: text
|
||||
- default: "local"
|
||||
edit: true
|
||||
envKey: MIX_ENV
|
||||
labelEn: Mix Environment
|
||||
labelZh: Mix 环境
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_AUTHORIZE_URL
|
||||
labelEn: OpenID Authorize URL (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 授权 URL (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_TOKEN_URL
|
||||
labelEn: OpenID Token URL (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 令牌 URL (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_USERINFO_URL
|
||||
labelEn: OpenID Userinfo URL (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 用户信息 URL (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_CLIENT_ID
|
||||
labelEn: OpenID Client ID (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 客户端 ID (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_CLIENT_SECRET
|
||||
labelEn: OpenID Client Secret (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 客户端密钥 (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: password
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: GITHUB_CLIENT_ID
|
||||
labelEn: GitHub Client ID (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: GitHub 客户端 ID (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: GITHUB_CLIENT_SECRET
|
||||
labelEn: GitHub Client Secret (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: GitHub 客户端密钥 (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: password
|
||||
@ -1,73 +0,0 @@
|
||||
services:
|
||||
2fauth:
|
||||
image: "2fauth/2fauth:6.0.0"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8000/tcp
|
||||
volumes:
|
||||
- ./data:/2fauth
|
||||
environment:
|
||||
- APP_NAME=${APP_NAME}
|
||||
- APP_ENV=${APP_ENV}
|
||||
- APP_TIMEZONE=${APP_TIMEZONE}
|
||||
- APP_DEBUG=${APP_DEBUG}
|
||||
- SITE_OWNER=${SITE_OWNER}
|
||||
- APP_KEY=${APP_KEY}
|
||||
- APP_URL=${APP_URL}
|
||||
- IS_DEMO_APP=${IS_DEMO_APP}
|
||||
- LOG_CHANNEL=${LOG_CHANNEL}
|
||||
- LOG_LEVEL=${LOG_LEVEL}
|
||||
- DB_DATABASE=${DB_DATABASE}
|
||||
- CACHE_DRIVER=${CACHE_DRIVER}
|
||||
- SESSION_DRIVER=${SESSION_DRIVER}
|
||||
- MAIL_MAILER=${MAIL_MAILER}
|
||||
- MAIL_HOST=${MAIL_HOST}
|
||||
- MAIL_PORT=${MAIL_PORT}
|
||||
- MAIL_USERNAME=${MAIL_USERNAME}
|
||||
- MAIL_PASSWORD=${MAIL_PASSWORD}
|
||||
- MAIL_ENCRYPTION=${MAIL_ENCRYPTION}
|
||||
- MAIL_FROM_NAME=${MAIL_FROM_NAME}
|
||||
- MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS}
|
||||
- MAIL_VERIFY_SSL_PEER=${MAIL_VERIFY_SSL_PEER}
|
||||
- THROTTLE_API=${THROTTLE_API}
|
||||
- LOGIN_THROTTLE=${LOGIN_THROTTLE}
|
||||
- AUTHENTICATION_GUARD=${AUTHENTICATION_GUARD}
|
||||
- AUTHENTICATION_LOG_RETENTION=${AUTHENTICATION_LOG_RETENTION}
|
||||
- AUTH_PROXY_HEADER_FOR_USER=${AUTH_PROXY_HEADER_FOR_USER}
|
||||
- AUTH_PROXY_HEADER_FOR_EMAIL=${AUTH_PROXY_HEADER_FOR_EMAIL}
|
||||
- PROXY_LOGOUT_URL=${PROXY_LOGOUT_URL}
|
||||
- WEBAUTHN_NAME=${WEBAUTHN_NAME}
|
||||
- WEBAUTHN_ID=${WEBAUTHN_ID}
|
||||
- WEBAUTHN_USER_VERIFICATION=${WEBAUTHN_USER_VERIFICATION}
|
||||
- TRUSTED_PROXIES=${TRUSTED_PROXIES}
|
||||
- PROXY_FOR_OUTGOING_REQUESTS=${PROXY_FOR_OUTGOING_REQUESTS}
|
||||
- BROADCAST_DRIVER=${BROADCAST_DRIVER}
|
||||
- QUEUE_DRIVER=${QUEUE_DRIVER}
|
||||
- SESSION_LIFETIME=${SESSION_LIFETIME}
|
||||
- REDIS_HOST=${REDIS_HOST}
|
||||
- REDIS_PASSWORD=${PANEL_REDIS_ROOT_PASSWORD}
|
||||
- REDIS_PORT=${REDIS_PORT}
|
||||
- PUSHER_APP_ID=${PUSHER_APP_ID}
|
||||
- PUSHER_APP_KEY=${PUSHER_APP_KEY}
|
||||
- PUSHER_APP_SECRET=${PUSHER_APP_SECRET}
|
||||
- PUSHER_APP_CLUSTER=${PUSHER_APP_CLUSTER}
|
||||
- VITE_PUSHER_APP_KEY=${PUSHER_APP_KEY}
|
||||
- VITE_PUSHER_APP_CLUSTER=${PUSHER_APP_CLUSTER}
|
||||
- MIX_ENV=${MIX_ENV}
|
||||
# 删除以下行前的#号表示启用
|
||||
#- OPENID_AUTHORIZE_URL=${OPENID_AUTHORIZE_URL}
|
||||
#- OPENID_TOKEN_URL=${OPENID_TOKEN_URL}
|
||||
#- OPENID_USERINFO_URL=${OPENID_USERINFO_URL}
|
||||
#- OPENID_CLIENT_ID=${OPENID_CLIENT_ID}
|
||||
#- OPENID_CLIENT_SECRET=${OPENID_CLIENT_SECRET}
|
||||
#- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}
|
||||
#- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
chown -R 1000:1000 data
|
||||
@ -1,7 +0,0 @@
|
||||
# 2FAuth
|
||||
|
||||

|
||||

|
||||

|
||||
|
||||
管理双因素身份验证(2FA)账户并生成其安全代码的网络应用程序。
|
||||
@ -1,19 +0,0 @@
|
||||
name: 2FAuth
|
||||
tags:
|
||||
- 安全
|
||||
title: 开源双因素认证管理器
|
||||
description: 开源双因素认证管理器
|
||||
additionalProperties:
|
||||
key: 2fauth
|
||||
name: 2FAuth
|
||||
tags:
|
||||
- Security
|
||||
shortDescZh: 开源双因素认证管理器
|
||||
shortDescEn: Open-source two-factor authentication manager
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://docs.2fauth.app
|
||||
github: https://github.com/Bubka/2FAuth
|
||||
document: https://docs.2fauth.app
|
||||
@ -1,54 +0,0 @@
|
||||
APP_DEBUG="false"
|
||||
APP_ENV="local"
|
||||
APP_KEY="yuBiR9dlyokasPeguSPl8oPRLpHiqAbr"
|
||||
APP_NAME="2FAuth"
|
||||
APP_TIMEZONE="Asia/Shanghai"
|
||||
APP_URL="http://192.168.123.9:40273"
|
||||
AUTHENTICATION_GUARD="web-guard"
|
||||
AUTHENTICATION_LOG_RETENTION=365
|
||||
AUTH_PROXY_HEADER_FOR_EMAIL=""
|
||||
AUTH_PROXY_HEADER_FOR_USER=""
|
||||
BROADCAST_DRIVER="log"
|
||||
CACHE_DRIVER="file"
|
||||
CONTAINER_NAME="2fauth"
|
||||
DB_DATABASE="/srv/database/database.sqlite"
|
||||
GITHUB_CLIENT_ID=""
|
||||
GITHUB_CLIENT_SECRET=""
|
||||
IS_DEMO_APP="false"
|
||||
LOGIN_THROTTLE=5
|
||||
LOG_CHANNEL="daily"
|
||||
LOG_LEVEL="notice"
|
||||
MAIL_ENCRYPTION=""
|
||||
MAIL_FROM_ADDRESS=""
|
||||
MAIL_FROM_NAME=""
|
||||
MAIL_HOST=""
|
||||
MAIL_MAILER="log"
|
||||
MAIL_PASSWORD=""
|
||||
MAIL_PORT=""
|
||||
MAIL_USERNAME=""
|
||||
MAIL_VERIFY_SSL_PEER="true"
|
||||
MIX_ENV="local"
|
||||
OPENID_AUTHORIZE_URL=""
|
||||
OPENID_CLIENT_ID=""
|
||||
OPENID_CLIENT_SECRET=""
|
||||
OPENID_TOKEN_URL=""
|
||||
OPENID_USERINFO_URL=""
|
||||
PANEL_APP_PORT_HTTP=40273
|
||||
PANEL_REDIS_ROOT_PASSWORD="redis_password"
|
||||
PROXY_FOR_OUTGOING_REQUESTS=""
|
||||
PROXY_LOGOUT_URL=""
|
||||
PUSHER_APP_CLUSTER="mt1"
|
||||
PUSHER_APP_ID=""
|
||||
PUSHER_APP_KEY=""
|
||||
PUSHER_APP_SECRET=""
|
||||
QUEUE_DRIVER="sync"
|
||||
REDIS_HOST="redis"
|
||||
REDIS_PORT=6379
|
||||
SESSION_DRIVER="file"
|
||||
SESSION_LIFETIME=120
|
||||
SITE_OWNER="admin@localhost.com"
|
||||
THROTTLE_API=60
|
||||
TRUSTED_PROXIES=""
|
||||
WEBAUTHN_ID=""
|
||||
WEBAUTHN_NAME="2FAuth"
|
||||
WEBAUTHN_USER_VERIFICATION="preferred"
|
||||
@ -1,426 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "40273"
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "2FAuth"
|
||||
edit: true
|
||||
envKey: APP_NAME
|
||||
labelEn: App Name
|
||||
labelZh: 应用名
|
||||
required: true
|
||||
type: text
|
||||
- default: "local"
|
||||
edit: true
|
||||
envKey: APP_ENV
|
||||
labelEn: App Environment
|
||||
labelZh: 应用环境
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "local"
|
||||
value: "local"
|
||||
- label: "production"
|
||||
value: "production"
|
||||
- default: "Asia/Shanghai"
|
||||
edit: true
|
||||
envKey: APP_TIMEZONE
|
||||
labelEn: Timezone
|
||||
labelZh: 时区
|
||||
required: true
|
||||
type: text
|
||||
- default: "false"
|
||||
edit: true
|
||||
envKey: APP_DEBUG
|
||||
labelEn: Debug Mode
|
||||
labelZh: 调试模式
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "admin@localhost.com"
|
||||
edit: true
|
||||
envKey: SITE_OWNER
|
||||
labelEn: Site Owner
|
||||
labelZh: 站点拥有者
|
||||
required: true
|
||||
type: text
|
||||
- default: "yuBiR9dlyokasPeguSPl8oPRLpHiqAbr"
|
||||
edit: true
|
||||
envKey: APP_KEY
|
||||
labelEn: App Key (32 characters)
|
||||
labelZh: 应用密钥 (32 位字符)
|
||||
required: true
|
||||
type: text
|
||||
- default: "http://localhost:40273"
|
||||
edit: true
|
||||
envKey: APP_URL
|
||||
labelEn: App URL (External URL)
|
||||
labelZh: 应用网址 (外部访问地址)
|
||||
required: true
|
||||
rule: paramExtUrl
|
||||
type: text
|
||||
- default: "false"
|
||||
edit: true
|
||||
envKey: IS_DEMO_APP
|
||||
labelEn: Demo Mode
|
||||
labelZh: 演示模式
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "daily"
|
||||
edit: true
|
||||
envKey: LOG_CHANNEL
|
||||
labelEn: Log Channel
|
||||
labelZh: 日志通道
|
||||
required: true
|
||||
type: text
|
||||
- default: "notice"
|
||||
edit: true
|
||||
envKey: LOG_LEVEL
|
||||
labelEn: Log Level
|
||||
labelZh: 日志级别
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "debug"
|
||||
value: "debug"
|
||||
- label: "info"
|
||||
value: "info"
|
||||
- label: "notice"
|
||||
value: "notice"
|
||||
- label: "warning"
|
||||
value: "warning"
|
||||
- label: "error"
|
||||
value: "error"
|
||||
- label: "critical"
|
||||
value: "critical"
|
||||
- label: "alert"
|
||||
value: "alert"
|
||||
- label: "emergency"
|
||||
value: "emergency"
|
||||
- default: "/srv/database/database.sqlite"
|
||||
disabled: true
|
||||
envKey: DB_DATABASE
|
||||
labelEn: Database Path
|
||||
labelZh: 数据库路径
|
||||
required: true
|
||||
type: text
|
||||
- default: "file"
|
||||
disabled: true
|
||||
envKey: CACHE_DRIVER
|
||||
labelEn: Cache Driver
|
||||
labelZh: 缓存驱动
|
||||
required: true
|
||||
type: text
|
||||
- default: "file"
|
||||
disabled: true
|
||||
envKey: SESSION_DRIVER
|
||||
labelEn: Session Driver
|
||||
labelZh: 会话驱动
|
||||
required: true
|
||||
type: text
|
||||
- default: "log"
|
||||
edit: true
|
||||
envKey: MAIL_MAILER
|
||||
labelEn: Mailer
|
||||
labelZh: 邮件发送方式
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_HOST
|
||||
labelEn: Mail Host
|
||||
labelZh: 邮件服务器
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_PORT
|
||||
labelEn: Mail Port
|
||||
labelZh: 邮件端口
|
||||
required: false
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_USERNAME
|
||||
labelEn: Mail Username
|
||||
labelZh: 邮件用户名
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_PASSWORD
|
||||
labelEn: Mail Password
|
||||
labelZh: 邮件密码
|
||||
required: false
|
||||
type: password
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_ENCRYPTION
|
||||
labelEn: Mail Encryption
|
||||
labelZh: 邮件加密方式
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_FROM_NAME
|
||||
labelEn: Mail From Name
|
||||
labelZh: 邮件发件人姓名
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: MAIL_FROM_ADDRESS
|
||||
labelEn: Mail From Address
|
||||
labelZh: 邮件发件人地址
|
||||
required: false
|
||||
type: text
|
||||
- default: "true"
|
||||
edit: true
|
||||
envKey: MAIL_VERIFY_SSL_PEER
|
||||
labelEn: Mail Verify SSL Peer
|
||||
labelZh: 邮件验证 SSL 证书
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "60"
|
||||
edit: true
|
||||
envKey: THROTTLE_API
|
||||
labelEn: API Throttle
|
||||
labelZh: API 限制
|
||||
required: true
|
||||
type: number
|
||||
- default: "5"
|
||||
edit: true
|
||||
envKey: LOGIN_THROTTLE
|
||||
labelEn: Login Throttle
|
||||
labelZh: 登录限制
|
||||
required: true
|
||||
type: number
|
||||
- default: "web-guard"
|
||||
edit: true
|
||||
envKey: AUTHENTICATION_GUARD
|
||||
labelEn: Authentication Guard
|
||||
labelZh: 认证保护
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "web-guard"
|
||||
value: "web-guard"
|
||||
- label: "reverse-proxy-guard"
|
||||
value: "reverse-proxy-guard"
|
||||
- default: "365"
|
||||
edit: true
|
||||
envKey: AUTHENTICATION_LOG_RETENTION
|
||||
labelEn: Authentication Log Retention
|
||||
labelZh: 认证日志保留
|
||||
required: true
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: AUTH_PROXY_HEADER_FOR_USER
|
||||
labelEn: Authentication Proxy Header for User
|
||||
labelZh: 用户认证代理头
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: AUTH_PROXY_HEADER_FOR_EMAIL
|
||||
labelEn: Authentication Proxy Header for Email
|
||||
labelZh: 邮箱认证代理头
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PROXY_LOGOUT_URL
|
||||
labelEn: Proxy Logout URL
|
||||
labelZh: 代理注销网址
|
||||
required: false
|
||||
type: text
|
||||
- default: "2FAuth"
|
||||
edit: true
|
||||
envKey: WEBAUTHN_NAME
|
||||
labelEn: WebAuthn Name
|
||||
labelZh: WebAuthn 名称
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: WEBAUTHN_ID
|
||||
labelEn: WebAuthn ID
|
||||
labelZh: WebAuthn ID
|
||||
required: false
|
||||
type: text
|
||||
- default: "preferred"
|
||||
edit: true
|
||||
envKey: WEBAUTHN_USER_VERIFICATION
|
||||
labelEn: WebAuthn User Verification
|
||||
labelZh: WebAuthn 用户验证
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "Preferred"
|
||||
value: "preferred"
|
||||
- label: "Required"
|
||||
value: "required"
|
||||
- label: "Discouraged"
|
||||
value: "discouraged"
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: TRUSTED_PROXIES
|
||||
labelEn: Trusted Proxies
|
||||
labelZh: 信任代理
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PROXY_FOR_OUTGOING_REQUESTS
|
||||
labelEn: Proxy for Outgoing Requests
|
||||
labelZh: 出站请求代理
|
||||
required: false
|
||||
type: text
|
||||
- default: "log"
|
||||
edit: true
|
||||
envKey: BROADCAST_DRIVER
|
||||
labelEn: Broadcast Driver
|
||||
labelZh: 广播驱动
|
||||
required: true
|
||||
type: text
|
||||
- default: "sync"
|
||||
edit: true
|
||||
envKey: QUEUE_DRIVER
|
||||
labelEn: Queue Driver
|
||||
labelZh: 队列驱动
|
||||
required: true
|
||||
type: text
|
||||
- default: "120"
|
||||
edit: true
|
||||
envKey: SESSION_LIFETIME
|
||||
labelEn: Session Lifetime
|
||||
labelZh: 会话有效期
|
||||
required: true
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: REDIS_HOST
|
||||
key: redis
|
||||
labelEn: Redis Service
|
||||
labelZh: Redis服务
|
||||
required: true
|
||||
type: service
|
||||
- default: "6379"
|
||||
edit: true
|
||||
envKey: REDIS_PORT
|
||||
labelEn: Redis Service Port
|
||||
labelZh: Redis服务端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PANEL_REDIS_ROOT_PASSWORD
|
||||
labelEn: Redis Password
|
||||
labelZh: Redis 密码
|
||||
required: true
|
||||
type: password
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PUSHER_APP_ID
|
||||
labelEn: Pusher App ID
|
||||
labelZh: Pusher 应用 ID
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PUSHER_APP_KEY
|
||||
labelEn: Pusher App Key
|
||||
labelZh: Pusher 应用密钥
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: PUSHER_APP_SECRET
|
||||
labelEn: Pusher App Secret
|
||||
labelZh: Pusher 应用密钥
|
||||
required: false
|
||||
type: password
|
||||
- default: "mt1"
|
||||
edit: true
|
||||
envKey: PUSHER_APP_CLUSTER
|
||||
labelEn: Pusher App Cluster
|
||||
labelZh: Pusher 应用集群
|
||||
required: true
|
||||
type: text
|
||||
- default: "local"
|
||||
edit: true
|
||||
envKey: MIX_ENV
|
||||
labelEn: Mix Environment
|
||||
labelZh: Mix 环境
|
||||
required: true
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_AUTHORIZE_URL
|
||||
labelEn: OpenID Authorize URL (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 授权 URL (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_TOKEN_URL
|
||||
labelEn: OpenID Token URL (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 令牌 URL (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_USERINFO_URL
|
||||
labelEn: OpenID Userinfo URL (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 用户信息 URL (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_CLIENT_ID
|
||||
labelEn: OpenID Client ID (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 客户端 ID (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: OPENID_CLIENT_SECRET
|
||||
labelEn: OpenID Client Secret (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: OpenID 客户端密钥 (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: password
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: GITHUB_CLIENT_ID
|
||||
labelEn: GitHub Client ID (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: GitHub 客户端 ID (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: text
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: GITHUB_CLIENT_SECRET
|
||||
labelEn: GitHub Client Secret (Edit to remove comments in compose.yml to take effect)
|
||||
labelZh: GitHub 客户端密钥 (编辑去除compose.yml里的注释生效)
|
||||
required: false
|
||||
type: password
|
||||
@ -1,73 +0,0 @@
|
||||
services:
|
||||
2fauth:
|
||||
image: "2fauth/2fauth:latest"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PANEL_APP_PORT_HTTP}:8000/tcp
|
||||
volumes:
|
||||
- ./data:/2fauth
|
||||
environment:
|
||||
- APP_NAME=${APP_NAME}
|
||||
- APP_ENV=${APP_ENV}
|
||||
- APP_TIMEZONE=${APP_TIMEZONE}
|
||||
- APP_DEBUG=${APP_DEBUG}
|
||||
- SITE_OWNER=${SITE_OWNER}
|
||||
- APP_KEY=${APP_KEY}
|
||||
- APP_URL=${APP_URL}
|
||||
- IS_DEMO_APP=${IS_DEMO_APP}
|
||||
- LOG_CHANNEL=${LOG_CHANNEL}
|
||||
- LOG_LEVEL=${LOG_LEVEL}
|
||||
- DB_DATABASE=${DB_DATABASE}
|
||||
- CACHE_DRIVER=${CACHE_DRIVER}
|
||||
- SESSION_DRIVER=${SESSION_DRIVER}
|
||||
- MAIL_MAILER=${MAIL_MAILER}
|
||||
- MAIL_HOST=${MAIL_HOST}
|
||||
- MAIL_PORT=${MAIL_PORT}
|
||||
- MAIL_USERNAME=${MAIL_USERNAME}
|
||||
- MAIL_PASSWORD=${MAIL_PASSWORD}
|
||||
- MAIL_ENCRYPTION=${MAIL_ENCRYPTION}
|
||||
- MAIL_FROM_NAME=${MAIL_FROM_NAME}
|
||||
- MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS}
|
||||
- MAIL_VERIFY_SSL_PEER=${MAIL_VERIFY_SSL_PEER}
|
||||
- THROTTLE_API=${THROTTLE_API}
|
||||
- LOGIN_THROTTLE=${LOGIN_THROTTLE}
|
||||
- AUTHENTICATION_GUARD=${AUTHENTICATION_GUARD}
|
||||
- AUTHENTICATION_LOG_RETENTION=${AUTHENTICATION_LOG_RETENTION}
|
||||
- AUTH_PROXY_HEADER_FOR_USER=${AUTH_PROXY_HEADER_FOR_USER}
|
||||
- AUTH_PROXY_HEADER_FOR_EMAIL=${AUTH_PROXY_HEADER_FOR_EMAIL}
|
||||
- PROXY_LOGOUT_URL=${PROXY_LOGOUT_URL}
|
||||
- WEBAUTHN_NAME=${WEBAUTHN_NAME}
|
||||
- WEBAUTHN_ID=${WEBAUTHN_ID}
|
||||
- WEBAUTHN_USER_VERIFICATION=${WEBAUTHN_USER_VERIFICATION}
|
||||
- TRUSTED_PROXIES=${TRUSTED_PROXIES}
|
||||
- PROXY_FOR_OUTGOING_REQUESTS=${PROXY_FOR_OUTGOING_REQUESTS}
|
||||
- BROADCAST_DRIVER=${BROADCAST_DRIVER}
|
||||
- QUEUE_DRIVER=${QUEUE_DRIVER}
|
||||
- SESSION_LIFETIME=${SESSION_LIFETIME}
|
||||
- REDIS_HOST=${REDIS_HOST}
|
||||
- REDIS_PASSWORD=${PANEL_REDIS_ROOT_PASSWORD}
|
||||
- REDIS_PORT=${REDIS_PORT}
|
||||
- PUSHER_APP_ID=${PUSHER_APP_ID}
|
||||
- PUSHER_APP_KEY=${PUSHER_APP_KEY}
|
||||
- PUSHER_APP_SECRET=${PUSHER_APP_SECRET}
|
||||
- PUSHER_APP_CLUSTER=${PUSHER_APP_CLUSTER}
|
||||
- VITE_PUSHER_APP_KEY=${PUSHER_APP_KEY}
|
||||
- VITE_PUSHER_APP_CLUSTER=${PUSHER_APP_CLUSTER}
|
||||
- MIX_ENV=${MIX_ENV}
|
||||
# 删除以下行前的#号表示启用
|
||||
#- OPENID_AUTHORIZE_URL=${OPENID_AUTHORIZE_URL}
|
||||
#- OPENID_TOKEN_URL=${OPENID_TOKEN_URL}
|
||||
#- OPENID_USERINFO_URL=${OPENID_USERINFO_URL}
|
||||
#- OPENID_CLIENT_ID=${OPENID_CLIENT_ID}
|
||||
#- OPENID_CLIENT_SECRET=${OPENID_CLIENT_SECRET}
|
||||
#- GITHUB_CLIENT_ID=${GITHUB_CLIENT_ID}
|
||||
#- GITHUB_CLIENT_SECRET=${GITHUB_CLIENT_SECRET}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,3 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
chown -R 1000:1000 data
|
||||
|
Before Width: | Height: | Size: 1.8 KiB |
@ -1,6 +0,0 @@
|
||||
CONTAINER_NAME="act_runner"
|
||||
DATA_PATH="./data"
|
||||
GITEA_INSTANCE_URL="http://1.2.3.4:567"
|
||||
RUNNER_REGISTRATION_TOKEN="xxx"
|
||||
RUNNER_NAME="xxx"
|
||||
RUNNER_LABELS="xxx"
|
||||
@ -1,38 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: ./data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: http://1.2.3.4:567
|
||||
edit: true
|
||||
envKey: GITEA_INSTANCE_URL
|
||||
labelEn: Gitea instance URL
|
||||
labelZh: Gitea 实例 URL
|
||||
required: true
|
||||
rule: paramExtUrl
|
||||
type: text
|
||||
- default: ''
|
||||
edit: true
|
||||
envKey: RUNNER_REGISTRATION_TOKEN
|
||||
labelEn: Gitea runner REGISTRATION TOKEN
|
||||
labelZh: Gitea runner REGISTRATION TOKEN
|
||||
required: true
|
||||
type: text
|
||||
- default: ''
|
||||
edit: true
|
||||
envKey: RUNNER_NAME
|
||||
labelEn: Gitea runner name
|
||||
labelZh: Gitea runner name
|
||||
required: true
|
||||
type: text
|
||||
- default: ''
|
||||
edit: true
|
||||
envKey: RUNNER_LABELS
|
||||
labelEn: Gitea runner labels
|
||||
labelZh: Gitea runner labels
|
||||
required: true
|
||||
type: text
|
||||
@ -1,23 +0,0 @@
|
||||
services:
|
||||
act_runner:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
volumes:
|
||||
#- ${DATA_PATH}/config.yaml:/config.yaml # 可选配置
|
||||
- ${DATA_PATH}/data:/data
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
#- CONFIG_FILE=/config.yaml
|
||||
- GITEA_INSTANCE_URL=${GITEA_INSTANCE_URL}
|
||||
- GITEA_RUNNER_REGISTRATION_TOKEN=${RUNNER_REGISTRATION_TOKEN}
|
||||
- GITEA_RUNNER_NAME=${RUNNER_NAME}
|
||||
- GITEA_RUNNER_LABELS=${RUNNER_LABELS}
|
||||
image: gitea/act_runner:0.2.12
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,3 +0,0 @@
|
||||
# act runner
|
||||
|
||||
Act runner是一个基于[Gitea fork](https://gitea.com/gitea/act)的[Gitea](https://github.com/nektos/act)上的运行器。
|
||||
@ -1,19 +0,0 @@
|
||||
name: Act runner
|
||||
tags:
|
||||
- DevOps
|
||||
title: Gitea Actions 的 Runner
|
||||
description: Gitea Actions 的 Runner
|
||||
additionalProperties:
|
||||
key: act_runner
|
||||
name: Act runner
|
||||
tags:
|
||||
- DevOps
|
||||
shortDescZh: Gitea Actions 的 Runner
|
||||
shortDescEn: A runner for Gitea based on Gitea fork of act
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://gitea.com/gitea/act_runner
|
||||
github: https://gitea.com/gitea/act_runner
|
||||
document: https://docs.gitea.com/next/usage/actions/act-runner
|
||||
@ -1,6 +0,0 @@
|
||||
CONTAINER_NAME="act_runner"
|
||||
DATA_PATH="./data"
|
||||
GITEA_INSTANCE_URL="http://1.2.3.4:567"
|
||||
RUNNER_REGISTRATION_TOKEN="xxx"
|
||||
RUNNER_NAME="xxx"
|
||||
RUNNER_LABELS="xxx"
|
||||
@ -1,38 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: ./data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: http://1.2.3.4:567
|
||||
edit: true
|
||||
envKey: GITEA_INSTANCE_URL
|
||||
labelEn: Gitea instance URL
|
||||
labelZh: Gitea 实例 URL
|
||||
required: true
|
||||
rule: paramExtUrl
|
||||
type: text
|
||||
- default: ''
|
||||
edit: true
|
||||
envKey: RUNNER_REGISTRATION_TOKEN
|
||||
labelEn: Gitea runner REGISTRATION TOKEN
|
||||
labelZh: Gitea runner REGISTRATION TOKEN
|
||||
required: true
|
||||
type: text
|
||||
- default: ''
|
||||
edit: true
|
||||
envKey: RUNNER_NAME
|
||||
labelEn: Gitea runner name
|
||||
labelZh: Gitea runner name
|
||||
required: true
|
||||
type: text
|
||||
- default: ''
|
||||
edit: true
|
||||
envKey: RUNNER_LABELS
|
||||
labelEn: Gitea runner labels
|
||||
labelZh: Gitea runner labels
|
||||
required: true
|
||||
type: text
|
||||
@ -1,23 +0,0 @@
|
||||
services:
|
||||
act_runner:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
volumes:
|
||||
#- ${DATA_PATH}/config.yaml:/config.yaml # 可选配置
|
||||
- ${DATA_PATH}/data:/data
|
||||
- /var/run/docker.sock:/var/run/docker.sock
|
||||
environment:
|
||||
#- CONFIG_FILE=/config.yaml
|
||||
- GITEA_INSTANCE_URL=${GITEA_INSTANCE_URL}
|
||||
- GITEA_RUNNER_REGISTRATION_TOKEN=${RUNNER_REGISTRATION_TOKEN}
|
||||
- GITEA_RUNNER_NAME=${RUNNER_NAME}
|
||||
- GITEA_RUNNER_LABELS=${RUNNER_LABELS}
|
||||
image: gitea/act_runner:latest
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
Before Width: | Height: | Size: 6.9 KiB |
@ -1,13 +0,0 @@
|
||||
CONTAINER_NAME="adguardhome"
|
||||
PLAIN_DNS_PORT="20053"
|
||||
DHCP_PORT1="20067"
|
||||
DHCP_PORT2="20068"
|
||||
HTTP_PORT="23000"
|
||||
PANEL_APP_PORT_HTTP="23001"
|
||||
DOH_PORT="20443"
|
||||
DOT_PORT="853"
|
||||
QUIC_PORT1="20784"
|
||||
QUIC_PORT2="8853"
|
||||
DNS_CRYPT_PORT="5443"
|
||||
WORK_PATH="./data/work"
|
||||
CONFIG_PATH="./data/conf"
|
||||
@ -1,96 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 20053
|
||||
edit: true
|
||||
envKey: PLAIN_DNS_PORT
|
||||
labelEn: Plain DNS port
|
||||
labelZh: 普通DNS端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 20067
|
||||
edit: true
|
||||
envKey: DHCP_PORT1
|
||||
labelEn: DHCP service port 1
|
||||
labelZh: DHCP服务端口1
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 20068
|
||||
edit: true
|
||||
envKey: DHCP_PORT2
|
||||
labelEn: DHCP service port 2
|
||||
labelZh: DHCP服务端口2
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 23000
|
||||
edit: true
|
||||
envKey: HTTP_PORT
|
||||
labelEn: HTTP web port
|
||||
labelZh: HTTP网页端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 23001
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Initial setup web page port
|
||||
labelZh: 初始设置网页端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 20443
|
||||
edit: true
|
||||
envKey: DOH_PORT
|
||||
labelEn: DOH service port
|
||||
labelZh: DOH服务端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 853
|
||||
edit: true
|
||||
envKey: DOT_PORT
|
||||
labelEn: DOT service port
|
||||
labelZh: DOT服务端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 20784
|
||||
edit: true
|
||||
envKey: QUIC_PORT1
|
||||
labelEn: QUIC service port 1
|
||||
labelZh: QUIC服务端口1
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 8853
|
||||
edit: true
|
||||
envKey: QUIC_PORT2
|
||||
labelEn: QUIC service port 2
|
||||
labelZh: QUIC服务端口2
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 5443
|
||||
edit: true
|
||||
envKey: DNS_CRYPT_PORT
|
||||
labelEn: DNS Crypt service port
|
||||
labelZh: DNS Crypt服务端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data/work
|
||||
edit: true
|
||||
envKey: WORK_PATH
|
||||
labelEn: Work data folder path
|
||||
labelZh: 工作数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/conf
|
||||
edit: true
|
||||
envKey: CONFIG_PATH
|
||||
labelEn: Configuration folder path
|
||||
labelZh: 配置文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,31 +0,0 @@
|
||||
services:
|
||||
adguardhome:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PLAIN_DNS_PORT}:53/tcp
|
||||
- ${PLAIN_DNS_PORT}:53/udp
|
||||
- ${DHCP_PORT1}:67/udp
|
||||
- ${DHCP_PORT2}:68/udp
|
||||
- ${HTTP_PORT}:80/tcp
|
||||
- ${DOH_PORT}:443/tcp
|
||||
- ${DOH_PORT}:443/udp
|
||||
- ${PANEL_APP_PORT_HTTP}:3000/tcp
|
||||
- ${DOT_PORT}:853/tcp
|
||||
- ${QUIC_PORT1}:784/udp
|
||||
- ${DOT_PORT}:853/udp
|
||||
- ${QUIC_PORT2}:8853/udp
|
||||
- ${DNS_CRYPT_PORT}:5443/tcp
|
||||
- ${DNS_CRYPT_PORT}:5443/udp
|
||||
volumes:
|
||||
- ${WORK_PATH}:/opt/adguardhome/work
|
||||
- ${CONFIG_PATH}:/opt/adguardhome/conf
|
||||
image: adguard/adguardhome:v0.107.63
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,529 +0,0 @@
|
||||
|
||||
<p align="center">
|
||||
<picture>
|
||||
<source media="(prefers-color-scheme: dark)" srcset="doc/adguard_home_darkmode.svg">
|
||||
<img alt="AdGuard Home" src="https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/doc/adguard_home_lightmode.svg" width="300px">
|
||||
</picture>
|
||||
</p>
|
||||
<h3 align="center">Privacy protection center for you and your devices</h3>
|
||||
<p align="center">
|
||||
Free and open source, powerful network-wide ads & trackers blocking DNS
|
||||
server.
|
||||
</p>
|
||||
<p align="center">
|
||||
<a href="https://adguard.com/">AdGuard.com</a> |
|
||||
<a href="https://github.com/AdguardTeam/AdGuardHome/wiki">Wiki</a> |
|
||||
<a href="https://reddit.com/r/Adguard">Reddit</a> |
|
||||
<a href="https://twitter.com/AdGuard">Twitter</a> |
|
||||
<a href="https://t.me/adguard_en">Telegram</a>
|
||||
<br/><br/>
|
||||
<a href="https://codecov.io/github/AdguardTeam/AdGuardHome?branch=master">
|
||||
<img src="https://img.shields.io/codecov/c/github/AdguardTeam/AdGuardHome/master.svg" alt="Code Coverage"/>
|
||||
</a>
|
||||
<a href="https://goreportcard.com/report/AdguardTeam/AdGuardHome">
|
||||
<img src="https://goreportcard.com/badge/github.com/AdguardTeam/AdGuardHome" alt="Go Report Card"/>
|
||||
</a>
|
||||
<a href="https://hub.docker.com/r/adguard/adguardhome">
|
||||
<img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/adguard/adguardhome.svg?maxAge=604800"/>
|
||||
</a>
|
||||
<br/>
|
||||
<a href="https://github.com/AdguardTeam/AdGuardHome/releases">
|
||||
<img src="https://img.shields.io/github/release/AdguardTeam/AdGuardHome/all.svg" alt="Latest release"/>
|
||||
</a>
|
||||
<a href="https://snapcraft.io/adguard-home">
|
||||
<img alt="adguard-home" src="https://snapcraft.io/adguard-home/badge.svg"/>
|
||||
</a>
|
||||
</p>
|
||||
<br/>
|
||||
<p align="center">
|
||||
<img src="https://cdn.adtidy.org/public/Adguard/Common/adguard_home.gif" width="800"/>
|
||||
</p>
|
||||
<hr/>
|
||||
|
||||
AdGuard Home is a network-wide software for blocking ads and tracking. After you
|
||||
set it up, it'll cover ALL your home devices, and you don't need any client-side
|
||||
software for that.
|
||||
|
||||
It operates as a DNS server that re-routes tracking domains to a “black hole”,
|
||||
thus preventing your devices from connecting to those servers. It's based on
|
||||
software we use for our public [AdGuard DNS] servers, and both share a lot of
|
||||
code.
|
||||
|
||||
[AdGuard DNS]: https://adguard-dns.io/
|
||||
|
||||
|
||||
|
||||
* [Getting Started](#getting-started)
|
||||
* [Automated install (Unix)](#automated-install-linux-and-mac)
|
||||
* [Alternative methods](#alternative-methods)
|
||||
* [Guides](#guides)
|
||||
* [API](#api)
|
||||
* [Comparing AdGuard Home to other solutions](#comparison)
|
||||
* [How is this different from public AdGuard DNS servers?](#comparison-adguard-dns)
|
||||
* [How does AdGuard Home compare to Pi-Hole](#comparison-pi-hole)
|
||||
* [How does AdGuard Home compare to traditional ad blockers](#comparison-adblock)
|
||||
* [Known limitations](#comparison-limitations)
|
||||
* [How to build from source](#how-to-build)
|
||||
* [Prerequisites](#prerequisites)
|
||||
* [Building](#building)
|
||||
* [Contributing](#contributing)
|
||||
* [Test unstable versions](#test-unstable-versions)
|
||||
* [Reporting issues](#reporting-issues)
|
||||
* [Help with translations](#translate)
|
||||
* [Other](#help-other)
|
||||
* [Projects that use AdGuard Home](#uses)
|
||||
* [Acknowledgments](#acknowledgments)
|
||||
* [Privacy](#privacy)
|
||||
|
||||
|
||||
|
||||
## <a href="#getting-started" id="getting-started" name="getting-started">Getting Started</a>
|
||||
|
||||
### <a href="#automated-install-linux-and-mac" id="automated-install-linux-and-mac" name="automated-install-linux-and-mac">Automated install (Unix)</a>
|
||||
|
||||
To install with `curl` run the following command:
|
||||
|
||||
```sh
|
||||
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
|
||||
```
|
||||
|
||||
To install with `wget` run the following command:
|
||||
|
||||
```sh
|
||||
wget --no-verbose -O - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
|
||||
```
|
||||
|
||||
To install with `fetch` run the following command:
|
||||
|
||||
```sh
|
||||
fetch -o - https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -v
|
||||
```
|
||||
|
||||
The script also accepts some options:
|
||||
|
||||
* `-c <channel>` to use specified channel;
|
||||
* `-r` to reinstall AdGuard Home;
|
||||
* `-u` to uninstall AdGuard Home;
|
||||
* `-v` for verbose output.
|
||||
|
||||
Note that options `-r` and `-u` are mutually exclusive.
|
||||
|
||||
|
||||
|
||||
### <a href="#alternative-methods" id="alternative-methods" name="alternative-methods">Alternative methods</a>
|
||||
|
||||
#### <a href="#manual-installation" id="manual-installation" name="manual-installation">Manual installation</a>
|
||||
|
||||
Please read the **[Getting Started][wiki-start]** article on our Wiki to learn
|
||||
how to install AdGuard Home manually, and how to configure your devices to use
|
||||
it.
|
||||
|
||||
#### <a href="#docker" id="docker" name="docker">Docker</a>
|
||||
|
||||
You can use our official Docker image on [Docker Hub].
|
||||
|
||||
#### <a href="#snap-store" id="snap-store" name="snap-store">Snap Store</a>
|
||||
|
||||
If you're running **Linux,** there's a secure and easy way to install AdGuard
|
||||
Home: get it from the [Snap Store].
|
||||
|
||||
[Docker Hub]: https://hub.docker.com/r/adguard/adguardhome
|
||||
[Snap Store]: https://snapcraft.io/adguard-home
|
||||
[wiki-start]: https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started
|
||||
|
||||
|
||||
|
||||
### <a href="#guides" id="guides" name="guides">Guides</a>
|
||||
|
||||
See our [Wiki][wiki].
|
||||
|
||||
[wiki]: https://github.com/AdguardTeam/AdGuardHome/wiki
|
||||
|
||||
|
||||
|
||||
### <a href="#api" id="api" name="api">API</a>
|
||||
|
||||
If you want to integrate with AdGuard Home, you can use our [REST API][openapi].
|
||||
Alternatively, you can use this [python client][pyclient], which is used to
|
||||
build the [AdGuard Home Hass.io Add-on][hassio].
|
||||
|
||||
[hassio]: https://www.home-assistant.io/integrations/adguard/
|
||||
[openapi]: https://github.com/AdguardTeam/AdGuardHome/tree/master/openapi
|
||||
[pyclient]: https://pypi.org/project/adguardhome/
|
||||
|
||||
|
||||
|
||||
## <a href="#comparison" id="comparison" name="comparison">Comparing AdGuard Home to other solutions</a>
|
||||
|
||||
### <a href="#comparison-adguard-dns" id="comparison-adguard-dns" name="comparison-adguard-dns">How is this different from public AdGuard DNS servers?</a>
|
||||
|
||||
Running your own AdGuard Home server allows you to do much more than using a
|
||||
public DNS server. It's a completely different level. See for yourself:
|
||||
|
||||
* Choose what exactly the server blocks and permits.
|
||||
|
||||
* Monitor your network activity.
|
||||
|
||||
* Add your own custom filtering rules.
|
||||
|
||||
* **Most importantly, it's your own server, and you are the only one who's in
|
||||
control.**
|
||||
|
||||
|
||||
|
||||
### <a href="#comparison-pi-hole" id="comparison-pi-hole" name="comparison-pi-hole">How does AdGuard Home compare to Pi-Hole</a>
|
||||
|
||||
At this point, AdGuard Home has a lot in common with Pi-Hole. Both block ads
|
||||
and trackers using the so-called “DNS sinkholing” method and both allow
|
||||
customizing what's blocked.
|
||||
|
||||
<aside>
|
||||
We're not going to stop here. DNS sinkholing is not a bad starting point, but
|
||||
this is just the beginning.
|
||||
</aside>
|
||||
|
||||
AdGuard Home provides a lot of features out-of-the-box with no need to install
|
||||
and configure additional software. We want it to be simple to the point when
|
||||
even casual users can set it up with minimal effort.
|
||||
|
||||
**Disclaimer:** some of the listed features can be added to Pi-Hole by
|
||||
installing additional software or by manually using SSH terminal and
|
||||
reconfiguring one of the utilities Pi-Hole consists of. However, in our
|
||||
opinion, this cannot be legitimately counted as a Pi-Hole's feature.
|
||||
|
||||
| Feature | AdGuard Home | Pi-Hole |
|
||||
|-------------------------------------------------------------------------|-------------------|-----------------------------------------------------------|
|
||||
| Blocking ads and trackers | ✅ | ✅ |
|
||||
| Customizing blocklists | ✅ | ✅ |
|
||||
| Built-in DHCP server | ✅ | ✅ |
|
||||
| HTTPS for the Admin interface | ✅ | Kind of, but you'll need to manually configure lighttpd |
|
||||
| Encrypted DNS upstream servers (DNS-over-HTTPS, DNS-over-TLS, DNSCrypt) | ✅ | ❌ (requires additional software) |
|
||||
| Cross-platform | ✅ | ❌ (not natively, only via Docker) |
|
||||
| Running as a DNS-over-HTTPS or DNS-over-TLS server | ✅ | ❌ (requires additional software) |
|
||||
| Blocking phishing and malware domains | ✅ | ❌ (requires non-default blocklists) |
|
||||
| Parental control (blocking adult domains) | ✅ | ❌ |
|
||||
| Force Safe search on search engines | ✅ | ❌ |
|
||||
| Per-client (device) configuration | ✅ | ✅ |
|
||||
| Access settings (choose who can use AGH DNS) | ✅ | ❌ |
|
||||
| Running [without root privileges][wiki-noroot] | ✅ | ❌ |
|
||||
|
||||
[wiki-noroot]: https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#running-without-superuser
|
||||
|
||||
|
||||
|
||||
### <a href="#comparison-adblock" id="comparison-adblock" name="comparison-adblock">How does AdGuard Home compare to traditional ad blockers</a>
|
||||
|
||||
It depends.
|
||||
|
||||
DNS sinkholing is capable of blocking a big percentage of ads, but it lacks
|
||||
the flexibility and the power of traditional ad blockers. You can get a good
|
||||
impression about the difference between these methods by reading [this
|
||||
article][blog-adaway], which compares AdGuard for Android (a traditional ad
|
||||
blocker) to hosts-level ad blockers (which are almost identical to DNS-based
|
||||
blockers in their capabilities). This level of protection is enough for some
|
||||
users.
|
||||
|
||||
Additionally, using a DNS-based blocker can help to block ads, tracking and
|
||||
analytics requests on other types of devices, such as SmartTVs, smart speakers
|
||||
or other kinds of IoT devices (on which you can't install traditional ad
|
||||
blockers).
|
||||
|
||||
|
||||
|
||||
### <a href="#comparison-limitations" id="comparison-limitations" name="comparison-limitations">Known limitations</a>
|
||||
|
||||
Here are some examples of what cannot be blocked by a DNS-level blocker:
|
||||
|
||||
* YouTube, Twitch ads;
|
||||
|
||||
* Facebook, Twitter, Instagram sponsored posts.
|
||||
|
||||
Essentially, any advertising that shares a domain with content cannot be blocked
|
||||
by a DNS-level blocker.
|
||||
|
||||
Is there a chance to handle this in the future? DNS will never be enough to do
|
||||
this. Our only option is to use a content blocking proxy like what we do in the
|
||||
standalone AdGuard applications. We're [going to bring][issue-1228] this
|
||||
feature support to AdGuard Home in the future. Unfortunately, even in this
|
||||
case, there still will be cases when this won't be enough or would require quite
|
||||
a complicated configuration.
|
||||
|
||||
[blog-adaway]: https://adguard.com/blog/adguard-vs-adaway-dns66.html
|
||||
[issue-1228]: https://github.com/AdguardTeam/AdGuardHome/issues/1228
|
||||
|
||||
|
||||
|
||||
## <a href="#how-to-build" id="how-to-build" name="how-to-build">How to build from source</a>
|
||||
|
||||
### <a href="#prerequisites" id="prerequisites" name="prerequisites">Prerequisites</a>
|
||||
|
||||
Run `make init` to prepare the development environment.
|
||||
|
||||
You will need this to build AdGuard Home:
|
||||
|
||||
* [Go](https://golang.org/dl/) v1.19 or later;
|
||||
* [Node.js](https://nodejs.org/en/download/) v10.16.2 or later;
|
||||
* [npm](https://www.npmjs.com/) v6.14 or later;
|
||||
* [yarn](https://yarnpkg.com/) v1.22.5 or later.
|
||||
|
||||
|
||||
|
||||
### <a href="#building" id="building" name="building">Building</a>
|
||||
|
||||
Open your terminal and execute these commands:
|
||||
|
||||
```sh
|
||||
git clone https://github.com/AdguardTeam/AdGuardHome
|
||||
cd AdGuardHome
|
||||
make
|
||||
```
|
||||
|
||||
**NOTE:** The non-standard `-j` flag is currently not supported, so building
|
||||
with `make -j 4` or setting your `MAKEFLAGS` to include, for example, `-j 4` is
|
||||
likely to break the build. If you do have your `MAKEFLAGS` set to that, and you
|
||||
don't want to change it, you can override it by running `make -j 1`.
|
||||
|
||||
Check the [`Makefile`][src-makefile] to learn about other commands.
|
||||
|
||||
#### <a href="#building-cross" id="building-cross" name="building-cross">Building for a different platform</a>
|
||||
|
||||
You can build AdGuard Home for any OS/ARCH that Go supports. In order to do
|
||||
this, specify `GOOS` and `GOARCH` environment variables as macros when running
|
||||
`make`.
|
||||
|
||||
For example:
|
||||
|
||||
```sh
|
||||
env GOOS='linux' GOARCH='arm64' make
|
||||
```
|
||||
|
||||
or:
|
||||
|
||||
```sh
|
||||
make GOOS='linux' GOARCH='arm64'
|
||||
```
|
||||
|
||||
#### <a href="#preparing-releases" id="preparing-releases" name="preparing-releases">Preparing releases</a>
|
||||
|
||||
You'll need [`snapcraft`] to prepare a release build. Once installed, run the
|
||||
following command:
|
||||
|
||||
```sh
|
||||
make build-release CHANNEL='...' VERSION='...'
|
||||
```
|
||||
|
||||
See the [`build-release` target documentation][targ-release].
|
||||
|
||||
#### <a href="#docker-image" id="docker-image" name="docker-image">Docker image</a>
|
||||
|
||||
Run `make build-docker` to build the Docker image locally (the one that we
|
||||
publish to DockerHub). Please note, that we're using [Docker Buildx][buildx] to
|
||||
build our official image.
|
||||
|
||||
You may need to prepare before using these builds:
|
||||
|
||||
* (Linux-only) Install Qemu:
|
||||
|
||||
```sh
|
||||
docker run --rm --privileged multiarch/qemu-user-static --reset -p yes --credential yes
|
||||
```
|
||||
|
||||
* Prepare the builder:
|
||||
|
||||
```sh
|
||||
docker buildx create --name buildx-builder --driver docker-container --use
|
||||
```
|
||||
|
||||
See the [`build-docker` target documentation][targ-docker].
|
||||
|
||||
#### <a href="#debugging-the-frontend" id="debugging-the-frontend" name="debugging-the-frontend">Debugging the frontend</a>
|
||||
|
||||
When you need to debug the frontend without recompiling the production version
|
||||
every time, for example to check how your labels would look on a form, you can
|
||||
run the frontend build a development environment.
|
||||
|
||||
1. In a separate terminal, run:
|
||||
|
||||
```sh
|
||||
( cd ./client/ && env NODE_ENV='development' npm run watch )
|
||||
```
|
||||
|
||||
2. Run your `AdGuardHome` binary with the `--local-frontend` flag, which
|
||||
instructs AdGuard Home to ignore the built-in frontend files and use those
|
||||
from the `./build/` directory.
|
||||
|
||||
3. Now any changes you make in the `./client/` directory should be recompiled
|
||||
and become available on the web UI. Make sure that you disable the browser
|
||||
cache to make sure that you actually get the recompiled version.
|
||||
|
||||
[`snapcraft`]: https://snapcraft.io/
|
||||
[buildx]: https://docs.docker.com/buildx/working-with-buildx/
|
||||
[src-makefile]: https://github.com/AdguardTeam/AdGuardHome/blob/master/Makefile
|
||||
[targ-docker]: https://github.com/AdguardTeam/AdGuardHome/tree/master/scripts#build-dockersh-build-a-multi-architecture-docker-image
|
||||
[targ-release]: https://github.com/AdguardTeam/AdGuardHome/tree/master/scripts#build-releasesh-build-a-release-for-all-platforms
|
||||
|
||||
|
||||
|
||||
## <a href="#contributing" id="contributing" name="contributing">Contributing</a>
|
||||
|
||||
You are welcome to fork this repository, make your changes and [submit a pull
|
||||
request][pr]. Please make sure you follow our [code guidelines][guide] though.
|
||||
|
||||
Please note that we don't expect people to contribute to both UI and backend
|
||||
parts of the program simultaneously. Ideally, the backend part is implemented
|
||||
first, i.e. configuration, API, and the functionality itself. The UI part can
|
||||
be implemented later in a different pull request by a different person.
|
||||
|
||||
[guide]: https://github.com/AdguardTeam/CodeGuidelines/
|
||||
[pr]: https://github.com/AdguardTeam/AdGuardHome/pulls
|
||||
|
||||
|
||||
|
||||
### <a href="#test-unstable-versions" id="test-unstable-versions" name="test-unstable-versions">Test unstable versions</a>
|
||||
|
||||
There are two update channels that you can use:
|
||||
|
||||
* `beta`: beta versions of AdGuard Home. More or less stable versions,
|
||||
usually released every two weeks or more often.
|
||||
|
||||
* `edge`: the newest version of AdGuard Home from the development branch. New
|
||||
updates are pushed to this channel daily.
|
||||
|
||||
There are three options how you can install an unstable version:
|
||||
|
||||
1. [Snap Store]: look for the `beta` and `edge` channels.
|
||||
|
||||
2. [Docker Hub]: look for the `beta` and `edge` tags.
|
||||
|
||||
3. Standalone builds. Use the automated installation script or look for the
|
||||
available builds [on the Wiki][wiki-platf].
|
||||
|
||||
Script to install a beta version:
|
||||
|
||||
```sh
|
||||
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c beta
|
||||
```
|
||||
|
||||
Script to install an edge version:
|
||||
|
||||
```sh
|
||||
curl -s -S -L https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s -- -c edge
|
||||
```
|
||||
[wiki-platf]: https://github.com/AdguardTeam/AdGuardHome/wiki/Platforms
|
||||
|
||||
|
||||
|
||||
### <a href="#reporting-issues" id="reporting-issues" name="reporting-issues">Report issues</a>
|
||||
|
||||
If you run into any problem or have a suggestion, head to [this page][iss] and
|
||||
click on the “New issue” button.
|
||||
|
||||
[iss]: https://github.com/AdguardTeam/AdGuardHome/issues
|
||||
|
||||
|
||||
|
||||
### <a href="#translate" id="translate" name="translate">Help with translations</a>
|
||||
|
||||
If you want to help with AdGuard Home translations, please learn more about
|
||||
translating AdGuard products [in our Knowledge Base][kb-trans]. You can
|
||||
contribute to the [AdGuardHome project on CrowdIn][crowdin].
|
||||
|
||||
[crowdin]: https://crowdin.com/project/adguard-applications/en#/adguard-home
|
||||
[kb-trans]: https://kb.adguard.com/en/general/adguard-translations
|
||||
|
||||
|
||||
|
||||
### <a href="#help-other" id="help-other" name="help-other">Other</a>
|
||||
|
||||
Another way you can contribute is by [looking for issues][iss-help] marked as
|
||||
`help wanted`, asking if the issue is up for grabs, and sending a PR fixing the
|
||||
bug or implementing the feature.
|
||||
|
||||
[iss-help]: https://github.com/AdguardTeam/AdGuardHome/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22
|
||||
|
||||
|
||||
|
||||
## <a href="#uses" id="uses" name="uses">Projects that use AdGuard Home</a>
|
||||
|
||||
<!--
|
||||
TODO(a.garipov): Use reference links.
|
||||
-->
|
||||
|
||||
* [AdGuard Home Remote](https://apps.apple.com/app/apple-store/id1543143740):
|
||||
iOS app by [Joost](https://rocketscience-it.nl/).
|
||||
|
||||
* [Python library](https://github.com/frenck/python-adguardhome) by
|
||||
[@frenck](https://github.com/frenck).
|
||||
|
||||
* [Home Assistant add-on](https://github.com/hassio-addons/addon-adguard-home)
|
||||
by [@frenck](https://github.com/frenck).
|
||||
|
||||
* [OpenWrt LUCI app](https://github.com/kongfl888/luci-app-adguardhome) by
|
||||
[@kongfl888](https://github.com/kongfl888) (originally by
|
||||
[@rufengsuixing](https://github.com/rufengsuixing)).
|
||||
|
||||
* [Prometheus exporter for AdGuard
|
||||
Home](https://github.com/ebrianne/adguard-exporter) by
|
||||
[@ebrianne](https://github.com/ebrianne).
|
||||
|
||||
* [Terminal-based, real-time traffic monitoring and statistics for your AdGuard Home
|
||||
instance](https://github.com/Lissy93/AdGuardian-Term) by
|
||||
[@Lissy93](https://github.com/Lissy93)
|
||||
|
||||
* [AdGuard Home on GLInet
|
||||
routers](https://forum.gl-inet.com/t/adguardhome-on-gl-routers/10664) by
|
||||
[Gl-Inet](https://gl-inet.com/).
|
||||
|
||||
* [Cloudron app](https://git.cloudron.io/cloudron/adguard-home-app) by
|
||||
[@gramakri](https://github.com/gramakri).
|
||||
|
||||
* [Asuswrt-Merlin-AdGuardHome-Installer](https://github.com/jumpsmm7/Asuswrt-Merlin-AdGuardHome-Installer)
|
||||
by [@jumpsmm7](https://github.com/jumpsmm7) aka
|
||||
[@SomeWhereOverTheRainBow](https://www.snbforums.com/members/somewhereovertherainbow.64179/).
|
||||
|
||||
* [Node.js library](https://github.com/Andrea055/AdguardHomeAPI) by
|
||||
[@Andrea055](https://github.com/Andrea055/).
|
||||
|
||||
|
||||
|
||||
## <a href="#acknowledgments" id="acknowledgments" name="acknowledgments">Acknowledgments</a>
|
||||
|
||||
<!--
|
||||
TODO(a.garipov): Use reference links.
|
||||
-->
|
||||
|
||||
This software wouldn't have been possible without:
|
||||
|
||||
* [Go](https://golang.org/dl/) and its libraries:
|
||||
* [gcache](https://github.com/bluele/gcache)
|
||||
* [miekg's dns](https://github.com/miekg/dns)
|
||||
* [go-yaml](https://github.com/go-yaml/yaml)
|
||||
* [service](https://godoc.org/github.com/kardianos/service)
|
||||
* [dnsproxy](https://github.com/AdguardTeam/dnsproxy)
|
||||
* [urlfilter](https://github.com/AdguardTeam/urlfilter)
|
||||
* [Node.js](https://nodejs.org/) and its libraries:
|
||||
* And many more Node.js packages.
|
||||
* [React.js](https://reactjs.org)
|
||||
* [Tabler](https://github.com/tabler/tabler)
|
||||
* [whotracks.me data](https://github.com/cliqz-oss/whotracks.me)
|
||||
|
||||
You might have seen that [CoreDNS] was mentioned here before, but we've stopped
|
||||
using it in AdGuard Home.
|
||||
|
||||
For the full list of all Node.js packages in use, please take a look at
|
||||
[`client/package.json`][src-packagejson] file.
|
||||
|
||||
[CoreDNS]: https://coredns.io
|
||||
[src-packagejson]: https://github.com/AdguardTeam/AdGuardHome/blob/master/client/package.json
|
||||
|
||||
|
||||
|
||||
## <a href="#privacy" id="privacy" name="privacy">Privacy</a>
|
||||
|
||||
Our main idea is that you are the one, who should be in control of your data.
|
||||
So it is only natural, that AdGuard Home does not collect any usage statistics,
|
||||
and does not use any web services unless you configure it to do so. See also
|
||||
the [full privacy policy][privacy] with every bit that *could in theory be sent*
|
||||
by AdGuard Home is available.
|
||||
|
||||
[privacy]: https://adguard.com/en/privacy/home.html
|
||||
@ -1,19 +0,0 @@
|
||||
name: AdGuardHome
|
||||
tags:
|
||||
- 安全
|
||||
title: 自由且开源的,功能强大的网络广告和跟踪器屏蔽DNS服务器
|
||||
description: 自由且开源的,功能强大的网络广告和跟踪器屏蔽DNS服务器
|
||||
additionalProperties:
|
||||
key: adguardhome
|
||||
name: AdGuardHome
|
||||
tags:
|
||||
- Security
|
||||
shortDescZh: 自由且开源的,功能强大的网络广告和跟踪器屏蔽DNS服务器
|
||||
shortDescEn: Free and open source, powerful network-wide ads & trackers blocking DNS server
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://hub.docker.com/r/adguard/adguardhome
|
||||
github: https://github.com/AdguardTeam/AdGuardHome
|
||||
document: https://github.com/AdguardTeam/AdGuardHome/wiki
|
||||
@ -1,13 +0,0 @@
|
||||
CONTAINER_NAME="adguardhome"
|
||||
PLAIN_DNS_PORT="20053"
|
||||
DHCP_PORT1="20067"
|
||||
DHCP_PORT2="20068"
|
||||
HTTP_PORT="23000"
|
||||
PANEL_APP_PORT_HTTP="23001"
|
||||
DOH_PORT="20443"
|
||||
DOT_PORT="853"
|
||||
QUIC_PORT1="20784"
|
||||
QUIC_PORT2="8853"
|
||||
DNS_CRYPT_PORT="5443"
|
||||
WORK_PATH="./data/work"
|
||||
CONFIG_PATH="./data/conf"
|
||||
@ -1,96 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 20053
|
||||
edit: true
|
||||
envKey: PLAIN_DNS_PORT
|
||||
labelEn: Plain DNS port
|
||||
labelZh: 普通DNS端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 20067
|
||||
edit: true
|
||||
envKey: DHCP_PORT1
|
||||
labelEn: DHCP service port 1
|
||||
labelZh: DHCP服务端口1
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 20068
|
||||
edit: true
|
||||
envKey: DHCP_PORT2
|
||||
labelEn: DHCP service port 2
|
||||
labelZh: DHCP服务端口2
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 23000
|
||||
edit: true
|
||||
envKey: HTTP_PORT
|
||||
labelEn: HTTP web port
|
||||
labelZh: HTTP网页端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 23001
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Initial setup web page port
|
||||
labelZh: 初始设置网页端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 20443
|
||||
edit: true
|
||||
envKey: DOH_PORT
|
||||
labelEn: DOH service port
|
||||
labelZh: DOH服务端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 853
|
||||
edit: true
|
||||
envKey: DOT_PORT
|
||||
labelEn: DOT service port
|
||||
labelZh: DOT服务端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 20784
|
||||
edit: true
|
||||
envKey: QUIC_PORT1
|
||||
labelEn: QUIC service port 1
|
||||
labelZh: QUIC服务端口1
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 8853
|
||||
edit: true
|
||||
envKey: QUIC_PORT2
|
||||
labelEn: QUIC service port 2
|
||||
labelZh: QUIC服务端口2
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: 5443
|
||||
edit: true
|
||||
envKey: DNS_CRYPT_PORT
|
||||
labelEn: DNS Crypt service port
|
||||
labelZh: DNS Crypt服务端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data/work
|
||||
edit: true
|
||||
envKey: WORK_PATH
|
||||
labelEn: Work data folder path
|
||||
labelZh: 工作数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/conf
|
||||
edit: true
|
||||
envKey: CONFIG_PATH
|
||||
labelEn: Configuration folder path
|
||||
labelZh: 配置文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,31 +0,0 @@
|
||||
services:
|
||||
adguardhome:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- ${PLAIN_DNS_PORT}:53/tcp
|
||||
- ${PLAIN_DNS_PORT}:53/udp
|
||||
- ${DHCP_PORT1}:67/udp
|
||||
- ${DHCP_PORT2}:68/udp
|
||||
- ${HTTP_PORT}:80/tcp
|
||||
- ${DOH_PORT}:443/tcp
|
||||
- ${DOH_PORT}:443/udp
|
||||
- ${PANEL_APP_PORT_HTTP}:3000/tcp
|
||||
- ${DOT_PORT}:853/tcp
|
||||
- ${QUIC_PORT1}:784/udp
|
||||
- ${DOT_PORT}:853/udp
|
||||
- ${QUIC_PORT2}:8853/udp
|
||||
- ${DNS_CRYPT_PORT}:5443/tcp
|
||||
- ${DNS_CRYPT_PORT}:5443/udp
|
||||
volumes:
|
||||
- ${WORK_PATH}:/opt/adguardhome/work
|
||||
- ${CONFIG_PATH}:/opt/adguardhome/conf
|
||||
image: adguard/adguardhome:latest
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
Before Width: | Height: | Size: 6.2 KiB |
@ -1,4 +0,0 @@
|
||||
CONTAINER_NAME="alist"
|
||||
PANEL_APP_PORT_HTTP="40034"
|
||||
DATA_PATH="./data/data"
|
||||
MOUNT_PATH="./data/mnt"
|
||||
@ -1,24 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40034
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data/data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/mnt
|
||||
edit: true
|
||||
envKey: MOUNT_PATH
|
||||
labelEn: Mount folder path
|
||||
labelZh: 挂载文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,23 +0,0 @@
|
||||
services:
|
||||
alist:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:5244"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/opt/alist/data"
|
||||
- "${MOUNT_PATH}:/mnt/data"
|
||||
environment:
|
||||
- PUID=0
|
||||
- PGID=0
|
||||
- UMASK=022
|
||||
image: xhofe/alist:v3.44.0
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
@ -1,144 +0,0 @@
|
||||
# 使用说明
|
||||
|
||||
- 账户与密码
|
||||
|
||||
查看容器日志,或者容器功能界面找到`alist`的容器,点击终端连接到容器内部, 运行
|
||||
```
|
||||
./alist admin
|
||||
```
|
||||
# 原始相关
|
||||
|
||||
<div align="center">
|
||||
<a href="https://alist.nn.ci"><img height="100px" alt="logo" src="https://cdn.jsdelivr.net/gh/alist-org/logo@main/logo.svg"/></a>
|
||||
<p><em>🗂一个支持多存储的文件列表程序,使用 Gin 和 Solidjs。</em></p>
|
||||
<div>
|
||||
<a href="https://goreportcard.com/report/github.com/alist-org/alist/v3">
|
||||
<img src="https://goreportcard.com/badge/github.com/alist-org/alist/v3" alt="latest version" />
|
||||
</a>
|
||||
<a href="https://github.com/Xhofe/alist/blob/main/LICENSE">
|
||||
<img src="https://img.shields.io/github/license/Xhofe/alist" alt="License" />
|
||||
</a>
|
||||
<a href="https://github.com/Xhofe/alist/actions?query=workflow%3ABuild">
|
||||
<img src="https://img.shields.io/github/actions/workflow/status/Xhofe/alist/build.yml?branch=main" alt="Build status" />
|
||||
</a>
|
||||
<a href="https://github.com/Xhofe/alist/releases">
|
||||
<img src="https://img.shields.io/github/release/Xhofe/alist" alt="latest version" />
|
||||
</a>
|
||||
<a title="Crowdin" target="_blank" href="https://crwd.in/alist">
|
||||
<img src="https://badges.crowdin.net/alist/localized.svg">
|
||||
</a>
|
||||
</div>
|
||||
<div>
|
||||
<a href="https://github.com/Xhofe/alist/discussions">
|
||||
<img src="https://img.shields.io/github/discussions/Xhofe/alist?color=%23ED8936" alt="discussions" />
|
||||
</a>
|
||||
<a href="https://discord.gg/F4ymsH4xv2">
|
||||
<img src="https://img.shields.io/discord/1018870125102895134?logo=discord" alt="discussions" />
|
||||
</a>
|
||||
<a href="https://github.com/Xhofe/alist/releases">
|
||||
<img src="https://img.shields.io/github/downloads/Xhofe/alist/total?color=%239F7AEA&logo=github" alt="Downloads" />
|
||||
</a>
|
||||
<a href="https://hub.docker.com/r/xhofe/alist">
|
||||
<img src="https://img.shields.io/docker/pulls/xhofe/alist?color=%2348BB78&logo=docker&label=pulls" alt="Downloads" />
|
||||
</a>
|
||||
<a href="https://alist.nn.ci/zh/guide/sponsor.html">
|
||||
<img src="https://img.shields.io/badge/%24-sponsor-F87171.svg" alt="sponsor" />
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
---
|
||||
|
||||
[English](./README.md) | 中文 | [Contributing](./CONTRIBUTING.md) | [CODE_OF_CONDUCT](./CODE_OF_CONDUCT.md)
|
||||
|
||||
## 功能
|
||||
|
||||
- [x] 多种存储
|
||||
- [x] 本地存储
|
||||
- [x] [阿里云盘](https://www.aliyundrive.com/)
|
||||
- [x] OneDrive / Sharepoint([国际版](https://www.office.com/), [世纪互联](https://portal.partner.microsoftonline.cn),de,us)
|
||||
- [x] [天翼云盘](https://cloud.189.cn) (个人云, 家庭云)
|
||||
- [x] [GoogleDrive](https://drive.google.com/)
|
||||
- [x] [123云盘](https://www.123pan.com/)
|
||||
- [x] FTP / SFTP
|
||||
- [x] [PikPak](https://www.mypikpak.com/)
|
||||
- [x] [S3](https://aws.amazon.com/cn/s3/)
|
||||
- [x] [Seafile](https://seafile.com/)
|
||||
- [x] [又拍云对象存储](https://www.upyun.com/products/file-storage)
|
||||
- [x] WebDav(支持无API的OneDrive/SharePoint)
|
||||
- [x] Teambition([中国](https://www.teambition.com/ ),[国际](https://us.teambition.com/ ))
|
||||
- [x] [分秒帧](https://www.mediatrack.cn/)
|
||||
- [x] [和彩云](https://yun.139.com/) (个人云, 家庭云)
|
||||
- [x] [Yandex.Disk](https://disk.yandex.com/)
|
||||
- [x] [百度网盘](http://pan.baidu.com/)
|
||||
- [x] [夸克网盘](https://pan.quark.cn)
|
||||
- [x] [迅雷网盘](https://pan.xunlei.com)
|
||||
- [x] [蓝奏云](https://www.lanzou.com/)
|
||||
- [x] [阿里云盘分享](https://www.aliyundrive.com/)
|
||||
- [x] [谷歌相册](https://photos.google.com/)
|
||||
- [x] [Mega.nz](https://mega.nz)
|
||||
- [x] [一刻相册](https://photo.baidu.com/)
|
||||
- [x] SMB
|
||||
- [x] [115](https://115.com/)
|
||||
- [X] Cloudreve
|
||||
- [x] 部署方便,开箱即用
|
||||
- [x] 文件预览(PDF、markdown、代码、纯文本……)
|
||||
- [x] 画廊模式下的图像预览
|
||||
- [x] 视频和音频预览,支持歌词和字幕
|
||||
- [x] Office 文档预览(docx、pptx、xlsx、...)
|
||||
- [x] `README.md` 预览渲染
|
||||
- [x] 文件永久链接复制和直接文件下载
|
||||
- [x] 黑暗模式
|
||||
- [x] 国际化
|
||||
- [x] 受保护的路由(密码保护和身份验证)
|
||||
- [x] WebDav (具体见 https://alist.nn.ci/zh/guide/webdav.html)
|
||||
- [x] [Docker 部署](https://hub.docker.com/r/xhofe/alist)
|
||||
- [x] Cloudflare workers 中转
|
||||
- [x] 文件/文件夹打包下载
|
||||
- [x] 网页上传(可以允许访客上传),删除,新建文件夹,重命名,移动,复制
|
||||
- [x] 离线下载
|
||||
- [x] 跨存储复制文件
|
||||
|
||||
## 文档
|
||||
|
||||
<https://alist.nn.ci/zh/>
|
||||
|
||||
## Demo
|
||||
|
||||
<https://al.nn.ci>
|
||||
|
||||
## 讨论
|
||||
|
||||
一般问题请到[讨论论坛](https://github.com/Xhofe/alist/discussions) ,**issue仅针对错误报告和功能请求。**
|
||||
|
||||
## 赞助
|
||||
|
||||
AList 是一个开源软件,如果你碰巧喜欢这个项目,并希望我继续下去,请考虑赞助我或提供一个单一的捐款!感谢所有的爱和支持:https://alist.nn.ci/zh/guide/sponsor.html
|
||||
|
||||
### 特别赞助
|
||||
|
||||
- [找资源 - 阿里云盘资源搜索引擎](https://zhaoziyuan.la/)
|
||||
- [KinhDown 百度云盘不限速下载!永久免费!已稳定运行3年!非常可靠!Q群 -> 786799372](https://kinhdown.com)
|
||||
- [JetBrains: Essential tools for software developers and teams](https://www.jetbrains.com/)
|
||||
|
||||
## 贡献者
|
||||
|
||||
Thanks goes to these wonderful people:
|
||||
|
||||
[](https://github.com/alist-org/alist/graphs/contributors)
|
||||
|
||||
## 许可
|
||||
|
||||
`AList` 是在 AGPL-3.0 许可下许可的开源软件。
|
||||
|
||||
## 免责声明
|
||||
- 本程序为免费开源项目,旨在分享网盘文件,方便下载以及学习golang,使用时请遵守相关法律法规,请勿滥用;
|
||||
- 本程序通过调用官方sdk/接口实现,无破坏官方接口行为;
|
||||
- 本程序仅做302重定向/流量转发,不拦截、存储、篡改任何用户数据;
|
||||
- 在使用本程序之前,你应了解并承担相应的风险,包括但不限于账号被ban,下载限速等,与本程序无关;
|
||||
- 如有侵权,请通过[邮件](mailto:i@nn.ci)与我联系,会及时处理。
|
||||
|
||||
---
|
||||
|
||||
> [@博客](https://nn.ci/) · [@GitHub](https://github.com/Xhofe) · [@Telegram群](https://t.me/alist_chat) · [@Discord](https://discord.gg/F4ymsH4xv2)
|
||||
|
||||
@ -1,24 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40034
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data/data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/mnt
|
||||
edit: true
|
||||
envKey: MOUNT_PATH
|
||||
labelEn: Mount folder path
|
||||
labelZh: 挂载文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,23 +0,0 @@
|
||||
services:
|
||||
alist:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:5244"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/opt/alist/data"
|
||||
- "${MOUNT_PATH}:/mnt/data"
|
||||
environment:
|
||||
- PUID=0
|
||||
- PGID=0
|
||||
- UMASK=022
|
||||
image: xhofe/alist-aria2:latest
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
@ -1,4 +0,0 @@
|
||||
CONTAINER_NAME="alist"
|
||||
PANEL_APP_PORT_HTTP="40034"
|
||||
DATA_PATH="./data/data"
|
||||
MOUNT_PATH="./data/mnt"
|
||||
@ -1,19 +0,0 @@
|
||||
name: Alist
|
||||
tags:
|
||||
- 工具
|
||||
title: 一个支持多存储的文件列表程序
|
||||
description: 一个支持多存储的文件列表程序
|
||||
additionalProperties:
|
||||
key: alist
|
||||
name: Alist
|
||||
tags:
|
||||
- Tool
|
||||
shortDescZh: 一个支持多存储的文件列表程序
|
||||
shortDescEn: A file list program that supports multiple storage
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://github.com/alist-org/alist
|
||||
github: https://github.com/alist-org/alist
|
||||
document: https://alist.nn.ci/zh/
|
||||
@ -1,4 +0,0 @@
|
||||
CONTAINER_NAME="alist"
|
||||
PANEL_APP_PORT_HTTP="40034"
|
||||
DATA_PATH="./data/data"
|
||||
MOUNT_PATH="./data/mnt"
|
||||
@ -1,24 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40034
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data/data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/mnt
|
||||
edit: true
|
||||
envKey: MOUNT_PATH
|
||||
labelEn: Mount folder path
|
||||
labelZh: 挂载文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,23 +0,0 @@
|
||||
services:
|
||||
alist:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:5244"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/opt/alist/data"
|
||||
- "${MOUNT_PATH}:/mnt/data"
|
||||
environment:
|
||||
- PUID=0
|
||||
- PGID=0
|
||||
- UMASK=022
|
||||
image: xhofe/alist:latest
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
||||
|
Before Width: | Height: | Size: 3.6 KiB |
@ -1,3 +0,0 @@
|
||||
CONTAINER_NAME="answer"
|
||||
PANEL_APP_PORT_HTTP="40065"
|
||||
DATA_PATH="./data"
|
||||
@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40065
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,17 +0,0 @@
|
||||
services:
|
||||
answer:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:80"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/data"
|
||||
image: answerdev/answer:1.2.0
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,39 +0,0 @@
|
||||
<a href="https://answer.dev">
|
||||
<img alt="logo" src="https://github.com/answerdev/answer/raw/main/docs/img/logo.svg" height="99px">
|
||||
</a>
|
||||
|
||||
# Answer - 构建问答社区
|
||||
|
||||
一款问答形式的知识社区开源软件,你可以使用它快速建立你的问答社区,用于产品技术支持、客户支持、用户交流等。
|
||||
|
||||
了解更多关于该项目的内容,请访问 [answer.dev](https://answer.dev).
|
||||
|
||||
[](https://github.com/answerdev/answer/blob/main/LICENSE)
|
||||
[](https://golang.org/)
|
||||
[](https://reactjs.org/)
|
||||
[](https://goreportcard.com/report/github.com/answerdev/answer)
|
||||
[](https://discord.gg/Jm7Y4cbUej)
|
||||
|
||||
## 截图
|
||||
|
||||

|
||||
|
||||
## 快速开始
|
||||
|
||||
### 使用 docker 快速搭建
|
||||
|
||||
```bash
|
||||
docker run -d -p 9080:80 -v answer-data:/data --name answer answerdev/answer:latest
|
||||
```
|
||||
|
||||
其他安装配置细节请参考 [Installation](https://answer.dev/docs/installation)
|
||||
|
||||
## 贡献
|
||||
|
||||
我们随时欢迎你的贡献!
|
||||
|
||||
参考 [CONTRIBUTING](https://answer.dev/docs/development/contributing/) 开始贡献。
|
||||
|
||||
## License
|
||||
|
||||
[Apache License 2.0](https://github.com/answerdev/answer/blob/main/LICENSE)
|
||||
@ -1,19 +0,0 @@
|
||||
name: Answer
|
||||
tags:
|
||||
- 建站
|
||||
title: 一款适合任何团队的问答平台软件
|
||||
description: 一款适合任何团队的问答平台软件
|
||||
additionalProperties:
|
||||
key: answer
|
||||
name: Answer
|
||||
tags:
|
||||
- Website
|
||||
shortDescZh: 一款适合任何团队的问答平台软件
|
||||
shortDescEn: A Q&A platform software for teams at any scales
|
||||
type: website
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://answer.dev/
|
||||
github: https://github.com/answerdev/answer
|
||||
document: https://answer.dev/zh-CN/docs
|
||||
@ -1,3 +0,0 @@
|
||||
CONTAINER_NAME="answer"
|
||||
PANEL_APP_PORT_HTTP="40065"
|
||||
DATA_PATH="./data"
|
||||
@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40065
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,17 +0,0 @@
|
||||
services:
|
||||
answer:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:80"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/data"
|
||||
image: answerdev/answer:latest
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
Before Width: | Height: | Size: 3.3 KiB |
@ -1,3 +0,0 @@
|
||||
CONTAINER_NAME="artalk"
|
||||
PANEL_APP_PORT_HTTP="40159"
|
||||
DATA_PATH="./data"
|
||||
@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40159
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,17 +0,0 @@
|
||||
services:
|
||||
artalk:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:23366"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/data"
|
||||
image: artalk/artalk-go:2.9.1
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,82 +0,0 @@
|
||||
# 使用说明
|
||||
## Artalk 设置账号密码
|
||||
|
||||
以下两种方式相同。
|
||||
|
||||
### 1. 宿主机
|
||||
```
|
||||
docker exec -it artalk artalk admin
|
||||
```
|
||||
|
||||
- 修改`artalk`改为容器名
|
||||
- 如 `1Panel-localartalk-tYWg`
|
||||
- 更改后
|
||||
```
|
||||
docker exec -it 1Panel-localartalk-tYWg artalk admin
|
||||
```
|
||||
|
||||
### 2. 面板执行
|
||||
|
||||
面板`容器`界面,连接容器终端,执行以下命令
|
||||
|
||||
```
|
||||
artalk admin
|
||||
```
|
||||
|
||||
# 原始相关
|
||||
<p align="center">
|
||||
<img src="https://user-images.githubusercontent.com/22412567/171680920-6e74b77c-c565-487b-bff1-4f94976ecbe7.png" alt="Artalk" width="100%">
|
||||
</p>
|
||||
|
||||
# Artalk
|
||||
|
||||
[](https://www.npmjs.com/package/artalk)
|
||||
[](https://www.npmjs.com/package/artalk)
|
||||
[](https://bundlephobia.com/package/artalk)
|
||||
[](https://hub.docker.com/r/artalk/artalk-go)
|
||||
[](https://circleci.com/gh/ArtalkJS/Artalk/tree/master)
|
||||
|
||||
> 🌌 Golang 自托管评论系统
|
||||
|
||||
[English](https://github.com/ArtalkJS/Artalk/blob/master/README.en.md) / [官方文档](https://artalk.js.org) / [最新版本](https://github.com/ArtalkJS/Artalk/releases)
|
||||
|
||||
---
|
||||
|
||||
- 🍃 轻量 (~30kB)
|
||||
- 👨👧👦 安全 (自托管)
|
||||
- 🐳 易上手 (防脱发)
|
||||
- 🍱 Golang 后端 (快速 / 跨平台)
|
||||
- 🌊 Vanilla × TypeScript × Vite (纯天然 / 无依赖)
|
||||
|
||||
## 特性
|
||||
|
||||
- 侧 边 栏 :支持多站点集中化管理
|
||||
- 通知中心:红点的标记 / 提及列表
|
||||
- 身份验证:徽标自定义 / 密码验证
|
||||
- 评论审核:反垃圾检测 / 频率限制
|
||||
- 表情符号:插入表情包 / 快速导入
|
||||
- 邮件提醒:模版自定义 / 多管理员
|
||||
- 站点隔离:管理员分配 / 多个站点
|
||||
- 页面管理:标题可显示 / 快速跳转
|
||||
- 图片上传:上传到本地 / 多种图床
|
||||
- 多元推送:支持 钉钉 飞书 TG
|
||||
- 无限层级:可切换为平铺模式
|
||||
- 评论投票:赞同还是反对评论
|
||||
- 评论排序:按热度或时间排序
|
||||
- 评论置顶:重要消息置顶显示
|
||||
- 只看作者:仅显示作者的评论
|
||||
- 说说模式:仅自己可发布评论
|
||||
- 异步处理:发送评论无需等待
|
||||
- 滚动加载:评论内容分页处置
|
||||
- 自动保存:用户输入防丢功能
|
||||
- 自动填充:用户链接自动填充
|
||||
- 实时预览:评论内容实时预览
|
||||
- 夜间模式:防止眼部疾病伤害
|
||||
- 评论折叠:这个不打算给你康
|
||||
- 数据备份:防止评论数据丢失
|
||||
- 数据迁移:快速切换评论系统
|
||||
- Markdown:默认支持 MD 语法
|
||||
- 支持 Latex:提供集成 Katex 插件
|
||||
- 使用 [Vite](https://github.com/vitejs/vite):属于开发者的极致体验
|
||||
|
||||
更多内容请查看:[“**介绍文档**”](https://artalk.js.org/guide/intro.html)
|
||||
@ -1,19 +0,0 @@
|
||||
name: Artalk
|
||||
tags:
|
||||
- 工具
|
||||
title: 一款简洁的自托管评论系统
|
||||
description: 一款简洁的自托管评论系统
|
||||
additionalProperties:
|
||||
key: artalk
|
||||
name: Artalk
|
||||
tags:
|
||||
- Tool
|
||||
shortDescZh: 一款简洁的自托管评论系统
|
||||
shortDescEn: A concise self hosted comment system
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://artalk.js.org
|
||||
github: https://github.com/ArtalkJS/Artalk
|
||||
document: https://artalk.js.org/guide/intro.html
|
||||
@ -1,3 +0,0 @@
|
||||
CONTAINER_NAME="artalk"
|
||||
PANEL_APP_PORT_HTTP="40159"
|
||||
DATA_PATH="./data"
|
||||
@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40159
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,17 +0,0 @@
|
||||
services:
|
||||
artalk:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:23366"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/data"
|
||||
image: artalk/artalk-go:latest
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
Before Width: | Height: | Size: 5.9 KiB |
@ -1,6 +0,0 @@
|
||||
CONTAINER_NAME="audiobookshelf"
|
||||
DATA_PATH1="./data/audiobooks"
|
||||
DATA_PATH2="./data/podcasts"
|
||||
DATA_PATH3="./data/metadata"
|
||||
DATA_PATH="./data/config"
|
||||
PANEL_APP_PORT_HTTP="40096"
|
||||
@ -1,38 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40096
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data/config
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/audiobooks
|
||||
edit: true
|
||||
envKey: DATA_PATH1
|
||||
labelEn: audiobooks folder path
|
||||
labelZh: audiobooks 文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/podcasts
|
||||
edit: true
|
||||
envKey: DATA_PATH2
|
||||
labelEn: podcasts folder path
|
||||
labelZh: podcasts 文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/metadata
|
||||
edit: true
|
||||
envKey: DATA_PATH3
|
||||
labelEn: metadata folder path
|
||||
labelZh: metadata 文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,20 +0,0 @@
|
||||
services:
|
||||
audiobookshelf:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:80"
|
||||
volumes:
|
||||
- "${DATA_PATH1}:/audiobooks"
|
||||
- "${DATA_PATH2}:/podcasts"
|
||||
- "${DATA_PATH}:/config"
|
||||
- "${DATA_PATH3}:/metadata"
|
||||
image: advplyr/audiobookshelf:2.25.1
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,308 +0,0 @@
|
||||
<br />
|
||||
<div align="center">
|
||||
<img alt="Audiobookshelf Banner" src="https://github.com/advplyr/audiobookshelf/raw/master/images/banner.svg" width="600">
|
||||
|
||||
<p align="center">
|
||||
<br />
|
||||
<a href="https://audiobookshelf.org/docs">Documentation</a>
|
||||
·
|
||||
<a href="https://audiobookshelf.org/guides">User Guides</a>
|
||||
·
|
||||
<a href="https://audiobookshelf.org/support">Support</a>
|
||||
</p>
|
||||
</div>
|
||||
|
||||
# About
|
||||
|
||||
Audiobookshelf is a self-hosted audiobook and podcast server.
|
||||
|
||||
### Features
|
||||
|
||||
* Fully **open-source**, including the [android & iOS app](https://github.com/advplyr/audiobookshelf-app) *(in beta)*
|
||||
* Stream all audio formats on the fly
|
||||
* Search and add podcasts to download episodes w/ auto-download
|
||||
* Multi-user support w/ custom permissions
|
||||
* Keeps progress per user and syncs across devices
|
||||
* Auto-detects library updates, no need to re-scan
|
||||
* Upload books and podcasts w/ bulk upload drag and drop folders
|
||||
* Backup your metadata + automated daily backups
|
||||
* Progressive Web App (PWA)
|
||||
* Chromecast support on the web app and android app
|
||||
* Fetch metadata and cover art from several sources
|
||||
* Chapter editor and chapter lookup (using [Audnexus API](https://audnex.us/))
|
||||
* Merge your audio files into a single m4b
|
||||
* Embed metadata and cover image into your audio files (using [Tone](https://github.com/sandreas/tone))
|
||||
* Basic ebook support and ereader
|
||||
* Epub, pdf, cbr, cbz
|
||||
* Send ebook to device (i.e. Kindle)
|
||||
* Open RSS feeds for podcasts and audiobooks
|
||||
|
||||
Is there a feature you are looking for? [Suggest it](https://github.com/advplyr/audiobookshelf/issues/new/choose)
|
||||
|
||||
Join us on [Discord](https://discord.gg/pJsjuNCKRq) or [Matrix](https://matrix.to/#/#audiobookshelf:matrix.org)
|
||||
|
||||
### Android App (beta)
|
||||
Try it out on the [Google Play Store](https://play.google.com/store/apps/details?id=com.audiobookshelf.app)
|
||||
|
||||
### iOS App (beta)
|
||||
Available using Test Flight: https://testflight.apple.com/join/wiic7QIW - [Join the discussion](https://github.com/advplyr/audiobookshelf-app/discussions/60)
|
||||
|
||||
### Build your own tools & clients
|
||||
Check out the [API documentation](https://api.audiobookshelf.org/)
|
||||
|
||||
<br />
|
||||
|
||||
<img alt="Library Screenshot" src="https://github.com/advplyr/audiobookshelf/raw/master/images/DemoLibrary.png" />
|
||||
|
||||
<br />
|
||||
|
||||
# Organizing your audiobooks
|
||||
|
||||
#### Directory structure and folder names are important to Audiobookshelf!
|
||||
|
||||
See [documentation](https://audiobookshelf.org/docs#book-directory-structure) for supported directory structure, folder naming conventions, and audio file metadata usage.
|
||||
|
||||
<br />
|
||||
|
||||
# Installation
|
||||
|
||||
See [install docs](https://www.audiobookshelf.org/docs)
|
||||
|
||||
<br />
|
||||
|
||||
# Reverse Proxy Set Up
|
||||
|
||||
#### Important! Audiobookshelf requires a websocket connection.
|
||||
|
||||
#### Note: Subfolder paths (e.g. /audiobooks) are not supported yet. See [issue](https://github.com/advplyr/audiobookshelf/issues/385)
|
||||
|
||||
### NGINX Proxy Manager
|
||||
|
||||
Toggle websockets support.
|
||||
|
||||
<img alt="NGINX Web socket" src="https://user-images.githubusercontent.com/67830747/153679106-b2a7f5b9-0702-48c6-9740-b26b401986e9.png" />
|
||||
|
||||
### NGINX Reverse Proxy
|
||||
|
||||
Add this to the site config file on your nginx server after you have changed the relevant parts in the <> brackets, and inserted your certificate paths.
|
||||
|
||||
|
||||
```bash
|
||||
server
|
||||
{
|
||||
listen 443 ssl;
|
||||
server_name <sub>.<domain>.<tld>;
|
||||
|
||||
access_log /var/log/nginx/audiobookshelf.access.log;
|
||||
error_log /var/log/nginx/audiobookshelf.error.log;
|
||||
|
||||
ssl_certificate /path/to/certificate;
|
||||
ssl_certificate_key /path/to/key;
|
||||
|
||||
location / {
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header Upgrade $http_upgrade;
|
||||
proxy_set_header Connection "upgrade";
|
||||
|
||||
proxy_http_version 1.1;
|
||||
|
||||
proxy_pass http://<URL_to_forward_to>;
|
||||
proxy_redirect http:// https://;
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Apache Reverse Proxy
|
||||
|
||||
Add this to the site config file on your Apache server after you have changed the relevant parts in the <> brackets, and inserted your certificate paths.
|
||||
|
||||
For this to work you must enable at least the following mods using `a2enmod`:
|
||||
- `ssl`
|
||||
- `proxy`
|
||||
- `proxy_http`
|
||||
- `proxy_balancer`
|
||||
- `proxy_wstunnel`
|
||||
- `rewrite`
|
||||
|
||||
```bash
|
||||
<IfModule mod_ssl.c>
|
||||
<VirtualHost *:443>
|
||||
ServerName <sub>.<domain>.<tld>
|
||||
|
||||
ErrorLog ${APACHE_LOG_DIR}/error.log
|
||||
CustomLog ${APACHE_LOG_DIR}/access.log combined
|
||||
|
||||
ProxyPreserveHost On
|
||||
ProxyPass / http://localhost:<audiobookshelf_port>/
|
||||
RewriteEngine on
|
||||
RewriteCond %{HTTP:Upgrade} websocket [NC]
|
||||
RewriteCond %{HTTP:Connection} upgrade [NC]
|
||||
RewriteRule ^/?(.*) "ws://localhost:<audiobookshelf_port>/$1" [P,L]
|
||||
|
||||
# unless you're doing something special this should be generated by a
|
||||
# tool like certbot by let's encrypt
|
||||
SSLCertificateFile /path/to/cert/file
|
||||
SSLCertificateKeyFile /path/to/key/file
|
||||
</VirtualHost>
|
||||
</IfModule>
|
||||
```
|
||||
|
||||
Some SSL certificates like those signed by Let's Encrypt require ACME validation. To allow Let's Encrypt to write and confirm
|
||||
the ACME challenge, edit your VirtualHost definition to prevent proxying traffic that queries `/.well-known` and instead
|
||||
serve that directly:
|
||||
```bash
|
||||
<VirtualHost *:443>
|
||||
# ...
|
||||
|
||||
# create the directory structure /.well-known/acme-challenges
|
||||
# within DocumentRoot and give the HTTP user recursive write
|
||||
# access to it.
|
||||
DocumentRoot /path/to/local/directory
|
||||
|
||||
ProxyPreserveHost On
|
||||
ProxyPass /.well-known !
|
||||
ProxyPass / http://localhost:<audiobookshelf_port>/
|
||||
|
||||
# ...
|
||||
</VirtualHost>
|
||||
```
|
||||
|
||||
|
||||
### SWAG Reverse Proxy
|
||||
|
||||
[See LinuxServer.io config sample](https://github.com/linuxserver/reverse-proxy-confs/blob/master/audiobookshelf.subdomain.conf.sample)
|
||||
|
||||
### Synology Reverse Proxy
|
||||
|
||||
1. Open Control Panel > Application Portal
|
||||
2. Change to the Reverse Proxy tab
|
||||
3. Select the proxy rule for which you want to enable Websockets and click on Edit
|
||||
4. Change to the "Custom Header" tab
|
||||
5. Click Create > WebSocket
|
||||
6. Click Save
|
||||
|
||||
[from @silentArtifact](https://github.com/advplyr/audiobookshelf/issues/241#issuecomment-1036732329)
|
||||
|
||||
### [Traefik Reverse Proxy](https://doc.traefik.io/traefik/)
|
||||
|
||||
Middleware relating to CORS will cause the app to report Unknown Error when logging in. To prevent this don't apply any of the following headers to the router for this site:
|
||||
|
||||
<ul>
|
||||
<li>accessControlAllowMethods</li>
|
||||
<li>accessControlAllowOriginList</li>
|
||||
<li>accessControlMaxAge</li>
|
||||
</ul>
|
||||
|
||||
From [@Dondochaka](https://discord.com/channels/942908292873723984/942914154254176257/945074590374318170) and [@BeastleeUK](https://discord.com/channels/942908292873723984/942914154254176257/970366039294611506)
|
||||
<br />
|
||||
|
||||
### Example Caddyfile - [Caddy Reverse Proxy](https://caddyserver.com/docs/caddyfile/directives/reverse_proxy)
|
||||
|
||||
```
|
||||
subdomain.domain.com {
|
||||
encode gzip zstd
|
||||
reverse_proxy <LOCAL_IP>:<PORT>
|
||||
}
|
||||
```
|
||||
|
||||
|
||||
# Run from source
|
||||
|
||||
# Contributing
|
||||
|
||||
This application is built using [NodeJs](https://nodejs.org/).
|
||||
|
||||
### Dev Container Setup
|
||||
The easiest way to begin developing this project is to use a dev container. An introduction to dev containers in VSCode can be found [here](https://code.visualstudio.com/docs/devcontainers/containers).
|
||||
|
||||
Required Software:
|
||||
* [Docker Desktop](https://www.docker.com/products/docker-desktop/)
|
||||
* [VSCode](https://code.visualstudio.com/download)
|
||||
|
||||
*Note, it is possible to use other container software than Docker and IDEs other than VSCode. However, this setup is more complicated and not covered here.*
|
||||
|
||||
<div>
|
||||
<details>
|
||||
<summary>Install the required software on Windows with <a href=(https://docs.microsoft.com/en-us/windows/package-manager/winget/#production-recommended)>winget</a></summary>
|
||||
|
||||
<p>
|
||||
Note: This requires a PowerShell prompt with winget installed. You should be able to copy and paste the code block to install. If you use an elevated PowerShell prompt, UAC will not pop up during the installs.
|
||||
|
||||
```PowerShell
|
||||
winget install -e --id Docker.DockerDesktop; `
|
||||
winget install -e --id Microsoft.VisualStudioCode
|
||||
```
|
||||
|
||||
</p>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
<div>
|
||||
<details>
|
||||
<summary>Install the required software on MacOS with <a href=(https://snapcraft.io/)>homebrew</a></summary>
|
||||
|
||||
<p>
|
||||
|
||||
```sh
|
||||
brew install --cask docker visual-studio-code
|
||||
```
|
||||
|
||||
</p>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
<div style="padding-bottom: 1em">
|
||||
<details>
|
||||
<summary>Install the required software on Linux with <a href=(https://brew.sh/)>snap</a></summary>
|
||||
|
||||
<p>
|
||||
|
||||
```sh
|
||||
sudo snap install docker; \
|
||||
sudo snap install code --classic
|
||||
```
|
||||
|
||||
</p>
|
||||
</details>
|
||||
</div>
|
||||
|
||||
After installing these packages, you can now install the [Remote Development](https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.vscode-remote-extensionpack) extension for VSCode. After installing this extension open the command pallet (`ctrl+shift+p` or `cmd+shift+p`) and select the command `>Dev Containers: Rebuild and Reopen in Container`. This will cause the development environment container to be built and launched.
|
||||
|
||||
You are now ready to start development!
|
||||
|
||||
### Manual Environment Setup
|
||||
|
||||
If you don't want to use the dev container, you can still develop this project. First, you will need to install [NodeJs](https://nodejs.org/) (version 16) and [FFmpeg](https://ffmpeg.org/).
|
||||
|
||||
Next you will need to create a `dev.js` file in the project's root directory. This contains configuration information and paths unique to your development environment. You can find an example of this file in `.devcontainer/dev.js`.
|
||||
|
||||
You are now ready to build the client:
|
||||
|
||||
```sh
|
||||
npm ci
|
||||
cd client
|
||||
npm ci
|
||||
npm run generate
|
||||
cd ..
|
||||
```
|
||||
|
||||
### Development Commands
|
||||
|
||||
After setting up your development environment, either using the dev container or using your own custom environment, the following commands will help you run the server and client.
|
||||
|
||||
To run the server, you can use the command `npm run dev`. This will use the client that was built when you ran `npm run generate` in the client directory or when you started the dev container. If you make changes to the server, you will need to restart the server. If you make changes to the client, you will need to run the command `(cd client; npm run generate)` and then restart the server. By default the client runs at `localhost:3333`, though the port can be configured in `dev.js`.
|
||||
|
||||
You can also build a version of the client that supports live reloading. To do this, start the server, then run the command `(cd client; npm run dev)`. This will run a separate instance of the client at `localhost:3000` that will be automatically updated as you make changes to the client.
|
||||
|
||||
If you are using VSCode, this project includes a couple of pre-defined targets to speed up this process. First, if you build the project (`ctrl+shift+b` or `cmd+shift+b`) it will automatically generate the client. Next, there are debug commands for running the server and client. You can view these targets using the debug panel (bring it up with (`ctrl+shift+d` or `cmd+shift+d`):
|
||||
|
||||
* `Debug server`—Run the server.
|
||||
* `Debug client (nuxt)`—Run the client with live reload.
|
||||
* `Debug server and client (nuxt)`—Runs both the preceding two debug targets.
|
||||
|
||||
|
||||
# How to Support
|
||||
|
||||
[See the incomplete "How to Support" page](https://www.audiobookshelf.org/support)
|
||||
@ -1,19 +0,0 @@
|
||||
name: Audiobookshelf
|
||||
tags:
|
||||
- 多媒体
|
||||
type: 工具
|
||||
description: 一个自托管有声读物和播客服务器
|
||||
additionalProperties:
|
||||
key: audiobookshelf
|
||||
name: Audiobookshelf
|
||||
tags:
|
||||
- Media
|
||||
shortDescZh: 一个自托管有声读物和播客服务器
|
||||
shortDescEn: A Self-hosted audiobook and podcast server
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://www.audiobookshelf.org/
|
||||
github: https://github.com/advplyr/audiobookshelf
|
||||
document: https://www.audiobookshelf.org/docs
|
||||
@ -1,6 +0,0 @@
|
||||
CONTAINER_NAME="audiobookshelf"
|
||||
DATA_PATH1="./data/audiobooks"
|
||||
DATA_PATH2="./data/podcasts"
|
||||
DATA_PATH3="./data/metadata"
|
||||
DATA_PATH="./data/config"
|
||||
PANEL_APP_PORT_HTTP="40096"
|
||||
@ -1,38 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40096
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data/config
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/audiobooks
|
||||
edit: true
|
||||
envKey: DATA_PATH1
|
||||
labelEn: audiobooks folder path
|
||||
labelZh: audiobooks 文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/podcasts
|
||||
edit: true
|
||||
envKey: DATA_PATH2
|
||||
labelEn: podcasts folder path
|
||||
labelZh: podcasts 文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: ./data/metadata
|
||||
edit: true
|
||||
envKey: DATA_PATH3
|
||||
labelEn: metadata folder path
|
||||
labelZh: metadata 文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,20 +0,0 @@
|
||||
services:
|
||||
audiobookshelf:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:80"
|
||||
volumes:
|
||||
- "${DATA_PATH1}:/audiobooks"
|
||||
- "${DATA_PATH2}:/podcasts"
|
||||
- "${DATA_PATH}:/config"
|
||||
- "${DATA_PATH3}:/metadata"
|
||||
image: advplyr/audiobookshelf:latest
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
Before Width: | Height: | Size: 3.7 KiB |
@ -1,3 +0,0 @@
|
||||
CONTAINER_NAME="beszel"
|
||||
DATA_PATH="./data"
|
||||
PANEL_APP_PORT_HTTP=40331
|
||||
@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "40331"
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "./data"
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data Path
|
||||
labelZh: 数据路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,17 +0,0 @@
|
||||
services:
|
||||
beszel:
|
||||
image: "henrygd/beszel:0.11.1"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:8090"
|
||||
volumes:
|
||||
- ${DATA_PATH}:/beszel_data
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,14 +0,0 @@
|
||||
# Beszel
|
||||
|
||||
Beszel 是一个轻量级的服务器资源监控中心,提供历史数据、Docker 容器统计和警报功能。
|
||||
|
||||
## 特性
|
||||
|
||||
- **轻量级**:比其他主流解决方案更小巧,资源消耗更低。
|
||||
- **简单**:易于设置,无需公开暴露于互联网。
|
||||
- **Docker 统计**:跟踪每个容器的 CPU、内存和网络使用历史。
|
||||
- **警报功能**:支持针对 CPU、内存、磁盘、带宽、温度和系统状态的可配置警报。
|
||||
- **多用户支持**:每个用户可以管理自己的系统,管理员可以跨用户共享系统。
|
||||
- **OAuth / OIDC 支持**:支持多个 OAuth2 提供商,密码认证可以禁用。
|
||||
- **自动备份**:可以将数据保存到本地磁盘或 S3 兼容的存储,并支持恢复。
|
||||
- **REST API**:通过 API 使用或更新数据,方便集成到自定义脚本和应用程序中。
|
||||
@ -1,19 +0,0 @@
|
||||
name: Beszel
|
||||
tags:
|
||||
- 实用工具
|
||||
title: 一个轻量级服务器资源监控工具
|
||||
description: 一个轻量级服务器资源监控工具
|
||||
additionalProperties:
|
||||
key: beszel
|
||||
name: Beszel
|
||||
tags:
|
||||
- Tool
|
||||
shortDescZh: 一个轻量级服务器资源监控工具
|
||||
shortDescEn: A lightweight server resource monitoring hub
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://github.com/henrygd/beszel
|
||||
github: https://github.com/henrygd/beszel
|
||||
document: https://github.com/henrygd/beszel
|
||||
@ -1,3 +0,0 @@
|
||||
CONTAINER_NAME="beszel"
|
||||
DATA_PATH="./data"
|
||||
PANEL_APP_PORT_HTTP=40331
|
||||
@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "40331"
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "./data"
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data Path
|
||||
labelZh: 数据路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,17 +0,0 @@
|
||||
services:
|
||||
beszel:
|
||||
image: "henrygd/beszel:latest"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:8090"
|
||||
volumes:
|
||||
- ${DATA_PATH}:/beszel_data
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
Before Width: | Height: | Size: 1.1 KiB |
@ -1,3 +0,0 @@
|
||||
CONTAINER_NAME="bililive-go"
|
||||
PANEL_APP_PORT_HTTP="40079"
|
||||
DATA_PATH="./data"
|
||||
@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40079
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,17 +0,0 @@
|
||||
services:
|
||||
bililive-go:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:8080"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/srv/bililive"
|
||||
image: chigusa/bililive-go:v0.7.34
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,209 +0,0 @@
|
||||
# Bililive-go
|
||||
[](https://github.com/hr3lxphr6j/bililive-go/actions/workflows/tests.yaml)
|
||||
[](https://goreportcard.com/report/github.com/hr3lxphr6j/bililive-go)
|
||||
[](https://github.com/hr3lxphr6j/bililive-go/releases/latest)
|
||||
[](https://hub.docker.com/r/chigusa/bililive-go/)
|
||||
[](https://space.bilibili.com/18578203/)
|
||||
|
||||
Bililive-go是一个支持多种直播平台的直播录制工具
|
||||
|
||||

|
||||
|
||||
## 支持网站
|
||||
|
||||
<table>
|
||||
<tr align="center">
|
||||
<th>站点</th>
|
||||
<th>url</th>
|
||||
<th>支持情况</th>
|
||||
<th>cookie</th>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>Acfun直播</td>
|
||||
<td>live.acfun.cn</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>哔哩哔哩直播</td>
|
||||
<td>live.bilibili.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td>滋瓷</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>战旗直播</td>
|
||||
<td>www.zhanqi.tv</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>斗鱼直播</td>
|
||||
<td>www.douyu.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>火猫直播</td>
|
||||
<td>www.huomao.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>龙珠直播</td>
|
||||
<td>longzhu.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>虎牙直播</td>
|
||||
<td>www.huya.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>CC直播</td>
|
||||
<td>cc.163.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>一直播</td>
|
||||
<td>www.yizhibo.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>twitch</td>
|
||||
<td>www.twitch.tv</td>
|
||||
<td>TODO</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>OPENREC</td>
|
||||
<td>www.openrec.tv</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>企鹅电竞</td>
|
||||
<td>egame.qq.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>浪live</td>
|
||||
<td>play.lang.live & www.lang.live</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>花椒</td>
|
||||
<td>www.huajiao.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>抖音直播</td>
|
||||
<td>live.douyin.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td>滋瓷</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>猫耳</td>
|
||||
<td>fm.missevan.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>克拉克拉</td>
|
||||
<td>www.hongdoufm.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>快手</td>
|
||||
<td>live.kuaishou.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td>滋瓷</td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>YY直播</td>
|
||||
<td>www.yy.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
<tr align="center">
|
||||
<td>微博直播</td>
|
||||
<td>weibo.com</td>
|
||||
<td>滋瓷</td>
|
||||
<td></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
### cookie 在 config.yml 中的设置方法
|
||||
|
||||
cookie的设置以域名为单位。比如想在录制抖音直播时使用 cookie,那么 config.yml 中可以像下面这样写:
|
||||
```
|
||||
cookies:
|
||||
live.douyin.com: __ac_nonce=123456789012345678903;name=value
|
||||
```
|
||||
|
||||
## Grafana 面板
|
||||
|
||||
> 请自行部署 prometheus 和 grafana
|
||||
|
||||

|
||||
|
||||
## 依赖
|
||||
* [ffmpeg](https://ffmpeg.org/)
|
||||
|
||||
## 使用例子
|
||||
- 本地
|
||||
```
|
||||
./bililive-go -i https://live.bilibili.com/1030 -i https://www.douyu.com/6655
|
||||
```
|
||||
- docker
|
||||
```
|
||||
docker run --restart=always -v ~/Videos:/srv/bililive -p 8080:8080 -d chigusa/bililive-go
|
||||
```
|
||||
|
||||
## 开发环境搭建(linux系统)
|
||||
```
|
||||
一、环境准备
|
||||
1. 前端环境
|
||||
1)前往https://nodejs.org/zh-cn/下载当前版本node(18.12.1)
|
||||
2)命令行运行 node -v 若控制台输出版本号则前端环境搭建成功
|
||||
2.后端环境
|
||||
1)下载golang安装 版本号1.19
|
||||
国际: https://golang.org/dl/
|
||||
国内: https://golang.google.cn/dl/
|
||||
2)命令行运行 go 若控制台输出各类提示命令 则安装成功 输入 go version 确认版本
|
||||
3.安装 ffmpeg (以centos7为例)
|
||||
1) yum install -y epel-release rpm
|
||||
2) rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
|
||||
3) yum repolist
|
||||
4) rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro
|
||||
5) rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
|
||||
6) yum repolist
|
||||
7) yum install -y ffmpeg
|
||||
二、克隆代码并编译(linux环境)
|
||||
1. git clone https://github.com/hr3lxphr6j/bililive-go.git
|
||||
2. cd bililive-go
|
||||
3. make build-web
|
||||
4. make
|
||||
三、linux编译其他环境(以windows 为例)
|
||||
1. GOOS=windows GOARCH=amd64 CGO_ENABLED=0 UPX_ENABLE=0 TAGS=dev ./src/hack/build.sh bililive
|
||||
2.如果不需要调试,可以改成
|
||||
GOOS=windows GOARCH=amd64 CGO_ENABLED=0 UPX_ENABLE=0 TAGS=release ./src/hack/build.sh bililive
|
||||
```
|
||||
|
||||
## Wiki
|
||||
[Wiki](https://github.com/hr3lxphr6j/bililive-go/wiki)
|
||||
|
||||
## API
|
||||
[API doc](https://github.com/hr3lxphr6j/bililive-go/blob/master/docs/API.md)
|
||||
|
||||
## 参考
|
||||
- [you-get](https://github.com/soimort/you-get)
|
||||
- [ykdl](https://github.com/zhangn1985/ykdl)
|
||||
- [youtube-dl](https://github.com/ytdl-org/youtube-dl)
|
||||
@ -1,19 +0,0 @@
|
||||
name: Bililive-go
|
||||
tags:
|
||||
- 工具
|
||||
title: 一个支持多种直播平台的直播录制工具
|
||||
description: 一个支持多种直播平台的直播录制工具
|
||||
additionalProperties:
|
||||
key: bililive-go
|
||||
name: Bililive-go
|
||||
tags:
|
||||
- Tool
|
||||
shortDescZh: 一个支持多种直播平台的直播录制工具
|
||||
shortDescEn: A live recording tool that supports multiple live streaming platforms
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://github.com/hr3lxphr6j/bililive-go
|
||||
github: https://github.com/hr3lxphr6j/bililive-go
|
||||
document: https://github.com/hr3lxphr6j/bililive-go/wiki
|
||||
@ -1,3 +0,0 @@
|
||||
CONTAINER_NAME="bililive-go"
|
||||
PANEL_APP_PORT_HTTP="40079"
|
||||
DATA_PATH="./data"
|
||||
@ -1,17 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: 40079
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: ./data
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
@ -1,17 +0,0 @@
|
||||
services:
|
||||
bililive-go:
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:8080"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/srv/bililive"
|
||||
image: chigusa/bililive-go:latest
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
|
Before Width: | Height: | Size: 5.0 KiB |
@ -1,7 +0,0 @@
|
||||
ADMIN_TOKEN=""
|
||||
CONTAINER_NAME="bitwarden"
|
||||
DATA_PATH="./data"
|
||||
INVITATIONS_ALLOWED="true"
|
||||
PANEL_APP_PORT_HTTP=40031
|
||||
SIGNUPS_ALLOWED="true"
|
||||
WEBSOCKET_ENABLED="false"
|
||||
@ -1,60 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "40031"
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "./data"
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: "true"
|
||||
edit: true
|
||||
envKey: SIGNUPS_ALLOWED
|
||||
labelEn: Allow Signups
|
||||
labelZh: 允许注册
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "true"
|
||||
edit: true
|
||||
envKey: INVITATIONS_ALLOWED
|
||||
labelEn: Allow Invitations
|
||||
labelZh: 允许邀请
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "false"
|
||||
edit: true
|
||||
envKey: WEBSOCKET_ENABLED
|
||||
labelEn: WebSocket Enabled
|
||||
labelZh: 启用 WebSocket
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: ADMIN_TOKEN
|
||||
labelEn: Admin Token
|
||||
labelZh: 管理员令牌
|
||||
required: false
|
||||
type: password
|
||||
@ -1,21 +0,0 @@
|
||||
services:
|
||||
bitwarden:
|
||||
image: "vaultwarden/server:1.35.2-alpine"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:80"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/data"
|
||||
environment:
|
||||
- SIGNUPS_ALLOWED=${SIGNUPS_ALLOWED}
|
||||
- INVITATIONS_ALLOWED=${INVITATIONS_ALLOWED}
|
||||
- WEBSOCKET_ENABLED=${WEBSOCKET_ENABLED}
|
||||
- ADMIN_TOKEN=${ADMIN_TOKEN}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,40 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 检查 .env 文件是否存在
|
||||
if [[ -f ./.env ]]; then
|
||||
|
||||
# 检查并添加 ADMIN_TOKEN 参数
|
||||
if ! grep -q '^ADMIN_TOKEN=' ./.env; then
|
||||
echo 'ADMIN_TOKEN=""' >> ./.env
|
||||
echo "已添加 ADMIN_TOKEN="
|
||||
else
|
||||
echo "ADMIN_TOKEN 参数已存在"
|
||||
fi
|
||||
|
||||
# 检查并添加 INVITATIONS_ALLOWED 参数
|
||||
if ! grep -q '^INVITATIONS_ALLOWED=' ./.env; then
|
||||
echo 'INVITATIONS_ALLOWED="true"' >> ./.env
|
||||
echo "已添加 INVITATIONS_ALLOWED=true"
|
||||
else
|
||||
echo "INVITATIONS_ALLOWED 参数已存在"
|
||||
fi
|
||||
|
||||
# 检查并添加 SIGNUPS_ALLOWED 参数
|
||||
if ! grep -q '^SIGNUPS_ALLOWED=' ./.env; then
|
||||
echo 'SIGNUPS_ALLOWED="true"' >> ./.env
|
||||
echo "已添加 SIGNUPS_ALLOWED=true"
|
||||
else
|
||||
echo "SIGNUPS_ALLOWED 参数已存在"
|
||||
fi
|
||||
|
||||
# 检查并添加 WEBSOCKET_ENABLED 参数
|
||||
if ! grep -q '^WEBSOCKET_ENABLED=' ./.env; then
|
||||
echo 'WEBSOCKET_ENABLED="false"' >> ./.env
|
||||
echo "已添加 WEBSOCKET_ENABLED=false"
|
||||
else
|
||||
echo "WEBSOCKET_ENABLED 参数已存在"
|
||||
fi
|
||||
|
||||
else
|
||||
echo ".env 文件不存在"
|
||||
fi
|
||||
@ -1,3 +0,0 @@
|
||||
# Vaultwarden
|
||||
|
||||
Vaultwarden 是 Bitwarden 客户端 API 的替代服务器实现,使用 Rust 编写,兼容 [官方 Bitwarden 客户端](https://bitwarden.com/download/)(详见 [免责声明](https://github.com/dani-garcia/vaultwarden/blob/main/README.md#disclaimer))。它非常适合在需要自托管的环境中部署,尤其是在官方服务资源消耗较大的情况下提供了更轻量的解决方案。
|
||||
@ -1,19 +0,0 @@
|
||||
name: Bitwarden
|
||||
tags:
|
||||
- 安全
|
||||
title: 一个开源的密码管理服务
|
||||
description: 一个开源的密码管理服务
|
||||
additionalProperties:
|
||||
key: bitwarden
|
||||
name: Bitwarden
|
||||
tags:
|
||||
- Security
|
||||
shortDescZh: 一个开源的密码管理服务
|
||||
shortDescEn: An open source password management service
|
||||
type: tool
|
||||
crossVersionUpdate: true
|
||||
limit: 0
|
||||
recommend: 0
|
||||
website: https://bitwarden.com/
|
||||
github: https://github.com/dani-garcia/vaultwarden
|
||||
document: https://github.com/dani-garcia/vaultwarden/wiki
|
||||
@ -1,7 +0,0 @@
|
||||
ADMIN_TOKEN=""
|
||||
CONTAINER_NAME="bitwarden"
|
||||
DATA_PATH="./data"
|
||||
INVITATIONS_ALLOWED="true"
|
||||
PANEL_APP_PORT_HTTP=40031
|
||||
SIGNUPS_ALLOWED="true"
|
||||
WEBSOCKET_ENABLED="false"
|
||||
@ -1,60 +0,0 @@
|
||||
additionalProperties:
|
||||
formFields:
|
||||
- default: "40031"
|
||||
edit: true
|
||||
envKey: PANEL_APP_PORT_HTTP
|
||||
labelEn: Port
|
||||
labelZh: 端口
|
||||
required: true
|
||||
rule: paramPort
|
||||
type: number
|
||||
- default: "./data"
|
||||
edit: true
|
||||
envKey: DATA_PATH
|
||||
labelEn: Data folder path
|
||||
labelZh: 数据文件夹路径
|
||||
required: true
|
||||
type: text
|
||||
- default: "true"
|
||||
edit: true
|
||||
envKey: SIGNUPS_ALLOWED
|
||||
labelEn: Allow Signups
|
||||
labelZh: 允许注册
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "true"
|
||||
edit: true
|
||||
envKey: INVITATIONS_ALLOWED
|
||||
labelEn: Allow Invitations
|
||||
labelZh: 允许邀请
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: "false"
|
||||
edit: true
|
||||
envKey: WEBSOCKET_ENABLED
|
||||
labelEn: WebSocket Enabled
|
||||
labelZh: 启用 WebSocket
|
||||
required: true
|
||||
type: select
|
||||
values:
|
||||
- label: "True"
|
||||
value: "true"
|
||||
- label: "False"
|
||||
value: "false"
|
||||
- default: ""
|
||||
edit: true
|
||||
envKey: ADMIN_TOKEN
|
||||
labelEn: Admin Token
|
||||
labelZh: 管理员令牌
|
||||
required: false
|
||||
type: password
|
||||
@ -1,21 +0,0 @@
|
||||
services:
|
||||
bitwarden:
|
||||
image: "vaultwarden/server:latest"
|
||||
container_name: ${CONTAINER_NAME}
|
||||
restart: always
|
||||
networks:
|
||||
- 1panel-network
|
||||
ports:
|
||||
- "${PANEL_APP_PORT_HTTP}:80"
|
||||
volumes:
|
||||
- "${DATA_PATH}:/data"
|
||||
environment:
|
||||
- SIGNUPS_ALLOWED=${SIGNUPS_ALLOWED}
|
||||
- INVITATIONS_ALLOWED=${INVITATIONS_ALLOWED}
|
||||
- WEBSOCKET_ENABLED=${WEBSOCKET_ENABLED}
|
||||
- ADMIN_TOKEN=${ADMIN_TOKEN}
|
||||
labels:
|
||||
createdBy: "Apps"
|
||||
networks:
|
||||
1panel-network:
|
||||
external: true
|
||||
@ -1,40 +0,0 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 检查 .env 文件是否存在
|
||||
if [[ -f ./.env ]]; then
|
||||
|
||||
# 检查并添加 ADMIN_TOKEN 参数
|
||||
if ! grep -q '^ADMIN_TOKEN=' ./.env; then
|
||||
echo 'ADMIN_TOKEN=""' >> ./.env
|
||||
echo "已添加 ADMIN_TOKEN="
|
||||
else
|
||||
echo "ADMIN_TOKEN 参数已存在"
|
||||
fi
|
||||
|
||||
# 检查并添加 INVITATIONS_ALLOWED 参数
|
||||
if ! grep -q '^INVITATIONS_ALLOWED=' ./.env; then
|
||||
echo 'INVITATIONS_ALLOWED="true"' >> ./.env
|
||||
echo "已添加 INVITATIONS_ALLOWED=true"
|
||||
else
|
||||
echo "INVITATIONS_ALLOWED 参数已存在"
|
||||
fi
|
||||
|
||||
# 检查并添加 SIGNUPS_ALLOWED 参数
|
||||
if ! grep -q '^SIGNUPS_ALLOWED=' ./.env; then
|
||||
echo 'SIGNUPS_ALLOWED="true"' >> ./.env
|
||||
echo "已添加 SIGNUPS_ALLOWED=true"
|
||||
else
|
||||
echo "SIGNUPS_ALLOWED 参数已存在"
|
||||
fi
|
||||
|
||||
# 检查并添加 WEBSOCKET_ENABLED 参数
|
||||
if ! grep -q '^WEBSOCKET_ENABLED=' ./.env; then
|
||||
echo 'WEBSOCKET_ENABLED="false"' >> ./.env
|
||||
echo "已添加 WEBSOCKET_ENABLED=false"
|
||||
else
|
||||
echo "WEBSOCKET_ENABLED 参数已存在"
|
||||
fi
|
||||
|
||||
else
|
||||
echo ".env 文件不存在"
|
||||
fi
|
||||
|
Before Width: | Height: | Size: 2.4 KiB |
@ -1,8 +0,0 @@
|
||||
CONTAINER_NAME="bytebase"
|
||||
PANEL_APP_PORT_HTTP="40171"
|
||||
PANEL_DB_NAME="bytebase"
|
||||
POSTGRES_HOST="postgres"
|
||||
PANEL_DB_USER_PASSWORD="password_xxJdZD"
|
||||
POSTGRES_PORT="5432"
|
||||
PANEL_DB_USER="postgres"
|
||||
DATA_PATH="./data"
|
||||