Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add a prod Dockerfile #1672

Merged
merged 19 commits into from
Dec 26, 2024
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
Show all changes
19 commits
Select commit Hold shift + click to select a range
46bbfd4
Add a "yes" option to skip confirmation prompts in install
PyRowMan Dec 17, 2024
f01238f
Fix artisna optimize by adding an application logo blade component
PyRowMan Dec 17, 2024
0cc0133
Add Docker setup with Dockerfile, docker-compose, and entrypoint
PyRowMan Dec 17, 2024
5a7ab28
Refactor Docker setup to clean up dependencies and configs
Dec 18, 2024
8c1a6f4
Merge branch 'master' into dockerfilev2
Dec 18, 2024
96b95dc
Add `.env.dist`, Manticore service, and environment substitution
Dec 18, 2024
0142267
Add Manticore service to docker-compose.yml
Dec 18, 2024
cbf63ac
Refactor .env file creation in docker entrypoint
Dec 19, 2024
93d64ef
Fix spacing issue in `docker-compose.yml` command block
Dec 19, 2024
0037ab6
Add Elasticsearch index creation and population to entrypoint
Dec 19, 2024
4b48429
Add conditional cache logic, folder creation, and PHP extensions
Dec 20, 2024
acb5b29
Update Docker image references and improve install script setup
Dec 20, 2024
546027a
Update .gitignore to include .php-cs-fixer.cache
Dec 20, 2024
6530cb3
Merge remote-tracking branch 'origin/master' into dockerfilev2
Dec 20, 2024
b0c5634
Moving environment variables into .env.dist and .env.example
Dec 20, 2024
b084d47
Moving environment variables into .env.dist and .env.example
Dec 20, 2024
513a1ff
Add custom PHP configuration to Dockerfile
Dec 20, 2024
fc060fd
Refactor paths and add support for Manticore initialization
Dec 20, 2024
abf8bc2
Merge branch 'master' into dockerfilev2
DariusIII Dec 26, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 1 addition & 2 deletions .dockerignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,4 @@ vendor/
docker/mariadb-data
docker/redis-data
docker/manticore-data
storage
resources
PyRowMan marked this conversation as resolved.
Show resolved Hide resolved
.env
208 changes: 208 additions & 0 deletions .env.dist
Original file line number Diff line number Diff line change
@@ -0,0 +1,208 @@
DB_CONNECTION=${DB_CONNECTION}
DB_HOST=${DB_HOST}
DB_PORT=${DB_PORT}
DB_ROOTPASSWORD=${DB_ROOTPASSWORD}
DB_SOCKET=${DB_SOCKET}
DB_USERNAME=${DB_USERNAME}
DB_PASSWORD=${DB_PASSWORD}
DB_DATABASE=${DB_DATABASE}

COMPOSER_AUTH='${COMPOSER_AUTH}'

MANTICORESEARCH_HOST=${MANTICORESEARCH_HOST}
MANTICORESEARCH_PORT=${MANTICORESEARCH_PORT}

ELASTICSEARCH_HOST=${ELASTICSEARCH_HOST}
ELASTICSEARCH_PORT=${ELASTICSEARCH_PORT}
ELASTICSEARCH_SCHEME=${ELASTICSEARCH_SCHEME}
ELASTICSEARCH_USER=${ELASTICSEARCH_USER}
ELASTICSEARCH_PASS=${ELASTICSEARCH_PASS}
ELASTICSEARCH_LOGGING=${ELASTICSEARCH_LOGGING}
ELASTICSEARCH_ENABLED=${ELASTICSEARCH_ENABLED}

NNTP_COMPRESSED_HEADERS=${NNTP_COMPRESSED_HEADERS}
USE_ALTERNATE_NNTP_SERVER=${USE_ALTERNATE_NNTP_SERVER}

NNTP_USERNAME=${NNTP_USERNAME}
NNTP_PASSWORD=${NNTP_PASSWORD}
NNTP_SERVER=${NNTP_SERVER}
NNTP_PORT=${NNTP_PORT}
NNTP_CONNECTIONS=${NNTP_CONNECTIONS}
NNTP_SSLENABLED=${NNTP_SSLENABLED}
NNTP_SOCKET_TIMEOUT=${NNTP_SOCKET_TIMEOUT}

NNTP_USERNAME_A=${NNTP_USERNAME_A}
NNTP_PASSWORD_A=${NNTP_PASSWORD_A}
NNTP_SERVER_A=${NNTP_SERVER_A}
NNTP_PORT_A=${NNTP_PORT_A}
NNTP_CONNECTIONS_A=${NNTP_CONNECTIONS_A}
NNTP_SSLENABLED_A=${NNTP_SSLENABLED_A}
NNTP_SOCKET_TIMEOUT_A=${NNTP_SOCKET_TIMEOUT_A}

