[Tuto] Installation et Configuration de CrowdSec avec le reverse proxy SWAG

Bon, j'ai fini par faire un peu différemment, j'ai arrêté le juste le conteneur crowdsec et supprimer le dossier crowsec, j'ai récréé les dossiers et le fichier acquis.yaml et relancé le conteneur et la ça fonctionne
Message automatiquement fusionné :

Il ne me semble pas que Portainer gere ce genre de lien :


Il te faut mettre les chemins complets
T'est sur? là ca tourne, j'ai même pu enrôller mon instance et sur mes autres stacks cela ne semble pas poser problème, c'est peut-être toi qui a raison mais je n'ai pas d'erreur là.

En tout cas merci pour tes réponse et Joyeuse Fêtes de fin d'année! :)

Je m'attaquerais à la partie dashboard après les fêtes! 😁
 
Dernière édition:
T'est sur? là ca tourne, et sur mes autres stacks cela ne semble pas poser problème, c'est peut-être toi qui a raison mais je n'ai pas d'erreur là.
Sur quelques versions en arrière, oui c'est sur mais ce n'est peut etre plus le cas maintenant, mais j'en doute.
A mon avis quand tu fait cela, Portainer doit probablement te créer un volume quelque part pour y stocker les fichiers. ( avec le risque qu'ils soit effacer si le volume est supprimé par docker )
 
Sur quelques versions en arrière, oui c'est sur mais ce n'est peut etre plus le cas maintenant, mais j'en doute.
A mon avis quand tu fait cela, Portainer doit probablement te créer un volume quelque part pour y stocker les fichiers. ( avec le risque qu'ils soit effacer si le volume est supprimé par docker )
Ok, je vais regarder cela de plus près alors. Merci
 
Bonjour,

Après la mise en place ce crowdsec avec swag, je constate un comportement bien different dans mon cette dernière instance que celui de mon autre instance crowdsec sur mon firewall; en effet comme vous pouvez le voir ci-dessous, j'ai à gauche l'instance lié à swag et à droite celle de mon firewall, pas une seule alerte alors que ca fait des mois qu'elle tourne, je me dit que soit c'est du au fait que les nombre des scenarios est bien inférieur ou alors quelque chose n'est pas bien configuré.
captur15.png

Une autre question que je me pose c'est au sujet du fonctionnement du crowdsec avec swag, à noter que je n'ai pas encore mis en place le dashboard pour crowdsec mais je me demandais si je ne devrais pas avoir la liste des ip bannies par crowdsec affiché dasn le dashboard de swag ou alors le besoin du dashboard crowdsec est là justement pour palier à l'absence de ces ip bannies dans swag?

Merci
 
Salut,
Je n'utilise pas encore Crowdsec sur mon parefeu ( probleme de compatibilité, et de budget pour le changement 😅 ) mais pour moi c'est normal.

Par contre, il est normal d'avoir pas mal d'alerte sur le proxy, les sites public sont scanné en permanence, dans ton cas l'avantage ici c'est que une IPs banni par la bouncer dans swag, sera aussi banni sur le pare-feu et donc le "méchant" perd l'acces a tout ton réseau ( si par exemple tu as un port VPN exposé, ... ) , et non uniquement au reverse proxy.
 
Bonjour,

Merci pour ta réponse EVOTk, ce qui me parait bizarre c'est que certaines adresses n'étaient pas bannies, j'ai du le bannir manuellement, sinon, il faut aussi que je me penche sur la partie dashboard dans les jours qui viennent.
 
@Jfamiens Pour que le code soit compréhensible (à cause des indentations super importantes en YAML), pourrais-tu utiliser la balise code suivante avec laquelle tu peux choisir le langage de programmation :
Voir la pièce jointe 7425

Pour le souci, je pense que quand je vais refaire la stack sur l'Asustor, je pense que ce conteneur de dashboard crowdsec, je vais le créer depuis la ligne de commande... en espérant que ça fonctionne...

Désolé @MilesTEG1 - voilà le code avec la bonne balise. Merci pour l'explication !

YAML:
version: "2.1"
services:
  swag:
    image: lscr.io/linuxserver/swag:latest
    container_name: swag
    networks:
        macvlan_net:
           ipv4_address: 192.168.0.201
    cap_add:
      - NET_ADMIN
#    labels:
#      - com.centurylinklabs.watchtower.enable=true
    environment:
      - PUID=1000
      - PGID=1000
      - TZ=Europe/Paris
      - URL=NDD.fr
      - SUBDOMAINS=wildcard
      - VALIDATION=dns
      - DNSPLUGIN=ovh
      - EMAIL=XXXXX@hotmail.com
      - DHLEVEL=2048
      - ONLY_SUBDOMAINS=false
      - STAGING=false
      - DOCKER_MODS=linuxserver/mods:swag-dashboard|linuxserver/mods:swag-crowdsec
      - CROWDSEC_API_KEY=XXXXXX
      - CROWDSEC_LAPI_URL=http://crowdsec:8080
    volumes:
      - /home/docker/swag/config:/config
#    ports:
#      - 443:443
#      - 80:80
    restart: unless-stopped

  crowdsec:
    container_name: crowdsec
    image: crowdsecurity/crowdsec
    restart: unless-stopped
    environment:
      - COLLECTIONS=crowdsecurity/nginx
      - GID=1000
    depends_on:
      - swag
    volumes:
      - /home/docker/swag/config/log/nginx:/var/log/nginx
      - /home/docker/swag/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
      - /home/docker/swag/crowdsec/crowdsec-db:/var/lib/crowdsec/data/
      - /home/docker/swag/crowdsec/crowdsec-config:/etc/crowdsec/
    security_opt:
      - no-new-privileges=true

#  dashboard:
#    container_name: crowdsec-dashboard
#    image: crowdsec/dashboard
#    restart: unless-stopped
#    depends_on:
#      - crowdsec
#    ports:
#      - 3002:3000
#    environment:
#      - MB_DB_FILE=/data/metabase.db
#      - MGID=1000
#      - MUID=1000
#    volumes:
#      - /home/docker/swag/crowdsec/crowdsec-db:/metabase-data/

networks:
   macvlan_net:
      external: true
 
Dernière édition:
Bonjour,

@Jfamiens

Il serait sage et pertinent de na pas laisser l'API crowsec quand tu partages ton code sur le net, enfi je sdis ça je dis rien, hein,; comme ditait
l'autre, il y a en a qui on essayé et ils ont eu des problèmes!;)

Je te conseillerais d'en creer une nouvelle, à moins que celle dans le code ne soit un leure!

 
  • J'aime
Réactions: Jfamiens
Bonjour,

@Jfamiens

Il serait sage et pertinent de na pas laisser l'API crowsec quand tu partages ton code sur le net, enfi je sdis ça je dis rien, hein,; comme ditait
l'autre, il y a en a qui on essayé et ils ont eu des problèmes!;)

Je te conseillerais d'en creer une nouvelle, à moins que celle dans le code ne soit un leure!

Oups I did it again ! C'est corrigé, merci!

Par ailleurs, je m'aperçois dans les logs de swag que j'ai deux messages supp. après "Service ready"

Code:
nginx: [error] [lua] crowdsec.lua:46: init(): error loading recaptcha plugin: no recaptcha site key provided, can't use recaptcha
nginx: [alert] [lua] init_by_lua:8: [Crowdsec] Initialisation done
 
Oups I did it again ! C'est corrigé, merci!

Par ailleurs, je m'aperçois dans les logs de swag que j'ai deux messages supp. après "Service ready"

Code:
nginx: [error] [lua] crowdsec.lua:46: init(): error loading recaptcha plugin: no recaptcha site key provided, can't use recaptcha
nginx: [alert] [lua] init_by_lua:8: [Crowdsec] Initialisation done
Oui j'ai aussi ces même messages de mon côté, le prémier concerne le recaptcha mais comme on a pas configure cela, l'erreur est donc normale mais n'empêche pas le fonctionnement.

Là ou j'ai un problème c'est avec la configuration de la partie dashboard, je n'arrive pas à le faire marcher.
 
Bonjour à tous,
Je ne parviens pas à faire remonter les notifications sur discord. Je n'ai pas d'erreur dans le log de crowdsec le profil discord est bien pris en compte. J'ai également modifié l'adresse du webhook mais rien à faire...

Savez-vous comment je peuxidentifier d'où vient le problème ?

voici mon fichier profil :

YAML:
name: default_ip_remediation
filters:
 - Alert.Remediation == true && Alert.GetScope() == "Ip"
decisions:
 - type: ban
   duration: 4h
notifications:
 - discord

et mon fichier discord :

YAML:
type: http

name: discord

log_level: debug

format: |
  {
    "content": null,
    "embeds": [
      {{range . -}}
      {{$alert := . -}}
      {{range .Decisions -}}
      {{if $alert.Source.Cn -}}
      {
        "title": "{{$alert.MachineID}}: {{.Scenario}}",
        "description": ":flag_{{ $alert.Source.Cn | lower }}: {{$alert.Source.IP}} will get a {{.Type}} for the next {{.Duration}}. <https://www.shodan.io/host/{{$alert.Source.IP}}>",
        "url": "https://db-ip.com/{{$alert.Source.IP}}",
        "color": "16711680",
        "image": {
          "url": "https://www.mapquestapi.com/staticmap/v5/map?center={{$alert.Source.Latitude}},{{$alert.Source.Longitude}}&size=500,300&key=xxxxxx"
        }
      }
      {{end}}
      {{if not $alert.Source.Cn -}}
      {
        "title": "{{$alert.MachineID}}: {{.Scenario}}",
        "description": ":pirate_flag: {{$alert.Source.IP}} will get a {{.Type}} for the next {{.Duration}}. <https://www.shodan.io/host/{{$alert.Source.IP}}>",
        "url": "https://db-ip.com/{{$alert.Source.IP}}",
        "color": "16711680"
      }
      {{end}}
      {{end -}}
      {{end -}}
    ]
  }

url: https://discord.com/api/webhooks/xxxxxx/xxxxx
method: POST

headers:
  Content-Type: application/json
 
Bonsoir, je viens de mettre en place crowdsec, et je voulais donc savoir comment désactiver fail2ban pour éviter de potentiel problème. Savez vous comment faire?
 
Bonsoir, je viens de mettre en place crowdsec, et je voulais donc savoir comment désactiver fail2ban pour éviter de potentiel problème. Savez vous comment faire?
Salut,
Si tu souhaite désactiver Fail2Ban, il faut rajouter la variable d'environemant suivante dans le compose de SWAG :
Code:
- CROWDSEC_F2B_DISABLE=true



 
Bonjour à tous,
Dans un premier temps merci à vous pour ces tutos.. C'est juste génial.
Je voulais vous poser une petite question sur le Dashboard.

Comment je peux faire pour le mettre à jour? Si je fais un update via Portainer cela ne fonctionne pas.

Merci à vous pou votre aide.
 
Bonjour et merci @EVOTk pour tes tutos !

J'ai quasi tout fini, je bloque sur le dashboard de Crowsec !

Je suis sur un Synology DS918+, DSM Version: 7.1.1-42962 Update 4 et j'utilise Portainer-ce 2.17.1 (latest).

Voilà l'écran de blocage en question :
Sans-titre-1.jpg

J'ai un peu bidouillé avec ton tuto en créant une stack sur portainer, la voici :

YAML:
version: '3.9'
services:
  wordpress:
    image: wordpress:latest
    container_name: WordPress
    restart: always
    ports:
      - 8000:80
      - 8001:443
    environment:
      WORDPRESS_DB_HOST: XXXX
      WORDPRESS_DB_USER: XXXX
      WORDPRESS_DB_PASSWORD: XXXX
      WORDPRESS_DB_NAME: XXXX
      PUID: 1043
      PGID: 1023
      TZ: Europe/Paris
    volumes:
      - /volume1/docker/wordpress:/var/www/html
      - /volume1/docker/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

  db:
    image: mysql:5.7
    container_name: WordPress-DB
    restart: always
    environment:
      MYSQL_DATABASE: XXXX
      MYSQL_USER: XXXX
      MYSQL_PASSWORD: XXXX
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
      PUID: 1043
      PGID: 1023
      TZ: Europe/Paris
    volumes:
      - /volume1/docker/wordpress-db:/var/lib/mysql
      
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: WordPress-PMA
    depends_on:
        - db
    environment:
        - PMA_HOST=XXXX
        - PMA_PORT=3306
        - PMA_ARBITRARY=1
        - TZ=Europe/Paris
        - PUID=1043
        - PGID=1023
    ports:
        - 7997:80
    restart: always
      
  swag:
    image: linuxserver/swag:latest
    container_name: swag
    cap_add:
      - NET_ADMIN
#    labels:
#      - com.centurylinklabs.watchtower.enable=true
    environment:
      - PUID=1043
      - PGID=1023
      - TZ=Europe/Paris
      - URL=XXXX
      - SUBDOMAINS=wildcard
      - VALIDATION=dns
      - DNSPLUGIN=ovh
      - EMAIL=XXXX@gmail.com
      - DOCKER_MODS=linuxserver/mods:swag-dashboard|linuxserver/mods:swag-dbip|linuxserver/mods:swag-crowdsec
      - CROWDSEC_API_KEY=XXXX
      - CROWDSEC_LAPI_URL=http://crowdsec:8080
    volumes:
      - /volume1/docker/swag/config:/config
    ports:
      - 7998:80
      - 7999:443
      - 81:81 # Dashboard
    restart: unless-stopped
    
  crowdsec:
    container_name: crowdsec
    image: crowdsecurity/crowdsec:latest
    restart: unless-stopped
    environment:
      - COLLECTIONS=crowdsecurity/nginx
      - GID=1023
      - UID=1043
    depends_on:
      - swag
    volumes:
      - /volume1/docker/swag/config/log/nginx:/var/log/nginx
      - /volume1/docker/swag/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
      - /volume1/docker/swag/crowdsec/crowdsec-db:/var/lib/crowdsec/data/
      - /volume1/docker/swag/crowdsec/crowdsec-config:/etc/crowdsec/
    security_opt:
      - no-new-privileges=true
      
  dashboard:
    container_name: crowdsec-dashboard
    image: metabase/metabase:latest
    restart: unless-stopped
    depends_on:
      - crowdsec
    ports:
      - 3000:3000
    environment:
      - MB_DB_FILE=/data/metabase.db
      - MGID=1023
      - MUID=1043
      - JAVA_TIMEZONE=Europe/Paris
    volumes:
      - /volume1/docker/swag/crowdsec/crowdsec-db:/metabase-data/
      - /volume1/docker/swag/crowdsec/dashboard:/config


Comme je disais, tout fonctionne hormis le dashboard de Crowsec (metabase/metabase:latest)... Je me retrouve avec ces erreurs quand je regarde les logs du container "crowsec-dashboard" et je ne sais pas comment corriger cela :

Code:
Caused by: org.h2.message.DbException: Error while creating file "/data" [90062-197]
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.store.fs.FilePathDisk.createDirectory(FilePathDisk.java:271)
    at org.h2.store.fs.FileUtils.createDirectory(FileUtils.java:42)
    at org.h2.store.fs.FileUtils.createDirectories(FileUtils.java:312)
    at org.h2.store.fs.FileUtils.createDirectories(FileUtils.java:311)
    at org.h2.message.TraceSystem.openWriter(TraceSystem.java:300)
     
    ... 24 more
Caused by: org.h2.jdbc.JdbcSQLException: Error while creating file "/data" [90062-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
     
    ... 31 more
org.h2.message.DbException: Log file error: "/data/metabase.db/metabase.db.trace.db", cause: "org.h2.message.DbException: Error while creating file ""/data"" [90062-197]" [90034-197]
org.h2.message.DbException: Log file error: "/data/metabase.db/metabase.db.trace.db", cause: "org.h2.message.DbException: Error while creating file ""/data"" [90062-197]" [90034-197]
    at org.h2.message.DbException.get(DbException.java:168)
    at org.h2.message.TraceSystem.logWritingError(TraceSystem.java:289)
    at org.h2.message.TraceSystem.openWriter(TraceSystem.java:310)
    at org.h2.message.TraceSystem.writeFile(TraceSystem.java:258)
    at org.h2.message.TraceSystem.write(TraceSystem.java:242)
    at org.h2.message.Trace.error(Trace.java:196)
    at org.h2.engine.Database.openDatabase(Database.java:314)
    at org.h2.engine.Database.<init>(Database.java:280)
    at org.h2.engine.Engine.openSession(Engine.java:66)
    at org.h2.engine.Engine.openSession(Engine.java:179)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:157)
    at org.h2.engine.Engine.createSession(Engine.java:140)
    at org.h2.engine.Engine.createSession(Engine.java:28)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:351)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:124)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:103)
    at org.h2.Driver.connect(Driver.java:69)
    at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
    at metabase.db.data_source.DataSource.getConnection(data_source.clj:25)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:161)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:213)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1176)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1163)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1908)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
