Created ARM and Raspberry Pi Support for Docker builds (markdown)
parent
ae55b6d0f1
commit
eb40832068
1 changed files with 190 additions and 0 deletions
190
ARM-and-Raspberry-Pi-Support-for-Docker-builds.md
Normal file
190
ARM-and-Raspberry-Pi-Support-for-Docker-builds.md
Normal file
|
@ -0,0 +1,190 @@
|
||||||
|
Per [this post](https://github.com/rr-/szurubooru/issues/192#issuecomment-476897156) by [WychWitch](https://github.com/WychWitch)
|
||||||
|
|
||||||
|
> Here are my files! If this isn't enough let me know, I might've forgotten one. Again, this is only for rpi3/arm32v7
|
||||||
|
>
|
||||||
|
> replace all of the [name] and [password] with your own!
|
||||||
|
|
||||||
|
**Client/Dockerfile**
|
||||||
|
```Docker
|
||||||
|
FROM arm32v7/node:9 as builder
|
||||||
|
WORKDIR /opt/app
|
||||||
|
|
||||||
|
COPY package.json ./
|
||||||
|
RUN npm install
|
||||||
|
|
||||||
|
COPY . ./
|
||||||
|
|
||||||
|
ARG BUILD_INFO="docker-latest"
|
||||||
|
ARG CLIENT_BUILD_ARGS=""
|
||||||
|
RUN BASE_URL="__BASEURL__" node build.js --gzip ${CLIENT_BUILD_ARGS}
|
||||||
|
|
||||||
|
|
||||||
|
FROM tobi312/rpi-nginx:alpine
|
||||||
|
WORKDIR /var/www
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
# Create init file
|
||||||
|
echo "#!/bin/sh" >> /init && \
|
||||||
|
echo 'sed -i "s|__BACKEND__|${BACKEND_HOST}|" /etc/nginx/nginx.conf' >> /init && \
|
||||||
|
echo 'sed -i "s|__BASEURL__|${BASE_URL:-/}|g" /var/www/index.htm /var/www/manifest.json' >> /init && \
|
||||||
|
echo 'exec nginx' >> /init && \
|
||||||
|
chmod a+x /init
|
||||||
|
|
||||||
|
CMD ["/init"]
|
||||||
|
VOLUME ["/data"]
|
||||||
|
|
||||||
|
COPY nginx.conf.docker /etc/nginx/nginx.conf
|
||||||
|
COPY --from=builder /opt/app/public/ .
|
||||||
|
```
|
||||||
|
**Server/Dockerfile**
|
||||||
|
```
|
||||||
|
FROM scratch as approot
|
||||||
|
WORKDIR /opt/app
|
||||||
|
|
||||||
|
COPY alembic.ini wait-for-es generate-thumb ./
|
||||||
|
COPY szurubooru/ ./szurubooru/
|
||||||
|
COPY config.yaml.dist ./
|
||||||
|
|
||||||
|
|
||||||
|
FROM python:3.6-slim
|
||||||
|
WORKDIR /opt/app
|
||||||
|
|
||||||
|
ARG PUID=1000
|
||||||
|
ARG PGID=1000
|
||||||
|
ARG PORT=6666
|
||||||
|
RUN \
|
||||||
|
# Set users
|
||||||
|
mkdir -p /opt/app /data && \
|
||||||
|
groupadd -g ${PGID} app && \
|
||||||
|
useradd -d /opt/app -M -c '' -g app -r -u ${PUID} app && \
|
||||||
|
chown -R app:app /opt/app /data && \
|
||||||
|
# Create init file
|
||||||
|
echo "#!/bin/sh" >> /init && \
|
||||||
|
echo "set -e" >> /init && \
|
||||||
|
echo "cd /opt/app" >> /init && \
|
||||||
|
echo "./wait-for-es" >> /init && \
|
||||||
|
echo "alembic upgrade head" >> /init && \
|
||||||
|
echo "exec waitress-serve --port ${PORT} szurubooru.facade:app" \
|
||||||
|
>> /init && \
|
||||||
|
chmod a+x /init && \
|
||||||
|
# Install ffmpeg
|
||||||
|
apt-get -yqq update && \
|
||||||
|
apt-get -yq install --no-install-recommends ffmpeg libpq-dev make gcc libffi-dev zlib1g-dev libjpeg-dev libtiff-dev libfreetype6-dev liblcms2-dev libwebp-dev tcl-dev && \
|
||||||
|
rm -rf /var/lib/apt/lists/* && \
|
||||||
|
# Install waitress
|
||||||
|
pip3 install --no-cache-dir waitress
|
||||||
|
|
||||||
|
COPY --chown=app:app requirements.txt ./requirements.txt
|
||||||
|
RUN pip3 install --no-cache-dir -r ./requirements.txt
|
||||||
|
|
||||||
|
# done to minimize number of layers in final image
|
||||||
|
COPY --chown=app:app --from=approot / /
|
||||||
|
|
||||||
|
VOLUME ["/data/"]
|
||||||
|
EXPOSE ${PORT}
|
||||||
|
USER app
|
||||||
|
CMD ["/init"]
|
||||||
|
```
|
||||||
|
**.env**
|
||||||
|
```
|
||||||
|
# Database credentials
|
||||||
|
POSTGRES_USER=[name]
|
||||||
|
POSTGRES_PASSWORD=[password]
|
||||||
|
|
||||||
|
# This shows up on the homescreen, indicating build information
|
||||||
|
BUILD_INFO=latest
|
||||||
|
|
||||||
|
# Port to expose HTTP service
|
||||||
|
PORT=[port]
|
||||||
|
|
||||||
|
# Directory to store image data
|
||||||
|
## remember to chmod this directory
|
||||||
|
MOUNT_DATA=/var/local/[name]/data
|
||||||
|
|
||||||
|
# Directory to store database files
|
||||||
|
MOUNT_SQL=/var/local/[name]/sql
|
||||||
|
```
|
||||||
|
|
||||||
|
**requirements.txt**
|
||||||
|
```
|
||||||
|
alembic>=0.8.5
|
||||||
|
pyyaml>=3.11
|
||||||
|
psycopg2-binary>=2.6.1
|
||||||
|
SQLAlchemy>=1.0.12
|
||||||
|
coloredlogs==5.0
|
||||||
|
elasticsearch>=5.0.0
|
||||||
|
elasticsearch-dsl>=5.0.0
|
||||||
|
numpy>=1.8.2
|
||||||
|
pillow>=4.3.0
|
||||||
|
pynacl==1.2.1
|
||||||
|
pytz>=2018.3
|
||||||
|
pyRFC3339>=1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
**docker-compose.yml**;
|
||||||
|
```
|
||||||
|
## Example Docker Compose configuration
|
||||||
|
##
|
||||||
|
## Use this as a template to set up docker-compose, or as guide to set up other
|
||||||
|
## orchestration services
|
||||||
|
version: '2'
|
||||||
|
|
||||||
|
services:
|
||||||
|
api:
|
||||||
|
build:
|
||||||
|
context: ./server
|
||||||
|
depends_on:
|
||||||
|
- sql
|
||||||
|
- elasticsearch
|
||||||
|
environment:
|
||||||
|
## These should be the names of the dependent containers listed above,
|
||||||
|
## or FQDNs/IP addresses if these services are running outside of Docker
|
||||||
|
POSTGRES_HOST: sql
|
||||||
|
ESEARCH_HOST: elasticsearch
|
||||||
|
## Credentials for database:
|
||||||
|
POSTGRES_USER: [Name]
|
||||||
|
POSTGRES_PASSWORD: [pass]
|
||||||
|
## Commented Values are Default:
|
||||||
|
#POSTGRES_DB: defaults to same as POSTGRES_USER
|
||||||
|
#POSTGRES_PORT: 5432
|
||||||
|
#ESEARCH_PORT: 9200
|
||||||
|
#ESEARCH_INDEX: szurubooru
|
||||||
|
#LOG_SQL: 0 (1 for verbose SQL logs)
|
||||||
|
volumes:
|
||||||
|
- "${MOUNT_DATA}:/data"
|
||||||
|
- "./server/config.yaml:/opt/app/config.yaml"
|
||||||
|
client:
|
||||||
|
build:
|
||||||
|
context: ./client
|
||||||
|
args:
|
||||||
|
BUILD_INFO:
|
||||||
|
depends_on:
|
||||||
|
- api
|
||||||
|
environment:
|
||||||
|
BACKEND_HOST: api
|
||||||
|
volumes:
|
||||||
|
- "${MOUNT_DATA}:/data:ro"
|
||||||
|
ports:
|
||||||
|
- "${PORT}:80"
|
||||||
|
sql:
|
||||||
|
image: postgres:alpine
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
POSTGRES_USER: [name]
|
||||||
|
POSTGRES_PASSWORD: [pass]
|
||||||
|
volumes:
|
||||||
|
- "${MOUNT_SQL}:/var/lib/postgresql/data"
|
||||||
|
elasticsearch:
|
||||||
|
image: ind3x/rpi-elasticsearch
|
||||||
|
environment:
|
||||||
|
## Specifies the Java heap size used
|
||||||
|
## Read
|
||||||
|
## https://www.elastic.co/guide/en/elasticsearch/reference/current/docker.html
|
||||||
|
## for more info
|
||||||
|
ES_JAVA_OPTS: -Xms512m -Xmx512m
|
||||||
|
volumes:
|
||||||
|
- index:/usr/share/elasticsearch/data
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
index: # Scratch space for ElasticSearch index, will be rebuilt if lost
|
||||||
|
```
|
Reference in a new issue