Add a Custom Module
This tutorial shows you how to add a custom Odoo module to your Skysize deployment. There are two approaches depending on whether the module lives in a separate repository or directly in your project repository.
Time to complete: ~15 minutes
What you need:
- A project already deployed on Skysize (Deploy Your First Instance)
- A custom Odoo module (your own code, or a community module from OCA)
How custom modules work on Skysize
On every deployment, Skysize clones your repository for that branch and makes its contents available to Odoo as a custom addons directory. Odoo discovers a module when its folder (the one containing __manifest__.py) sits directly inside a directory on the addons path, so modules placed at the root of your repository are picked up automatically with no extra configuration.
If your modules live in a subdirectory, you point Odoo at that directory with the branch's Custom addons path setting. If your modules live in a separate repository, you bring them in as a Git submodule and then add the submodule's directory to the custom addons path.
Custom modules are made available on the server but are not installed automatically. After deploying, you must install them from the Odoo Apps menu (see Install the module in Odoo below). Once installed, a module is upgraded automatically on every Update Build deployment.
Option A: Module in your own repository
Use this approach when your custom module is stored directly inside your project repository.
1. Add your module to the repository
Place your module anywhere in the repository. The simplest layout is at the root:
my-odoo-repo/
├── my_module/
│ ├── __manifest__.py
│ └── ...
└── ...
With this layout, no further configuration is needed, Skysize will find my_module automatically. Commit and push, then skip to Install the module in Odoo.
If you prefer to keep modules in a subdirectory:
my-odoo-repo/
├── custom_addons/
│ └── my_module/
│ ├── __manifest__.py
│ └── ...
└── ...
Then you need to configure the addons path as described in the next step.
2. Configure the custom addons path (subdirectory only)
-
Go to your project and open the Branches tab.
-
Click your branch to open its settings.
-
Scroll to the Addon Configuration card and find the Custom addons path field.
-
Enter the path to the directory that contains your module(s). Each path must start with
/:/custom_addonsFor modules spread across multiple directories, separate them with commas:
/custom_addons,/extra_addons -
Click Save.
Changing the custom addons path takes effect on the next deployment. Save the field, then push a commit (or use Rebuild on the branch) so the new path is applied.
Install the module in Odoo
- Open your Odoo instance.
- Go to Settings → Apps (enable developer mode if the app is not visible: Settings → Activate the developer mode).
- Search for your module and click Install.
Option B: Module in a separate repository (Git submodule)
Use this approach when your custom module lives in its own repository, for example, an OCA community module or an internal module shared across multiple projects.
Submodules must point at a public, HTTPS-accessible repository, Skysize fetches them anonymously during the build. Submodules that require authentication (private repositories, SSH URLs) are not supported. If you control the module's code, you can instead vendor it directly into your project repository (Option A).
1. Add the submodule
A Git submodule must be added with the git command line, the GitHub/GitLab/Bitbucket web editors cannot create the special submodule reference correctly. In your local clone of your project repository, run:
git submodule add https://github.com/OCA/web.git addons/oca_web
git commit -m "Add OCA web submodule"
git push
This records the external repository at the path addons/oca_web and writes a .gitmodules file. Use a public HTTPS URL (not an git@… SSH URL) so the build can fetch it without credentials.
2. Configure the custom addons path in Skysize
Because the submodule lives in a subdirectory, point Odoo at it:
-
Go to your project and open the Branches tab.
-
Click your branch to open its settings.
-
In the Addon Configuration card, set the Custom addons path to the submodule's directory:
/addons/oca_web -
Click Save.
3. Redeploy and install
Push a commit (or use Rebuild on the branch) to trigger a new deployment. Once the build succeeds, install the module from the Odoo Apps menu as described above.
Troubleshooting
Module does not appear in the Apps menu
- Make sure developer mode is enabled in Odoo (Settings → Activate the developer mode), then click Update Apps List.
- Confirm your module folder contains a valid
__manifest__.py. - If your module is in a subdirectory, verify the Custom addons path is set and matches the actual directory structure (paths are case-sensitive).
- Check the deployment (build) logs (open the deployment and click View Logs) for any errors related to module loading or a failed dependency install.
Submodule directory is empty after deployment
- Confirm the submodule repository URL is a public HTTPS URL accessible without authentication.
- Verify that the
.gitmodulesfile is committed and the submodule path is correct.
A module installs but a Python dependency is missing
- Add the dependency to a
requirements.txtat the root of your repository. Skysize installs it automatically during deployment.