聊天服务器2

narj.sh

PHPer 2025-09-29 2 0 0
bash narj.sh
===> 创建外部网络 webproxy ...
[+] Running 2/2
 ✔ Container nginx-proxy  Running                                                                                                   0.0s 
 ✔ Container nginx-acme   Running                                                                                                   0.0s 
[+] Running 3/3
 ✔ Container mongo       Running                                                                                                    0.0s 
 ✔ Container rocketchat  Running                                                                                                    0.0s 
 ✔ Container mongo-init  Started                                                                                                    0.1s 
[+] Running 4/4
 ✔ Container jitsi-web      Started                                                                                                 0.2s 
 ✔ Container jitsi-prosody  Started                                                                                                 0.0s 
 ✔ Container jitsi-jvb      Started                                                                                                 0.0s 
 ✔ Container jitsi-jicofo   Started                                                                                                 0.0s 
nginx-proxy
nginx-acme
rocketchat
mongo
jitsi-web
jitsi-prosody
jitsi-jicofo
jitsi-jvb
............................................................
==================================================
Rocket.Chat 地址:https://chat.dcdht.com 
Jitsi Meet 地址:https://meet.dcdht.com 
==================================================
=> 部署 code-server (VS Code Web) ...
请输入 VS Code Web 登录密码(不少于6位): 
[+] Running 9/9
 ✔ vscode Pulled                                                                                                                    9.3s 
   ✔ d1da99c2f148 Pull complete                                                                                                     3.1s 
   ✔ 7406571e392a Pull complete                                                                                                     5.7s 
   ✔ 9ab922153835 Pull complete                                                                                                     5.7s 
   ✔ fdf7c3eb3e70 Pull complete                                                                                                     5.7s 
   ✔ 41d9baa20522 Pull complete                                                                                                     5.8s 
   ✔ a87022ba70f0 Pull complete                                                                                                     5.8s 
   ✔ 4974932e2904 Pull complete                                                                                                     8.6s 
   ✔ 4f4fb700ef54 Pull complete                                                                                                     8.6s 
[+] Running 1/1
 ✔ Container vscode  Started                                                                                                        0.3s 
==================================================
VS Code Web 地址:https://vscode.dcdht.com   suo you https dou  bu neng zheng chuang fang wen , hui bu hui shi wo de bian liang mei huan hao .    #!/usr/bin/env bash
#==================================================
# 一键部署:nginx-proxy + acme-companion + Rocket.Chat + Jitsi Meet + vscode
# 项目根目录 $BASE_DIR ;数据、配置、compose 全放 $BASE_DIR 下
#==================================================
set -eu
############################ 头部常量区 #############################
DOMAIN_RC="chat.dcdht.com"  
DOMAIN_JM="meet.dcdht.com"
DOMAIN_VSCODE="vscode.dcdht.com"  
EMAIL="syh0304@gmail.com"
# 放在顶部常量区之后
BASE_DIR=${BASE_DIR:-/opt}   # 若外部没传,默认 /opt
export BASE_DIR              # 让 envsubst 也能拿到
###################################################################
# 后面所有 ROOT_DIR_* 直接用 BASE_DIR 拼接即可,无需再导出
ROOT_DIR_PROXY="$BASE_DIR/proxy"
ROOT_DIR_RC="$BASE_DIR/rc"
ROOT_DIR_JM="$BASE_DIR/jm"
ROOT_DIR_VSCODE="$BASE_DIR/vscode"
#########################################################################

[[ $EUID -eq 0 ]] || { echo "请 root 运行"; exit 1; }

command -v docker >/dev/null || {
    echo "===> 未检测到 Docker,正在自动安装 ..."
    curl -fsSL https://get.docker.com  | bash -s docker --mirror Aliyun
    systemctl enable --now docker
    usermod -aG docker $USER
    exec sg docker -c "bash -c 'docker version >/dev/null 2>&1'"
}
docker compose version >/dev/null 2>&1 || { echo "未安装 docker-compose-plugin"; exit 1; }

echo "===> 创建外部网络 webproxy ..."
docker network create webproxy 2>/dev/null || true

# 创建目录
mkdir -p "$ROOT_DIR_PROXY" "$ROOT_DIR_RC" "$ROOT_DIR_JM"
mkdir -p /data/{rc-db,rc-uploads,jitsi/{web,prosody,jicofo,jvb,transcripts}}

#################### 1. 反代 + 自动证书 ####################
cat >"$ROOT_DIR_PROXY/dc-proxy.yml" <<'EOF'
services:
  nginx-proxy:
    image: nginxproxy/nginx-proxy:latest
    container_name: nginx-proxy
    ports: ["80:80","443:443"]
    volumes:
      - /var/run/docker.sock:/tmp/docker.sock:ro
      - ./certs:/etc/nginx/certs
      - ./vhost:/etc/nginx/vhost.d
      - ./html:/usr/share/nginx/html
    restart: unless-stopped
    networks: [webproxy]

  acme:
    image: nginxproxy/acme-companion:latest
    container_name: nginx-acme
    volumes_from: [nginx-proxy]
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock:ro
      - ./acme:/etc/acme.sh
    environment:
      DEFAULT_EMAIL: ${EMAIL}
    restart: unless-stopped
    networks: [webproxy]

