Public Access
Four follow-up defects found beyond the 2026-10-27 SEO audit (no copy changes): 1. legal.html canonical was https://ODOO4projects.com/legal — uppercase host AND a path that 404s. Now https://odoo4projects.com/legal.html. The file's og:url keeps its path /legal but its host is lowercased (path fix awaiting a decision). 2. The no-"4" domain typo in reader-visible <pre><code> body text of blog/posts/{guide-migrate-enterprise,speed-run-deploy,my-first-post}.html: odooprojects.com -> odoo4projects.com. Domain string only, no other wording. 3. Lowercase host in every machine-read value: the robots.txt Sitemap line, the homepage + de/ + es/ Organization JSON-LD url / contactPoint.url / offers[].url, legal.html og:url, and the four absolute self-URL hrefs in blog posts, odoo/support.html and email/trial-confirmation.html. Display text untouched (support@ODOO4projects.com stays as written). 4. One BlogPosting per blog post (15), every value taken from the page itself: headline = its <h1>, datePublished = its visible post-meta date, url = its own canonical, author/publisher = the Organization the site already publishes, image = its og:image where one exists (omitted on the 10 posts that have none). Empire ">950.00", FAQPage on support.html, the blog-chrome change and the bootcamp date conflict are untouched — decisions pending with the user.
274 lines
10 KiB
HTML
274 lines
10 KiB
HTML
<!doctype html>
|
||
<html lang="en-US">
|
||
<head>
|
||
<meta charset="utf-8" />
|
||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||
<title>
|
||
Install Custom Odoo Modules via Git – A Practical How-To |
|
||
ODOO4projects
|
||
</title>
|
||
<meta
|
||
name="description"
|
||
content="Learn how to install and manage custom Odoo modules directly from Git repositories on your ODOO4projects instance."
|
||
/>
|
||
<link
|
||
rel="canonical"
|
||
href="https://odoo4projects.com/blog/posts/howto-custom-module.html"
|
||
/>
|
||
<meta
|
||
property="og:title"
|
||
content="Install Custom Odoo Modules via Git – A Practical How-To"
|
||
/>
|
||
<meta
|
||
property="og:description"
|
||
content="Learn how to install and manage custom Odoo modules directly from Git repositories on your ODOO4projects instance."
|
||
/>
|
||
<meta property="og:type" content="article" />
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
<link rel="icon" href="../../images/favicon.ico" />
|
||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||
<link
|
||
href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&family=Inter+Tight:wght@500;600;700;800&display=swap"
|
||
rel="stylesheet"
|
||
/>
|
||
<link
|
||
rel="stylesheet"
|
||
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css"
|
||
/>
|
||
<link rel="stylesheet" href="../../style.css" />
|
||
<style>
|
||
:root {
|
||
--primary: #714b67;
|
||
--border: #e5e3e0;
|
||
--radius: 0.6rem;
|
||
--dark: #212529;
|
||
--light: #f8f9fa;
|
||
--bg: #ffffff;
|
||
}
|
||
* {
|
||
box-sizing: border-box;
|
||
}
|
||
body {
|
||
margin: 0;
|
||
font-family: Inter, sans-serif;
|
||
font-size: 1rem;
|
||
line-height: 1.7;
|
||
background: var(--bg);
|
||
color: var(--dark);
|
||
}
|
||
.container {
|
||
width: 80%;
|
||
max-width: 800px;
|
||
margin: 0 auto;
|
||
padding: 0 20px;
|
||
}
|
||
@media (max-width: 768px) {
|
||
.container {
|
||
width: 100%;
|
||
}
|
||
}
|
||
.blog-header {
|
||
padding: 2rem 0;
|
||
border-bottom: 1px solid var(--border);
|
||
}
|
||
.blog-header a {
|
||
color: var(--primary);
|
||
text-decoration: none;
|
||
font-size: 0.85rem;
|
||
}
|
||
.blog-header a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
.post-title {
|
||
font-family: "Inter Tight", sans-serif;
|
||
font-size: clamp(1.5rem, 3vw, 2.2rem);
|
||
font-weight: 700;
|
||
margin: 1.5rem 0 0.5rem;
|
||
color: var(--dark);
|
||
}
|
||
.post-meta {
|
||
color: rgba(33, 37, 41, 0.5);
|
||
font-size: 0.85rem;
|
||
margin-bottom: 2rem;
|
||
}
|
||
.post-content h2 {
|
||
font-family: "Inter Tight", sans-serif;
|
||
font-size: 1.3rem;
|
||
margin-top: 2rem;
|
||
color: var(--dark);
|
||
}
|
||
.post-content p {
|
||
margin: 1rem 0;
|
||
color: rgba(33, 37, 41, 0.7);
|
||
line-height: 1.7;
|
||
}
|
||
.post-content ul,
|
||
.post-content ol {
|
||
padding-left: 1.5rem;
|
||
}
|
||
.post-content li {
|
||
margin: 0.5rem 0;
|
||
}
|
||
.post-content a {
|
||
color: var(--primary);
|
||
}
|
||
.post-content code {
|
||
background: var(--light);
|
||
color: var(--dark);
|
||
padding: 0.2rem 0.4rem;
|
||
border-radius: 4px;
|
||
font-size: 0.9em;
|
||
}
|
||
.post-content pre {
|
||
background: var(--light);
|
||
color: var(--dark);
|
||
padding: 1rem;
|
||
border-radius: var(--radius);
|
||
overflow-x: auto;
|
||
border: 1px solid var(--border);
|
||
font-size: 0.82rem;
|
||
}
|
||
.pro-tip {
|
||
border-left: 3px solid var(--primary);
|
||
background: rgba(113, 75, 103, 0.04);
|
||
padding: 1rem 1.25rem;
|
||
margin: 1.5rem 0;
|
||
border-radius: 0 0.6rem 0.6rem 0;
|
||
}
|
||
.pro-tip strong {
|
||
color: var(--primary);
|
||
}
|
||
.cta-box {
|
||
border: 1px solid var(--border);
|
||
background: var(--bg);
|
||
padding: 1.5rem;
|
||
margin: 2rem 0;
|
||
border-radius: var(--radius);
|
||
text-align: center;
|
||
}
|
||
.cta-box h3 {
|
||
margin: 0 0 0.5rem;
|
||
color: var(--dark);
|
||
}
|
||
.cta-box p {
|
||
margin: 0 0 1rem;
|
||
color: rgba(33, 37, 41, 0.7);
|
||
font-size: 0.9rem;
|
||
}
|
||
.cta-box .btn {
|
||
display: inline-block;
|
||
padding: 0.6rem 1.5rem;
|
||
background: var(--primary);
|
||
color: #fff;
|
||
text-decoration: none;
|
||
border-radius: 0.5rem;
|
||
font-weight: 600;
|
||
font-size: 0.85rem;
|
||
transition: opacity 0.2s;
|
||
}
|
||
.cta-box .btn:hover {
|
||
opacity: 0.85;
|
||
}
|
||
.post-footer {
|
||
padding: 2rem 0;
|
||
border-top: 1px solid var(--border);
|
||
margin-top: 2rem;
|
||
}
|
||
.post-footer a {
|
||
color: var(--primary);
|
||
text-decoration: none;
|
||
}
|
||
.post-footer a:hover {
|
||
text-decoration: underline;
|
||
}
|
||
</style>
|
||
<script type="application/ld+json">
|
||
{
|
||
"@context": "https://schema.org",
|
||
"@type": "BlogPosting",
|
||
"headline": "Install Custom Odoo Modules via Git – A Practical How-To",
|
||
"datePublished": "2026-06-17",
|
||
"url": "https://odoo4projects.com/blog/posts/howto-custom-module.html",
|
||
"author": {
|
||
"@type": "Organization",
|
||
"name": "ODOO4projects",
|
||
"url": "https://odoo4projects.com/"
|
||
},
|
||
"publisher": {
|
||
"@type": "Organization",
|
||
"name": "ODOO4projects",
|
||
"url": "https://odoo4projects.com/",
|
||
"logo": {
|
||
"@type": "ImageObject",
|
||
"url": "https://odoo4projects.com/images/logo.png"
|
||
}
|
||
}
|
||
}
|
||
</script>
|
||
</head>
|
||
<body>
|
||
<div class="container">
|
||
<div class="blog-header">
|
||
<a href="../../index.html#blog">← Back to Blog</a>
|
||
</div>
|
||
<article>
|
||
<h1 class="post-title">
|
||
Install Custom Odoo Modules via Git – A Practical
|
||
How-To
|
||
</h1>
|
||
<div class="post-meta">June 17, 2026 · How-To</div>
|
||
<div class="post-content">
|
||
<p>
|
||
One of the most powerful features of Odoo is its modular
|
||
architecture. With ODOO4projects' On the Rise plan and
|
||
above, you can install custom modules directly from Git
|
||
repositories. Here's how.
|
||
</p>
|
||
<h2>Step 1: Connect Your Git Repository</h2>
|
||
<p>
|
||
From your dashboard, navigate to the
|
||
<strong>Modules</strong> tab and click
|
||
<strong>Connect Git Repo</strong>. Enter your repository
|
||
URL and authentication credentials if required. We
|
||
support GitHub, GitLab, and Bitbucket.
|
||
</p>
|
||
<div class="pro-tip">
|
||
<strong>Pro Tip:</strong> Use a private repository with
|
||
a deploy token for secure, automated access. Never store
|
||
personal access tokens in your Odoo configuration files.
|
||
</div>
|
||
<h2>Step 2: Deploy the Module</h2>
|
||
<p>
|
||
Once connected, select the module from the list and
|
||
click <strong>Deploy</strong>. The system will clone the
|
||
repository, install any dependencies, and make the
|
||
module available in your Odoo apps list.
|
||
</p>
|
||
<pre><code>git clone https://github.com/your-org/odoo-custom-module.git
|
||
# ODOO4projects handles the rest automatically</code></pre>
|
||
<h2>Step 3: Install in Odoo</h2>
|
||
<p>
|
||
Go to the Odoo Apps menu, search for your module, and
|
||
click <strong>Install</strong>. That's it. Your custom
|
||
module is now live.
|
||
</p>
|
||
<div class="cta-box">
|
||
<h3>Need Module Support?</h3>
|
||
<p>
|
||
Upgrade to On the Rise for full module installation
|
||
and customization support.
|
||
</p>
|
||
<a href="../../index.html#pricing" class="btn"
|
||
>View Plans</a
|
||
>
|
||
</div>
|
||
</div>
|
||
</article>
|
||
<div class="post-footer">
|
||
<a href="../../index.html#blog">← Back to all posts</a>
|
||
</div>
|
||
</div>
|
||
<script defer src="/static/agent-odoo4projects/agent.js"></script>
|
||
</body>
|
||
</html> |