NN_MULTIPROCESSING_MAX_CHILD_TIME=${NN_MULTIPROCESSING_MAX_CHILD_TIME}

ADMIN_USER=${ADMIN_USER}
ADMIN_PASS=${ADMIN_PASS}
ADMIN_EMAIL=${ADMIN_EMAIL}

APP_NAME=${APP_NAME}
APP_ENV=${APP_ENV}
APP_DEBUG=${APP_DEBUG}
APP_TIMEZONE=${APP_TIMEZONE}
APP_URL=${APP_URL}

APP_LOCALE=${APP_LOCALE}
APP_FALLBACK_LOCALE=${APP_FALLBACK_LOCALE}
APP_FAKER_LOCALE=${APP_FAKER_LOCALE}

APP_MAINTENANCE_DRIVER=${APP_MAINTENANCE_DRIVER}
APP_MAINTENANCE_STORE=${APP_MAINTENANCE_STORE}

BCRYPT_ROUNDS=${BCRYPT_ROUNDS}
APP_KEY=${APP_KEY}
LOG_CHANNEL=${LOG_CHANNEL}
LOG_STACK=${LOG_STACK}
PASSWORD_HASH=${PASSWORD_HASH}

BROADCAST_CONNECTION=${BROADCAST_CONNECTION}
CACHE_STORE=${CACHE_STORE}
QUEUE_CONNECTION=${QUEUE_CONNECTION}

REDIS_HOST=${REDIS_HOST}
REDIS_PASSWORD=${REDIS_PASSWORD}
REDIS_PORT=${REDIS_PORT}
REDIS_CLIENT=${REDIS_CLIENT}

SESSION_DRIVER=${SESSION_DRIVER}
SESSION_DOMAIN=${SESSION_DOMAIN}
SESSION_SECURE_COOKIE=${SESSION_SECURE_COOKIE}
SESSION_ENCRYPT=${SESSION_ENCRYPT}
SESSION_COOKIE=${SESSION_COOKIE}
SESSION_PATH=${SESSION_PATH}

MAIL_DRIVER=${MAIL_DRIVER}
MAIL_HOST=${MAIL_HOST}
MAIL_PORT=${MAIL_PORT}
MAIL_USERNAME=${MAIL_USERNAME}
MAIL_PASSWORD=${MAIL_PASSWORD}
MAIL_ENCRYPTION=${MAIL_ENCRYPTION}
MAIL_FROM_ADDRESS=${MAIL_FROM_ADDRESS}
MAIL_FROM_NAME=${MAIL_FROM_NAME}

AWS_ACCESS_KEY_ID=${AWS_ACCESS_KEY_ID}
AWS_SECRET_ACCESS_KEY=${AWS_SECRET_ACCESS_KEY}
AWS_DEFAULT_REGION=${AWS_DEFAULT_REGION}
AWS_BUCKET=${AWS_BUCKET}

PUSHER_APP_ID=${PUSHER_APP_ID}
PUSHER_APP_KEY=${PUSHER_APP_KEY}
PUSHER_APP_SECRET=${PUSHER_APP_SECRET}
PUSHER_APP_CLUSTER=${PUSHER_APP_CLUSTER}

MIX_PUSHER_APP_KEY=${PUSHER_APP_KEY}
MIX_PUSHER_APP_CLUSTER=${PUSHER_APP_CLUSTER}

NOCAPTCHA_ENABLED=${NOCAPTCHA_ENABLED}
NOCAPTCHA_SITEKEY=${NOCAPTCHA_SITEKEY}
NOCAPTCHA_SECRET=${NOCAPTCHA_SECRET}

SCOUT_DRIVER=${SCOUT_DRIVER}
SCOUT_QUEUE=${SCOUT_QUEUE}

ITEMS_PER_PAGE=${ITEMS_PER_PAGE}
ITEMS_PER_COVER_PAGE=${ITEMS_PER_COVER_PAGE}
MAX_PAGER_RESULTS=${MAX_PAGER_RESULTS}
ECHOCLI=${ECHOCLI}
RENAME_PAR2=${RENAME_PAR2}
ADD_PAR2=${ADD_PAR2}
RENAME_MUSIC_MEDIAINFO=${RENAME_MUSIC_MEDIAINFO}
CACHE_EXPIRY_SHORT=${CACHE_EXPIRY_SHORT}
CACHE_EXPIRY_MEDIUM=${CACHE_EXPIRY_MEDIUM}
CACHE_EXPIRY_LONG=${CACHE_EXPIRY_LONG}

