• @mim
    link
    22
    edit-2
    10 months ago

    Wallabag.

    I self-host my own instace, save articles I want to read from my laptop, and then they sync with the app on my phone. I read them offline when I have some time to kill

    • @techguy86@lemmy.world
      cake
      link
      fedilink
      English
      610 months ago

      That looks exactly like something I’ve been looking for. I’m going to spin up an instance tonight and take it for a test drive. Thanks!

      • @mim
        link
        310 months ago

        You’re welcome!

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