-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathmaster.Dockerfile
More file actions
232 lines (208 loc) · 7.71 KB
/
Copy pathmaster.Dockerfile
File metadata and controls
232 lines (208 loc) · 7.71 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
# Container definition for Odoo >saas-19.3 and <=master
# Last updated: 2026-06-06
# Use Ubuntu 24.04 LTS (Noble Numbat)
FROM ubuntu:noble
ENV LANG=C.UTF-8 \
TERM=xterm-256color \
PYTHONUNBUFFERED=1 \
PYTHONHASHSEED=0 \
ODOO_RUNBOT=1 \
NODE_PATH=/usr/lib/node_modules/ \
npm_config_prefix=/usr \
PATH="/venv/odoo/bin:/venv/odoo-doc/bin:/home/odoo/.local/bin:$PATH"
# Add GeoIP databases
ADD https://github.com/maxmind/MaxMind-DB/raw/main/test-data/GeoIP2-City-Test.mmdb /usr/share/GeoIP/GeoLite2-City.mmdb
ADD https://github.com/maxmind/MaxMind-DB/raw/main/test-data/GeoIP2-Country-Test.mmdb /usr/share/GeoIP/GeoLite2-Country.mmdb
# Perform the following commands as root
USER root
# Install Debian packages
RUN set -x; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
# Runbot packages
apt-transport-https \
build-essential \
ca-certificates \
curl \
faketime \
file \
fonts-freefont-ttf \
fonts-noto-cjk \
gawk \
gnupg \
gsfonts \
libldap2-dev \
libjpeg9-dev \
libsasl2-dev \
libxslt1-dev \
lsb-release \
npm \
ocrmypdf \
sed \
sudo \
unzip \
xfonts-75dpi \
zip \
zlib1g-dev \
# Extra packages
git \
nano \
openssh-client \
socat \
tini \
vim \
&& rm -rf /var/lib/apt/lists/*
# Install Debian packages
RUN set -x; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
# Runbot packages
publicsuffix \
python3 \
flake8 \
python3-dbfread \
python3-dev \
python3-gevent \
python3-pip \
python3-setuptools \
python3-wheel \
python3-markdown \
python3-mock \
python3-phonenumbers \
python3-websocket \
python3-google-auth \
libpq-dev \
pylint \
python3-jwt \
python3-asn1crypto \
python3-html2text \
python3-suds \
python3-xmlsec \
python3-markdown2 \
python3-aiosmtpd \
python3-paramiko \
# Moved packages
python3-venv \
# Extra packages
python-is-python3 \
&& rm -rf /var/lib/apt/lists/*
# Install wkhtmltopdf
RUN curl -sSL https://github.com/wkhtmltopdf/packaging/releases/download/0.12.6.1-2/wkhtmltox_0.12.6.1-2.jammy_amd64.deb -o /tmp/wkhtml.deb \
&& apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get -y install --no-install-recommends --fix-missing -qq \
/tmp/wkhtml.deb \
&& rm -rf /var/lib/apt/lists/* \
&& rm /tmp/wkhtml.deb
# Install npm packages
RUN npm install --force -g \
rtlcss@3.4.0 \
es-check@6.0.0 \
eslint@8.1.0 \
prettier@2.7.1 \
eslint-config-prettier@8.5.0 \
eslint-plugin-prettier@4.2.1
# Install Debian packages in debian/control and get latest postgresql-client
ADD https://raw.githubusercontent.com/odoo/odoo/master/debian/control /tmp/control.txt
RUN curl -sSL https://www.postgresql.org/media/keys/ACCC4CF8.asc -o /etc/apt/trusted.gpg.d/psql_client.asc \
&& echo "deb http://apt.postgresql.org/pub/repos/apt/ `lsb_release -s -c`-pgdg main" > /etc/apt/sources.list.d/pgclient.list \
&& apt-get update \
&& sed -n '/^Depends:/,/^[A-Z]/p' /tmp/control.txt \
| awk '/^ [a-z]/ { gsub(/,/,"") ; gsub(" ", "") ; print $NF }' | sort -u \
| DEBIAN_FRONTEND=noninteractive xargs apt-get install -y -qq --no-install-recommends \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/*
# Install Google Chrome
RUN curl -sSL https://dl.google.com/linux/chrome/deb/pool/main/g/google-chrome-stable/google-chrome-stable_145.0.7632.116-1_amd64.deb -o /tmp/chrome.deb \
&& apt-get update \
&& apt-get -y install --no-install-recommends \
/tmp/chrome.deb \
&& rm /tmp/chrome.deb
# Install Odoo Phonenumbers
ADD https://packages.odoo.com/pub/python3-phonenumbers_8.12.57-4+odoo1_all.deb /phonenumbers.deb
RUN set -x ; \
apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
/phonenumbers.deb \
&& rm -rf /var/lib/apt/lists/*
# Install uv system-wide
RUN curl -LsSf https://astral.sh/uv/install.sh | sh \
&& mv /root/.local/bin/uv /usr/local/bin/uv \
&& mv /root/.local/bin/uvx /usr/local/bin/uvx
# Create virtual environments using uv
RUN uv venv /venv/odoo --system-site-packages \
&& uv venv /venv/odoo-doc --system-site-packages
# Install pip packages
RUN uv pip install --no-cache-dir \
# Runbot packages
ebaysdk==2.1.5 \
pdf417gen==0.7.1 \
pylint==4.0.3 \
unidiff==0.7.3 \
markdown2==2.4.11 \
semgrep==1.116.0 \
ruff==0.15.0 \
coverage==7.4.4 \
h11==0.16.0 \
# Extra packages
debugpy \
pydevd-odoo \
watchdog \
inotify
# Install Odoo Python requirements
ADD https://raw.githubusercontent.com/odoo/odoo/master/requirements.txt /tmp/requirements.txt
ADD https://raw.githubusercontent.com/odoo/documentation/master/requirements.txt /tmp/doc_requirements.txt
ADD https://raw.githubusercontent.com/odoo/documentation/master/tests/requirements.txt /tmp/doctests_requirements.txt
RUN VIRTUAL_ENV=/venv/odoo uv pip install --no-cache-dir \
-r /tmp/requirements.txt \
&& VIRTUAL_ENV=/venv/odoo-doc uv pip install --no-cache-dir \
-r /tmp/requirements.txt \
&& VIRTUAL_ENV=/venv/odoo-doc uv pip install --no-cache-dir \
-r /tmp/doc_requirements.txt \
-r /tmp/doctests_requirements.txt
# Remove the default Ubuntu user, add an Odoo user and set up their environment
RUN --mount=type=bind,source=append.bashrc,target=/tmp/append.bashrc \
userdel ubuntu \
&& groupadd -g 1000 odoo \
&& useradd --create-home -u 1000 -g odoo -G audio,video odoo \
&& passwd -d odoo \
&& echo odoo ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/odoo \
&& chmod 0440 /etc/sudoers.d/odoo \
# Create the working directory and make it owned by the Odoo user
&& mkdir /code \
&& chown odoo:odoo /code \
# Give the new user ownership of the venv directory
&& chown -R odoo:odoo /venv \
# Configure the Bash shell using Starship
&& curl -sS https://starship.rs/install.sh | sh -s -- --yes \
&& cat /tmp/append.bashrc >> /home/odoo/.bashrc
# Install faketime
RUN set -x ; \
dpkg-query -l faketime \
&& DEBIAN_FRONTEND=noninteractive apt-get purge -y --no-install-recommends faketime libfaketime || true \
&& curl -sSL https://github.com/wolfcw/libfaketime/archive/3062fb20041552727bdb810456d2f1b4001b341f.tar.gz -o /tmp/faketime-sources.tar.gz \
&& cd /tmp \
&& tar xvf faketime-sources.tar.gz \
&& cd libfaketime-3062fb20041552727bdb810456d2f1b4001b341f \
&& make \
&& make install \
&& rm /tmp/faketime-sources.tar.gz \
&& rm -rf /tmp/libfaketime-3062fb20041552727bdb810456d2f1b4001b341f
# Switch to the odoo user for subsequent commands
USER odoo
# Create mounted folders to prevent permission issues
RUN mkdir -p /home/odoo/.local/share && \
mkdir -p /home/odoo/.local/share/Odoo && \
mkdir -p /home/odoo/.local/bin && \
mkdir -p /home/odoo/.bash_history_data && \
mkdir -p /home/odoo/.ssh
# Copy config files and scripts
COPY .bash_aliases /home/odoo/.bash_aliases
COPY starship.toml /home/odoo/.config/starship.toml
COPY startup.sh /home/odoo/.local/bin/startup.sh
WORKDIR /code
# Expose useful ports
EXPOSE 5678 8070
# Set Tini as the entrypoint
ENTRYPOINT ["/usr/bin/tini", "--"]
# Start background services and keep the container alive
CMD ["sh", "-c", "/home/odoo/.local/bin/startup.sh"]