SSL_CAFILE=${SSL_CAFILE}
SSL_CAPATH=${SSL_CAPATH}
SSL_VERIFY_PEER=${SSL_VERIFY_PEER}
SSL_VERIFY_HOST=${SSL_VERIFY_HOST}
SSL_ALLOW_SELF_SIGNED=${SSL_ALLOW_SELF_SIGNED}

SCRAPE_IRC_USERNAME=${SCRAPE_IRC_USERNAME}
SCRAPE_IRC_SERVER=${SCRAPE_IRC_SERVER}
SCRAPE_IRC_PORT=${SCRAPE_IRC_PORT}
SCRAPE_IRC_TLS=${SCRAPE_IRC_TLS}
SCRAPE_IRC_PASSWORD=${SCRAPE_IRC_PASSWORD}

SMARTY_DEBUG=${SMARTY_DEBUG}
SMARTY_CACHING=${SMARTY_CACHING}
SMARTY_CACHE_LIFE=${SMARTY_CACHE_LIFE}
SMARTY_COMPILE_CHECK=${SMARTY_COMPILE_CHECK}
SMARTY_FORCE_COMPILE=${SMARTY_FORCE_COMPILE}
SMARTY_CACHE_DRIVER=${SMARTY_CACHE_DRIVER}

TWITCH_CLIENT_ID=${TWITCH_CLIENT_ID}
TWITCH_CLIENT_SECRET=${TWITCH_CLIENT_SECRET}
IGDB_CACHE_LIFETIME=${IGDB_CACHE_LIFETIME}
TMDB_APIKEY=${TMDB_APIKEY}
TMDB_CACHE=${TMDB_CACHE}
TMDB_LOG=${TMDB_LOG}
TVDB_APIKEY=${TVDB_APIKEY}
TVDB_PIN=${TVDB_PIN}
GIANTBOMB_APIKEY=${GIANTBOMB_APIKEY}
ANIDB_APIKEY=${ANIDB_APIKEY}
FANARTTV_APIKEY=${FANARTTV_APIKEY}
OMDB_APIKEY=${OMDB_APIKEY}
TRAKTTV_APIKEY=${TRAKTTV_APIKEY}

TEMP_UNRAR_PATH=${TEMP_UNRAR_PATH}
TEMP_UNZIP_PATH=${TEMP_UNZIP_PATH}

VIEW_COMPILED_PATH=${VIEW_COMPILED_PATH}
ASSET_URL=${ASSET_URL}

TELESCOPE_DRIVER=${TELESCOPE_DRIVER}
TELESCOPE_ENABLED=${TELESCOPE_ENABLED}
TELESCOPE_FULL_IN_PRODUCTION=${TELESCOPE_FULL_IN_PRODUCTION}
TELESCOPE_CACHE_WATCHER=${TELESCOPE_CACHE_WATCHER}
TELESCOPE_COMMAND_WATCHER=${TELESCOPE_COMMAND_WATCHER}
TELESCOPE_DUMP_WATCHER=${TELESCOPE_DUMP_WATCHER}
TELESCOPE_EVENT_WATCHER=${TELESCOPE_EVENT_WATCHER}
TELESCOPE_EXCEPTION_WATCHER=${TELESCOPE_EXCEPTION_WATCHER}
TELESCOPE_JOB_WATCHER=${TELESCOPE_JOB_WATCHER}
TELESCOPE_LOG_WATCHER=${TELESCOPE_LOG_WATCHER}
TELESCOPE_MAIL_WATCHER=${TELESCOPE_MAIL_WATCHER}
TELESCOPE_MODEL_WATCHER=${TELESCOPE_MODEL_WATCHER}
TELESCOPE_NOTIFICATION_WATCHER=${TELESCOPE_NOTIFICATION_WATCHER}
TELESCOPE_QUERY_WATCHER=${TELESCOPE_QUERY_WATCHER}
TELESCOPE_REDIS_WATCHER=${TELESCOPE_REDIS_WATCHER}
TELESCOPE_REQUEST_WATCHER=${TELESCOPE_REQUEST_WATCHER}
TELESCOPE_RESPONSE_SIZE_LIMIT=${TELESCOPE_RESPONSE_SIZE_LIMIT}
TELESCOPE_GATE_WATCHER=${TELESCOPE_GATE_WATCHER}
TELESCOPE_SCHEDULE_WATCHER=${TELESCOPE_SCHEDULE_WATCHER}

