Skip to content

Commit

Permalink
docker stuff
Browse files Browse the repository at this point in the history
  • Loading branch information
cycle-five committed Aug 9, 2024
1 parent 45ac68c commit f04b71b
Show file tree
Hide file tree
Showing 12 changed files with 169 additions and 84 deletions.
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,7 @@ default-features = false
features = ["macros", "rt", "rt-multi-thread", "signal", "sync", "io-util"]

[workspace.dependencies]
# crack-voting = { path = "./crack-voting", optional = true, default-features = true, version = "0.1" }
crack-core = { path = "./crack-core", default-features = true, version = "0.3" }
crack-osint = { path = "./crack-osint", default-features = true, version = "0.1" }
crack-gpt = { path = "../crack-gpt", default-features = true, version = "0.2" }
Expand Down
137 changes: 62 additions & 75 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -1,79 +1,66 @@
# Build image
# Necessary dependencies to build CrackTunes
FROM debian:bookworm-slim AS build
ARG SQLX_OFFLINE=true

RUN apt-get update && apt-get install -y \
autoconf \
automake \
cmake \
libtool \
libssl-dev \
pkg-config \
libopus-dev \
curl \
git

# Get Rust
RUN curl -proto '=https' -tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
&& . "$HOME/.cargo/env" \
&& rustup default nightly

WORKDIR "/app"

# STAGE1: Build the binary
FROM rust:alpine AS builder

# Install build dependencies
RUN apk add --no-cache build-base musl-dev openssl-dev openssl cmake

# Create a new empty shell project
WORKDIR /app


# RUN mkdir -p /app/scripts
# COPY ./scripts/start.sh /app/scripts/start.sh

# COPY ./Cargo.toml ./
# RUN mkdir -p /app/crack-{voting,bf,core,gpt,osint}
# RUN mkdir -p /app/cracktunes
# COPY ./crack-voting/Cargo.toml ./crack-voting/
# COPY ./crack-bf/Cargo.toml ./crack-bf/
# COPY ./crack-core/Cargo.toml ./crack-core/
# COPY ./crack-gpt/Cargo.toml ./crack-gpt/
# COPY ./crack-osint/Cargo.toml ./crack-osint/
# COPY ./cracktunes/Cargo.toml ./cracktunes/

# # # Build and cache the dependencies
# RUN mkdir -p crack-voting/src && echo "fn main() {}" > crack-voting/src/main.rs
# RUN mkdir -p cracktunes/src && echo "fn main() {}" > cracktunes/src/main.rs
# RUN echo "fn main() {}" > cracktunes/build.rs
# RUN mkdir -p crack-bf/src && echo "" > crack-bf/src/lib.rs
# RUN mkdir -p crack-core/src && echo "" > crack-core/src/lib.rs
# RUN mkdir -p crack-gpt/src && echo "" > crack-gpt/src/lib.rs
# RUN mkdir -p crack-osint/src && echo "" > crack-osint/src/lib.rs
# RUN cargo fetch
# # RUN cargo build --profile=release-with-performance --locked --features crack-bf,crack-gpt,crack-osint
# RUN cargo build
# RUN rm crack-voting/src/main.rs
# RUN rm cracktunes/src/main.rs
COPY . .
COPY names.txt /app/names.txt
RUN . "$HOME/.cargo/env" && cargo build --release --locked --features crack-bf,crack-gpt,crack-osint

# Release image
# Necessary dependencies to run CrackTunes
FROM debian:bookworm-slim AS runtime

ARG USERNAME=cyclefive
ARG USER_UID=1000
ARG USER_GID=$USER_UID
ENV HOME=/home/${USERNAME}

VOLUME [ "/data" ]
RUN mkdir -p /data && chown -R ${USER_UID}:${USER_GID} /data
# VOLUME [ "/var/lib/postgresql/data" ]

# Update the package list, install sudo, create a non-root user, and grant password-less sudo permissions
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
#
# [Optional] Add sudo support. Omit if you don't need to install software after connecting.
&& apt-get update \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME


RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y ffmpeg curl \
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

RUN curl -sSL --output /usr/local/bin/yt-dlp https://github.com/yt-dlp/yt-dlp/releases/download/2024.07.09/yt-dlp_linux \
&& chmod +x /usr/local/bin/yt-dlp

USER $USERNAME

RUN yt-dlp -v -h

# USER 1000
WORKDIR "${HOME}/app"

