环境
基于portainer版本:1.24.2.和docker版本:19.03.5
背景
近期会使用相册管理软件PhotoPrism,产生的需求。
PhotoPrism 默认使用内建的 MariaDB 数据库来存储数据,考虑到它的应用是那么的广泛,我们应该避免未来多个 docker 应用各自运行独立的 MariaDB 数据库。因此,请先 安装 Docker 版本的 MariaDB 数据库和可视化数据库管理工具 phpMyAdmin ,这对节省系统资源和维护管理相当有用。
准备几个存储卷
方便MariaDB映射
物理来源pve硬盘,nfs映射
pve上建好目录结构
创建好存储卷
拉取MariaDB镜像
- 进入容器,添加容器
- 编辑参数
名称:mariadb
镜像源:mariadb:latest
添加存储卷
分别关联前面准备的两个目录
"/var/lib/mysql" # 数据库数据目录
"/etc/mysql/conf.d" # 数据库配置目录
图示如下:
添加环境变量
进入环境变量,并添加2个参数.
TZ: Asia/Shanghai # 容器内部时区
MYSQL_ROOT_PASSWORD: insecure # 数据库 ROOT 用户密码,自行指定
再修改重启策略为除非停止
网传的参数多余,我没有找到地方设置的如下:
security_opt:
- seccomp:unconfined
- apparmor:unconfined
部署
拉取 phpMyAdmin 镜像
- 进入容器,添加容器
- 编辑参数
名称:phpMyAdmin
镜像源:phpmyadmin/phpmyadmin:5.1
端口:9080:80
添加环境变量
进入环境变量,并添加2个参数.
TZ: Asia/Shanghai # 容器内部时区
UPLOAD_LIMIT: 128M # 默认上传文件大小限制调整到 128 M
PMA_HOST: mariadb:3306 # 指定数据库的位置和端口,默认值
MYSQL_ROOT_PASSWORD: insecure # 数据库 ROOT 用户密码,自行指定
MARIADB_AUTO_UPGRADE: 1
再修改重启策略为除非停止
网传的参数yaml配置的,我没有找到地方设置的如下:
主要是设置启动顺序,依赖于mariadb容器后 再启动。
depends_on:
- mariadb
部署
打开ip+9080就可以访问数据库了。
遇到问题
登录提示错误:
- 需要配置MariaDB以允许远程连接:(也可以作为检查用,直接看第二步)
首先,你需要进入容器内操作MySQL命令行进行权限设置。可以通过以下命令进入容器的bash shell:
docker exec -it mariadb bash
然后,在容器内作为root用户登录MySQL,并赋予root用户或者其他用户远程访问权限:
mysql -u root -p
报错
bash: mysql: command not found
需要安装客户端
apt-get update
apt-get install mysql-client -y
exit后重新进入,即可使用mysql命令。
mysql -u root -p
select host,user,plugin,authentication_string from mysql.user;
检查登录用户名密码 ip限制
如果没有root的%,使用下面两行代码添加
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'mariadbyyds@';
FLUSH PRIVILEGES;
这里 GRANT 语句授予了root用户从任何IP地址(%)访问所有数据库的所有权限。
- 重新登录还是不行
检查后,原来是两个容器网络不在一起。前面的感觉设置所有ip登录就感觉没啥用,可能公网访问再用吧。
通过 Portainer 管理面板创建一个 PhotoPrism 和 MariaDB 专用的网络,此举可以提升安全性。
点击 Portainer 左侧 Networks,点击右侧 Add network,在 name 处输入 photoprism-net,然后直接点击页面底部的 Create the network 完成创建。
将mariadb和 phpMyAdmin容器的网络分别加入photoprism-net。
重新登陆记录。
后记
http://localhost:9080
账户名 root 密码 MYSQL_ROOT_PASSWORD 设置的值
如果您不是在本机安装,请不要忘记将 localhost 替换为安装设备的实际 IP 地址
如果您修改了默认的 HTTP 访问端口,请不要忘记将 9080 替换为您自定义的端口
后续开始配置photoprim软件。