• @mim
    link
    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.