Webdav部署

webdav

Go Report Card
Version
Docker Pulls

A simple and standalone WebDAV server.

Install

For a manual install, please refer to the releases page and download the correct binary for your system. Alternatively, you can build or install it from source using the Go toolchain. You can either clone the repository and execute go build, or directly install it, using:

1
go install github.com/hacdias/webdav/v5@latest

Docker

Docker images are provided on both GitHub’s registry and Docker Hub. You can pull the images using one of the following two commands. Note that this commands pull the latest released version. You can use specific tags to pin specific versions, or use main for the development branch.

1
2
3
4
5
# GitHub Registry
docker pull ghcr.io/hacdias/webdav:latest

# Docker Hub
docker pull hacdias/webdav:latest

Usage

For usage information regarding the CLI, run webdav --help.

Docker

To use with Docker, you need to provide a configuration file and mount the data directories. For example, let’s take the following configuration file that simply sets the port to 6060 and the directory to /data.

1
2
port: 6060
directory: /data

You can now run with the following Docker command, where you mount the configuration file inside the container, and the data directory too, as well as forwarding the port 6060. You will need to change this to match your own configuration.

1
2
3
4
5
docker run \
-p 6060:6060 \
-v $(pwd)/config.yml:/config.yml:ro \
-v $(pwd)/data:/data \
ghcr.io/hacdias/webdav -c /config.yml

If you are using fail2ban, it would be helpful to add the parameters listed below. They will assist in analyzing the log.

1
2
--log-driver journald \
--name webdav \

Configuration

The configuration can be provided as a YAML, JSON or TOML file. Below is an example of a YAML configuration file with all the options available, as well as what they mean.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
address: 0.0.0.0
port: 6065

# TLS-related settings if you want to enable TLS directly.
tls: false
cert: cert.pem
key: key.pem

# Prefix to apply to the WebDAV path-ing. Default is '/'.
prefix: /

# Enable or disable debug logging. Default is 'false'.
debug: false

# Disable sniffing the files to detect their content type. Default is 'false'.
noSniff: false

# Whether the server runs behind a trusted proxy or not. When this is true,
# the header X-Forwarded-For will be used for logging the remote addresses
# of logging attempts (if available).
behindProxy: false

# The directory that will be able to be accessed by the users when connecting.
# This directory will be used by users unless they have their own 'directory' defined.
# Default is '.' (current directory).
directory: .

# The default permissions for users. This is a case insensitive option. Possible
# permissions: C (Create), R (Read), U (Update), D (Delete). You can combine multiple
# permissions. For example, to allow to read and create, set "RC". Default is "R".
permissions: R

# The default permissions rules for users. Default is none. Rules are applied
# from last to first, that is, the first rule that matches the request, starting
# from the end, will be applied to the request.
rules: []

# The behavior of redefining the rules for users. It can be:
# - overwrite: when a user has rules defined, these will overwrite any global
# rules already defined. That is, the global rules are not applicable to the
# user.
# - append: when a user has rules defined, these will be appended to the global
# rules already defined. That is, for this user, their own specific rules will
# be checked first, and then the global rules.
# Default is 'overwrite'.
rulesBehavior: overwrite

# Logging configuration
log:
# Logging format ('console', 'json'). Default is 'console'.
format: console
# Enable or disable colors. Default is 'true'. Only applied if format is 'console'.
colors: true
# Logging outputs. You can have more than one output. Default is only 'stderr'.
outputs:
- stderr

# CORS configuration
cors:
# Whether or not CORS configuration should be applied. Default is 'false'.
enabled: true
credentials: true
allowed_headers:
- Depth
allowed_hosts:
- http://localhost:8080
allowed_methods:
- GET
exposed_headers:
- Content-Length
- Content-Range

# The list of users. If the list is empty, then there will be no authentication.
# Otherwise, basic authentication will automatically be configured.
#
# If you're delegating the authentication to a different service, you can proxy
# the username using basic authentication, and then disable webdav's password
# check using the option:
#
# noPassword: true
users:
# Example 'admin' user with plaintext password.
- username: admin
password: admin
# Example 'john' user with bcrypt encrypted password, with custom directory.
# You can generate a bcrypt-encrypted password by using the 'webdav bcrypt'
# command lint utility.
- username: john
password: "{bcrypt}$2y$10$zEP6oofmXFeHaeMfBNLnP.DO8m.H.Mwhd24/TOX2MWLxAExXi4qgi"
directory: /another/path
# Example user whose details will be picked up from the environment.
- username: "{env}ENV_USERNAME"
password: "{env}ENV_PASSWORD"
- username: basic
password: basic
# Override default permissions.
permissions: CRUD
rules:
# With this rule, the user CANNOT access /some/files.
- path: /some/file
permissions: none
# With this rule, the user CAN create, read, update and delete within /public/access.
- path: /public/access/
permissions: CRUD
# With this rule, the user CAN read and update all files ending with .js. It uses
# a regular expression.
- regex: "^.+.js$"
permissions: RU

CORS

The allowed_* properties are optional, the default value for each of them will be *. exposed_headers is optional as well, but is not set if not defined. Setting credentials to true will allow you to:

  1. Use withCredentials = true in javascript.
  2. Use the username:password@host syntax.

Caveats

Reverse Proxy Service

When using a reverse proxy implementation, like Caddy, Nginx, or Apache, note that you need to forward the correct headers in order to avoid 502 errors. Here’s a Nginx configuration example:

