seo – How can I use canonical tags to resolve duplication between the homepage, category pages, tag pages and article pages?

On my site I have something like a small blog (PHP and MySQL loaded dynamically), with categories like "life", "business" and "health".
Each item has added tags. Tags allow finding items with specific labels. I have on my home page a "news" section with the 3 most recent publications (any category, only filter by date).

An example of a publication would be titled "My own garden" in the category "life", with the labels "hobby" and "free time". The original URL for this post would be http: //example/blog/life/my-own-garden.html. On my homepage it appears as "My own garden" with the first 100 characters of the article and a "Read more" link for the complete publication.

On my blog page with address http: // example / blog / I see that same abbreviated publication (first 100 characters) and other publications of any category, with the link "Read more" to the original page, where the user can read the complete publication.

On my category page with address http: // example / blog / life I see that same abbreviated publication (first 100 characters) and another publication of that same category, with a link to the original page, where the user can read the complete publication.

On my tag page with URL http: //example/tag/hobby.html Y http: //example/tag/free-time.html I see the same publication and other publications with the same label (no matter what category they are)

And at the end I have the same content on the page that I originally named: http: //example/blog/life/my-own-garden.html

Therefore, I have 5 pages that have the same content part or the same that are totally content. The data is loaded dynamically, eg.
http: //example/blog/life/my-own-garden.html Y http: //example/blog/life/best-free-time-ever.html they are fed by the same file, only with different publications.

How could I establish canonical links in this situation? Is there any way to do it correctly?