自用服务器初始docker环境配置

bbr+fq&swap脚本

wget -O box.sh https://raw.githubusercontent.com/BlueSkyXN/SKY-BOX/main/box.sh && chmod +x box.sh && clear && ./box.sh

安装docker和docker compose

curl -fsSL https://get.docker.com -o install-docker.sh \
  && sh -e install-docker.sh \
  && rm -f install-docker.sh
systemctl enable docker
sudo curl -L "https://github.com/docker/compose/releases/latest/download/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

创建docker网络

docker network create dockernetwork

创建并绑定docker网络是为了让npm在内网反代docker容器,而不需要保留docker容器到公网,以提升安全性。

比如

docker network create safernet

此时在npm的配置应为

services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    networks:
      - dockernetwork
      - safernet

networks:
  dockernetwork:
    external: true
  safernet:
    external: true

即,显式在容器和底部配置网络,而不是直接挂载在default。

另外,最好在npm的webui反代完81端口后,改为:

      - '127.0.0.1:81:81' # Admin Web Port

这样可以更好搭配cloudflare waf拦截非白名单请求,比如阻止

此时,对于vaultwarden这种需要隔离的容器,参考:

services:
  vaultwarden:
    image: vaultwarden/server:latest
    restart: unless-stopped
    container_name: pass
    environment:
      DOMAIN: 'https://vauletwarden.example.com/'
      SIGNUPS_ALLOWED: 'false' #开启注册,自己注册后改成fale
      WEBSOCKET_ENABLED: 'true'
    volumes:
      - ./data:/data
    networks:
      - safernet

networks:
  safernet:
    external: true

对于多容器的项目,参考:

name: lobe-chat-database
services:
  postgresql:
    image: pgvector/pgvector:pg16
    container_name: lobe-postgres
    volumes:
      - './sqldata:/var/lib/postgresql/data'
    environment:
      - 'POSTGRES_DB=lobe'
      - 'POSTGRES_PASSWORD=password'  # 修改
    healthcheck:
      test: ['CMD-SHELL', 'pg_isready -U postgres']
      interval: 5s
      timeout: 5s
      retries: 5
    restart: always
    networks:
      - internal

  lobe:
    image: lobehub/lobe-chat-database
    container_name: lobe-chat-db
    depends_on:
      - postgresql
    env_file:
      - .env
    restart: always
    environment:
      - 'SEARXNG_URL=http://searxng:8080'
    networks:
      - internal

  searxng:
    image: searxng/searxng
    container_name: lobe-searxng
    volumes:
      - './searxng-settings.yml:/etc/searxng/settings.yml'
    environment:
      - 'SEARXNG_SETTINGS_FILE=/etc/searxng/settings.yml'
    restart: always
    env_file:
      - .env
    networks:
      - internal
      - dockernetwork

volumes:
  sqldata:
    driver: local

networks:
  internal:
  dockernetwork:
    external: true

此时dockernetwork中的其他容器无法和直接使用下面配置时那样直接访问lobe-postgres,internal会被结合name: lobe-chat-database 自动创建,类似 lobe-chat-database_internal ,如果不设置name,会使用当前文件夹名创建,因此多项目不会冲突

networks:
  default:
    external: true
    name: dockernetwork

安装NPM

mkdir docker docker/npm
cd docker/npm
vim docker-compose.yml
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      # These ports are in format <host-port>:<container-port>
      - '80:80' # Public HTTP Port
      - '443:443' # Public HTTPS Port
      - '81:81' # Admin Web Port
      # Add any other Stream port you want to expose
      # - '21:21' # FTP

    # Uncomment the next line if you uncomment anything in the section
    # environment:
      # Uncomment this if you want to change the location of
      # the SQLite DB file within the container
      # DB_SQLITE_FILE: "/data/database.sqlite"

      # Uncomment this if IPv6 is not enabled on your host
      # DISABLE_IPV6: 'true'

    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt

networks:
  default:
    external: true
    name: dockernetwork
docker compose up -d

默认管理员用户,登录ip:81后修改:

Email:    admin@example.com
Password: changeme

安装watchtower

mkdir docker/watchtower
cd docker/watchtower
vim docker-compose.yml
services:
  watchtower:
    image: containrrr/watchtower
    restart: unless-stopped
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
docker compose up -d

如果您需要排除某些容器,请将com.centurylinklabs.watchtower.enable标签设置为false。为清楚起见,应
在您希望忽略的容器上设置此标签,而不是在 watchtower 上设置。

LABEL com.centurylinklabs.watchtower.enable="false"
docker run -d --label=com.centurylinklabs.watchtower.enable=false someimage
services:
  someimage:
    container_name: someimage
    labels:
      - "com.centurylinklabs.watchtower.enable=false"

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 共1条
头像
欢迎您留下宝贵的见解!无需注册,过短或乱码评论会被屏蔽。
提交
头像

昵称

取消
昵称表情代码图片快捷回复
    • l1angth6的头像-THsInk钻石会员l1angth6等级-LV10-THsInk作者0