233 lines
8.5 KiB
HTML
233 lines
8.5 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://odooprojects.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"
|
|
/>
|
|
<style>
|
|
* {
|
|
box-sizing: border-box;
|
|
}
|
|
body {
|
|
margin: 0;
|
|
font-family: Inter, sans-serif;
|
|
font-size: 1rem;
|
|
line-height: 1.7;
|
|
background: #08080c;
|
|
color: #e8e8f0;
|
|
}
|
|
.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 #1a1a2e;
|
|
}
|
|
.blog-header a {
|
|
color: #00f5ff;
|
|
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: #e8e8f0;
|
|
}
|
|
.post-meta {
|
|
color: rgba(232, 232, 240, 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: #e8e8f0;
|
|
}
|
|
.post-content p {
|
|
margin: 1rem 0;
|
|
}
|
|
.post-content ul,
|
|
.post-content ol {
|
|
padding-left: 1.5rem;
|
|
}
|
|
.post-content li {
|
|
margin: 0.5rem 0;
|
|
}
|
|
.post-content code {
|
|
background: #12121c;
|
|
color: #00f5ff;
|
|
padding: 0.2rem 0.4rem;
|
|
border-radius: 4px;
|
|
font-size: 0.9em;
|
|
}
|
|
.post-content pre {
|
|
background: #12121c;
|
|
color: #00f5ff;
|
|
padding: 1rem;
|
|
border-radius: 0.6rem;
|
|
overflow-x: auto;
|
|
border: 1px solid #1a1a2e;
|
|
font-size: 0.9rem;
|
|
}
|
|
.pro-tip {
|
|
border-left: 3px solid #00f5ff;
|
|
background: #010f20;
|
|
padding: 1rem 1.25rem;
|
|
margin: 1.5rem 0;
|
|
border-radius: 0 0.6rem 0.6rem 0;
|
|
}
|
|
.pro-tip strong {
|
|
color: #00f5ff;
|
|
}
|
|
.cta-box {
|
|
border: 1px solid rgba(0, 245, 255, 0.2);
|
|
background: #12121c;
|
|
padding: 1.5rem;
|
|
margin: 2rem 0;
|
|
border-radius: 0.6rem;
|
|
text-align: center;
|
|
}
|
|
.cta-box h3 {
|
|
margin: 0 0 0.5rem;
|
|
color: #e8e8f0;
|
|
}
|
|
.cta-box p {
|
|
margin: 0 0 1rem;
|
|
color: rgba(232, 232, 240, 0.7);
|
|
font-size: 0.9rem;
|
|
}
|
|
.cta-box .btn {
|
|
display: inline-block;
|
|
padding: 0.6rem 1.5rem;
|
|
background: #00f5ff;
|
|
color: #08080c;
|
|
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 #1a1a2e;
|
|
margin-top: 2rem;
|
|
}
|
|
.post-footer a {
|
|
color: #00f5ff;
|
|
text-decoration: none;
|
|
}
|
|
.post-footer a:hover {
|
|
text-decoration: underline;
|
|
}
|
|
</style>
|
|
</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>
|
|
</body>
|
|
</html>
|