V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Rebron1900
V2EX  ›  Docker

我又来了,还是 docker 的问题: docker 起的 nginx,老是提配置文件打不开。

  •  
  •   Rebron1900 · 2023-12-16 11:52:18 +08:00 · 4846 次点击
    这是一个创建于 368 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我之前的服务器 nginx 是本地安装的,我搬家的时候直接把/etc/nginx/目录下的所有文件都搬到新 vps 上。 新 vps 上用 docker 起了个 nginx ,挂载的目录,compose 文件配置如下,up 后但是总是提示 nginx: [emerg] open() "/etc/nginx/sites-enabled/test.live.conf" failed (2: No such file or directory) in /etc/nginx/nginx.conf:61 请问我那里理解错了呢?

    version: '3'
    services:
      nginx:
        image: nginx
        container_name: nginx
        volumes:
          - /home/test/data/nginx-data:/etc/nginx
        ports:
          - "80:80"
    
    38 条回复    2023-12-24 18:24:41 +08:00
    nagisaushio
        1
    nagisaushio  
       2023-12-16 11:56:39 +08:00 via Android
    sites-enabled/test.live.conf 存在吗
    nagisaushio
        2
    nagisaushio  
       2023-12-16 11:58:20 +08:00 via Android
    可能是因为 site-enabled 下都是软链?挂载后失效了
    Rebron1900
        3
    Rebron1900  
    OP
       2023-12-16 11:59:01 +08:00
    @nagisaushio 存在,通过 ln -s 从 sites-available 链接过去的。
    Rebron1900
        4
    Rebron1900  
    OP
       2023-12-16 11:59:48 +08:00
    @nagisaushio 我试试 cp 一个过去。
    Rebron1900
        5
    Rebron1900  
    OP
       2023-12-16 12:00:56 +08:00
    @nagisaushio 确实~~~
    Rebron1900
        6
    Rebron1900  
    OP
       2023-12-16 12:03:11 +08:00
    有点动摇了,到底用不用 docker 起 nginx ,上面这个问题解决完,证书又出问题了。
    我在 snippets 里写了个 ssl 的配置,在所有站点的 conf 里引用,现在又提示证书加载失败~~!!。
    BrandonNg
        7
    BrandonNg  
       2023-12-16 12:09:41 +08:00
    nginx/数据库这种 最好还是不要用 docker
    julyclyde
        8
    julyclyde  
       2023-12-16 12:36:18 +08:00
    @Rebron1900 首先最好不用容器技术运行基础软件
    其次,你上次配置文件咋解决的,按照思路再看看证书呗
    SenLief
        9
    SenLief  
       2023-12-16 12:42:03 +08:00
    nginx 不建议用 docker ,我觉得手动配置好些钱,减少出错。
    Rebron1900
        10
    Rebron1900  
    OP
       2023-12-16 13:00:50 +08:00
    @julyclyde 按之前的思路解决了,算了,还是不用容器了...本地起算了。
    cdlnls
        11
    cdlnls  
       2023-12-16 13:18:42 +08:00
    我也倾向于 nginx 不用 docker ,只有在需要更换版本测试的时候会考虑到用 docker 来快速启动。本身 nginx 安装并不复杂,基本上发行版的包管理都带了,安装也就是一句命令的事,也不会和系统其他组件冲突。用了 docker 的话还要额外考虑配置文件、日志文件、静态资源文件的挂载,ssl 证书自动更新也要额外处理。反正使用 docker 的优势一个都没有体现,还额外增加了其他麻烦事。
    julyclyde
        12
    julyclyde  
       2023-12-16 13:22:38 +08:00
    @Rebron1900 恭喜拨乱反正
    不如写写解决问题的经验
    evill
        13
    evill  
       2023-12-16 14:54:27 +08:00
    查看文件所属的 uid 和 container 的 uid 是否一致
    vishun
        14
    vishun  
       2023-12-16 14:57:51 +08:00
    @Rebron1900 #6 如果是自己用的站点,直接用 caddy 会方便一些,省的配置 ssl 这些。
    Rebron1900
        15
    Rebron1900  
    OP
       2023-12-16 14:58:21 +08:00
    结帖,基础服务本地安装,hhhh
    Rebron1900
        16
    Rebron1900  
    OP
       2023-12-16 14:59:47 +08:00
    @vishun 还是用 Nginx 好一些,出问题了能找到的资料会多一些,好解决。SSL 我是用代码段+泛域名证书处理的,其实还算方便,每个服务引用一下就好了。
    miaotaizi
        17
    miaotaizi  
       2023-12-16 15:11:05 +08:00
    你这应该是没明白 docker 的特性

    可以找一些现成的 docker 方案看看

    我之前是通过 laradock 这个项目学习到的
    chenqh
        18
    chenqh  
       2023-12-16 15:26:19 +08:00
    nginx 这种东西从来不会装失败吧,mysql 我倒是装失败过,nginx 没必要 docker
    chackchackGO
        19
    chackchackGO  
       2023-12-16 15:32:34 +08:00
    @Rebron1900 docker nginx proxy?
    version
        20
    version  
       2023-12-16 15:44:34 +08:00
    nginx-proxy-manager
    traefik
    用过后.我再也没安装过任何软件命令行了..啥东西都要有 docker 没自己包一个
    服务器本地安装..效率太低..很多网络不给力..
    lcl101
        21
    lcl101  
       2023-12-16 17:32:16 +08:00
    给写入权限了么
    jasonyang9
        22
    jasonyang9  
       2023-12-16 18:15:44 +08:00 via Android
    @version 老哥有教程么或者给几个例子什么的
    zzerd
        23
    zzerd  
       2023-12-17 11:41:27 +08:00 via Android
    @version treafik +1
    dreamage
        24
    dreamage  
       2023-12-17 21:01:05 +08:00
    歪个楼 这帖子 ID 挺顺
    Serino
        25
    Serino  
       2023-12-18 13:02:21 +08:00
    如果是为了反代,我为了偷懒,选择了 Caddy
    Rebron1900
        26
    Rebron1900  
    OP
       2023-12-18 13:34:35 +08:00
    @miaotaizi 确实有些疑惑,比如我帖子里说到,机器里如果好几个 server 里都设置 mysql ,会造成资源浪费吗?
    Rebron1900
        27
    Rebron1900  
    OP
       2023-12-18 13:42:13 +08:00
    @Serino 确实是为了反代,不过之前 nginx 上有七八域名配置,不想再一个个去转成 Caddy 了。
    kindom
        28
    kindom  
       2023-12-18 13:50:30 +08:00
    投 NPM 一票
    Serino
        29
    Serino  
       364 天前
    @Rebron1900 #27 我之前也是用 nginx ,好多坑掉进去,什么 https 头啊各种乱七八糟的,这方面我是小白,搞不懂,糟心。

    换了 Caddy ,一般配置就三四行,
    一行配置端口号,
    一行配置证书 (我另外用脚本申请的),外加 tls 版本,
    一行配置反代 IP ,
    顶多再加两行可有可无的,配置 encode 方式和日志。
    保存,重启 Caddy ,收工~
    dianso
        30
    dianso  
       364 天前
    @Serino #29 CADDY 没有详细文档啊,试了几次都失败了,就放弃了。。。
    Serino
        31
    Serino  
       364 天前
    @Rebron1900 #27 有的吧,印象中官网都有。

    你做反代,用 Caddy1 就行了,不需要用 Caddy2 。
    一些小的 Caddy 的镜像,才十多 MB 。
    但有些人编译的估计有问题,用不了。
    我用的是这个
    mting/xcaddy ( https://hub.docker.com/r/mting/xcaddy)

    ---

    docker 部署的时候,映射 Caddy 的那个/etc/caddy 路径出来,
    然后修改这个路径下的 Caddyfile 配置文件,
    比如这样:

    # whoami
    :63001 {
    tls /etc/caddy/myCert.cer /etc/caddy/myCert.key {
    protocols tls1.3
    }
    reverse_proxy 172.16.18.201
    encode gzip zstd
    }

    重启 Caddy ,反代就立马生效了。

    配置里面的这个
    reverse_proxy 172.16.18.201
    如果有需要,也是可以带端口的,比如
    reverse_proxy 172.16.18.201:23456

    SSL 证书自己找方法搞定。
    我是写了个脚本,申请到就复制到特定位置覆盖。

    这样,访问 caddy 的 63001 端口,就会反代到 172.16.18.201 ,
    不用担心 nginx 什么 https 这个头那个头的问题。



    最初换 Caddy ,是因为我太小白了,
    Gotify docker 的那个 https ,在 nginx 下,实在搞不定。
    用 Caddy ,嘿嘿,几行解决,顺利连通。

    ---

    如果要弄 log ,
    Caddyfile ,前面的部分加上:

    (log) {
    log {
    output file /etc/caddy/log/{args.0}/access.log {
    roll_size 5MiB
    roll_local_time
    roll_keep 25
    roll_keep_for 2160h
    }
    format console
    }
    }

    然后反代配置加一行改成这样:

    # whoami
    :63000 {
    tls /etc/caddy/myCert.cer /etc/caddy/myCert.key {
    protocols tls1.3
    }
    reverse_proxy 172.16.18.201
    encode gzip zstd
    import log whoami
    }

    ---

    如果想做个小的静态网站,
    反代的配置再加一行
    root * /etc/caddy/xxxxxx
    类似这样。
    这样访问的时候就会自动链接到这个目录下的 index.html

    对比让我头大的 nginx ,Caddy 真的超简单
    Serino
        32
    Serino  
       364 天前
    @Serino #31 好像 V2EX 把我的缩进吃吃了
    Rebron1900
        33
    Rebron1900  
    OP
       363 天前
    @dianso 真是哪哪都有你呀。
    DD0a48YwCzYUCQ8y
        34
    DD0a48YwCzYUCQ8y  
       362 天前
    docker 启动 nginx 有个坑,就是需要自己先把配置文件 cp 出来再映射(Docker 部署 Nginx 服务)[https://blog.zsan.cf/posts/docker-build-nginx/]
    另外非专业用户还是用 caddy 吧!现代化工具,官方 docker 支持,部署太简单了!
    Rebron1900
        35
    Rebron1900  
    OP
       362 天前
    @yongso 对,我当时也发现了这个问题。还是听楼上大家说的,这种服务还是直接本地起一个吧。
    Rebron1900
        36
    Rebron1900  
    OP
       362 天前
    @yongso 目前用的一木记账,最近也写了一篇记账的文章,hhh.
    你博客的 twikoo 好像出问题了。
    DD0a48YwCzYUCQ8y
        37
    DD0a48YwCzYUCQ8y  
       359 天前
    @Rebron1900 感谢🙏由于之前换域名导致的跨域问题
    DD0a48YwCzYUCQ8y
        38
    DD0a48YwCzYUCQ8y  
       359 天前
    @Rebron1900 一木记账和钱际好像是一类的,不过还是觉得有能力自建记账,账本可是命根子啊,关于隐私这块,都是从业人士,不用多说都知道
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5581 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 06:37 · PVG 14:37 · LAX 22:37 · JFK 01:37
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.