diff --git a/freechat-pipeline/Dockerfile b/freechat-pipeline/Dockerfile new file mode 100644 index 0000000..44b0a96 --- /dev/null +++ b/freechat-pipeline/Dockerfile @@ -0,0 +1,58 @@ +# This docker image is used for building Freechat in Gitlab pipelines +# WARN: this image uses a lot of "lazy" practices in terms of security as its +# not at all meant to be ran in a production environment. Attempts to use this +# a "production/live" are not recommended + +FROM rust:slim-buster + +# required for building rust things and grabbing node +RUN apt-get update && apt-get upgrade -y && apt-get install \ + git default-libmysqlclient-dev pkg-config \ + curl libssl-dev ca-certificates gnupg procps \ + -y --no-install-recommends + + +# Setup node +# grab key +RUN curl -sSL https://deb.nodesource.com/gpgkey/nodesource.gpg.key | apt-key add - +# add binary & source ppa +RUN echo "deb https://deb.nodesource.com/node_14.x sid main" > /etc/apt/sources.list.d/nodesource.list +RUN echo "deb-src https://deb.nodesource.com/node_14.x sid main" >> /etc/apt/sources.list.d/nodesource.list +RUN apt-get update && apt-get install nodejs \ + -y --no-install-recommends + +# Next we install diesel for easily setting up the database tables +RUN cargo install diesel_cli --no-default-features --features mysql + +# Now comes the painful part of setting mysql itself +# Database user will be 'admin'@'localhost' identified by 'password' +# Database name is 'freechat' +# Tables should be setup for us by diesel +# Also I'm using expect because of the amount of interactive prompts in the way +RUN apt-get install curl expect \ + -y --no-install-recommends + +RUN mkdir /opt/mysql-setup +RUN curl "https://repo.mysql.com//mysql-apt-config_0.8.17-1_all.deb" \ + -o /opt/mysql-setup/mysql-apt-config_0.8.17-1_all.deb +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install /opt/mysql-setup/mysql-apt-config_0.8.17-1_all.deb \ + -y --no-install-recommends + +# Use the newly installed mysql packages to install the server component +RUN export DEBIAN_FRONTEND=noninteractive && \ + apt-get update && \ + apt-get install mysql-community-client mysql-community-server \ + -y --no-install-recommends + + +# Clean up from the apt-gets and things we don't do this +RUN apt-get remove curl gnupg ca-certificates -y # will go unused in regular builds +RUN apt-get autoremove -y +RUN rm -rf /var/lib/apt/lists/* + +# Start the mysql service +COPY entrypoint.sh /entrypoint.sh +ENTRYPOINT ["/entrypoint.sh"] + diff --git a/freechat-pipeline/entrypoint.sh b/freechat-pipeline/entrypoint.sh new file mode 100755 index 0000000..8a3e018 --- /dev/null +++ b/freechat-pipeline/entrypoint.sh @@ -0,0 +1,7 @@ +#!/bin/bash + + +echo Starting mysql server in background +mysqld --user=root --daemonize& +echo Starting shell +bash