COPY --chown=${USER_UID}:${USER_GID} --from=build /app/target/release/cracktunes $HOME/app/cracktunes
COPY --chown=${USER_UID}:${USER_GID} --from=build /app/data $HOME/app/data
COPY --chown=${USER_UID}:${USER_GID} --from=build /app/.env.example $HOME/app/.env
COPY --chown=${USER_UID}:${USER_GID} --from=build /app/cracktunes.toml $HOME/app/cracktunes.toml
COPY --chown=${USER_UID}:${USER_GID} --from=build /app/names.txt $HOME/app/names.txt
# RUN ls -al / && ls -al /data

RUN . "$HOME/app/.env"
# Copy the actual code files and build the application
# COPY ./crack-voting/src ./crack-voting/
# # Update the file date
# #RUN touch ./crack-voting/src/main.rs
# RUN touch ./cracktunes/src/main.rs
# # RUN cargo build -p crack-voting --release
RUN cargo build

# STAGE2: create a slim image with the compiled binary
FROM alpine AS runner
# Copy the binary from the builder stage
WORKDIR /app

# RUN apk add --no-cache ffmpeg curl
RUN apk update && apk add --no-cache ffmpeg curl

ADD ./data /data
RUN curl -sSL --output /usr/local/bin/yt-dlp https://github.com/yt-dlp/yt-dlp/releases/download/2024.08.06/yt-dlp_linux \
&& chmod +x /usr/local/bin/yt-dlp
COPY --from=builder /app/target/debug/cracktunes /app/app
COPY --from=builder /app/.env /app/.env
COPY --from=builder /app/scripts/start.sh /app/start.sh

# RUN . "/app/.env"
ENV APP_ENVIRONMENT=production
ENV DATABASE_URL=postgresql://postgres:mysecretpassword@localhost:5432/postgres
CMD ["/home/cyclefive/app/cracktunes"]

CMD ["/app/start.sh"]
79 changes: 79 additions & 0 deletions Dockerfile.old
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
# Build image
# Necessary dependencies to build CrackTunes
FROM debian:bookworm-slim AS build
ARG SQLX_OFFLINE=true

RUN apt-get update && apt-get install -y \
autoconf \
automake \
cmake \
libtool \
libssl-dev \
pkg-config \
libopus-dev \
curl \
git

# Get Rust
RUN curl -proto '=https' -tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y \
&& . "$HOME/.cargo/env" \
&& rustup default nightly

WORKDIR "/app"

COPY . .
COPY names.txt /app/names.txt
RUN . "$HOME/.cargo/env" && cargo build --profile=release-with-preformance --locked --features crack-bf,crack-gpt,crack-osint

# Release image
# Necessary dependencies to run CrackTunes
FROM debian:bookworm-slim AS runtime

ARG USERNAME=cyclefive
ARG USER_UID=1000
ARG USER_GID=$USER_UID
ENV HOME=/home/${USERNAME}

VOLUME [ "/data" ]
RUN mkdir -p /data && chown -R ${USER_UID}:${USER_GID} /data
# VOLUME [ "/var/lib/postgresql/data" ]

# Update the package list, install sudo, create a non-root user, and grant password-less sudo permissions
RUN groupadd --gid $USER_GID $USERNAME \
&& useradd --uid $USER_UID --gid $USER_GID -m $USERNAME \
#
# [Optional] Add sudo support. Omit if you don't need to install software after connecting.
&& apt-get update \
&& apt-get install -y sudo \
&& echo $USERNAME ALL=\(root\) NOPASSWD:ALL > /etc/sudoers.d/$USERNAME \
&& chmod 0440 /etc/sudoers.d/$USERNAME


