traefik配置多路由

我目前正在尝试让 traefik 在单个容器上使用多个路由器和服务,但它不起作用,我不知道这是否是有意为之。

为什么?

具体来说,我正在使用 gitlab 综合容器,并希望在综合容器内使用/访问多个服务,因为 gitlab 不仅提供“gitlab 网站”。

我尝试了什么?

我只是尝试通过标签将另一个路由器添加到我的 docker compose 文件中

这就是我所拥有的:

labels:
- "traefik.http.routers.gitlab.rule=Host(`gitlab.example.com`)"
- "traefik.http.services.gitlab.loadbalancer.server.port=80"

这就是我要的:

labels:
- "traefik.http.routers.gitlab.rule=Host(`gitlab.example.com`)"
- "traefik.http.services.gitlab.loadbalancer.server.port=80"
- "traefik.http.routers.registry.rule=Host(`registry.gitlab.example.com`)"
- "traefik.http.services.registry.loadbalancer.server.port=5000"

这是行不通的,因为 traefik 可能对路由到哪个服务的内容感到困惑,而且我找不到一种机制可以告诉 traefik 在这种情况下确切地告诉 traefik 哪个路由器转到哪个服务。

我找到了我的问题的解决方案。

确实有一点我错过了:

  • traefik.http.routers.myRouter.service=myService

使用此标签,我可以将路由器指向特定服务,并且应该能够向一个容器添加多个服务:

labels:
- "traefik.http.routers.gitlab.rule=Host(`gitlab.example.com`)"
- "traefik.http.routers.gitlab.service=gitlab"
- "traefik.http.services.gitlab.loadbalancer.server.port=80"
- "traefik.http.routers.registry.rule=Host(`registry.gitlab.example.com`)"
- "traefik.http.routers.registry.service=registry"
- "traefik.http.services.registry.loadbalancer.server.port=5000"

这里每个路由器都显式地指向一个特定的服务,该服务通常是隐式发生的。

如果需要绑定容器的多个端口,则必须使用文档中此处所述的traefik .. *标签。例如,可以在docker-compose.yml中使用类似这样的内容


labels:
- traefik.ember.port=8080
- traefik.ember.frontend.rule=Host:mydomain.com
- traefik.reload.port=37531
- traefik.reload.frontend.rule=Host:mydomain.com;PathPrefixStrip:/reload
```<!--autointro-->

docker-compose部署seafile

docker-compose.yml文件如下

version: '2.0'
services:
  db:
    image: mariadb:10.5
    container_name: seafile-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=rootpw  # Requested, set the root's password of MySQL service.
      - MYSQL_LOG_CONSOLE=true
    volumes:
      - /home/admin/volumes_seafile/mysql:/var/lib/mysql  # Requested, specifies the path to MySQL data persistent store.
    networks:
      - seafile-net
  memcached:
    image: memcached:1.6
    container_name: seafile-memcached
    entrypoint: memcached -m 256
    networks:
      - seafile-net
  seafile:
    image: seafileltd/seafile-mc:latest
    container_name: seafile
    ports:
      - "7000:80"
      - "7443:443"  # If https is enabled, cancel the comment.
      #- "80:80"
      #- "443:443"  # If https is enabled, cancel the comment.      
    volumes:
      - /home/admin/volumes_seafile/seafile:/shared   # Requested, specifies the path to Seafile data persistent store.
      - /home/admin/volumes_seafile/seafile/nginx/conf:/etc/nginx/conf.d
    environment:
      - DB_HOST=db
      - DB_ROOT_PASSWD=password  # Requested, the value shuold be root's password of MySQL service.
      - TIME_ZONE=Asia/Shanghai # Optional, default is UTC. Should be uncomment and set to your local time zone.
      - SEAFILE_ADMIN_EMAIL=xxxx@outlook.com # Specifies Seafile admin user, default is 'me@example.com'.
      - SEAFILE_ADMIN_PASSWORD=seafilepassword     # Specifies Seafile admin password, default is 'asecret'.
      - SEAFILE_SERVER_LETSENCRYPT=true   # Whether use letsencrypt to generate cert.
      - SEAFILE_SERVER_HOSTNAME=seafile.xxx.com # Specifies your host name.
    depends_on:
      - db
      - memcached
    networks:
      - seafile-net
networks:
  seafile-net:

切换到yml所在目录

cd /home/admin/compose_seafile

运行如下命令,build

docker-compose build

运行如下命令,启动

docker-compose up -d

nginx总是报找不到证书文件的错误可以这么解决
使用docker容器系统中的绝对路径,并将con.d文件夹映射到主机系统中就可以了。
220919
seafile一番折腾终于成功了
总结点经验就是,如果docker-compose buid出现错误报找不到文件错误,不是python的问题,检查docker是否安装,检查docker是否启动,这次就时因为重启服务器之后docker没有启动还以为时python的问题,花费了很长事件找原因。
修改docker-compose.yml文件之后要先停止已经启动的docker-compose,然后再build才能生效。

查看seafile数据库日志

docker-compose logs -f

查看seafile日志

docker logs -f seafile

进入seafile容器

docker container exec -it seafile bash

nextcloud缺少插件和权限不足问题解决

221021
vscode的ssh插件连接主机后会占用很大内存,使内存占用从0.69G升到1.28G。

nextcloud问题


-   This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them.
`-   intl`
-   The PHP module "imagick" is not enabled although the theming app is. For favicon generation to work correctly, you need to install and enable this module.

上述两个问题安装intl和imagick并启用即可。
在php的dockerfile中安装

“`

libmagickwand-dev \

    && docker-php-ext-configure intl \

    && docker-php-ext-install intl
   
&& pecl install imagick-beta \

    && echo “extension=imagick.so” <!–autointro–>