• @mim@lemmy.sdf.org
      link
      fedilink
      2
      edit-2
      10 months ago

      I don’t self-host a lot of things, but I’d say this is not the easiest I’ve done, just because it involves setting up multiple containers (unlike something like SearXNG). Also thought that I had to set-up an SMTP container, but I got away with not having to do it.

      I used ansible (and pass to store credentials), so this is how I did it (maybe someone can pitch in and tell me what I can improve):

      - name: Deploy Wallabag database
        community.docker.docker_container:
          name: db_wallabag
          image: mariadb
          recreate: true
          state: started
          memory: 500MB
          restart_policy: always
          log_options:
            max-size: "10m"
            max-file: "1"
          env:
            MYSQL_ROOT_PASSWORD: "{{ lookup('community.general.passwordstore', 'self_host_containers/wallabag_mysql_root_password', missing='warn') }}"
          volumes:
          - ~/wallabag/data:/var/lib/mysql
          healthcheck:
            test: ["CMD", "mysqladmin", "ping", "-h", "localhost"]
            interval: 20s
            timeout: 3s
      
      - name: Deploy Wallabag redis
        community.docker.docker_container:
          name: redis_wallabag
          image: redis:alpine
          recreate: true
          state: started
          memory: 500MB
          restart_policy: always
          log_options:
            max-size: "10m"
            max-file: "1"
          links:
          - "db_wallabag:db_wallabag"
          healthcheck:
            test: ["CMD", "redis-cli", "ping"]
            interval: 20s
            timeout: 3s
      
      - name: Deploy Wallabag
        community.docker.docker_container:
          image: wallabag/wallabag:latest
          name: wallabag
          recreate: true
          state: started
          memory: 500MB
          restart_policy: always
          log_options:
            max-size: "10m"
            max-file: "1"
          links:
          - "redis_wallabag:redis_wallabag"
          - "db_wallabag:db_wallabag"
          ports:
          - "80"
          env:
            MYSQL_ROOT_PASSWORD: "{{ lookup('community.general.passwordstore', 'self_host_containers/wallabag_mysql_root_password', missing='warn') }}"
            SYMFONY__ENV__DATABASE_DRIVER: pdo_mysql
            SYMFONY__ENV__DATABASE_HOST: db_wallabag
            SYMFONY__ENV__DATABASE_PORT: "3306"
            SYMFONY__ENV__DATABASE_NAME: db_wallabag
            SYMFONY__ENV__DATABASE_USER: db_wallabag
            SYMFONY__ENV__DATABASE_PASSWORD: "{{ lookup('community.general.passwordstore', 'self_host_containers/wallabag_symfony_env_database_password', missing='warn') }}"
            SYMFONY__ENV__DATABASE_CHARSET: utf8mb4
            SYMFONY__ENV__DATABASE_TABLE_PREFIX: "wallabag_"
            SYMFONY__ENV__MAILER_DSN: smtp://127.0.0.1
            SYMFONY__ENV__FROM_EMAIL: wallabag@example.com
            SYMFONY__ENV__DOMAIN_NAME: 
            SYMFONY__ENV__SERVER_NAME: 
          volumes:
          - ~/wallabag/images:/var/www/wallabag/web/assets/images
          - ~/wallabag/data:/var/www/wallabag/data
          healthcheck:
            test: ["CMD", "wget", "--no-verbose", "--tries=1", "--spider", "http://localhost"]
            interval: 1m
            timeout: 3s
      
      
      

      Then I set up caddy for the reverse proxy

      - name: Upload Caddyfile
        ansible.builtin.copy:
          src: ./upload_files/Caddyfile
          dest: ~/Caddyfile
      
      - name: Deploy caddy
        community.docker.docker_container:
          image: caddy:2
          name: caddy
          user: "1000:1000"
          recreate: true
          state: started
          memory: 500MB
          restart_policy: always
          log_options:
            max-size: "10m"
            max-file: "1"
          links:
          - "wallabag:wallabag"
          ports:
          - "80:80"
          - "443:443"
          volumes:
          - ~/Caddyfile:/etc/caddy/Caddyfile
          - ~/caddy_data:/data
          - ~/caddy_config:/config
      

      And this is the Caddyfile

      my.url.com {
          reverse_proxy wallabag:80
      }
      

      Finally, you then have to login with user:wallabag and password:wallabag and change them in the webUI. I changed the “wallabag” user to my user and set a new password.