Caused by: org.h2.jdbc.JdbcSQLException: Log file error: "/data/metabase.db/metabase.db.trace.db", cause: "org.h2.message.DbException: Error while creating file ""/data"" [90062-197]" [90034-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
     
    ... 27 more
Caused by: org.h2.message.DbException: Error while creating file "/data" [90062-197]
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.store.fs.FilePathDisk.createDirectory(FilePathDisk.java:271)
    at org.h2.store.fs.FileUtils.createDirectory(FileUtils.java:42)
    at org.h2.store.fs.FileUtils.createDirectories(FileUtils.java:312)
    at org.h2.store.fs.FileUtils.createDirectories(FileUtils.java:311)
    at org.h2.message.TraceSystem.openWriter(TraceSystem.java:300)
     
    ... 24 more
Caused by: org.h2.jdbc.JdbcSQLException: Error while creating file "/data" [90062-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
     
    ... 31 more
org.h2.message.DbException: Log file error: "/data/metabase.db/metabase.db.trace.db", cause: "org.h2.message.DbException: Error while creating file ""/data"" [90062-197]" [90034-197]
org.h2.message.DbException: Log file error: "/data/metabase.db/metabase.db.trace.db", cause: "org.h2.message.DbException: Error while creating file ""/data"" [90062-197]" [90034-197]
    at org.h2.message.DbException.get(DbException.java:168)
    at org.h2.message.TraceSystem.logWritingError(TraceSystem.java:289)
    at org.h2.message.TraceSystem.openWriter(TraceSystem.java:310)
    at org.h2.message.TraceSystem.writeFile(TraceSystem.java:258)
    at org.h2.message.TraceSystem.write(TraceSystem.java:242)
    at org.h2.message.Trace.error(Trace.java:196)
    at org.h2.engine.Database.openDatabase(Database.java:314)
    at org.h2.engine.Database.<init>(Database.java:280)
    at org.h2.engine.Engine.openSession(Engine.java:66)
    at org.h2.engine.Engine.openSession(Engine.java:179)
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:157)
    at org.h2.engine.Engine.createSession(Engine.java:140)
    at org.h2.engine.Engine.createSession(Engine.java:28)
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:351)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:124)
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:103)
    at org.h2.Driver.connect(Driver.java:69)
    at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
    at java.sql/java.sql.DriverManager.getConnection(Unknown Source)
    at metabase.db.data_source.DataSource.getConnection(data_source.clj:25)
    at com.mchange.v2.c3p0.WrapperConnectionPoolDataSource.getPooledConnection(WrapperConnectionPoolDataSource.java:161)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool$1PooledConnectionResourcePoolManager.acquireResource(C3P0PooledConnectionPool.java:213)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquire(BasicResourcePool.java:1176)
    at com.mchange.v2.resourcepool.BasicResourcePool.doAcquireAndDecrementPendingAcquiresWithinLockOnSuccess(BasicResourcePool.java:1163)
    at com.mchange.v2.resourcepool.BasicResourcePool.access$700(BasicResourcePool.java:44)
    at com.mchange.v2.resourcepool.BasicResourcePool$ScatteredAcquireTask.run(BasicResourcePool.java:1908)
    at com.mchange.v2.async.ThreadPoolAsynchronousRunner$PoolThread.run(ThreadPoolAsynchronousRunner.java:696)
