AWS EC2上Weblate Docker实例重建后丢失SSH密钥,如何持久化存储?
解决方案:将Weblate的SSH密钥存储到持久化存储
完全可以将Weblate的SSH密钥存储到持久化存储中,核心思路是将容器内存储密钥的目录挂载到AWS的持久化存储服务,避免EC2或容器重建时密钥丢失。以下是具体实现步骤:
1. 确定Weblate SSH密钥的默认存储路径
Weblate容器默认将SSH密钥存储在/app/data/.ssh目录下,这是需要持久化的核心目录。
2. 选择AWS持久化存储方案
根据你的部署场景选择合适的存储:
- EBS卷:适合单EC2实例部署,挂载到EC2后直接映射给容器使用。
- EFS文件系统:适合多EC2实例共享的集群场景,跨实例自动同步密钥,无需额外配置。
3. 配置Docker挂载持久化目录
单容器启动方式
假设你已将持久化存储挂载到EC2的/mnt/weblate_ssh路径,启动容器时添加挂载参数:
docker run -v /mnt/weblate_ssh:/app/data/.ssh weblate/weblate
Docker Compose方式
在docker-compose.yml中添加卷挂载配置:
services: weblate: image: weblate/weblate volumes: - /mnt/weblate_ssh:/app/data/.ssh
4. 迁移现有SSH密钥到持久化存储
如果容器中已有可用的SSH密钥,先将其复制到持久化目录:
docker cp <你的容器ID>:/app/data/.ssh/ /mnt/weblate_ssh/
然后修正目录和文件权限(确保Weblate容器运行用户可读取):
chmod 700 /mnt/weblate_ssh chmod 600 /mnt/weblate_ssh/id_rsa
5. 验证持久化效果
销毁并重建EC2实例后,重新挂载持久化存储到相同的本地路径,启动Weblate容器。检查容器内/app/data/.ssh目录是否存在密钥文件,测试Bitbucket VCS同步功能是否正常。
注意事项
- 不要使用EC2实例存储(临时存储),实例销毁后数据会直接丢失。
- 使用EBS时,需确保EC2重建时将EBS卷重新挂载到指定路径;使用EFS时,只要EC2在同一VPC且有权限,挂载路径一致即可自动同步数据。
内容的提问来源于stack exchange,提问作者Daniele
相关产品推荐
相关产品推荐

