缘起
在网上写博客时有可能同一篇文章要上传到不同的平台,例如有些文章既会放在本网站上,也会放在项目的GitHub仓库的README里。
这时如果文章中的图片使用本地图片的话,就需要在不同平台上各放一份,不易于统一更新和管理。因此就产生了搭建一个个人图床
来统一管理这些图片的想法。
使用私人图床,写文章引用图片时直接插入图片在私人图床中的链接,便于之后的统一管理。
前置条件
- docker和docker compose
- 域名(二级域名即可)
- acme.sh (生成SSL证书)
- nginx (反向代理)
关于上述软件和工具的安装和准备,详情请参见“使用Nextcloud和docker自建个人云网盘”
安装Chevereto
配置docker-compose
由于我们在上面已经生成了SSL证书并配置了nginx,因此在docker中我们只需要配置Chevereto即可。
这里我在服务器的硬盘上单独划了一个分区作为Chevereto的安装根目录。在Chevereto安装根目录下创建docker-compose.yml
文件,写入以下内容:
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
|
version: "3.2"
services:
database:
container_name: chevereto-free_database
image: mariadb:focal
networks:
- chevereto_network
volumes:
- ./database:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: your_root_password
MYSQL_DATABASE: chevereto
MYSQL_USER: chevereto
MYSQL_PASSWORD: your_user_password
chevereto:
container_name: chevereto-free_app
image: ghcr.io/rodber/chevereto-free:1.6
networks:
- chevereto_network
volumes:
- ./images:/var/www/html/images/
- ./content:/var/www/html/content/
ports:
- 8810:80
restart: always
environment:
CHEVERETO_TAG: "free"
CHEVERETO_DB_HOST: database
CHEVERETO_DB_USER: chevereto
CHEVERETO_DB_PASS: your_chevereto_password
CHEVERETO_DB_PORT: 3306
CHEVERETO_DB_NAME: chevereto
CHEVERETO_DISABLE_UPDATE_HTTP: 1
CHEVERETO_DISABLE_UPDATE_CLI: 1
CHEVERETO_HTTPS: 0
networks:
chevereto_network:
|
这里需要把“MYSQL_ROOT_PASSSWORD”和“MYSQL_PASSWORD”改为你自己设置的数据库密码,也可以把“MYSQL_DATABASE”和“MYSQL_USER”的名字改掉。
用docker-compose生成容器
在Nextcloud安装根目录下执行如下命令来生成容器:
1
|
sudo docker-compose up -d
|
域名证书和反向代理
用acme.sh生成免费的域名证书
具体过程可参见个人网站的建立过程(二):使用Hugo框架搭建个人网站。
主要步骤如下:
-
使用下面的命令生成证书:
1
|
acme.sh --issue --dns dns_ali -d your.domain.name
|
-
使用下面的命令将证书复制到你的nextcloud目录下,例如我在nextcloud安装目录下新建了一个文件夹cert
来存放证书文件:
1
2
3
|
acme.sh --install-cert -d your.domain.name \
--key-file your_cert_path/key.pem \
--fullchain-file your_cert_path/cert.pem
|
用nginx设置反向代理
在nginx的配置目录下创建一个新的配置文件nextcloud.conf
作为云网盘的反向代理配置文件,文件内写入:
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
|
upstream your.domain.name {
server 127.0.0.1:8810;
}
server {
listen 80;
server_name your.domain.name;
return 301 https://your.domain.name$request_uri;
}
server {
listen 443 ssl;
server_name your.domain.name;
gzip on;
# ssl 配置
ssl_certificate your_cert_path/cert.pem;
ssl_certificate_key your_cert_path/key.pem;
location / {
proxy_redirect off;
proxy_pass http://your.domain.name;
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Ssl on;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Frame-Options SAMEORIGIN;
client_max_body_size 100m;
client_body_buffer_size 128k;
proxy_buffer_size 4k;
proxy_buffers 4 32k;
proxy_busy_buffers_size 64k;
proxy_temp_file_write_size 64k;
}
}
|
这里我使用8810端口作为Chevereto的服务端口,限制用户上传文件最大为100 M。SSL证书存放在上一步指定的位置。
配置完成后重启nginx服务使修改生效:
1
|
sudo service nginx restart
|
初始化和后续设置
完成上述步骤后就可以从浏览器访问自己的私人图床啦!在浏览器内输入图床的网址,例如我的是https://img.jinli.io。就会进入如下页面:
我忘记第一次进入这个页面是否还需要做额外的设置了,但只要按照提示应该就很容易完成。
然后按照提示创建用户名、密码,就可以登录进入了!