Compare commits
6 commits
Author | SHA1 | Date | |
---|---|---|---|
a565a5efef | |||
1845eac8bd | |||
0ae988b638 | |||
00ae10d583 | |||
4685abc894 | |||
167d936d53 |
12 changed files with 179 additions and 27 deletions
29
.woodpecker/build-docker.yml
Normal file
29
.woodpecker/build-docker.yml
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
platform: linux/amd64
|
||||||
|
|
||||||
|
|
||||||
|
variables:
|
||||||
|
- &on-release
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
- push
|
||||||
|
- tag
|
||||||
|
branch:
|
||||||
|
- docker
|
||||||
|
- &on-stable
|
||||||
|
when:
|
||||||
|
event:
|
||||||
|
- push
|
||||||
|
- tag
|
||||||
|
branch:
|
||||||
|
- stable
|
||||||
|
|
||||||
|
pipeline:
|
||||||
|
build:
|
||||||
|
image: woodpeckerci/plugin-docker-buildx
|
||||||
|
secrets: [docker_username, docker_password]
|
||||||
|
<<: *on-release
|
||||||
|
settings:
|
||||||
|
repo: akkoma/akkoma
|
||||||
|
dockerfile: Dockerfile
|
||||||
|
platforms: linux/amd64,linux/arm64/v8
|
||||||
|
tag: test
|
|
@ -17,6 +17,8 @@ matrix:
|
||||||
OTP_VERSION: 25
|
OTP_VERSION: 25
|
||||||
- ELIXIR_VERSION: 1.15
|
- ELIXIR_VERSION: 1.15
|
||||||
OTP_VERSION: 26
|
OTP_VERSION: 26
|
||||||
|
- ELIXIR_VERSION: 1.16
|
||||||
|
OTP_VERSION: 26
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
- &scw-secrets
|
- &scw-secrets
|
||||||
|
|
52
Dockerfile
52
Dockerfile
|
@ -1,10 +1,35 @@
|
||||||
FROM hexpm/elixir:1.15.4-erlang-26.0.2-alpine-3.18.2
|
##############################################
|
||||||
|
# BUILD CONTAINER
|
||||||
|
##############################################
|
||||||
|
|
||||||
|
FROM hexpm/elixir:1.16.0-erlang-26.2.1-alpine-3.18.4 as BUILD
|
||||||
|
|
||||||
ENV MIX_ENV=prod
|
ENV MIX_ENV=prod
|
||||||
|
|
||||||
|
RUN apk add git gcc g++ musl-dev make cmake file-dev exiftool ffmpeg imagemagick libmagic ncurses postgresql-client
|
||||||
|
|
||||||
|
WORKDIR /src
|
||||||
|
ADD mix.exs mix.lock /src/
|
||||||
|
ADD ./restarter /src/restarter/
|
||||||
|
ADD ./priv /src/priv/
|
||||||
|
ADD ./installation /src/installation/
|
||||||
|
ADD ./rel /src/rel/
|
||||||
|
ADD ./config /src/config/
|
||||||
|
ADD ./docs /src/docs/
|
||||||
|
ADD ./lib /src/lib/
|
||||||
|
|
||||||
|
RUN mix local.hex --force && \
|
||||||
|
mix local.rebar --force
|
||||||
|
|
||||||
|
RUN mix deps.get --only=prod
|
||||||
|
|
||||||
|
RUN mix release --path /release
|
||||||
|
|
||||||
|
#################################################
|
||||||
|
# RUNTIME CONTAINER
|
||||||
|
#################################################
|
||||||
|
FROM alpine:3.18
|
||||||
ENV ERL_EPMD_ADDRESS=127.0.0.1
|
ENV ERL_EPMD_ADDRESS=127.0.0.1
|
||||||
|
|
||||||
ARG HOME=/opt/akkoma
|
|
||||||
|
|
||||||
LABEL org.opencontainers.image.title="akkoma" \
|
LABEL org.opencontainers.image.title="akkoma" \
|
||||||
org.opencontainers.image.description="Akkoma for Docker" \
|
org.opencontainers.image.description="Akkoma for Docker" \
|
||||||
org.opencontainers.image.vendor="akkoma.dev" \
|
org.opencontainers.image.vendor="akkoma.dev" \
|
||||||
|
@ -14,21 +39,16 @@ LABEL org.opencontainers.image.title="akkoma" \
|
||||||
org.opencontainers.image.revision=$VCS_REF \
|
org.opencontainers.image.revision=$VCS_REF \
|
||||||
org.opencontainers.image.created=$BUILD_DATE
|
org.opencontainers.image.created=$BUILD_DATE
|
||||||
|
|
||||||
RUN apk add git gcc g++ musl-dev make cmake file-dev exiftool ffmpeg imagemagick libmagic ncurses postgresql-client
|
RUN apk add ffmpeg imagemagick exiftool ncurses postgresql-client file-dev libmagic
|
||||||
|
|
||||||
|
COPY --from=BUILD /release /opt/akkoma/
|
||||||
|
ADD ./docker-entrypoint.sh /opt/akkoma/
|
||||||
EXPOSE 4000
|
EXPOSE 4000
|
||||||
|
|
||||||
ARG UID=1000
|
VOLUME /opt/akkoma/uploads/
|
||||||
ARG GID=1000
|
VOLUME /opt/akkoma/instance/
|
||||||
ARG UNAME=akkoma
|
VOLUME /opt/akkoma/config/docker-config.exs
|
||||||
|
|
||||||
RUN addgroup -g $GID $UNAME
|
|
||||||
RUN adduser -u $UID -G $UNAME -D -h $HOME $UNAME
|
|
||||||
|
|
||||||
WORKDIR /opt/akkoma
|
WORKDIR /opt/akkoma
|
||||||
|
|
||||||
USER $UNAME
|
CMD [ "/opt/akkoma/docker-entrypoint.sh" ]
|
||||||
RUN mix local.hex --force &&\
|
|
||||||
mix local.rebar --force
|
|
||||||
|
|
||||||
CMD ["/opt/akkoma/docker-entrypoint.sh"]
|
|
|
@ -2,11 +2,9 @@ version: "3.7"
|
||||||
|
|
||||||
services:
|
services:
|
||||||
db:
|
db:
|
||||||
image: akkoma-db:latest
|
image: postgres:14
|
||||||
build: ./docker-resources/database
|
|
||||||
shm_size: 4gb
|
shm_size: 4gb
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
user: ${DOCKER_USER}
|
|
||||||
environment: {
|
environment: {
|
||||||
# This might seem insecure but is usually not a problem.
|
# This might seem insecure but is usually not a problem.
|
||||||
# You should leave this at the "akkoma" default.
|
# You should leave this at the "akkoma" default.
|
||||||
|
@ -21,16 +19,17 @@ services:
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
volumes:
|
volumes:
|
||||||
- type: bind
|
- ./pgdata:/var/lib/postgresql/data:Z
|
||||||
source: ./pgdata
|
|
||||||
target: /var/lib/postgresql/data
|
|
||||||
|
|
||||||
akkoma:
|
akkoma:
|
||||||
image: akkoma:latest
|
image: akkoma:latest
|
||||||
build: .
|
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
env_file:
|
env_file:
|
||||||
- .env
|
- .env
|
||||||
|
environment: {
|
||||||
|
"AKKOMA_CONFIG_PATH": "/opt/akkoma/config/docker-config.exs"
|
||||||
|
}
|
||||||
links:
|
links:
|
||||||
- db
|
- db
|
||||||
ports: [
|
ports: [
|
||||||
|
@ -44,7 +43,9 @@ services:
|
||||||
"127.0.0.1:4000:4000",
|
"127.0.0.1:4000:4000",
|
||||||
]
|
]
|
||||||
volumes:
|
volumes:
|
||||||
- .:/opt/akkoma
|
- ./uploads:/opt/akkoma/uploads:Z
|
||||||
|
- ./instance:/opt/akkoma/instance:Z
|
||||||
|
- ./config/docker-config.exs:/opt/akkoma/config/docker-config.exs:Z
|
||||||
|
|
||||||
# Uncomment the following if you want to use a reverse proxy
|
# Uncomment the following if you want to use a reverse proxy
|
||||||
#proxy:
|
#proxy:
|
||||||
|
@ -60,3 +61,6 @@ services:
|
||||||
# - ./docker-resources/Caddyfile:/etc/caddy/Caddyfile
|
# - ./docker-resources/Caddyfile:/etc/caddy/Caddyfile
|
||||||
# - ./caddy-data:/data
|
# - ./caddy-data:/data
|
||||||
# - ./caddy-config:/config
|
# - ./caddy-config:/config
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
db-data:
|
|
@ -8,7 +8,7 @@ while ! pg_isready -U ${DB_USER:-pleroma} -d postgres://${DB_HOST:-db}:5432/${DB
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "-- Running migrations..."
|
echo "-- Running migrations..."
|
||||||
mix ecto.migrate
|
/opt/akkoma/bin/pleroma_ctl migrate
|
||||||
|
|
||||||
echo "-- Starting!"
|
echo "-- Starting!"
|
||||||
mix phx.server
|
/opt/akkoma/bin/pleroma start
|
||||||
|
|
16
docker-resources/generate-instance
Executable file
16
docker-resources/generate-instance
Executable file
|
@ -0,0 +1,16 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
mkdir -p ./uploads ./instance
|
||||||
|
|
||||||
|
podman run \
|
||||||
|
-v ./config:/opt/akkoma/config/:Z \
|
||||||
|
-v ./uploads:/opt/akkoma/uploads/:Z \
|
||||||
|
-v ./instance:/opt/akkoma/instance/:Z \
|
||||||
|
-it akkoma ./bin/pleroma_ctl instance gen \
|
||||||
|
--dbhost db \
|
||||||
|
--dbname akkoma \
|
||||||
|
--dbpass akkoma \
|
||||||
|
--dbuser akkoma \
|
||||||
|
--static-dir /opt/akkoma/instance/ \
|
||||||
|
--uploads-dir /opt/akkoma/uploads/ \
|
||||||
|
--listen-ip 0.0.0.0 $@
|
3
docker-resources/install-frontend
Normal file
3
docker-resources/install-frontend
Normal file
|
@ -0,0 +1,3 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
podman compose run -e "PLEROMA_CTL_RPC_DISABLED=true" --rm akkoma ./bin/pleroma_ctl frontend install pleroma-fe --ref stable
|
|
@ -1,3 +1,3 @@
|
||||||
#!/bin/sh
|
#!/bin/sh
|
||||||
|
|
||||||
docker compose run --rm akkoma $@
|
podman compose run -e "PLEROMA_CTL_RPC_DISABLED=true" --rm akkoma ./bin/pleroma_ctl $@
|
||||||
|
|
23
installation/quadlet/akkoma-postgresql.container
Normal file
23
installation/quadlet/akkoma-postgresql.container
Normal file
|
@ -0,0 +1,23 @@
|
||||||
|
# Put me at either:
|
||||||
|
# /usr/share/containers/systemd/akkoma-postgresql.container
|
||||||
|
# /etc/containers/systemd/akkoma-postgresql.container
|
||||||
|
# $HOME/.config/containers/systemd/akkoma-postgresql.container (for rootless podman!)
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Akkoma's postgres database
|
||||||
|
After=local-fs.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Image=docker.io/postgres:14
|
||||||
|
PublishPort=4000
|
||||||
|
Volume=/opt/akkoma/pgdata:/var/lib/postgresql/data:Z
|
||||||
|
AutoUpdate=registry
|
||||||
|
Environment=POSTGRES_DB=akkoma
|
||||||
|
Environment=POSTGRES_USER=akkoma
|
||||||
|
Environment=POSTGRES_PASSWORD=akkoma
|
||||||
|
ContainerName=db
|
||||||
|
Network=systemd-akkoma
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
# Start by default on boot
|
||||||
|
WantedBy=multi-user.target default.target
|
26
installation/quadlet/akkoma.container
Normal file
26
installation/quadlet/akkoma.container
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
# Put me at either:
|
||||||
|
# /usr/share/containers/systemd/akkoma.container
|
||||||
|
# /etc/containers/systemd/akkoma.container
|
||||||
|
# $HOME/.config/containers/systemd/akkoma.container (Recommended, for rootless podman!)
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=The main Akkoma container
|
||||||
|
After=local-fs.target akkoma-postgresql.container
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Image=docker.io/akkoma/akkoma:test
|
||||||
|
ExposeHostPort=4000
|
||||||
|
# Comment the next line if you intend to use containerized caddy!
|
||||||
|
PublishPort=4000:4000
|
||||||
|
Volume=/opt/akkoma/uploads:/opt/akkoma/uploads:Z
|
||||||
|
Volume=/opt/akkoma/instance:/opt/akkoma/instance:Z
|
||||||
|
Volume=/opt/akkoma/config.exs:/opt/akkoma/config/config.exs:Z
|
||||||
|
#AutoUpdate=registry
|
||||||
|
NoNewPrivileges=true
|
||||||
|
Environment=AKKOMA_CONFIG_PATH=/opt/akkoma/config/config.exs
|
||||||
|
ContainerName=akkoma
|
||||||
|
Network=systemd-akkoma
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
# Start by default on boot
|
||||||
|
WantedBy=multi-user.target default.target
|
2
installation/quadlet/akkoma.network
Normal file
2
installation/quadlet/akkoma.network
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
[Network]
|
||||||
|
Label=app=akkoma
|
27
installation/quadlet/caddy.container
Normal file
27
installation/quadlet/caddy.container
Normal file
|
@ -0,0 +1,27 @@
|
||||||
|
# Put me at either:
|
||||||
|
# /usr/share/containers/systemd/caddy.container
|
||||||
|
# /etc/containers/systemd/caddy.container
|
||||||
|
# !!!! PLEASE NOTE !!!!
|
||||||
|
# Caddy cannot run containerised in rootless podman, since it wants access
|
||||||
|
# to privileged ports 80 and 443!
|
||||||
|
# run caddy on your host if you're rootless!
|
||||||
|
|
||||||
|
[Unit]
|
||||||
|
Description=Akkoma's postgres database
|
||||||
|
After=local-fs.target
|
||||||
|
|
||||||
|
[Container]
|
||||||
|
Image=docker.io/caddy:2-alpine
|
||||||
|
PublishPort=80:80
|
||||||
|
PublishPort=443:443
|
||||||
|
ExposeHostPort=80
|
||||||
|
ExposeHostPort=443
|
||||||
|
Volume=/opt/akkoma/Caddyfile:/etc/caddy/Caddyfile
|
||||||
|
Volume=/opt/akkoma/caddy-data:/data
|
||||||
|
Volume=/opt/akkoma/caddy-config:/config
|
||||||
|
AutoUpdate=registry
|
||||||
|
Network=systemd-akkoma
|
||||||
|
|
||||||
|
[Install]
|
||||||
|
# Start by default on boot
|
||||||
|
WantedBy=multi-user.target default.target
|
Loading…
Reference in a new issue