HORIZON_PREFIX=${HORIZON_PREFIX}

POSTMARK_TOKEN=${POSTMARK_TOKEN}

PURGE_INACTIVE_USERS=${PURGE_INACTIVE_USERS}

OTP_ENABLED=${OTP_ENABLED}

FLARE_KEY=${FLARE_KEY}

UNRAR_PATH=${UNRAR_PATH}
UNZIP_PATH=${UNZIP_PATH}
CHECK_PASSWORDED_RARS=${CHECK_PASSWORDED_RARS}
DELETE_PASSWORDED_RELEASES=${DELETE_PASSWORDED_RELEASES}
DELETE_POSSIBLE_PASSWORDED_RELEASES=${DELETE_POSSIBLE_PASSWORDED_RELEASES}
EXTRACT_USING_RARINFO=${EXTRACT_USING_RARINFO}
PATH_TO_NZBS=${PATH_TO_NZBS}
PRIVATE_PROFILES=${PRIVATE_PROFILES}
STORE_USER_IP=${STORE_USER_IP}
FFMPEG_PATH=${FFMPEG_PATH}
LAME_PATH=${LAME_PATH}
MEDIAINFO_PATH=${MEDIAINFO_PATH}
TIIMEOUT_PATH=${TIIMEOUT_PATH}
MAGIC_FILE_PATH=${MAGIC_FILE_PATH}
COVERS_PATH=${COVERS_PATH}

FORUM_FRONTEND_ENABLED=${FORUM_FRONTEND_ENABLED}
71 changes: 71 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,71 @@

FROM composer:latest AS composer-base
FROM dunglas/frankenphp:1-php8.3
LABEL maintainer="PyRowMan"
ENV SERVER_NAME=:80
ARG MYSQL_CLIENT="mariadb-client"
ARG SEVENZIP_VERSION=2407

WORKDIR /app


COPY --from=node:21 /usr/local/ /usr/local/
COPY --from=composer-base --link /usr/bin/composer /usr/bin/composer

RUN apt update \
&& apt install -y --no-install-recommends \
unrar-free 7zip lame libcap2-bin python3 gettext-base \
curl zip unzip git nano bash-completion sudo wget tmux time fonts-powerline \
gnupg libpng-dev dnsutils jq htop iputils-ping net-tools ffmpeg \
jpegoptim webp optipng pngquant libavif-bin watch iproute2 nmon \
libonig-dev libxml2-dev libicu-dev libjpeg-dev libfreetype6-dev libxslt-dev $MYSQL_CLIENT libcurl4-openssl-dev \
&& wget https://mediaarea.net/repo/deb/repo-mediaarea_1.0-24_all.deb \
&& dpkg -i repo-mediaarea_1.0-24_all.deb \
&& apt update \
&& apt install -y libmediainfo0v5 mediainfo libzen0v5 \
&& docker-php-ext-install \
bcmath \
exif \
gd \
intl \
pdo_mysql \
sockets \
pcntl \
&& pecl install redis \
&& docker-php-ext-enable redis \
&& apt clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Determine ARCH and download and extract the appropriate version of 7-Zip
RUN ARCH="$(dpkg --print-architecture)" && \
if [ "$ARCH" = "amd64" ]; then \
SZIP_URL="https://www.7-zip.org/a/7z$SEVENZIP_VERSION-linux-x64.tar.xz"; \
fi && \
if [ "$ARCH" = "arm64" ]; then \
SZIP_URL="https://www.7-zip.org/a/7z$SEVENZIP_VERSION-linux-arm64.tar.xz"; \
fi && \
wget "$SZIP_URL" -O /tmp/7z.tar.xz && \
tar -xf /tmp/7z.tar.xz -C /tmp/ && \
mv /tmp/7zz /usr/bin/7zz && \
rm -f /tmp/7z.tar.xz && rm -f /tmp/7zzs

RUN mv "$PHP_INI_DIR/php.ini-production" "$PHP_INI_DIR/php.ini"

COPY --chmod=755 ./docker-entrypoint.sh /usr/local/bin/docker-entrypoint

COPY . /app

RUN rm -Rf tests/

RUN composer install

RUN chmod -R 755 /app/vendor/
RUN chmod -R 777 /app/storage/
RUN chmod -R 777 /app/resources/
RUN chmod -R 777 /app/public/

EXPOSE 80

CMD ["--config", "/etc/caddy/Caddyfile", "--adapter", "caddyfile"]
ENTRYPOINT ["docker-entrypoint"]


Loading