-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDockerfile
118 lines (89 loc) · 3.59 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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
FROM rust:bookworm AS build
RUN USER=root
RUN rustup component add rustfmt
# Create a dummy project to cache dependencies as a separate layer
WORKDIR /shine
COPY ./crates/shine-test-macros/Cargo.toml ./crates/shine-test-macros/
RUN mkdir -p ./crates/shine-test-macros/src && touch ./crates/shine-test-macros/src/lib.rs
COPY ./crates/shine-test/Cargo.toml ./crates/shine-test/
RUN mkdir -p ./crates/shine-test/src && touch ./crates/shine-test/src/lib.rs
COPY ./crates/shine-core-macros/Cargo.toml ./crates/shine-core-macros/
RUN mkdir -p ./crates/shine-core-macros/src && touch ./crates/shine-core-macros/src/lib.rs
COPY ./crates/shine-core/Cargo.toml ./crates/shine-core/
RUN mkdir -p ./crates/shine-core/src && touch ./crates/shine-core/src/lib.rs
COPY ./services/identity/Cargo.toml ./services/identity/
RUN mkdir -p ./services/identity/src && echo "fn main() {}" >./services/identity/src/main.rs
COPY ./services/builder/Cargo.toml ./services/builder/
RUN mkdir -p ./services/builder/src && echo "fn main() {}" >./services/builder/src/main.rs
COPY ./rustfmt.toml ./
COPY ./clippy.toml ./
COPY ./Cargo.toml ./
COPY ./Cargo.lock ./
RUN cargo build --release
RUN rm -rf ./crates \
&& rm -rf ./services \
&& rm -f ./target/release/deps/libshine* \
&& rm -f ./target/release/deps/shine* \
&& rm -f ./target/release/libshine* \
&& rm -f ./target/release/shine*
# Copy the actual source code
COPY ./crates ./crates
COPY ./services ./services
RUN cargo fmt --check
ENV RUST_BACKTRACE=1
ENV SHINE_TEST_REDIS_CNS="redis://redis.mockbox.com:6379"
ENV SHINE_TEST_PG_CNS="postgres://username:[email protected]:5432/database-test?sslmode=disable"
RUN cargo test --release
RUN cargo build --release
#######################################################
FROM nginx:bookworm AS base
# add ca-certs required for many tools
RUN apt update \
&& apt install -y --no-install-recommends ca-certificates supervisor \
&& mkdir -p /var/log/supervisor
COPY ./docker/supervisord.conf /etc/supervisor/conf.d/supervisor.conf
COPY ./docker/nginx.conf /etc/nginx/nginx.conf
WORKDIR /app
COPY ./docker/scripts/ ./
RUN chmod +x ./wait-for-services.sh \
&& chmod +x ./start-identity.sh \
&& chmod +x ./start-builder.sh
WORKDIR /app/services/identity
COPY --from=build /shine/target/release/shine-identity ./
COPY --from=build /shine/services/identity/tera_templates ./tera_templates
COPY ./services/server_version.json ./
WORKDIR /app/services/builder
COPY --from=build /shine/target/release/shine-builder ./
COPY ./services/server_version.json ./
ENV IDENTITY_TENANT_ID=
ENV IDENTITY_CLIENT_ID=
ENV IDENTITY_CLIENT_SECRET=
ENV WAIT_FOR_SERVICES=
EXPOSE 80 443
CMD ["/usr/bin/supervisord"]
#######################################################
FROM base AS test
WORKDIR /app
COPY ./certs/test.crt ./certs/test.crt
COPY ./certs/test.key ./certs/test.key
COPY ./docker/nginx.test.conf /etc/nginx/nginx-shine-server.conf
WORKDIR /app/services
COPY ./services/server_config_test.json ./
WORKDIR /app/services/identity
COPY ./services/identity/server_config.test.json ./
WORKDIR /app/services/builder
COPY ./services/builder/server_config.test.json ./
ARG ENVIRONMENT=test
ENV ENVIRONMENT=$ENVIRONMENT
#######################################################
FROM base AS prod
WORKDIR /app
COPY ./docker/nginx.prod.conf /etc/nginx/nginx-shine-server.conf
WORKDIR /app/services
COPY ./services/server_config.json ./
WORKDIR /app/services/identity
COPY ./services/identity/server_config.prod.json ./
WORKDIR /app/services/builder
COPY ./services/builder/server_config.prod.json ./
ARG ENVIRONMENT=prod
ENV ENVIRONMENT=$ENVIRONMENT