1
2
3
4
5
6
7
8
location / {
proxy_pass http://127.0.0.1:8080;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}

Examples

Systemd

Example configuration of a systemd service:

1
2
3
4
5
6
7
8
9
10
11
12
[Unit]
Description=WebDAV
After=network.target

[Service]
Type=simple
User=root
ExecStart=/usr/bin/webdav --config /opt/webdav.yml
Restart=on-failure

[Install]
WantedBy=multi-user.target

Fail2Ban Setup

To add security against brute-force attacks in your WebDAV server, you can configure Fail2Ban to ban IP addresses after a set number of failed login attempts.

Filter Configuration

Create a new filter rule under filter.d/webdav.conf:

1
2
3
4
5
6
7
8
9
[INCLUDES]
before = common.conf

[Definition]
# Failregex to match "invalid password" and extract remote_address only
failregex = ^.*invalid password\s*\{.*"remote_address":\s*"<HOST>:\d+"\s*\}
^.*invalid username\s*\{.*"remote_address":\s*"<HOST>:\d+"\s*\}

ignoreregex =

This configuration will capture invalid login attempts and extract the IP address to ban.

Jail Configuration

In jail.d/webdav.conf, define the jail that monitors your WebDAV log for failed login attempts:

1
2
3
4
5
6
7
8
[webdav]

enabled = true
port = [your_port]
filter = webdav
logpath = [your_log_path]
banaction = iptables-allports
ignoreself = false
  • Replace [your_port] with the port your WebDAV server is running on.
  • Replace [your_log_path] with the path to your WebDAV log file.

If you use it with Docker and --log-driver journald, replace logpath with journalmatch = CONTAINER_NAME=[your_container_name]

Final Steps

  1. Restart Fail2Ban to apply these configurations:

    1
    sudo systemctl restart fail2ban
  2. Verify that Fail2Ban is running and monitoring your WebDAV logs:

    1
    sudo fail2ban-client status webdav

With this setup, Fail2Ban will automatically block IP addresses that exceed the allowed number of failed login attempts.

Contributing

Feel free to open an issue or a pull request.

License

MIT License © Henrique Dias

2024年全球十大新闻

2024年全球十大新闻

2024年是充满变化与挑战的一年,全球各地发生了许多重大事件。以下是2024年全球十大新闻回顾:

1. 全球气候峰会达成历史性协议

在2024年的全球气候峰会上,各国领导人达成了一项具有里程碑意义的协议,承诺在未来十年内大幅减少碳排放。这一协议标志着国际社会在应对气候变化方面迈出了重要一步。

2. 新冠疫苗普及全球

2024年见证了新冠疫苗在全球范围内的普及。随着疫苗接种率的提高,各国逐渐恢复正常生活,全球经济也开始复苏。

3. 人类首次登陆火星

2024年,人类历史上首次成功登陆火星。这一壮举由国际空间探索联盟完成,标志着人类在探索外太空方面取得了重大突破。

4. 全球经济复苏

经过几年的低迷,2024年全球经济开始强劲复苏。各国政府采取了一系列刺激措施,推动了经济增长,失业率显著下降。

5. 人工智能技术突破

2024年,人工智能技术取得了重大突破,特别是在医疗、金融和自动驾驶等领域。AI技术的进步为各行各业带来了新的机遇和挑战。

6. 重大自然灾害频发

2024年,全球多地发生了重大自然灾害,包括地震、洪水和飓风。这些灾害对人类社会造成了深远影响,促使各国进一步重视灾害预防和应对措施。

7. 国际关系新格局

2024年,国际关系发生了显著变化。一些传统盟友关系紧张,新兴国家在国际舞台上发挥了更大作用。这一新格局对全球政治经济产生了深远影响。

8. 重要科技公司IPO

2024年,多家重要科技公司成功上市,吸引了全球投资者的关注。这些公司的IPO不仅为科技行业注入了新活力,也对资本市场产生了重大影响。

9. 全球能源转型加速

2024年,全球能源转型进一步加速。各国纷纷加大对可再生能源的投资,推动了太阳能、风能和其他清洁能源的发展。

10. 文化与体育盛事

2024年,全球各地举办了许多重要的文化与体育盛事,包括奥运会和世界杯。这些活动不仅展示了人类的体育精神和文化多样性,也促进了国际交流与合作。

总结

2024年是充满挑战与机遇的一年。无论是气候变化、科技进步,还是国际关系的变化,都对全球产生了深远影响。让我们共同期待2025年的到来,希望在新的一年里,世界能够变得更加美好。

2024年全球十大科技新闻

2024年全球十大科技新闻

2024年是科技领域充满创新与突破的一年,许多重要事件对我们的生活和未来产生了深远影响。以下是2024年全球十大科技新闻回顾:

1. 人类首次登陆火星

2024年,人类历史上首次成功登陆火星。这一壮举由国际空间探索联盟完成,标志着人类在探索外太空方面取得了重大突破,为未来的星际旅行奠定了基础。

2. 量子计算机实现重大突破

2024年,量子计算领域取得了历史性进展。科学家们成功构建了一个稳定的、多量子比特系统,并实现了超越经典计算机的计算能力。这一突破预示着量子计算将在未来解决更多复杂问题。

3. AI技术在医疗领域的应用

人工智能技术在2024年广泛应用于医疗领域,包括疾病诊断、个性化治疗和药物研发。AI辅助诊断系统显著提高了诊断准确率,减少了误诊率,推动了医疗服务的变革。

4. 5G网络全球覆盖

2024年,5G网络在全球范围内实现了广泛覆盖。高速、低延迟的5G网络为智能城市、自动驾驶、物联网等技术的发展提供了坚实的基础,改变了人们的生活方式。

5. 可再生能源技术进步

2024年,可再生能源技术取得了显著进步。太阳能和风能的效率大幅提高,储能技术也有了突破性发展,使得可再生能源在全球能源结构中的比重进一步提升。

6. 元宇宙初现雏形

元宇宙在2024年初现雏形,多个科技公司推出了自己的虚拟现实平台,用户可以在虚拟世界中进行社交、工作和娱乐。这一趋势预示着未来数字生活方式的变革。

7. 自动驾驶技术普及

2024年,自动驾驶技术在多个国家和地区实现了商业化应用。自动驾驶汽车的安全性和可靠性得到了验证,为未来的无人驾驶交通系统铺平了道路。

8. 生物技术新突破

2024年,生物技术领域取得了多项突破性进展,包括基因编辑、细胞疗法和合成生物学。这些技术在医疗、农业和环保等领域展现出巨大的潜力。

9. 边缘计算蓬勃发展

2024年,边缘计算技术迅速发展,推动了实时数据处理和低延迟应用的普及。边缘计算在工业互联网、智能家居和智能城市中得到了广泛应用。

10. 区块链技术的创新应用

2024年,区块链技术在金融、供应链管理和数据安全等领域展现出新的应用场景。去中心化的区块链技术提高了系统的透明度和安全性,受到了广泛关注。

总结

2024年是科技创新与突破的一年,从外太空探索到量子计算,从人工智能到可再生能源,各个领域的进步都在塑造我们的未来。这些科技新闻不仅展示了人类的智慧和创造力,也为我们带来了无限的可能性。让我们共同期待2025年的到来,希望科技能够继续推动世界的进步与发展。

Markdow简介

本文介绍下Markdown的基本语法。

主要内容

Markdown是什么

创造了它?

为什么要使用它?

怎么使用?

在用?

尝试一下

正文

1. Markdown是什么

Markdown是一种轻量级标记语言,它以纯文本形式(易读、易写、易更改)编写文档,并最终以HTML格式发布。
Markdown也可以理解为将以MARKDOWN语法编写的语言转换成HTML内容的工具。

2. 创造了它?

它由Aaron SwartzJohn Gruber共同设计,Aaron Swartz就是那位于去年(2013年1月11日)自杀,有着开挂一般人生经历的程序员。维基百科对他的介绍是:软件工程师、作家、政治组织者、互联网活动家、维基百科人

他有着足以让你跪拜的人生经历:

  • 14岁参与RSS 1.0规格标准的制订。
  • 2004年入读斯坦福,之后退学。
  • 2005年创建Infogami,之后与Reddit合并成为其合伙人。
  • 2010年创立求进会(Demand Progress),积极参与禁止网络盗版法案(SOPA)活动,最终该提案被撤回。
  • 2011年7月19日,因被控从MIT和JSTOR下载480万篇学术论文并以免费形式上传于网络被捕。
  • 2013年1月自杀身亡。

Aaron Swartz

天才都有早逝的归途。

3. 为什么要使用它?

  • 它是易读(看起来舒服)、易写(语法简单)、易更改纯文本。处处体现着极简主义的影子。
  • 兼容HTML,可以转换为HTML格式发布。
  • 跨平台使用。
  • 越来越多的网站支持Markdown。
  • 更方便清晰地组织你的电子邮件。(Markdown-here, Airmail)
  • 摆脱Word(我不是认真的)。

4. 怎么使用?

如果不算扩展,Markdown的语法绝对简单到让你爱不释手。

Markdown语法主要分为如下几大部分:
标题段落区块引用代码区块强调列表分割线链接图片反斜杠 \符号’`’

4.1 标题

两种形式:
1)使用=-标记一级和二级标题。

一级标题
=========
二级标题
---------

效果:

一级标题

二级标题

2)使用#,可表示1-6级标题。

# 一级标题
## 二级标题
### 三级标题
#### 四级标题
##### 五级标题
###### 六级标题

效果:

一级标题

二级标题

三级标题

四级标题

五级标题
六级标题

4.2 段落

段落的前后要有空行,所谓的空行是指没有文字内容。若想在段内强制换行的方式是使用两个以上空格加上回车(引用中换行省略回车)。

4.3 区块引用

在段落的每行或者只在第一行使用符号>,还可使用多个嵌套引用,如:

> 区块引用
>> 嵌套引用

效果:

区块引用

嵌套引用

4.4 代码区块

代码区块的建立是在每行加上4个空格或者一个制表符(如同写代码一样)。如
普通段落:

void main()
{
printf(“Hello, Markdown.”);
}

代码区块:

void main()
{
    printf("Hello, Markdown.");
}

注意:需要和普通段落之间存在空行。

4.5 强调

在强调内容两侧分别加上*或者_,如:

*斜体*,_斜体_
**粗体**,__粗体__

效果:

斜体斜体
粗体粗体

4.6 列表

使用·+、或-标记无序列表,如:

-(+*) 第一项
-(+*) 第二项
- (+*)第三项

注意:标记后面最少有一个_空格_或_制表符_。若不在引用区块中,必须和前方段落之间存在空行。

效果:

  • 第一项
  • 第二项
  • 第三项

有序列表的标记方式是将上述的符号换成数字,并辅以.,如:

1 . 第一项
2 . 第二项
3 . 第三项

效果:

  1. 第一项
  2. 第二项
  3. 第三项

4.7 分割线

分割线最常使用就是三个或以上*,还可以使用-_

4.8 链接

链接可以由两种形式生成:行内式参考式
行内式

[younghz的Markdown库](https:://github.com/younghz/Markdown “Markdown”)。

效果:

younghz的Markdown库

参考式

[younghz的Markdown库1][1]
[younghz的Markdown库2][2]
[1]:https:://github.com/younghz/Markdown “Markdown”
[2]:https:://github.com/younghz/Markdown “Markdown”

效果:

younghz的Markdown库1
younghz的Markdown库2

注意:上述的[1]:https:://github.com/younghz/Markdown "Markdown"不出现在区块中。

4.9 图片

添加图片的形式和链接相似,只需在链接的基础上前方加一个

4.10 反斜杠\

相当于反转义作用。使符号成为普通符号。

4.11 符号’`’

起到标记作用。如:

`ctrl+a`

效果:

ctrl+a

5. 在用?

Markdown的使用者:

  • GitHub
  • 简书
  • Stack Overflow
  • Apollo
  • Moodle
  • Reddit
  • 等等

6. 尝试一下

  • Chrome下的插件诸如stackeditmarkdown-here等非常方便,也不用担心平台受限。
  • 在线的dillinger.io评价也不错
  • Windowns下的MarkdownPad也用过,不过免费版的体验不是很好。
  • Mac下的Mou是国人贡献的,口碑很好。
  • Linux下的ReText不错。

当然,最终境界永远都是笔下是语法,心中格式化 :)。


