-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathDockerfile
94 lines (83 loc) · 2.97 KB
/
Dockerfile
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
FROM python:3.11-alpine3.19
ENV UV_VERSION=0.6.5
ENV UV_COMPILE_BYTECODE=1
ENV UV_LINK_MODE=copy
ENV UV_INSTALL_DIR="/usr/local/bin"
ENV UV_PROJECT_ENVIRONMENT="/home/apl/.venv"
# make application directory
RUN mkdir -p /app/ibet-SmartContract/
# install packages
RUN apk update \
&& apk add --no-cache --virtual .build-deps \
# use Python package installation
make \
gcc \
pkgconfig \
build-base \
libressl-dev \
libffi-dev \
autoconf \
automake \
libtool \
git \
# use Solidity compiler
z3 \
# AWS CLI
aws-cli \
mandoc \
# use deploy.sh
jq \
expect
# use glibc instead of musl-dev
# NOTE: This is because if it is musl-dev, an dynamic link error will occur in Solidity compiler.
RUN wget -q -O /etc/apk/keys/sgerrand.rsa.pub https://alpine-pkgs.sgerrand.com/sgerrand.rsa.pub \
&& wget https://github.com/sgerrand/alpine-pkg-glibc/releases/download/2.33-r0/glibc-2.33-r0.apk \
&& apk add --force-overwrite glibc-2.33-r0.apk \
&& rm -f glibc-2.33-r0.apk
ENV LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/lib
# add apl user/group
RUN addgroup -g 1000 apl \
&& adduser -G apl -D -s /bin/bash -u 1000 apl \
&& echo 'apl ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \
&& chown -R apl:apl /app \
&& echo 'export LANG=ja_JP.utf8' >> ~apl/.profile
# install uv
ADD https://astral.sh/uv/$UV_VERSION/install.sh /uv-installer.sh
RUN INSTALLER_NO_MODIFY_PATH=1 sh /uv-installer.sh && rm /uv-installer.sh
RUN echo 'if [ -f ~/.ashrc ]; then' >> ~apl/.profile \
&& echo ' . ~/.ashrc' >> ~apl/.profile \
&& echo 'fi' >> ~apl/.profile \
&& echo '. $HOME/.venv/bin/activate' >> ~apl/.ashrc
# prepare venv
USER apl
RUN mkdir /home/apl/.venv
# install python packages
COPY pyproject.toml /app/ibet-SmartContract/pyproject.toml
COPY uv.lock /app/ibet-SmartContract/uv.lock
RUN cd /app/ibet-SmartContract \
&& uv venv $UV_PROJECT_ENVIRONMENT \
&& uv sync --frozen --no-dev --no-install-project \
&& rm -f /app/ibet-SmartContract/pyproject.toml \
&& rm -f /app/ibet-SmartContract/uv.lock
# deploy app
USER apl
COPY --chown=apl:apl LICENSE /app/ibet-SmartContract/
RUN mkdir -p /app/ibet-SmartContract/tools/
COPY --chown=apl:apl tools/ /app/ibet-SmartContract/tools/
COPY --chown=apl:apl brownie-config.yaml /app/ibet-SmartContract/
RUN mkdir -p /app/ibet-SmartContract/data/
COPY --chown=apl:apl data/ /app/ibet-SmartContract/data/
RUN source ~apl/.profile \
&& cd /app/ibet-SmartContract/ \
&& brownie networks import data/networks.yml
RUN mkdir -p /app/ibet-SmartContract/scripts/
COPY --chown=apl:apl scripts/ /app/ibet-SmartContract/scripts/
RUN mkdir -p /app/ibet-SmartContract/interfaces/
COPY --chown=apl:apl interfaces/ /app/ibet-SmartContract/interfaces/
RUN mkdir -p /app/ibet-SmartContract/contracts/
COPY --chown=apl:apl contracts/ /app/ibet-SmartContract/contracts/
RUN find /app/ibet-SmartContract/ -type d -name __pycache__ | xargs rm -fr \
&& chmod -R 755 /app/ibet-SmartContract/
ENV PYTHONUNBUFFERED=1
ENV PYTHONPATH=/app/ibet-SmartContract
CMD ["sh"]