• 第2-1-3章 docker-compose安装FastDFS,实现文件存储服务


    4 docker-compose安装FastDFS

    需要注意:
    network_mode 必须是host, 原因是当上传文件时,tracker会把storage的IP和端口发给client,如果是bridge模式,则发送的是内网IP,client无法访问到。
    image版本根据自己实际情况选择,lastest不包含nginx服务,1.2版本的包含nginx服务,其他fasdfs镜像均没有season的精简。

    在这里插入图片描述

    4.1 docker-compose-fastdfs.yml

    version: '3'
    services:
      fastdfs-tracker:
        image: season/fastdfs:1.2
        container_name: fastdfs-tracker
        restart: always
        volumes:
          - /mydata/fastdfs/tracker/data:/fastdfs/tracker/data
          - /mydata/fastdfs/tracker/conf:/etc/fdfs
        ports: 
          - 22122:22122
        command: tracker
      fastdfs-storage:
        image: season/fastdfs:1.2
        container_name: fastdfs-storage
        links: 
          - fastdfs-tracker
        depends_on:
          - fastdfs-tracker
        volumes:
          - /mydata/fastdfs/fdfs_conf/storage.conf:/fdfs_conf/storage.conf
          - /mydata/fastdfs/storage/data:/fastdfs/storage/data
          - /mydata/fastdfs/store_path:/fastdfs/store_path
        ports: 
          - 23000:23000
        environment:
          TRACKER_SERVER: "fastdfs-tracker:22122"
        command: storage
      fastdfs-nginx:
        image: season/fastdfs:1.2
        container_name: fastdfs-nginx
        volumes:
          - /mydata/fastdfs/nginx/conf/nginx.conf:/etc/nginx/conf/nginx.conf
          - /mydata/fastdfs/store_path:/fastdfs/store_path
        links: 
          - fastdfs-tracker
        ports: 
          - 10000:10000
        environment:
          TRACKER_SERVER: "fastdfs-tracker:22122"
        command: nginx
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41

    4.2 nginx.conf

    #user  nobody;
    worker_processes  1;
     
    #error_log  logs/error.log;
    #error_log  logs/error.log  notice;
    #error_log  logs/error.log  info;
     
    #pid        logs/nginx.pid;
     
     
    events {
        worker_connections  1024;
    }
     
     
    http {
        include       mime.types;
        default_type  application/octet-stream;
     
        #access_log  logs/access.log  main;
     
        sendfile        on;
        #tcp_nopush     on;
     
        #keepalive_timeout  0;
        keepalive_timeout  65;
     
        #gzip  on;
     
        server {
            listen       10000;
            server_name  localhost;
     
            #charset koi8-r;
     
            #缩略图需要使用插件,需要单独构建nginx镜像,此处忽略
            #location /group([0-9])/M00/.*\.(gif|jpg|jpeg|png)$ {
             #   root /fastdfs/storage/data;
             #   image on;
             #   image_output off;         
             #   image_jpeg_quality 75;
             #   image_backend off;
            #    image_backend_server http://baidu.com/docs/aabbc.png;
           # }
           
            # group1
            location /group1/M00 {
            # 文件存储目录
                root /fastdfs/storage/data;
                ngx_fastdfs_module;
            }
     
            #error_page  404              /404.html;
     
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
     }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    4.3 storage.conf

    #is this config file disabled
    # false for enabled
    # true for disabled
    disabled=false
    
    # the name of the group this storage server belongs to
    group_name=group1
    
    # bind an address of this host
    # empty for bind all addresses of this host
    bind_addr=
    
    # if bind an address of this host when connect to other servers
    # (this storage server as a client)
    # true for binding the address configed by above parameter: "bind_addr"
    # false for binding any address of this host
    client_bind=true
    
    # the storage server port
    port=23000
    
    # connect timeout in seconds
    # default value is 30s
    connect_timeout=30
    
    # network timeout in seconds
    # default value is 30s
    network_timeout=60
    
    # heart beat interval in seconds
    heart_beat_interval=30
    
    # disk usage report interval in seconds
    stat_report_interval=60
    
    # the base path to store data and log files
    base_path=/fastdfs/storage
    
    # max concurrent connections the server supported
    # default value is 256
    # more max_connections means more memory will be used
    max_connections=256
    
    # the buff size to recv / send data
    # this parameter must more than 8KB
    # default value is 64KB
    # since V2.00
    buff_size = 256KB
    
    # accept thread count
    # default value is 1
    # since V4.07
    accept_threads=1
    
    # work thread count, should <= max_connections
    # work thread deal network io
    # default value is 4
    # since V2.00
    work_threads=4
    
    # if disk read / write separated
    ##  false for mixed read and write
    ##  true for separated read and write
    # default value is true
    # since V2.00
    disk_rw_separated = true
    
    # disk reader thread count per store base path
    # for mixed read / write, this parameter can be 0
    # default value is 1
    # since V2.00
    disk_reader_threads = 1
    
    # disk writer thread count per store base path
    # for mixed read / write, this parameter can be 0
    # default value is 1
    # since V2.00
    disk_writer_threads = 1
    
    # when no entry to sync, try read binlog again after X milliseconds
    # must > 0, default value is 200ms
    sync_wait_msec=50
    
    # after sync a file, usleep milliseconds
    # 0 for sync successively (never call usleep)
    sync_interval=0
    
    # storage sync start time of a day, time format: Hour:Minute
    # Hour from 0 to 23, Minute from 0 to 59
    sync_start_time=00:00
    
    # storage sync end time of a day, time format: Hour:Minute
    # Hour from 0 to 23, Minute from 0 to 59
    sync_end_time=23:59
    
    # write to the mark file after sync N files
    # default value is 500
    write_mark_file_freq=500
    
    # path(disk or mount point) count, default value is 1
    store_path_count=1
    
    # store_path#, based 0, if store_path0 not exists, it's value is base_path
    # the paths must be exist
    store_path0=/fastdfs/store_path
    #store_path1=/home/yuqing/fastdfs2
    
    # subdir_count  * subdir_count directories will be auto created under each
    # store_path (disk), value can be 1 to 256, default value is 256
    subdir_count_per_path=256
    
    # tracker_server can ocur more than once, and tracker_server format is
    #  "host:port", host can be hostname or ip address
    tracker_server=fastdfs-tracker:22122
    
    #standard log level as syslog, case insensitive, value list:
    ### emerg for emergency
    ### alert
    ### crit for critical
    ### error
    ### warn for warning
    ### notice
    ### info
    ### debug
    log_level=info
    
    #unix group name to run this program,
    #not set (empty) means run by the group of current user
    run_by_group=
    
    #unix username to run this program,
    #not set (empty) means run by current user
    run_by_user=
    
    # allow_hosts can ocur more than once, host can be hostname or ip address,
    # "*" means match all ip addresses, can use range like this: 10.0.1.[1-15,20] or
    # host[01-08,20-25].domain.com, for example:
    # allow_hosts=10.0.1.[1-15,20]
    # allow_hosts=host[01-08,20-25].domain.com
    allow_hosts=*
    
    # the mode of the files distributed to the data path
    # 0: round robin(default)
    # 1: random, distributted by hash code
    file_distribute_path_mode=0
    
    # valid when file_distribute_to_path is set to 0 (round robin),
    # when the written file count reaches this number, then rotate to next path
    # default value is 100
    file_distribute_rotate_count=100
    
    # call fsync to disk when write big file
    # 0: never call fsync
    # other: call fsync when written bytes >= this bytes
    # default value is 0 (never call fsync)
    fsync_after_written_bytes=0
    
    # sync log buff to disk every interval seconds
    # must > 0, default value is 10 seconds
    sync_log_buff_interval=10
    
    # sync binlog buff / cache to disk every interval seconds
    # default value is 60 seconds
    sync_binlog_buff_interval=10
    
    # sync storage stat info to disk every interval seconds
    # default value is 300 seconds
    sync_stat_file_interval=300
    
    # thread stack size, should >= 512KB
    # default value is 512KB
    thread_stack_size=512KB
    
    # the priority as a source server for uploading file.
    # the lower this value, the higher its uploading priority.
    # default value is 10
    upload_priority=10
    
    # the NIC alias prefix, such as eth in Linux, you can see it by ifconfig -a
    # multi aliases split by comma. empty value means auto set by OS type
    # default values is empty
    if_alias_prefix=
    
    # if check file duplicate, when set to true, use FastDHT to store file indexes
    # 1 or yes: need check
    # 0 or no: do not check
    # default value is 0
    check_file_duplicate=0
    
    # file signature method for check file duplicate
    ## hash: four 32 bits hash code
    ## md5: MD5 signature
    # default value is hash
    # since V4.01
    file_signature_method=hash
    
    # namespace for storing file indexes (key-value pairs)
    # this item must be set when check_file_duplicate is true / on
    key_namespace=FastDFS
    
    # set keep_alive to 1 to enable persistent connection with FastDHT servers
    # default value is 0 (short connection)
    keep_alive=0
    
    # you can use "#include filename" (not include double quotes) directive to
    # load FastDHT server list, when the filename is a relative path such as
    # pure filename, the base path is the base path of current/this config file.
    # must set FastDHT server list when check_file_duplicate is true / on
    # please see INSTALL of FastDHT for detail
    ##include /home/yuqing/fastdht/conf/fdht_servers.conf
    
    # if log to access log
    # default value is false
    # since V4.00
    use_access_log = false
    
    # if rotate the access log every day
    # default value is false
    # since V4.00
    rotate_access_log = false
    
    # rotate access log time base, time format: Hour:Minute
    # Hour from 0 to 23, Minute from 0 to 59
    # default value is 00:00
    # since V4.00
    access_log_rotate_time=00:00
    
    # if rotate the error log every day
    # default value is false
    # since V4.02
    rotate_error_log = false
    
    # rotate error log time base, time format: Hour:Minute
    # Hour from 0 to 23, Minute from 0 to 59
    # default value is 00:00
    # since V4.02
    error_log_rotate_time=00:00
    
    # rotate access log when the log file exceeds this size
    # 0 means never rotates log file by log file size
    # default value is 0
    # since V4.02
    rotate_access_log_size = 0
    
    # rotate error log when the log file exceeds this size
    # 0 means never rotates log file by log file size
    # default value is 0
    # since V4.02
    rotate_error_log_size = 0
    
    # if skip the invalid record when sync file
    # default value is false
    # since V4.02
    file_sync_skip_invalid_record=false
    
    # if use connection pool
    # default value is false
    # since V4.05
    use_connection_pool = false
    
    # connections whose the idle time exceeds this time will be closed
    # unit: second
    # default value is 3600
    # since V4.05
    connection_pool_max_idle_time = 3600
    
    # use the ip address of this storage server if domain_name is empty,
    # else this domain name will ocur in the url redirected by the tracker server
    http.domain_name=
    # the port of the web server on this storage server
    http.server_port=10000
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242
    • 243
    • 244
    • 245
    • 246
    • 247
    • 248
    • 249
    • 250
    • 251
    • 252
    • 253
    • 254
    • 255
    • 256
    • 257
    • 258
    • 259
    • 260
    • 261
    • 262
    • 263
    • 264
    • 265
    • 266
    • 267
    • 268
    • 269
    • 270
    • 271

    4.4 测试

    进入到storage节点

    docker exec -it fastdfs-storage /bin/bash

    进入 storage 容器中使用命令上传一个图片, 可使用容器自带的测试图片, 也可 docker cp 将本机图片复制进来

    cd /fdfs_conf
    fdfs_upload_file storage.conf anti-steal.jpg #用容器自带的测试图片上传, 返回路径如 /group1/M00/00/00/xxxx  
    
    • 1
    • 2

    访问 localhost:10000/group1/M00/00/00/rBIAAmNmi82AJxLsAABdrZgsqUU214.jpg 出现防盗链图片即代表部署成功

    在这里插入图片描述

  • 相关阅读:
    linux库-----树莓派外设开发
    阿里云国际版虚拟主机上设置网站和域名教程
    [NGINX] NGINX下载、安装编译、启动检查停止命令
    MFC框架程序解析
    全国大学生数学竞赛(非数学专业)习题精讲等相关资源
    Duchefa丨低熔点琼脂糖 PPC中英文说明书
    UnityShader(四)
    VSCode 调试 u-boot
    webpack搭建vue脚手架
    使用Vue3封装的切换主题开关
  • 原文地址:https://blog.csdn.net/weixin_42208775/article/details/127724234