服务器上建立画廊
自建画廊
home-gallery项目:https://docs.home-gallery.org/install/
我是将Onedrive挂载到服务器上,再在服务器运行home-gallery
挂载Onedrive到服务器的教程:https://blog.lthero.cn/2024/05/12/MountOneDriveUsingRclone/
Docker
HomeGallery 的docker镜像下载 xemle/home-gallery (amd64, arm64, arm/v7 and arm/v6 architecture).
1 | docker pull xemle/home-gallery |
Data volume structure
The gallery application is located at /app whereas the data is stored in /data within the container. The /data folder has following structure:
1 | `-- /data - Docker data volume |
The media volumes should be mounted into the /data directory. Eg. mount your host directory ~/Pictures to /data/Pictures in the container and add it as source to your gallery.config.yml.
To avoid user permission problems it is advisable to run the container with your user and group id via -u parameter.
Quickstart
1 | # 创建home-gallery,保存数据 |
把/root/Onedrive/Photos/Z30/修改成本地的相册目录(后面的:/data/Pictures不要动),运行server后,浏览器上打开localhost:3000即可
The docker container is configured to poll image sources each 5 minutes for compatibility reasons of slow or large media volumes. Check if inotify through disabled polling by
GALLERY_WATCH_POLL_INTERVAL=0is working for you.它会在后台生成图像的缩略图,这里有个间隔设置啊(-e GALLERY_WATCH_POLL_INTERVAL=60),每1分钟会更新一批照片,所以运行了
gallery run server后,可以多等一会儿
使用HTTP访问
要将运行在Docker容器中的服务通过域名访问,并使用Nginx作为反向代理来转发到宿主机的3000端口,你需要完成几个步骤。这包括设置DNS记录、配置Nginx以及确保网络安全。下面是具体步骤:
步骤 1: 设置DNS记录
确保你的域名 gallery.lthero.top 的DNS记录指向托管Nginx的服务器的IP地址。这通常在你的域名注册商处进行设置:
- A记录:将域名指向IPv4地址。
- AAAA记录:将域名指向IPv6地址(如果适用)。
步骤 2: 安装并启动Nginx
步骤 1: 更新软件包列表
打开终端,首先使用apt命令更新你的包列表,以确保你安装的是最新版本的Nginx。
1 | sudo apt update |
步骤 2: 安装Nginx
使用apt安装Nginx。
1 | sudo apt install nginx |
步骤 3: 配置Nginx
你需要在Nginx中创建一个新的服务器块(server block),或者在已有的默认配置中修改,以设置反向代理。以下是一个基本的Nginx配置示例,将会把所有到 gallery.lthero.top 的请求转发到本地的3000端口:
-
打开或创建一个新的Nginx配置文件:
1
sudo vim /etc/nginx/sites-available/gallery.lthero.top
-
添加以下配置:
1
2
3
4
5
6
7
8
9
10
11
12
13server {
listen 80;
server_name gallery.lthero.top;
location / {
proxy_pass http://localhost:3000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}这个配置做了以下几点:
listen 80;告诉Nginx监听80端口(HTTP标准端口)。server_name gallery.lthero.top;设置这个块应当响应的域名。proxy_pass http://localhost:3000;指定所有传入的请求转发到本地的3000端口。proxy_set_header指令将重要的HTTP头信息转发给后端应用。
-
启用配置文件通过创建一个符号链接(一定要做)
1
sudo ln -s /etc/nginx/sites-available/gallery.lthero.top /etc/nginx/sites-enabled/
-
检查Nginx配置文件是否有语法错误:
1
sudo nginx -t
-
如果没有错误,重启Nginx以应用配置(一定要做)
1
sudo systemctl restart nginx
步骤 4: 调整防火墙规则
确保你的服务器的防火墙规则允许HTTP(端口80)和HTTPS(端口443,如果你使用SSL)的流量。如果你正在使用ufw,可以使用以下命令:
1 | sudo ufw allow 'Nginx Full' |
步骤 5: 测试配置
在浏览器中输入 http://gallery.lthero.top 或使用命令行工具如 curl 来测试你的配置:
1 | curl http://gallery.lthero.top |
你应该能看到从Docker容器中运行的服务响应的内容。
这样,你就配置好了Nginx作为反向代理,将域名 gallery.lthero.top 的流量转发到宿主机的3000端口上的服务。如果你希望使用HTTPS,你还需要设置SSL证书,可以考虑使用Let’s Encrypt免费证书并配置HTTPS。
使用HTTPS访问
要让你的域名 gallery.lthero.top 使用 HTTPS,你需要获取 SSL/TLS 证书,并配置 Nginx 以使用这些证书来加密网页内容。以下是详细的步骤,包括如何使用 Let’s Encrypt 提供的免费证书自动化这个过程。
步骤 1: 安装 Certbot
Certbot 是一个自动获取并安装 Let’s Encrypt 证书的客户端。在 Ubuntu 上安装 Certbot 及其 Nginx 插件非常简单:
1 | sudo apt update |
步骤 2: 获取和安装证书
使用 Certbot 获取并为你的域名安装证书:
1 | sudo certbot --nginx -d gallery.lthero.top |
此命令会自动为指定的域名 gallery.lthero.top 配置 SSL 证书,并更新 Nginx 配置以使用这些证书。Certbot 会询问你一些问题,比如电子邮件地址(用于紧急联系和证书续订提醒),以及是否重定向所有 HTTP 请求到 HTTPS(强烈建议启用)。
生成的证书位置/etc/letsencrypt/live/
步骤 3: 更新 Nginx 配置
如果你想手动编辑 Nginx 配置文件,可以按以下方式配置:
1 | sudo vim /etc/nginx/sites-available/gallery.lthero.top |
1 | server { |
这个配置不仅启用了 HTTPS,还包括了一些现代的安全实践,如启用 HTTP/2,配置加密套件和协议等。
步骤 4: 重新加载 Nginx
启用配置文件通过创建一个符号链接
1 | sudo ln -s /etc/nginx/sites-available/gallery.lthero.top /etc/nginx/sites-enabled/ |
更改配置后,需要重新加载 Nginx 以应用新的配置:
检查配置文件是否有语法错误,如果有warn!直接看“遇到的问题”部分,重新加载配置是不一定能work的
1 | # 检查配置文件是否有语法错误 |
步骤 5: 验证 HTTPS
在浏览器中访问 https://gallery.lthero.top 来检查是否配置成功。你应该能够看到一个安全锁标志,表明连接是通过 HTTPS 加密的。
步骤 6: 自动续订证书
Let’s Encrypt 的证书有效期为90天,因此建议设置自动续订:
1 | sudo certbot renew |
这个命令会测试证书续订过程。如果这个测试成功,添加定时任务crontab:
crontab -e再填写下面内容,表示每月第一天会自动执行
1 | 0 0 1 * * /usr/local/bin/certbot renew --manual --preferred-challenges dns --manual-auth-hook "alidns" --manual-cleanup-hook "alidns clean" --deploy-hook "nginx -s reload" |
续签的证书位置/etc/letsencrypt/renewal
通过以上步骤,你的站点 gallery.lthero.top 现在应该能够安全地使用 HTTPS 进行通信了。
如果要换编辑器,运行下面的命令
1 | select-editor |
遇到的问题
输入了这条命令后sudo nginx -t,发现存在warn
1 | root@ubuntu-sf:~/zfile# sudo nginx -t |
问题原因,certbot自动修改了/etc/nginx/sites-available/default文件
解决方法:https://stackoverflow.com/questions/11426087/nginx-error-conflicting-server-name-ignored
我的解决方法:
进入sites-available目录
1 | cd /etc/nginx/sites-available |
随后执行
1 | grep -rnw . -e gallery.lthero.top |
这个命令会输出当前目录下,所有包含“gallery.lthero.top”字段的文件,以及出现的行数,如下
1 | root@ubuntu-sf:/etc/nginx/sites-available# grep -rnw . -e gallery.lthero.top |
出现的问题是在default中出来了gallery.lthero.top相关的内容
随后,我把default替换成原来的内容,如下
1 | ## |
再执行reload和restart就好了
1 | sudo systemctl reload nginx # 重新加载配置 |