Caused by: org.h2.jdbc.JdbcSQLException: Log file error: "/data/metabase.db/metabase.db.trace.db", cause: "org.h2.message.DbException: Error while creating file ""/data"" [90062-197]" [90034-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
     
    ... 27 more
Caused by: org.h2.message.DbException: Error while creating file "/data" [90062-197]
    at org.h2.message.DbException.get(DbException.java:179)
    at org.h2.message.DbException.get(DbException.java:155)
    at org.h2.store.fs.FilePathDisk.createDirectory(FilePathDisk.java:271)
    at org.h2.store.fs.FileUtils.createDirectory(FileUtils.java:42)
    at org.h2.store.fs.FileUtils.createDirectories(FileUtils.java:312)
    at org.h2.store.fs.FileUtils.createDirectories(FileUtils.java:311)
    at org.h2.message.TraceSystem.openWriter(TraceSystem.java:300)
     
    ... 24 more
Caused by: org.h2.jdbc.JdbcSQLException: Error while creating file "/data" [90062-197]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
     
    ... 31 more


C'est grave, docteur ? Comment je peux soigner mon container ? Est-ce que je dois installer Java 11 en docker (ajout dans la stack...) ou ça vient de ma base de données Mysql sur Mariadb qu'il confond avec du h2 ? D'où sort ce H2 d'ailleurs ? :(


Merci d'avance pour tes/vos réponses !
 
Bon, OK, j'ai trouvé la solution dans ma stack en me relisant 😅

C'était ce fameux "metabase.db" qui saoulait, je l'ai mis à la racine et c'est passé... soit :
environment:
- MB_DB_FILE=metabase.db

Je mets la stack complète qui fonctionne chez moi, si jamais ça peut être utile à d'autres qui ont un Synology avec Portainer-ce :

YAML:
version: '3.9'
services:
  wordpress:
    image: wordpress:latest
    container_name: WordPress
    restart: always
    ports:
      - 8000:80
      - 8001:443
    environment:
      WORDPRESS_DB_HOST: XXXX
      WORDPRESS_DB_USER: XXXX
      WORDPRESS_DB_PASSWORD: XXXX
      WORDPRESS_DB_NAME: XXXX
      PUID: 1043
      PGID: 1023
      TZ: Europe/Paris
    volumes:
      - /volume1/docker/wordpress:/var/www/html
      - /volume1/docker/wordpress/uploads.ini:/usr/local/etc/php/conf.d/uploads.ini

  db:
    image: mysql:5.7
    container_name: WordPress-DB
    restart: always
    environment:
      MYSQL_DATABASE: XXXX
      MYSQL_USER: XXXX
      MYSQL_PASSWORD: XXXX
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
      PUID: 1043
      PGID: 1023
      TZ: Europe/Paris
    volumes:
      - /volume1/docker/wordpress-db:/var/lib/mysql
    
  phpmyadmin:
    image: phpmyadmin/phpmyadmin:latest
    container_name: WordPress-PMA
    depends_on:
        - db
    environment:
        - PMA_HOST=XXXX
        - PMA_PORT=3306
        - PMA_ARBITRARY=1
        - TZ=Europe/Paris
        - PUID=1043
        - PGID=1023
    ports:
        - 7997:80
    restart: always
    
  swag:
    image: linuxserver/swag:latest
    container_name: swag
    cap_add:
      - NET_ADMIN
#    labels:
#      - com.centurylinklabs.watchtower.enable=true
    environment:
      - PUID=1043
      - PGID=1023
      - TZ=Europe/Paris
      - URL=XXXX
      - SUBDOMAINS=wildcard
      - VALIDATION=dns
      - DNSPLUGIN=ovh
      - EMAIL=XXXX@gmail.com
      - DOCKER_MODS=linuxserver/mods:swag-dashboard|linuxserver/mods:swag-dbip|linuxserver/mods:swag-crowdsec
      - CROWDSEC_API_KEY=XXXX
      - CROWDSEC_LAPI_URL=http://crowdsec:8080
    volumes:
      - /volume1/docker/swag/config:/config
    ports:
      - 7998:80
      - 7999:443
      - 81:81 # Dashboard
    restart: unless-stopped
  
  crowdsec:
    container_name: crowdsec
    image: crowdsecurity/crowdsec:latest
    restart: unless-stopped
    environment:
      - COLLECTIONS=crowdsecurity/nginx
      - GID=1023
      - UID=1043
    depends_on:
      - swag
    volumes:
      - /volume1/docker/swag/config/log/nginx:/var/log/nginx
      - /volume1/docker/swag/crowdsec/acquis.yaml:/etc/crowdsec/acquis.yaml
      - /volume1/docker/swag/crowdsec/crowdsec-db:/var/lib/crowdsec/data/
      - /volume1/docker/swag/crowdsec/crowdsec-config:/etc/crowdsec/
    security_opt:
      - no-new-privileges=true
    
  dashboard:
    container_name: crowdsec-dashboard
    image: metabase/metabase:latest
    restart: unless-stopped
    depends_on:
      - crowdsec
    ports:
      - 3000:3000
    environment:
      - MB_DB_FILE=metabase.db
      - MGID=1023
      - MUID=1043
      - JAVA_TIMEZONE=Europe/Paris
    volumes:
      - /volume1/docker/swag/crowdsec/crowdsec-db:/metabase-data/
      - /volume1/docker/swag/crowdsec/dashboard:/config
 
  • J'aime
Réactions: keikun et EVO
@Pandux Jo, ta méthode m'intéresse :)
le fichier metabase.db tu le mets où exactement dans le dossier /volume1/docker/swag/crowdsec/ ?
Et dernière question : tu le récupères via quel lien ce metabase.db ?
 
  • J'aime
Réactions: Pandux
@Pandux Jo, ta méthode m'intéresse :)
le fichier metabase.db tu le mets où exactement dans le dossier /volume1/docker/swag/crowdsec/ ?
Et dernière question : tu le récupères via quel lien ce metabase.db ?

Je mets metabase.db ici : /volume1/docker/swag/crowdsec/crowdsec-db/ qui est mappé sur /metabase-data/ côté container.

Donc, crowdsec-dashboard va chercher directement le fichier à la racine de /volume1/docker/swag/crowdsec/crowdsec-db grâce à la variable Environnement MB_DB_FILE=metabase.db.

Et ce fichier, je suis en train de chercher où j'ai pu le dl... (faux suspens pour vous mais je galère sévère hahaha) : AH, c'était le contenu du Dockerfile que j'avais ouvert avec Notepad par curiosité !

Tu peux consulter l'officiel ici : https://github.com/crowdsecurity/example-docker-compose/blob/main/crowdsec/dashboard/Dockerfile :

Code:
FROM metabase/metabase

RUN mkdir /data/ && wget https://crowdsec-statics-assets.s3-eu-west-1.amazonaws.com/metabase_sqlite.zip && unzip metabase_sqlite.zip -d /data/

Et comme j'arrivais pas à me dépatouiller avec le fichier Dockerfile, j'ai "simplement" évité cette étape en m'ajoutant toute celles-ci :
  1. Télécharger https://crowdsec-statics-assets.s3-eu-west-1.amazonaws.com/metabase_sqlite.zip ;
  2. Dézipper metabase_sqlite.zip ;
  3. Renommer le fichier metabase.db.mv.db en metabase.db ;
  4. Le déposer dans /volume1/docker/swag/crowdsec/crowdsec-db/ ;
  5. Déployer la stack complète ;
  6. Serrer les fesses, croiser les doigts.

J'espère que j'ai pas fait de connerie déjà, tout semble rouler en tout cas...

Sauf un truc, c'est quand je test mon site, ça me trouve bien mon certificat OVH mais aussi le certificat Synology alors que j'aurai bien aimé que ce dernier reste privé : vous avez une solution pour cela ?
 
Dernière édition:
  • J'aime
Réactions: MilesTEG