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

大家是怎么管理服务的?

  •  
  •   sonnyclarity492 · 16 天前 · 1799 次点击

    随着私有部署的程序越来越多,很多程序都默认使用 8008 3000 这样的默认端口,不修改会冲突,修改了有时候会想不起来对应的端口号。

    用 docker 的话端口号能和对应的容器对应起来,但复杂的带参数的启动命令可能会忘记,只得又去网上查找。

    请问 V 友们是如何管理私有服务的呢?有现成工具还是“纸笔”记录?

    24 条回复    2024-05-03 00:08:22 +08:00
    dif
        1
    dif  
       16 天前   ❤️ 1
    看情况咯,有些用 pm2 ,有些用 supervisor 。 另外端口也都是由有点规则。不行就简单写个页面,做端口管理。几个增删改查就能搞定。
    LeslieLeung
        2
    LeslieLeung  
       16 天前   ❤️ 1
    以前用 notion 的表格做过一个,主要是记某服务部署在哪台机器上了。后来不用 notion 了就没了。

    至于启动命令的问题,docker compose 能解决你的烦恼。不过有些默认用的 compose 会把目录挂载到 docker volume ,迁到其他机器不知道怎么办,一般我会改成挂载到某个目录。

    端口号记录这个,我用 nginx proxy manager 来统一对外,所以可以在那上面查。
    nevermoreluo
        3
    nevermoreluo  
       16 天前   ❤️ 1
    @LeslieLeung

    compose 里面的默认挂载目录可以通过 docker volume ls + docker volume inspect xxxx_xx 拿到绝对路径迁移,可以尝试下,不过自己指定最好,省的磁盘满了有同学直接用工具把暂时不用的都给清理了。。。
    retanoj
        4
    retanoj  
       16 天前   ❤️ 1
    所以企业有 域名 + Ngx + 后端服务 ;)
    henix
        5
    henix  
       16 天前   ❤️ 4
    端口号分配我思考过对应用名 hash 的方法: https://blog.henix.info/blog/port-hash/

    命令行管理就 supervisor 咯
    evill
        6
    evill  
       16 天前   ❤️ 1
    用了 docker ,上 docker compose 呗
    后续就剩下 docker compose down/up/restart 了
    lyer5
        7
    lyer5  
       16 天前   ❤️ 1
    所有进程启动的时候都定时上报心跳注册服务信息到一个地方,比如 etcd 、zk
    Ubserate
        8
    Ubserate  
       16 天前   ❤️ 1
    啊 所有服务都要暴露到外面去啊
    shixuedela
        9
    shixuedela  
       16 天前   ❤️ 1
    你知道查询当前服务器运行了那些服务端口不就行了吗?
    root 用户 ss -tnlp 直接可以查询到端口对应的服务。 如果全部容器化的话 可以加一个代理。暴露一个端口就可以了
    sonnyclarity492
        10
    sonnyclarity492  
    OP
       16 天前
    感谢楼上各位的解答,我了解到 docker compose 能有效管理 docker 应用(#6 );命令行启动的应用可以使用 supervisor ,nginx proxy manager 等工具来记录和管理(#1 ,#2 )。有关应用端口号的取值方法也值得学习(#5 )。

    有意思的是上报心跳(#7 ),这个有待我学习。

    还有 v 友提到域名,这个当然是有的,但是服务部署之后,一年半载就过去了,不记录就真记不起来了。
    KongLiu
        11
    KongLiu  
       16 天前   ❤️ 1
    docker + portainer
    sonnyclarity492
        12
    sonnyclarity492  
    OP
       16 天前
    @shixuedela 查占用端口 ss -tnlp 确实是可以的,但是如果同时跑了多个 python 脚本,只能看到 PID ,定位不到哪个脚本占用了,还得一个个排查。
    kgcHQbTYyvcz2w3j
        13
    kgcHQbTYyvcz2w3j  
       16 天前   ❤️ 1
    全部用 docker compose ,哪怕最简单的 docker run 都写成 docker compose

    说起 docker compose ,推荐一个工具 Dockege
    shixuedela
        14
    shixuedela  
       16 天前   ❤️ 1
    @sonnyclarity492 如果跑多个 Python 脚本 打包成镜像.通过端口映射 docker ps 也比较好管理.
    Mithril
        15
    Mithril  
       16 天前   ❤️ 1
    直接用 portainer 管理容器,配个通配符的 DNS ,然后用 traefik 去做反向代理。
    记个简单的服务名就行了,记端口号太麻烦了。
    sparkinglemon
        16
    sparkinglemon  
       16 天前   ❤️ 1
    一水 compose ,方便管理,而且到指定位置直接 docker compose pull && docker compose up -d 也方便,如果只提供了 docker run 的镜像,可以用类似的工具转换 https://www.composerize.com/
    Van426326
        17
    Van426326  
       16 天前   ❤️ 1
    一般会用 nginx 反代,再配 ssl 证书,所以查端口可以看 nginx 配置 。另外会用 docker compose ,没有的话会把启动命令放在 sh 文件里面执行
    THESDZ
        18
    THESDZ  
       16 天前   ❤️ 1
    docker + traefik
    potatowish
        19
    potatowish  
       15 天前 via iPhone   ❤️ 1
    主机服务商有防火墙管理面板,开通端口的时候备注下就行
    IamUNICODE
        20
    IamUNICODE  
       15 天前   ❤️ 1
    docker-compose 或者 pm2 吧,看情况
    rogeecn
        21
    rogeecn  
       15 天前   ❤️ 1
    @Mithril 这也是我现在的 homelab 在用的方式,很方便。traefik 有自带面板,可以直接看到服务列表。
    proxychains
        22
    proxychains  
       15 天前
    @henix #5 妙啊
    mayli
        23
    mayli  
       14 天前   ❤️ 1
    > 但复杂的带参数的启动命令可能会忘记,只得又去网上查找
    如果你的需求是这个,那么就把服务写 systemd service ,这样端口号就写到了配置文件
    查找的时候 netstat -ntlp ,可以查看进程监听的端口号,这样可以找到了端口号对应的进程
    onebitbank
        24
    onebitbank  
       12 天前
    我以前用 pm2 ,现在都用 ubuntu 自带的 systemd 管理服务,端口安排好不冲突就行
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3294 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 13:05 · PVG 21:05 · LAX 06:05 · JFK 09:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.