RUN apt-get update \
&& apt-get upgrade -y \
&& apt-get install -y ffmpeg curl \
&& apt-get autoremove -y \
&& apt-get clean -y \
&& rm -rf /var/lib/apt/lists/*

RUN curl -sSL --output /usr/local/bin/yt-dlp https://github.com/yt-dlp/yt-dlp/releases/download/2024.08.06/yt-dlp_linux \
&& chmod +x /usr/local/bin/yt-dlp

USER $USERNAME

RUN yt-dlp -v -h

# USER 1000
WORKDIR "${HOME}/app"

COPY --chown=${USER_UID}:${USER_GID} --from=build /app/target/release/cracktunes $HOME/app/cracktunes
COPY --chown=${USER_UID}:${USER_GID} --from=build /app/data $HOME/app/data
COPY --chown=${USER_UID}:${USER_GID} --from=build /app/.env.example $HOME/app/.env
COPY --chown=${USER_UID}:${USER_GID} --from=build /app/cracktunes.toml $HOME/app/cracktunes.toml
COPY --chown=${USER_UID}:${USER_GID} --from=build /app/names.txt $HOME/app/names.txt
# RUN ls -al / && ls -al /data

RUN . "$HOME/app/.env"
ENV APP_ENVIRONMENT=production
ENV DATABASE_URL=postgresql://postgres:mysecretpassword@localhost:5432/postgres
CMD ["/home/cyclefive/app/cracktunes"]
2 changes: 1 addition & 1 deletion crack-core/src/config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ pub async fn poise_framework(
// let handle = rt.handle();
let cloned_map = guild_settings_map.clone();
let data = Data(Arc::new(DataInner {
phone_data: PhoneCodeData::load().unwrap(),
phone_data: PhoneCodeData::default(),
bot_settings: config.clone(),
guild_settings_map: Arc::new(RwLock::new(cloned_map)),
event_log_async,
Expand Down
5 changes: 3 additions & 2 deletions crack-core/src/guild/operations.rs
Original file line number Diff line number Diff line change
Expand Up @@ -277,8 +277,9 @@ impl GuildSettingsOperations for Data {
.lock()
.await
.entry(guild_id)
.or_default()
.autoplay = autoplay;
.and_modify(|e| {
e.autoplay = autoplay;
});
}

/// Get the current autoplay settings.
Expand Down
10 changes: 9 additions & 1 deletion crack-core/src/handlers/track_end.rs
Original file line number Diff line number Diff line change
Expand Up @@ -117,13 +117,21 @@ impl EventHandler for TrackEndHandler {

let query = match get_recommended_track_query(pool, self.guild_id).await {
Ok(query) => query,
Err(e) => {
self.data.set_autoplay(self.guild_id, false).await;
let msg = format!("Error: {}", e);
tracing::warn!("{}", msg);
return None;
},
};
let track_ready = match ready_query2(query).await {
Ok(track) => track,
Err(e) => {
let msg = format!("Error: {}", e);
tracing::warn!("{}", msg);
return None;
},
};
let track_ready = ready_query2(query).await.ok()?;
// let MyAuxMetadata(metadata) = &track_ready.metadata;
// let metadata = Some(metadata.clone());

Expand Down
1 change: 1 addition & 0 deletions crack-core/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -288,6 +288,7 @@ impl PhoneCodeData {
let client = reqwest::blocking::ClientBuilder::new()
.use_rustls_tls()
.build()?;
//let client = crate::http_utils::get_client();
let response = client.get(url).send().map_err(CrackedError::Reqwest)?;
let content = response.text().map_err(CrackedError::Reqwest)?;

Expand Down
3 changes: 3 additions & 0 deletions crack-voting/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# STAGE1: Build the binary
FROM rust:alpine AS builder

ARG WEBHOOK_SECRET=test_secret

# Install build dependencies
RUN apk add --no-cache build-base musl-dev openssl-dev openssl

Expand Down Expand Up @@ -47,5 +49,6 @@ COPY --from=builder /app/.env /app/.env
RUN . "/app/.env"
ENV APP_ENVIRONMENT=production
ENV DATABASE_URL=postgresql://postgres:mysecretpassword@localhost:5432/postgres
ENV WEBHOOK_SECRET=${WEBHOOK_SECRET}

CMD ["/app/app"]
2 changes: 1 addition & 1 deletion cracktunes.toml
Original file line number Diff line number Diff line change
Expand Up @@ -5,5 +5,5 @@
# volume = 0.1
# prefix = "r!"
# owners = [ ]
database_url = "postgresql://postgres:mysecretpassword@localhost:5432/postgres"
database_url = "postgresql://postgres:mysecretpassword@crack-postgres:5432/postgres"
prefix = "t!"
7 changes: 3 additions & 4 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -35,12 +35,11 @@ services:
image: cyclefive/cracktunes:dev
volumes:
- crack_data:/data:rw
- ./.env:/home/cyclefive/app/.env:rw
- ./cracktunes.toml:/home/cyclefive/app/cracktunes.toml:rw
- ./.env:/app/.env:rw
- ./cracktunes.toml:/app/cracktunes.toml:rw
environment:
- DATABASE_URL=postgresql://postgres:mysecretpassword@crack-postgres:5432/postgres
#- PUID=1001
#- PGID=1001
- VIRUSTOTAL_API_KEY=${VIRUSTOTAL_API_KEY:-test_key}
links:
- crack-postgres
ports:
Expand Down
2 changes: 2 additions & 0 deletions scripts/start.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/bin/sh
. /app/.env && RUST_BACKTRACE=full /app/app
4 changes: 4 additions & 0 deletions scripts/test_curl.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
curl --verbose 127.0.0.1:3030/dbl/webhook \
-H 'Authorization: asdfasdf' \
-H 'Content-Type: Application/JSON' \
-d '{"bot": "10", "user": "10", "type": "test", "isWeekend": false, "query": "test"}'

0 comments on commit f04b71b

Please sign in to comment.