注意:不同的Markdown解释器或工具对相应语法(扩展语法)的解释效果不尽相同,具体可参见工具的使用说明。
虽然有人想出面搞一个所谓的标准化的Markdown,[没想到还惹怒了健在的创始人John Gruber]
(http://blog.codinghorror.com/standard-markdown-is-now-common-markdown/ )。


以上基本是所有traditonal markdown的语法。

其它:

列表的使用(非traditonal markdown):

|表示表格纵向边界,表头和表内容用-隔开,并可用:进行对齐设置,两边都有:则表示居中,若不加:则默认左对齐。

代码库 链接
MarkDown https://github.com/younghz/Markdown
MarkDownCopy https://github.com/younghz/Markdown

关于其它扩展语法可参见具体工具的使用说明。

2024年全球十大财经新闻

2024年全球十大财经新闻

2024年是全球经济充满动荡与机遇的一年,许多重大财经事件对全球市场产生了深远影响。以下是2024年全球十大财经新闻回顾:

1. 全球经济强劲复苏

在经历了数年的低迷之后,2024年全球经济显现出强劲的复苏迹象。各国政府采取了一系列刺激措施,推动了经济增长,全球失业率显著下降,消费者信心回升。

2. 美联储加息政策

美联储在2024年多次加息,以应对日益上升的通胀压力。这一政策不仅影响了美国国内的经济活动,也对全球金融市场产生了连锁反应。

3. 中国经济增长超预期

中国在2024年的经济表现超出预期,GDP增长率达到8%。这一增长主要得益于内需的强劲和出口的恢复,同时也反映了中国政府在推动高质量发展的努力。

4. 欧洲能源危机缓解

2024年,欧洲能源供应危机逐渐缓解,各国在可再生能源方面的投资取得显著成效。这不仅保障了能源供应的稳定,也推动了欧洲经济的复苏。

5. 全球供应链重组

2024年,全球供应链发生了重大重组,各国企业纷纷调整供应链策略,以应对地缘政治风险和贸易保护主义抬头的挑战。这一变化对全球贸易格局产生了深远影响。

6. 数字货币的崛起

2024年,数字货币在全球范围内迅速崛起。多国央行推出了自己的数字货币,数字支付和区块链技术得到了广泛应用,金融科技领域迎来了新的发展机遇。

7. 新兴市场经济体表现出色

2024年,许多新兴市场经济体表现出色,经济增长率普遍高于发达国家。这些经济体在吸引外资、推动基础设施建设和提升产业竞争力方面取得了显著进展。

8. 全球股市波动加剧

2024年,全球股市波动加剧,主要股指经历了多次大幅波动。这一现象反映了市场对经济前景的不确定性以及投资者情绪的变化。

9. 大宗商品价格回升

2024年,大宗商品价格普遍回升,尤其是石油、天然气和金属价格上涨。这一趋势主要受到全球经济复苏和需求增加的推动,对相关产业产生了积极影响。

10. 重要科技公司IPO

2024年,多家重要科技公司成功上市,吸引了全球投资者的关注。这些公司的IPO不仅为科技行业注入了新活力,也对资本市场产生了重大影响。

总结

2024年是充满变革与机会的一年。全球经济的复苏、政策的调整、新兴市场的崛起以及科技创新的发展,共同构成了这一年的财经大事件。让我们共同期待2025年的到来,希望在新的一年里,全球经济能够继续稳步前行,创造更多的繁荣与发展。

在Markdown文件中插入图片的方法

本文介绍下在Markdown文件中插入图片的方法。

一、使用 Markdown 语法

1.1 语法概述

这是最简单和常用的方法。 可以直接在 Markdown 文件中使用以下语法插入图片:

1
![图片描述](图片路径)
  • 图片描述: 对图片的简短描述,这对于屏幕阅读器用户和搜索引擎优化 (SEO) 很有帮助。 虽然不是必需的,但强烈建议添加。
  • 图片路径: 图片的路径,可以是相对路径或绝对路径。

1.2 相对路径示例

假设你的图片文件 image.jpg 位于你的博文所在的目录下的 images 文件夹中,那么图片路径就是 images/image.jpg。

1
![我的图片](images/image.jpg)

1.3 绝对路径示例

假设你的网站域名是 example.com,图片位于 /images/image.jpg,那么图片路径就是 https://example.com/images/image.jpg。

1
![我的图片](https://example.com/images/image.jpg)

二、使用 HTML 标签

也可以直接使用 HTML 的 标签插入图片:

1
<img src="图片路径" alt="图片描述" title="图片标题" width="宽度" height="高度">
  • src: 图片的路径。
  • alt: 图片的描述,类似于 Markdown 语法中的图片描述。
  • title: 图片的标题,当鼠标悬停在图片上时会显示。
  • width 和 height: 指定图片的宽度和高度。

三、图片路径的几种选择

  • 本地路径: 将图片文件放在你的博文所在的目录或其子目录下,然后使用相对路径引用。这是最常用的方法。 建议在博文目录下创建一个 images 文件夹来存放图片。
  • 公共路径: 将图片文件放在你的 Hexo 项目的 source/images 目录下,然后使用 /images/图片文件名 引用。这样,无论你的博文位于哪个目录,都可以使用相同的路径引用图片。
  • 外部 URL: 使用图片的外部 URL,例如图床提供的 URL。

四、最佳实践

  • 使用相对路径: 尽可能使用相对路径,这样方便迁移和管理你的博客。
  • 优化图片大小: 在上传图片之前,尽量压缩图片大小,以提高网站加载速度。
  • 添加 alt 属性: 始终添加 alt 属性,提供图片的描述,这对于 SEO 和可访问性非常重要。
  • 组织图片文件: 建议将图片文件组织到文件夹中,例如在每篇博文的目录下创建一个 images 文件夹。

五、示例

假设你的博文文件名为 my-post.md,图片文件名为 my-image.jpg。

  1. 在 source/_posts/my-post 目录下创建一个名为 images 的文件夹。
  2. 将 my-image.jpg 复制到 source/_posts/my-post/images 目录下。
  3. 在 my-post.md 文件中使用以下代码插入图片:
1
![我的图片](images/my-image.jpg)

Git学习总结

git 简介

git 是分布式的,所以其核心就是分支,分支的意义在于,可以将项目代码按照功能、模块拆分成不同的分支。比如这个产品要加一个支付功能和一个登陆功能,可以创建两个分支,交给不同的开发人员并行开发。登陆功能先开发完,测试无误后合并改分支到 master 分支,master 分支部署上线。支付功能虽然没有开发完成,但是在另一条分支上,所以产品上线和功能开发完全不受影响。这才是分布式开发的高效模式。
在 git 中,工作目录下面的所有文件都不外乎这两种状态:已跟踪未跟踪。已跟踪的文件是指本来就被纳入版本控制管理的文件,在上次快照中有它们的记录,工作一段时间后,它们的状态可能是未更新,已修改或者已放入暂存区。而所有其他文件都属于未跟踪文件。它们既没有上次更新时的快照,也不在当前的暂存区域。初次克隆某个仓库时,工作目录中的所有文件都属于已跟踪文件,且状态为未修改。

阅读更多

GPT 学术优化 (ChatGPT Academic) 免翻墙教程

本文简要介绍下GPT 的学术优化技术。

GPT 学术优化 (ChatGPT Academic) 免翻墙教程

ChatGPT无疑是提高生产力的重要工具,也可以是科研的好帮手,但是它最大的不便之处包括但不限于以下两点:
(1)不免费。即便付费,缴费也有一定的门槛,而且价格不便宜。
(2)需要科学上网。即通俗说法中的“翻墙”。虽然,搞科研的人使用科学上网并不罕见,但是部署到境内个人设备,总归有被检测到的风险。
本教程旨在缓解或解决以上两点痛点需求,适合个人和课题组生产环境。

以下各环节中具体操作步骤,可参见其中的链接,本教程就不搬运赘述,从而减少了ta们成果的热度。

一、在阿里云上购买域名并绑定到Cloudflare (非必须)

详细的操作步骤可参见坚叔Evan《群晖/极空间无公网IP搭建Cloudflare-阿里云免费隧道穿透教程》,本人已经走过一遍,无问题。不过,值得注意的是,他教程的初心是内网穿透个人私有云的docker。它可把局域网内的内网转发到外网上,免去一般需公网ip的制约。

购买域名时,建议购买首年8元、10年188元的套餐,比较划算。毕竟,续约比较贵。

但这一步并不是必须的,也不是必须在阿里云上购买域名。因为,本教程下一步中将说明,使用cloudflare自带域名亦可实现公网访问。

二、搭建OpenAI的API中转代理

OpenAI及其API在大陆境内是被墙状态,目前在境内使用它们一般是科学上网或中转或反向代理。ChatGPT Academic本身默认使用的是OpenAI原生API链接,但这不妨碍我们对此略作修改,使其走中转代理。本教程参考的教程是x-dr的《chatgptProxyAPI》,主要是《利用Cloudflare Worker中转api.openai.com》。但是,由于cloudflare的workers.dev被墙或被污染,如果不使用自己的域名,那么可以尝试使用cloudflare的Pages进行中转(未测试)。

这里建议在Tiggers->Add Coustom Domain->Domain设置二级域名,如openai.mydomain.website,这里一级域名mydomain.website可以不浪费,用于其他用途。这时,就可以用自己的域名 https://openai.mydomain.website/v1/chat/completions代替官方的https://api.openai.com/v1/chat/completions 。根据x-dr的教程介绍可可知:由于 Cloudflare 有每天免费 10 万次的请求额度,所以轻度使用基本是零成本的

以上步骤完成之后,可以在浏览器输入自己的域名测试一下中转API是否生效,当出现以下页面提示之后,即这一步教程就大功告成:

1
2
3
4
5
6
7
8
{
"error": {
"message": "You didn't provide an API key. You need to provide your API key in an Authorization header using Bearer auth (i.e. Authorization: Bearer YOUR_KEY), or as the password field (with blank username) if you're accessing the API from your browser and are prompted for a username and password. You can obtain an API key from https://platform.openai.com/account/api-keys.",
"type": "invalid_request_error",
"param": null,
"code": null
}
}

经测试,中转速度是可以忍受的,基本无影响。

三、下载ChatGPT Academic,略修改若干需翻墙的设置

ChatGPT Academic有多种安装方式,本人使用的是Docker安装方式。这里主要介绍的也是这种方式,因为这种方式是后期最懒人的方式,也是方便科研组环境使用最好的方式。

ChatGPT Academic具体的安装教程可参见官方网站,下载部分无需赘述。以下快进到docker安装方式。

{.line-numbers}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
git clone https://github.com/binary-husky/chatgpt_academic.git
cd chatgpt_academic
# 复制config.py成config_private.py
# 建议config_private.py在别的文件夹保存一遍,方便以后ChatGPT Academic更新要作二次配置,直接复制它进入更新的版本就好
cp config.py config_private.py
# 用任意文本编辑器编辑 config_private.py, 配置 “API_KEY” (sk-开头的字符串码), “WEB_PORT” (例如30532) ,"AUTHENTICATION"可设置用户登录,API_URL_REDIRECT设置API中转代理。这些如何设置,config_private.py有具体的注释说明。
# 用任意文本编辑器编辑 requirements.txt,在尾后补一个库函数 pdfminer, 否则arxiv下载和分析功能可能不能正常使用。
# 用任意文本编辑器编辑 Dockerfile, 在 RUN pip3 install -r requirements.txt后补一句RUN pip3 install --upgrade gradio, 不然有可能报gradio低的错误
cd crazy_functions
# 用任意文本编辑器编辑联网的ChatGPT.py
# 将谷歌引擎替换,即将https://www.google.com替换为https://note.cm或其他谷歌镜像或者其他搜索引擎。
cd ..
# 安装
docker build -t gpt-academic .
# 测试是否可用,关闭后docker自动删除该镜像
docker run --rm -it --net=host gpt-academic
# 正式部署
docker run -d -p 30532:30532 --name gpt-academic gpt-academic

以上步骤完成之后,在docker所在设备中使用浏览器访问http://localhost:30532http://127.0.0.1:30532http://设备ip:30532,测试ChatGPT Academic正常使用的话,基本就大公告成。后续步骤就是更完美地在外网访问ChatGPT Academic而做的设置。

这里注意几点:

  • 一般课题组使用单位局域网固定ip,会选择把这个固定ip绑定在路由器上,这样这个ip经济性最高(如此,多个设备可共享一个固定ip)。在这种环境中,别忘记在该路由器中设置NAT服务,即端口映射;不在这种环境,忽略本点。
  • 需要使用ChatGPT+ChatGLM的,按binary-husky的说法,需要对Docker熟悉 + 读懂Dockerfile + 电脑配置够强,本人按照原教程指导遇到下面报错,懒得折腾了,故也就没有使用ChatGLM。
1
2
3
4
5
6
7
8
9
Dockerfile+ChatGLM:26
--------------------
24 | RUN curl -sS https://bootstrap.pypa.io/get-pip.py | python3.8
25 | # 下载pytorch
26 | >>> RUN $useProxyNetwork python3 -m pip install torch --extra-index-url https://download.pytorch.org/whl/cu113
27 | # 下载分支
28 | WORKDIR /gpt
--------------------
ERROR: failed to solve: process "/bin/sh -c $useProxyNetwork python3 -m pip install torch --extra-index-url https://download.pytorch.org/whl/cu113" did not complete successfully: exit code: 1

至此,在个人和课题组生成环境中免翻墙使用ChatGPT Academic的教程就已完结。以下,是使得使用体验更加完美并可以使其外网访问。

四、内网穿透,外网访问ChatGPT Academic

如果有外网服务器且容量比较富裕的话,那么可以直接把ChatGPT Academic直接部署到外网服务器,免的设置内网穿透等一系列自寻烦恼的麻烦设置。本人阿里云配置使用的是最低配,且阿里云也有其他任务需求,而初心是想把ChatGPT Academic面向课题组使用,故放置在内网。

面对偶尔的外网访问需求,除了使用单位的VPN链接到内网服务器,也可以使用诸如ZeroTier等内网穿透软件。本教程主要介绍使用ZeroTier,可把外网设备器和内网设备加入同一ZeroTier虚拟局域网,即可实现内网穿透。具体步骤可以参见知乎用户我是阿蛮的《Zerotier 搭建私有根服务器及创建虚拟局域网完整教程》。注意这里是在公网建立一个ZeroTier根服务器,可极大提升内网穿透速度。

在上述环境中,如果开放ChatGPT Academic给别的单位课题组或者大众使用,可在公网服务器上安装nginx等网页服务器软件,实现内网ip转发。由于阿里云每年有免费20个额度的SSL证书申请,也可以在nginx中实现https服务。当然,也可使用本教程第一步中的cloudflare的提到服务(即在内网服务器上部署cloudflared的docker的镜像)实现这一步,且还无需公网服务器及ip,但速度比阿里云较慢一些。

以下是nginx的配置https服务代码设置,供参考:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
server {
listen 443 ssl;
#server_name localhost;
server_name gptac.mydomain.website; #自己申请的域名

index index.html index.htm;
# 以下两行是ssl的证书和密钥。
ssl_certificate cert/xxxxxxxx_gptac.mydomain.website.pem;
ssl_certificate_key cert/xxxxxxxx_gptac.mydomain.website.key;
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
#表示使用的加密套件的类型。
#ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3; #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
#ssl_prefer_server_ciphers on;
#error_page 497 301 =307 https://$host:$server_port$request_uri; ##如https为特殊端口时可使用此方式客户端访问http时自动为https

location / {
add_header Content-Security-Policy upgrade-insecure-requests;
proxy_set_header x-real-ip $remote_addr;
proxy_set_header host $http_host;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://10.180.8.231:8444;
proxy_http_version 1.1; # 以下三行不能省略,否则报 something connected error。
proxy_set_header Upgrade $http_upgrade; #
proxy_set_header Connection "upgrade"; #
#修复退出登录重定向时这个报错:The plain HTTP request was sent to HTTPS port
proxy_redirect http:// https://;
}

}

其他

  • 欢迎就本帖进行友好交流与讨论,共同促进技术开放与进步!
  • 貌似之前的ChatGPT Academic自动提供外网访问链接,现在的版本移除了这一功能,不知道是因为速度还是为了防止API key泄露的原因。不过,由于由于自动提供的链接不是很方便人类记忆,建议使用nginx等网页服务器或cloudflare服务转发内网到外网上去。
  • ChatGPT Academic之前介绍过huggingface,可以省去部署ChatGPT Academic和翻墙烦恼。不知何故,binary-husky现在移除了这一部分介绍,但是huggingface目前仍然有人在持续更新ChatGPT Academic的部署。不过,huggingface的缺点是API key需要使用前输入一次;有的用户可能忘记看提示,没有复制一份space导致API key有泄露的风险。
  • 什么?没说怎么白嫖和怎么(低成本)获取API key码?
    • 白嫖ChatPGT,github有很多用户搭建了免费体验版网站,可自行搜索。但碍于经济性的原因,用爱发电不会持久,可能需要打一枪换一个阵地。大家可以找一些研究单位或大学搭建的面向公众的ChatGPT门户,可能比较持久,但应该比较少。
    • API key现在是收费模式,且注册和缴费有一点门槛或不便,但不妨碍“拼车上路”。我觉得这是最经济且门槛最低获取API key的方式。github中已经有一些用户已经发布拼车邀请,可自行搜索。
    • 如果有一个豪(土豪的“毫”)气且义气(愿意分享API key)的朋友,那么也就没有这些烦恼了。

闲聊

  • 已经发现的官网教程的bug已经在之前的部署教程中有所纠正和说明。
  • 实测发现,Dockerfile中默认的下载源(阿里云源镜像)对有些单位来说,速度不够快,大家可以根据自己情况做相应替换,以下列了一些国内常用镜像源(本人实测,清华源比阿里源要快一些):
1
2
3
4
5
6
7
8
清华:https://pypi.tuna.tsinghua.edu.cn/simple
阿里云:http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣:http://pypi.douban.com/simple/
华为:https://repo.huaweicloud.com/repository/pypi/simple/
腾讯:http://mirrors.cloud.tencent.com/pypi/simple
网易:https://mirrors.163.com/pypi/simple/
...

GPT 菜鸟教程

ChatGPT 菜鸟教程

飞书链接:ChatGPT 菜鸟教程

适用人群:关注 ChatGPT 相关产品动向,跃跃欲试又不知如何下手的小伙伴

首发时间:2025年1月24日

本文档专注收集汇总 ChatGPT 相关产品使用教程,持续更新,永久免费在线查看,欢迎收藏转发支持,文末有惊喜

若有未涉及到的使用教程,欢迎提issues,也欢迎大家投稿,共建 ChatGPT 菜鸟教程!

最近更新

教程

ChatGPT

5分钟完成chatGPT从注册到使用

国内开通 ChatGPT Plus 保姆级教程【典藏】

awesome-chatgpt-zh ChatGPT 中文指南

Learn Prompting 教程

免费的 Prompt Engineering 教程

教程 | ChatGPT 完全上手指南

ChatGPT 中文调教指南

ChatGPT 实践指南 从上手到拿手

翻译《提问的艺术——让 ChatGPT 导出高质量答案》

ChatGPT API 技巧教程

ChatGPT 扩展 WebChatGPT 详细使用教程

Midjourney

Midjourney 中文指南

Midjourney 官方使用手册

Midjourney AI绘画最新免费注册使用图文教程

【Midjourney】从入门到精通·全网最通俗易懂·AI绘画保姆级教程

Midjourney 无限白嫖教程,无需注册,保姆级手把手教你操作方法

Midjourney 进阶手册:如何让生成的图片更加可控?

Midjourney 垫图教程1分钟讲解

Stable Diffusion

Stable Diffusion 新手入门手册

Stable Diffusion 本地部署教程

Stable Diffusion 超详细使用教程

AI绘画指南 stable diffusion webui (SD webui)如何设置与使用

stable diffusion webui 的汉化教程

零基础入门 Stable Diffusion

用 Colab 免费部署自己的 AI 绘画云平台—— Stable Diffusion

AI 数字绘画 stable-diffusion 保姆级教程

人人都能用的「AI 作画」,如何把 Stable Diffusion 装进电脑?

Disco Diffusion

AI绘画小白神器-disco diffusion(入门篇)

最全AI绘画 Disco Diffusion 教程

Disco Diffusion 快速入门

小白请进 · Disco Diffusion · 教程合集

AI画图 Disco-diffusion 本地搭建教程

最简单全面本地运行 Colab 及 Disco Diffusion教程

人工智能绘画工具 Disco Diffusion 入门教程

一条录制的 Disco Diffusion 生成器教程的内容

用 AI 如何画概念图?

LeonardoAI

Leonardo AI 入门与比较

【AI绘画】这波简直白嫖!LeonardoAI简明教程

NovelAI

【NovelAI】全网最强二次元作画 AI 网站 NovelAI 画图使用教程

NovelAI 萌新快速上手指南

NovelAI 原版英文教程

NotionAI

NotionAI 官方指导

Notion AI 的使用教程,看这一篇就够啦

新必应

新版Bing 完整使用教程

新必应(New Bing)保姆级注册和申请教程来了!

新必应(New Bing)国内申请与使用教程

文心一言

百度文心一言内测资格申请教程

ChatExcel

让我们认识一下今天的主角——ChatExcel

ChatPDF

ChatPDF,一键上传即可解读,分析神器

ChatPDF 使用说明

ChatDoc

ChatDOC,利用 ChatGPT 和文档对话

ChatDOC,让 ChatGPT 与指定文档对话,言之有据不是梦

ChatPPT

牛逼 ChatPPT,自动生成 PPT

又一PPT动画神器到来!MotionGo

国内首个 ChatPPT 保姆级安装教程来啦!ChatPPT 安装教程

ChatMind

ChatMind 官方教程

Chatmind,让人工智能来帮助我们生成思维导图

D-ID

实战教程

ChatGPT 接入

一键免费部署你的私人 ChatGPT 网站

手把手教你如何将 chatGPT 接入飞书

将 Siri 接入 ChatGPT

五分钟开发一个钉钉 ChatGPT 机器人

五分钟开发一个企业微信 ChatGPT 应用

钉钉 & 🤖 GPT-3.5 让你的工作效率直接起飞

通过腾讯云免费访问 ChatGPT.pdf

三分钟搭建一个自己的 ChatGPT (从开发到上线)

3小时!开发 ChatGPT 微信小程序

企业微信接入 GPT3

花了半个小时基于 ChatGPT 搭建了一个微信机器人

使用 ChatGPT 搭建 QQ 机器人

一键接入 ChatGPT,让你的QQ群变得热闹起来

【3分钟制作PPT】ChatGPT 搭配闪击PPT生成PPT,你只需要输入一个标题

ChatGPT 搭配闪击PPT三分钟生成PPT,你只需要输入一个标题

5分钟创建你的 QQ 群 ChatGPT 机器人!

10分钟教你搭建属于自己的 ChatGPT 微信机器人

懒人福音 - ChatGPT 自动接入-微信/Telegram电报群 二合一懒人版

微信公众号接入 ChatGPT 机器人的方法

使用 ChatGPT 制作一部视频是什么体验?(完整步骤介绍)

基于 Chatbase 为你的网站新增一个 ChatGPT 聊天机器人

模型训练

腾讯云部署清华大学 ChatGLM-6B 模型实战

LLaMA大型语言模型的本地部署

数字人

AI 创造数字人教程

基于AI 制作虚拟数字人动画 | 零基础手把手教程

智能语音

Python + edge-tts:一行代码,让你的文本轻松变成语音!

资料

行业研究

ChatGPT引发的大模型时代变革.pdf

AIGC市场厂商评估报告.pdf

ChatGPT跨行业专题报告:AIGC发展大年,推动新一轮产业革命.pdf

计算机行业:ChatGPT开启AI新纪元,AIGC投资框架梳理-20230217-银河证券-26页.pdf

2023年AIGC(GPT-4)赋能通信行业白皮书(2023年版).pdf

2023AIGC人才趋势报告.pdf

Sparks of Artificial General Intelligence Early experiments with GPT-4.pdf

GPT-4 Technical Report.pdf

腾讯研究院:AIGC发展趋势报告2023.pdf

【极客时间】李佳芮:ChatGPT 从0到1.pdf

微软 GPT-4 报告.pdf

人工智能通用大模型(ChatGPT)的进展、风险与应对.pdf

人工智能行业:GPT4及ChatGPT相关应用梳理-报告汇(vicsdf.com).pdf

ChatGPT认知白皮书.pdf

书籍

ChatGPT从入门到精通.pdf

Art of Asking ChatGPT for High-Quality Answ Engineering Techniques, The - Ibrahim John.pdf

ChatGPT 中文實戰指南_65頁版.pdf

ChatGPT 相关产品使用交流群

  1. 专注收集汇总 ChatGPT 相关产品使用教程,持续更新,永久免费在线查看,无收费内容,目标是打造 ChatGPT 菜鸟教程!
  2. 已建群聊聊 ChatGPT 相关产品使用感受、分享经验,没进群的可以扫码进群,群满可加树先生个人微信,备注「ChatGPT」,无任何 ChatGPT 收费项目,全部为公正公开免费整理汇总分享
  3. 关于文档负责人树先生:一个爱折腾,不满足现状,总想捣鼓点什么的程序员,热衷于用技术探索商业价值,喜欢实践并分享一些有价值,有意思的东西。8年 IT 相关开发工作经验,曾就职于大厂,目前已上岸国企,同时运营公众号「程序员树先生」,欢迎小伙伴关注~

img

img

免责声明

本文档所有内容均来自互联网,如涉嫌侵权,请联系树先生删除,谢谢!

在Markdown文件中添加项目符号的方法

本文介绍下在Markdown文件中添加项目符号的方法。

一、无序列表 (Unordered Lists)

使用 *、- 或 + 后跟一个空格来创建无序列表。 这三个符号的效果是相同的。

1
2
3
4
5
6
7
8
9
10
11
* 项目一
* 项目二
* 项目三

- 项目一
- 项目二
- 项目三

+ 项目一
+ 项目二
+ 项目三

渲染效果:

  • 项目一
  • 项目二
  • 项目三
  • 项目一
  • 项目二
  • 项目三
  • 项目一
  • 项目二
  • 项目三

二、有序列表 (Ordered Lists)

使用数字后跟一个点 . 和一个空格来创建有序列表。 数字的顺序并不重要,Markdown 会自动按顺序排列。

1
2
3
4
5
6
7
1. 项目一
2. 项目二
3. 项目三

1. 项目一
1. 项目二
1. 项目三

渲染效果:

  1. 项目一
  2. 项目二
  3. 项目三
  4. 项目一
  5. 项目二
  6. 项目三

三、嵌套列表

可以通过缩进嵌套列表。 建议使用四个空格或一个制表符进行缩进。

1
2
3
4
5
6
* 项目一
* 子项目一
* 子项目二
* 项目二
1. 子项目一
2. 子项目二

四、注意事项

  • 列表项之间需要空一行才能被正确渲染为独立的列表。
  • 确保符号和列表内容之间有一个空格。
You need to set client_id and slot_id to show this AD unit. Please set it in _config.yml.