openWRT配置samba,配置docker版nginx、php、mariadb

By | 2025-01-01

在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 maskdirectory mask:设置文件和文件夹的默认权限。

保存并退出。

1.4 启动和验证 Samba

  1. 启动 Samba 服务:

    service samba4 enable
    service samba4 restart
    
  2. 验证共享:
    在其他电脑上打开文件管理器,输入:

    \\<OpenWrt的IP地址>
    

    你应该看到一个名为 docker 的共享文件夹,可以匿名访问并编辑其中的内容。


2. 配置共享权限

2.1 匿名共享和特定用户访问

你可以选择以下两种方式之一:

方式1:匿名共享

如果希望任何用户都可以访问并编辑共享文件夹,只需保持 guest ok = yes,并将文件和文件夹的权限设置为:

chmod -R 777 /mnt/docker

方式2:特定用户访问

  1. 创建 Samba 用户:

    smbpasswd -a your_user
    

    为新用户 your_user 设置密码。

  2. 修改 /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
    
  3. 重启 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 用户运行,因此容器对挂载的文件夹拥有完全权限。为了避免权限问题:

  1. 确保 Samba 共享的文件夹权限足够宽松
    如果使用匿名共享,执行以下命令确保所有用户都可以访问:

    chmod -R 777 /mnt/docker
    
  2. 配置 force user
    在 Samba 配置中使用 force user = root,让所有 Samba 访问的文件操作都以 root 用户身份执行。

  3. 验证权限
    在其他电脑通过 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. 测试

  1. Samba 共享测试

    • 在其他电脑通过网络访问共享文件夹,确保可以正常读取和编辑文件。
    • 如果使用特定用户访问,输入正确的用户名和密码登录。
  2. Docker 容器测试

    • 修改共享文件夹中的配置文件(如 NGINX 配置文件),然后在 OpenWrt 上重启对应的容器:
      docker-compose restart nginx
      
    • 检查容器是否正确加载修改后的配置。
  3. 权限验证

    • 确保修改文件后,权限没有问题,可以被 Docker 容器和 Samba 访问正常使用。

通过以上步骤,你可以在 OpenWrt 系统中成功配置 Samba 共享,并运行 NGINX、PHP 和 MariaDB 的 Docker 容器,同时解决了权限冲突的问题。