volumes: {certs,vhost,html,acme}
networks:
  webproxy:
    external: true
EOF
export EMAIL
envsubst '$EMAIL' <"$ROOT_DIR_PROXY/dc-proxy.yml" >"$ROOT_DIR_PROXY/dc-proxy-env.yml"
docker compose -f "$ROOT_DIR_PROXY/dc-proxy-env.yml" up -d

#################### 2. Rocket.Chat ####################
cat >"$ROOT_DIR_RC/dc-rc.yml" <<'EOF'
services:
  rocketchat:
    image: rocketchat/rocket.chat:latest
    container_name: rocketchat
    environment:
      VIRTUAL_HOST: ${DOMAIN_RC}
      LETSENCRYPT_HOST: ${DOMAIN_RC}
      VIRTUAL_PROTO: websocket
      VIRTUAL_PORT: 3000
      MONGO_URL: mongodb://mongo:27017/rocketchat
      MONGO_OPLOG_URL: mongodb://mongo:27017/local
      ROOT_URL: https://${DOMAIN_RC}
    volumes:
      - /data/rc-uploads:/app/uploads
    restart: unless-stopped
    networks: [webproxy]
    depends_on: [mongo]

  mongo:
    image: mongo:6
    container_name: mongo
    command: mongod --oplogSize 128 --replSet rs0
    volumes:
      - /data/rc-db:/data/db
    restart: unless-stopped
    networks: [webproxy]

  mongo-init:
    image: mongo:6
    container_name: mongo-init
    command: >
      bash -c "sleep 5 && mongosh --host mongo --eval '
      rs.initiate({_id:\"rs0\",members:[{_id:0,host:\"mongo:27017\"}]})'"
    depends_on: [mongo]
    networks: [webproxy]
networks:
  webproxy:
    external: true
EOF
export DOMAIN_RC
envsubst '$DOMAIN_RC' <"$ROOT_DIR_RC/dc-rc.yml" >"$ROOT_DIR_RC/dc-rc-env.yml"
docker compose -f "$ROOT_DIR_RC/dc-rc-env.yml" up -d

#################### 3. Jitsi Meet + HTTPS 白屏修复 ####################
# ① 先准备“空白放行页”避免 Chrome 140 被踢
mkdir -p $BASE_DIR/jm/web-custom
cat >$BASE_DIR/jm/web-custom/recommendedBrowsers.html <<'EOF'

EOF

cat >"$ROOT_DIR_JM/dc-jm.yml" <<'EOF'
services:
  web:
    image: jitsi/web:stable
    container_name: jitsi-web
    environment:
      VIRTUAL_HOST: ${DOMAIN_JM}
      LETSENCRYPT_HOST: ${DOMAIN_JM}
      PUBLIC_URL: https://${DOMAIN_JM}
      ENABLE_LETSENCRYPT: 0
      JICOFO_AUTH_USER: focus
      XMPP_DOMAIN: ${DOMAIN_JM}
      XMPP_AUTH_DOMAIN: auth.${DOMAIN_JM}
      XMPP_MUC_DOMAIN: muc.${DOMAIN_JM}
      XMPP_INTERNAL_MUC_DOMAIN: internal-muc.${DOMAIN_JM}
      TZ: Asia/Shanghai
    volumes:
      - /data/jitsi/web:/config
      - $BASE_DIR/jm/web-custom/recommendedBrowsers.html:/usr/share/jitsi-meet/static/recommendedBrowsers.html:ro
    restart: unless-stopped
    networks: [webproxy]
    depends_on: [prosody]

  prosody:
    image: jitsi/prosody:stable
    container_name: jitsi-prosody
    environment:
      XMPP_DOMAIN: ${DOMAIN_JM}
      XMPP_AUTH_DOMAIN: auth.${DOMAIN_JM}
      XMPP_MUC_DOMAIN: muc.${DOMAIN_JM}
      XMPP_INTERNAL_MUC_DOMAIN: internal-muc.${DOMAIN_JM}
      JICOFO_AUTH_USER: focus
      JVB_AUTH_USER: jvb
      GLOBAL_MODULES: "bosh,websocket,smacks"
      TZ: Asia/Shanghai
    volumes:
      - /data/jitsi/prosody:/config
    restart: unless-stopped
    networks: [webproxy]

  jicofo:
    image: jitsi/jicofo:stable
    container_name: jitsi-jicofo
    environment:
      XMPP_DOMAIN: ${DOMAIN_JM}
      XMPP_AUTH_DOMAIN: auth.${DOMAIN_JM}
      XMPP_INTERNAL_MUC_DOMAIN: internal-muc.${DOMAIN_JM}
      JICOFO_AUTH_USER: focus
      JVB_AUTH_USER: jvb
      TZ: Asia/Shanghai
    depends_on: [prosody]
    restart: unless-stopped
    networks: [webproxy]

  jvb:
    image: jitsi/jvb:stable
    container_name: jitsi-jvb
    environment:
      XMPP_DOMAIN: ${DOMAIN_JM}
      XMPP_AUTH_DOMAIN: auth.${DOMAIN_JM}
      XMPP_INTERNAL_MUC_DOMAIN: internal-muc.${DOMAIN_JM}
      JVB_AUTH_USER: jvb
      JVB_BREWERY_MUC: jvbbrewery@internal-muc.${DOMAIN_JM}
      JVB_PORT: 10000
      JVB_TCP_HARVESTER_PORT: 4443
      PUBLIC_URL: https://${DOMAIN_JM}
      TZ: Asia/Shanghai
    ports:
      - "10000:10000/udp"
      - "4443:4443/tcp"
    volumes:
      - /data/jitsi/jvb:/config
    restart: unless-stopped
    networks: [webproxy]

networks:
  webproxy:
    external: true
EOF
export DOMAIN_JM
envsubst '$DOMAIN_JM' <"$ROOT_DIR_JM/dc-jm.yml" >"$ROOT_DIR_JM/dc-jm-env.yml"
docker compose -f "$ROOT_DIR_JM/dc-jm-env.yml" up -d

#################### 4. 开机自启 & 等证书 ####################
docker update --restart=unless-stopped nginx-proxy nginx-acme rocketchat mongo jitsi-web jitsi-prosody jitsi-jicofo jitsi-jvb

i=0
while (( i++ < 60 )); do
  if docker logs nginx-acme 2>&1 | grep -q "Certificate received"; then
    echo "✔ 证书已颁发成功!"
    break
  fi
  echo -n "."
  sleep 2
done
echo

echo "=================================================="
echo "Rocket.Chat 地址:https://${DOMAIN_RC}"
echo "Jitsi Meet 地址:https://${DOMAIN_JM}"
echo "=================================================="

#################### 5. VS Code Web (code-server) ####################
echo "=> 部署 code-server (VS Code Web) ..."
mkdir -p $BASE_DIR/vscode/data $BASE_DIR/vscode/config

# 交互设置密码
while :; do
  read -rsp '请输入 VS Code Web 登录密码(不少于6位): ' VSCODE_PW
  echo
  if [[ ${#VSCODE_PW} -ge 6 ]]; then
    break
  else
    echo "密码太短,请重新输入!"
  fi
done

cat >$BASE_DIR/vscode/config/config.yaml <$BASE_DIR/vscode/dc-vscode.yml <<'EOF'
services:
  vscode:
    image: codercom/code-server:4.19.1
    container_name: vscode
    environment:
      VIRTUAL_HOST: ${DOMAIN_VSCODE}
      LETSENCRYPT_HOST: ${DOMAIN_VSCODE}
      TZ: Asia/Shanghai
    volumes:
      - $BASE_DIR/vscode/config:/home/coder/.config/code-server
      - $BASE_DIR/vscode/data:/home/coder/data
      - $BASE_DIR:$BASE_DIR:rw          
      - /code:/code:rw     
      - /data:/data:ro
    restart: unless-stopped
    networks: [webproxy]
networks:
  webproxy:
    external: true
EOF

# 域名变量(只在这用,可加在脚本头部常量区)
export DOMAIN_VSCODE
envsubst '$DOMAIN_VSCODE' < $ROOT_DIR_VSCODE/dc-vscode.yml > $ROOT_DIR_VSCODE/dc-vscode-env.yml
docker compose -f $ROOT_DIR_VSCODE/dc-vscode-env.yml up -d

echo "=================================================="
echo "VS Code Web 地址:https://${DOMAIN_VSCODE}"
echo "登录密码:${VSCODE_PW}"
echo "=================================================="

20250929...

立即注册

更新于:2025-09-29 22:38:34
    您需要登录后才可以评论。 立即注册
    相关内容

    python and shell

    为什么使用副 shell 脚本生成 Python 文件

    Shadowsocks服务原理

    /dev/null || true bad...">ubuntu uninstall_nvidia.sh bad

    开源商城shopwind安装许可协议

    Shell脚本学习过程中遇到问题整理

    如何检测这种格式知道这个是不合法的CLI参数

    推荐内容

    怎样使用V2Ray代理和SSTap玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩...

    sstap游戏代理教程 从此玩如魔兽世界/绝地求生/LOL台服/战地3/黑色沙漠/彩虹六...

    BT磁力搜索网站汇总和找不到的资源

    什么是磁力链接,您如何使用?

    Z-Library:全球最大的数字图书馆/含打不开的解决方案/镜像

    使用V2Ray的mKCP协议加速游戏

    v2rayN已停止工作

    【车险课堂】什么是无赔款优待系数ncd,你“造”吗?