-
Notifications
You must be signed in to change notification settings - Fork 12
Expand file tree
/
Copy pathDockerfile
More file actions
118 lines (96 loc) · 4.75 KB
/
Copy pathDockerfile
File metadata and controls
118 lines (96 loc) · 4.75 KB
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
# Dockerfile for motion-UI
# Base image
FROM debian:12-slim
# Metadata
LABEL version="1.0" maintainer="lbr38 <motionui@protonmail.com>"
# Variables
ARG WWW_DIR="/var/www/motionui"
ARG DATA_DIR="/var/lib/motionui"
ARG PHP_VERSION="8.3"
ARG DEBIAN_FRONTEND=noninteractive
ARG branch=main
# Export branch as environment variable for /init script
ENV BRANCH=${branch}
# PACKAGES INSTALL
# Add repositories
ADD https://packages.repomanager.net/repo/gpgkeys/packages.repomanager.net.pub /tmp/packages.repomanager.net.gpg
RUN apt-get update -y -qq && apt-get install -y -qq gnupg2 ca-certificates && rm -rf /var/lib/apt/lists/* && \
cat /tmp/packages.repomanager.net.gpg | gpg --dearmor > /etc/apt/trusted.gpg.d/packages.repomanager.net.gpg
RUN echo "deb https://packages.repomanager.net/repo/deb/motionui-nginx/bookworm/nginx/prod bookworm nginx" > /etc/apt/sources.list.d/nginx.list && \
echo "deb https://packages.repomanager.net/repo/deb/motionui-php/bookworm/main/prod bookworm main" > /etc/apt/sources.list.d/php.list && \
echo "deb https://packages.repomanager.net/repo/deb/go2rtc/all/main/prod all main" > /etc/apt/sources.list.d/go2rtc.list
# TODO: when motion 5.x.x package is released, use it instead
# echo "deb https://packages.repomanager.net/repo/motion/bookworm/main_prod bookworm main" > /etc/apt/sources.list.d/motion.list
# Install dependencies
RUN apt-get update -y -qq && \
apt-get install -y -qq findutils iputils-ping apt-transport-https dnsutils vim ffmpeg mediainfo postfix python3-psutil \
# Install postfix
postfix \
# Install motion (standby until motion is releasing a package for version 5.x.x)
# motion \
# Install go2rtc
go2rtc \
# Install motion dependencies - TODO: when motion 5.x.x package is released, use it instead
autoconf automake autopoint build-essential pkgconf libtool libzip-dev libjpeg-dev git libavformat-dev libavcodec-dev libavutil-dev libswscale-dev libavdevice-dev libwebp-dev gettext libmicrohttpd-dev libcamera-tools libcamera-dev libcamera-v4l2 \
# Install nginx and PHP 8.3
nginx php${PHP_VERSION}-fpm php${PHP_VERSION}-cli php${PHP_VERSION}-sqlite3 php${PHP_VERSION}-curl php${PHP_VERSION}-yaml php${PHP_VERSION}-opcache php${PHP_VERSION}-xml sqlite3 \
# Install xdebug if branch is devel
$(if [ "$branch" = "devel" ]; then echo "php${PHP_VERSION}-xdebug"; fi) && \
apt-get -qq autoremove -y && rm -rf /var/lib/apt/lists/*
# Build motion from sources
# TODO: when motion 5.x.x package is released, use it instead
RUN git clone https://github.com/Motion-Project/motion.git && cd motion && autoreconf -fiv && ./configure --prefix=/usr --sysconfdir=/etc && make && make install && cd .. && rm motion -r
# SERVICES CONFIG
# Configure Nginx
RUN rm -rf /etc/nginx/sites-enabled/default /etc/nginx/conf.d/default.conf /var/www/html
COPY docker/config/nginx/nginx.conf /etc/nginx/nginx.conf
COPY docker/config/nginx/motionui.conf /etc/nginx/sites-enabled/motionui.conf
# Configure PHP
COPY docker/config/php/opcache.ini /etc/php/${PHP_VERSION}/mods-available/opcache.ini
COPY docker/config/php/www.conf /etc/php/${PHP_VERSION}/fpm/pool.d/www.conf
# Configure Postfix
COPY docker/config/postfix/main.cf /etc/postfix/main.cf
# Copy master.cf with custom listening port 2525 (to avoid conflict with other mail services on the host)
COPY docker/config/postfix/master.cf /etc/postfix/master.cf
# Copy motionui files
RUN mkdir -p $WWW_DIR $DATA_DIR
COPY www/ $WWW_DIR/
# Configure motion
RUN mkdir -p /var/run/motion -m 775 && \
# New main directory is /usr/var/lib/motion
rm /usr/var/lib/motion/* -fr && \
mkdir -p /usr/var/lib/motion -m 770 && \
# Create a symbolic link to /etc/motion to keep compatibility
ln -s /usr/var/lib/motion /etc/motion
# Copy motion main config file
COPY www/templates/motion/motion.conf /etc/motion/motion.conf
# Copy motion event bin files
RUN mkdir -p /usr/lib/motion
COPY www/bin/on_event* /usr/lib/motion/
RUN chown -R www-data:www-data /usr/lib/motion
# Copy motion init script
COPY docker/config/motion/init /etc/init.d/motion
RUN chmod 755 /etc/init.d/motion
# Some basic configurations
RUN sed -i 's/# alias ll=/alias ll=/g' /root/.bashrc && \
echo "set ic" > /root/.vimrc && \
echo "set mouse-=a" >> /root/.vimrc && \
echo "syntax on" >> /root/.vimrc && \
echo "set background=dark" >> /root/.vimrc && \
# SQLite
echo ".headers on" > /root/.sqliterc && \
echo ".mode column" >> /root/.sqliterc
# Setup go2rtc
# Copy go2rtc init script
COPY docker/config/go2rtc/init /etc/init.d/go2rtc
RUN chmod 755 /etc/init.d/go2rtc && \
mkdir -p /run/go2rtc && \
chmod 775 /run/go2rtc
# Copy entrypoint script
COPY docker/init /init
RUN chmod 700 /init
# Expose port 8080
EXPOSE 8080
# Set working dir
WORKDIR ${DATA_DIR}
ENTRYPOINT ["/init"]