在OpenWrt系统中,完成Samba配置并共享文件夹,然后创建NGINX、PHP和MariaDB的配置文件和数据目录,以及运行Docker容器时,确实需要仔细处理权限问题,尤其是Docker容器默认运行为 root 用户,而 Samba 共享可能涉及匿名访问或特定用户的权限设置。
以下是详细的实现步骤:
1. 配置 Samba 并共享文件夹
1.1 安装 Samba
确保 Samba 已安装在 OpenWrt 上:
opkg update
opkg install samba4-server luci-app-samba4
1.2 创建共享文件夹
创建用于存放 NGINX、PHP 和 MariaDB 配置文件和数据的目录:
mkdir -p /mnt/docker/nginx/conf
mkdir -p /mnt/docker/nginx/html
mkdir -p /mnt/docker/nginx/logs
mkdir -p /mnt/docker/php
mkdir -p /mnt/docker/mariadb/data
mkdir -p /mnt/docker/mariadb/conf
这些文件夹将分别用于存放 NGINX 的配置文件、静态文件、日志,PHP 的代码文件,以及 MariaDB 的数据和配置文件。
1.3 配置 Samba
编辑 Samba 的配置文件 /etc/samba/smb.conf.template:
nano /etc/samba/smb.conf.template
添加以下内容以共享 /mnt/docker 目录:
[docker]
path = /mnt/docker
browseable = yes
read only = no
guest ok = yes
create mask = 0666
directory mask = 0777
force user = root
guest ok = yes:允许匿名访问。force user = root:确保所有共享文件夹的访问权限与root用户一致。create mask和directory mask:设置文件和文件夹的默认权限。
保存并退出。
1.4 启动和验证 Samba
启动 Samba 服务:
service samba4 enable service samba4 restart验证共享:
在其他电脑上打开文件管理器,输入:\\<OpenWrt的IP地址>你应该看到一个名为
docker的共享文件夹,可以匿名访问并编辑其中的内容。
2. 配置共享权限
2.1 匿名共享和特定用户访问
你可以选择以下两种方式之一:
方式1:匿名共享
如果希望任何用户都可以访问并编辑共享文件夹,只需保持 guest ok = yes,并将文件和文件夹的权限设置为:
chmod -R 777 /mnt/docker
方式2:特定用户访问
创建 Samba 用户:
smbpasswd -a your_user为新用户
your_user设置密码。修改
/etc/samba/smb.conf.template,添加用户访问控制:[docker] path = /mnt/docker browseable = yes read only = no valid users = your_user create mask = 0666 directory mask = 0777 force user = root重启 Samba 服务:
service samba4 restart在其他电脑连接共享时,需要使用
your_user和密码进行身份验证。
3. 创建 Docker 容器
3.1 准备 Docker Compose 配置文件
创建 docker-compose.yml 文件:
cd /mnt/docker
nano docker-compose.yml
内容如下:
version: '3.8'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "8080:80"
volumes:
- ./nginx/conf:/etc/nginx/conf.d
- ./nginx/html:/usr/share/nginx/html
- ./nginx/logs:/var/log/nginx
php:
image: php:7.4-fpm
container_name: php
volumes:
- ./php:/var/www/html
mariadb:
image: mariadb:latest
container_name: mariadb
environment:
MYSQL_ROOT_PASSWORD: root_password
MYSQL_DATABASE: testdb
MYSQL_USER: testuser
MYSQL_PASSWORD: testpassword
volumes:
- ./mariadb/data:/var/lib/mysql
- ./mariadb/conf:/etc/mysql/conf.d
ports:
- "3306:3306"
3.2 启动容器
启动 Docker 容器:
docker-compose up -d
4. 权限问题的解决
4.1 Docker 容器运行时的权限
Docker 容器中的进程通常以 root 用户运行,因此容器对挂载的文件夹拥有完全权限。为了避免权限问题:
确保 Samba 共享的文件夹权限足够宽松:
如果使用匿名共享,执行以下命令确保所有用户都可以访问:chmod -R 777 /mnt/docker配置
force user:
在 Samba 配置中使用force user = root,让所有 Samba 访问的文件操作都以root用户身份执行。验证权限:
在其他电脑通过 Samba 修改文件后,检查文件的所有者和权限:ls -l /mnt/docker如果某些文件权限不正确,可以手动调整:
chown -R root:root /mnt/docker chmod -R 777 /mnt/docker
4.2 特定用户访问的权限问题
如果选择特定用户访问(如 your_user),需要确保 your_user 对 /mnt/docker 文件夹具有足够权限:
chown -R your_user:your_user /mnt/docker
chmod -R 775 /mnt/docker
5. 测试
Samba 共享测试:
- 在其他电脑通过网络访问共享文件夹,确保可以正常读取和编辑文件。
- 如果使用特定用户访问,输入正确的用户名和密码登录。
Docker 容器测试:
- 修改共享文件夹中的配置文件(如 NGINX 配置文件),然后在 OpenWrt 上重启对应的容器:
docker-compose restart nginx - 检查容器是否正确加载修改后的配置。
- 修改共享文件夹中的配置文件(如 NGINX 配置文件),然后在 OpenWrt 上重启对应的容器:
权限验证:
- 确保修改文件后,权限没有问题,可以被 Docker 容器和 Samba 访问正常使用。
通过以上步骤,你可以在 OpenWrt 系统中成功配置 Samba 共享,并运行 NGINX、PHP 和 MariaDB 的 Docker 容器,同时解决了权限冲突的问题。