might work now
This commit is contained in:
		
							parent
							
								
									c7b081f5b9
								
							
						
					
					
						commit
						72a9dc7d78
					
				
							
								
								
									
										14
									
								
								Dockerfile
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								Dockerfile
									
									
									
									
									
								
							@ -11,6 +11,12 @@ ENV \
 | 
				
			|||||||
    NODE_ENV=production \
 | 
					    NODE_ENV=production \
 | 
				
			||||||
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mastodon/app/bin
 | 
					    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/mastodon/app/bin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					ARG UID=991
 | 
				
			||||||
 | 
					ARG GID=991
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# mastodon v3.0.1
 | 
				
			||||||
 | 
					ARG REPO_URL=https://github.com/tootsuite/mastodon.git
 | 
				
			||||||
 | 
					ARG REPO_REV=c4118ba71ba31e408c02d289e111326ccc6f6aa2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
# install os prereq stuff to image
 | 
					# install os prereq stuff to image
 | 
				
			||||||
ADD prereqs.sh /tmp/prereqs.sh
 | 
					ADD prereqs.sh /tmp/prereqs.sh
 | 
				
			||||||
@ -25,7 +31,13 @@ RUN chpst -u mastodon:mastodon bash /tmp/install.sh
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
ADD ./rootfs /
 | 
					ADD ./rootfs /
 | 
				
			||||||
 | 
					
 | 
				
			||||||
RUN chmod +x /usr/local/bin/* /etc/service/*/run
 | 
					RUN chmod +x /etc/service/postfix/run
 | 
				
			||||||
 | 
					RUN chmod +x /etc/service/redis/run
 | 
				
			||||||
 | 
					RUN chmod +x /etc/service/postgres/run
 | 
				
			||||||
 | 
					RUN chmod +x /etc/service/startup/run
 | 
				
			||||||
 | 
					RUN chmod +x /etc/service/sidekiq/run
 | 
				
			||||||
 | 
					RUN chmod +x /etc/service/web/run
 | 
				
			||||||
 | 
					RUN chmod +x /etc/service/streaming/run
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VOLUME /state
 | 
					VOLUME /state
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										3
									
								
								Makefile
									
									
									
									
									
								
							
							
						
						
									
										3
									
								
								Makefile
									
									
									
									
									
								
							@ -6,4 +6,5 @@ build:
 | 
				
			|||||||
	docker build -t $(NAME) .
 | 
						docker build -t $(NAME) .
 | 
				
			||||||
 | 
					
 | 
				
			||||||
run:
 | 
					run:
 | 
				
			||||||
	docker run -ti $(NAME)
 | 
						-docker rm -f mastodon
 | 
				
			||||||
 | 
						docker run --env WEB_DOMAIN="test123.example.com" --hostname mastodon --name mastodon -ti $(NAME)
 | 
				
			||||||
 | 
				
			|||||||
@ -14,10 +14,9 @@ rbenv global 2.6.5
 | 
				
			|||||||
gem update --system
 | 
					gem update --system
 | 
				
			||||||
gem install bundler --no-document
 | 
					gem install bundler --no-document
 | 
				
			||||||
 | 
					
 | 
				
			||||||
git clone https://github.com/tootsuite/mastodon.git /mastodon/app
 | 
					git clone $REPO_URL /mastodon/app
 | 
				
			||||||
cd /mastodon/app
 | 
					cd /mastodon/app
 | 
				
			||||||
# v3.0.1:
 | 
					git checkout $REPO_REV
 | 
				
			||||||
git checkout c4118ba71ba31e408c02d289e111326ccc6f6aa2
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
bundle config build.nokogiri --use-system-libraries
 | 
					bundle config build.nokogiri --use-system-libraries
 | 
				
			||||||
bundle install \
 | 
					bundle install \
 | 
				
			||||||
 | 
				
			|||||||
@ -50,16 +50,19 @@ apt install -y \
 | 
				
			|||||||
  libxml2-dev \
 | 
					  libxml2-dev \
 | 
				
			||||||
  libxslt1-dev \
 | 
					  libxslt1-dev \
 | 
				
			||||||
  libyaml-dev \
 | 
					  libyaml-dev \
 | 
				
			||||||
 | 
					  mailutils \
 | 
				
			||||||
  nginx \
 | 
					  nginx \
 | 
				
			||||||
  nodejs \
 | 
					  nodejs \
 | 
				
			||||||
  pkg-config \
 | 
					  pkg-config \
 | 
				
			||||||
 | 
					  postfix \
 | 
				
			||||||
  postgresql \
 | 
					  postgresql \
 | 
				
			||||||
  postgresql-contrib \
 | 
					  postgresql-contrib \
 | 
				
			||||||
  protobuf-compiler \
 | 
					  protobuf-compiler \
 | 
				
			||||||
  redis-server \
 | 
					  redis-server \
 | 
				
			||||||
  redis-tools \
 | 
					  redis-tools \
 | 
				
			||||||
 | 
					  rsync \
 | 
				
			||||||
  yarn \
 | 
					  yarn \
 | 
				
			||||||
  zlib1g-dev
 | 
					  zlib1g-dev
 | 
				
			||||||
 | 
					
 | 
				
			||||||
addgroup --gid 991 mastodon
 | 
					addgroup --gid $GID mastodon
 | 
				
			||||||
useradd --uid 991 --gid 991 -m -d /mastodon mastodon
 | 
					useradd --uid $UID --gid $GID --shell /bin/bash -m -d /mastodon mastodon
 | 
				
			||||||
 | 
				
			|||||||
@ -1,5 +1,70 @@
 | 
				
			|||||||
#!/bin/bash
 | 
					#!/bin/bash
 | 
				
			||||||
 | 
					POSTFIX='/usr/sbin/postfix'
 | 
				
			||||||
 | 
					MONITOR_INTERVAL=10 # seconds
 | 
				
			||||||
 | 
					
 | 
				
			||||||
echo "postfix starting..."
 | 
					exec 2>&1
 | 
				
			||||||
 | 
					
 | 
				
			||||||
exec /usr/lib/postfix/master
 | 
					if [[ ! -d /state/envdir ]]; then
 | 
				
			||||||
 | 
					    mkdir -p /state/envdir
 | 
				
			||||||
 | 
					    chown mastodon:mastodon /state/envdir
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ ! -e /state/envdir/WEB_DOMAIN ]]; then
 | 
				
			||||||
 | 
					    if [[ -n "$WEB_DOMAIN" ]]; then
 | 
				
			||||||
 | 
					        echo "$WEB_DOMAIN" > /state/envdir/WEB_DOMAIN
 | 
				
			||||||
 | 
					    else
 | 
				
			||||||
 | 
					        hostname --fqdn > /state/envdir/WEB_DOMAIN
 | 
				
			||||||
 | 
					    fi
 | 
				
			||||||
 | 
					    chown mastodon:mastodon /state/envdir/*
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					cat /etc/postfix/main.cf | grep -v '^myhostname' > /etc/postfix/main.new
 | 
				
			||||||
 | 
					rm /etc/postfix/main.cf
 | 
				
			||||||
 | 
					echo "myhostname = $(cat /state/envdir/WEB_DOMAIN)" >> /etc/postfix/main.cf
 | 
				
			||||||
 | 
					echo "myorigin = $(cat /state/envdir/WEB_DOMAIN)" >> /etc/postfix/main.cf
 | 
				
			||||||
 | 
					cat /etc/postfix/main.new >> /etc/postfix/main.cf
 | 
				
			||||||
 | 
					rm /etc/postfix/main.new
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					running() {
 | 
				
			||||||
 | 
					  pkill -0 master
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					start() {
 | 
				
			||||||
 | 
					  echo "postfix starting..."
 | 
				
			||||||
 | 
					  /etc/init.d/postfix start
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					stop() {
 | 
				
			||||||
 | 
					  if running; then
 | 
				
			||||||
 | 
					    echo Stopping
 | 
				
			||||||
 | 
					    /etc/init.d/postfix stop
 | 
				
			||||||
 | 
					  fi
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					reload() {
 | 
				
			||||||
 | 
					  echo Reloading
 | 
				
			||||||
 | 
					  /etc/init.d/postfix reload
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					check() {
 | 
				
			||||||
 | 
					  echo Checking
 | 
				
			||||||
 | 
					  "$POSTFIX" check
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					status() {
 | 
				
			||||||
 | 
					  "$POSTFIX" status
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					trap 'echo INT; stop; exit' INT
 | 
				
			||||||
 | 
					trap 'echo QUIT; stop; exit' QUIT
 | 
				
			||||||
 | 
					trap 'echo TERM; stop; exit' TERM
 | 
				
			||||||
 | 
					trap 'echo STOP; stop' STOP
 | 
				
			||||||
 | 
					trap 'echo HUP; reload' HUP
 | 
				
			||||||
 | 
					trap 'echo USR1; check' USR1
 | 
				
			||||||
 | 
					trap 'echo USR2; status' USR2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					while :; do
 | 
				
			||||||
 | 
					  running || start
 | 
				
			||||||
 | 
					  sleep $MONITOR_INTERVAL
 | 
				
			||||||
 | 
					done
 | 
				
			||||||
 | 
				
			|||||||
@ -2,7 +2,28 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
echo "postgres starting..."
 | 
					echo "postgres starting..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mkdir -p /state/db
 | 
					chown mastodon:mastodon /var/run/postgresql
 | 
				
			||||||
chown mastodon:mastodon /state/db
 | 
					chown -R mastodon:mastodon /etc/postgresql
 | 
				
			||||||
exec chpst -u mastodon:mastodon /usr/lib/postgresql/bin/postmaster \
 | 
					
 | 
				
			||||||
   -D /state/db 2>&1
 | 
					echo "local all all peer" > /etc/postgresql/10/main/pg_hba.conf
 | 
				
			||||||
 | 
					echo "local all mastodon peer" >> /etc/postgresql/10/main/pg_hba.conf
 | 
				
			||||||
 | 
					echo "local all root peer" >> /etc/postgresql/10/main/pg_hba.conf
 | 
				
			||||||
 | 
					echo "host all all 127.0.0.0/8 trust" >> /etc/postgresql/10/main/pg_hba.conf
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ ! -d /state/db ]]; then
 | 
				
			||||||
 | 
					    mkdir -p /state/db/data
 | 
				
			||||||
 | 
					    rsync -a /var/lib/postgresql/10/main/ /state/db/data/
 | 
				
			||||||
 | 
					    cp -a /etc/postgresql/10/main/* /state/db/
 | 
				
			||||||
 | 
					    grep -v '^data_directory' /state/db/postgresql.conf |
 | 
				
			||||||
 | 
					        grep -v "^ssl" |
 | 
				
			||||||
 | 
					        grep -v "^stats_temp_directory" > /state/db/postgresql.new
 | 
				
			||||||
 | 
					    echo "data_directory = '/state/db/data'" >> /state/db/postgresql.new
 | 
				
			||||||
 | 
					    echo "stats_temp_directory = '/tmp'" >> /state/db/postgresql.new
 | 
				
			||||||
 | 
					    mv /state/db/postgresql.new /state/db/postgresql.conf
 | 
				
			||||||
 | 
					    chown -R mastodon:mastodon /state/db
 | 
				
			||||||
 | 
					    chmod go-rwx /state/db/data
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					exec \
 | 
				
			||||||
 | 
					    chpst -u mastodon:mastodon \
 | 
				
			||||||
 | 
					    /usr/lib/postgresql/10/bin/postmaster -D /state/db 2>&1
 | 
				
			||||||
 | 
				
			|||||||
@ -2,4 +2,11 @@
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
mkdir -p /state/redis
 | 
					mkdir -p /state/redis
 | 
				
			||||||
chown mastodon:mastodon /state/redis
 | 
					chown mastodon:mastodon /state/redis
 | 
				
			||||||
exec chpst -u mastodon:mastodon /usr/bin/redis-server /etc/redis/redis.conf
 | 
					exec chpst -u mastodon:mastodon /usr/bin/redis-server - <<EOF
 | 
				
			||||||
 | 
					daemonize no
 | 
				
			||||||
 | 
					dir /state/redis
 | 
				
			||||||
 | 
					save 900 1
 | 
				
			||||||
 | 
					save 300 10
 | 
				
			||||||
 | 
					save 60 10000
 | 
				
			||||||
 | 
					EOF
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
@ -11,4 +11,4 @@ cd /mastodon/app
 | 
				
			|||||||
exec \
 | 
					exec \
 | 
				
			||||||
    envdir /state/envdir \
 | 
					    envdir /state/envdir \
 | 
				
			||||||
    chpst -u mastodon:mastodon \
 | 
					    chpst -u mastodon:mastodon \
 | 
				
			||||||
    bash -c "bundle exec sidekiq -c $SIDEKIQ_WORKERS -q default -q push -q pull -q mailers"
 | 
					    bash -i -c "bundle exec sidekiq -c $SIDEKIQ_WORKERS -q default -q push -q pull -q mailers"
 | 
				
			||||||
 | 
				
			|||||||
@ -5,18 +5,43 @@ echo "mastodon-startup starting up..."
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
if [[ ! -d /state/envdir ]]; then
 | 
					if [[ ! -d /state/envdir ]]; then
 | 
				
			||||||
    mkdir -p /state/envdir
 | 
					    mkdir -p /state/envdir
 | 
				
			||||||
    chown mastodon:mastodon /state/envdir
 | 
					 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [[ ! -e /state/envdir/HOME ]]; then
 | 
					if [[ ! -e /state/envdir/HOME ]]; then
 | 
				
			||||||
    echo "/mastodon" > /state/envdir/HOME
 | 
					    echo "/mastodon" > /state/envdir/HOME
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ ! -e /state/envdir/RAILS_ENV ]]; then
 | 
				
			||||||
 | 
					    echo "production" > /state/envdir/RAILS_ENV
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					chown mastodon:mastodon /state/envdir /state/envdir/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd /mastodon/app
 | 
					cd /mastodon/app
 | 
				
			||||||
 | 
					
 | 
				
			||||||
if [ "$RUN_DB_MIGRATIONS" == "true" ]; then
 | 
					if [[ ! -e /state/envdir/OTP_SECRET ]]; then
 | 
				
			||||||
 | 
					  envdir /state/envdir \
 | 
				
			||||||
 | 
					      chpst -u mastodon:mastodon \
 | 
				
			||||||
 | 
					      bash -i -c "bundle exec rake secret > /state/envdir/OTP_SECRET"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ ! -e /state/envdir/SECRET_KEY_BASE ]]; then
 | 
				
			||||||
 | 
					  envdir /state/envdir \
 | 
				
			||||||
 | 
					      chpst -u mastodon:mastodon \
 | 
				
			||||||
 | 
					      bash -i -c "bundle exec rake secret > /state/envdir/SECRET_KEY_BASE"
 | 
				
			||||||
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					echo "
 | 
				
			||||||
 | 
					    create database mastodon_production;
 | 
				
			||||||
 | 
					    create user mastodon createdb;
 | 
				
			||||||
 | 
					    grant all privileges on database mastodon_production to mastodon;
 | 
				
			||||||
 | 
					" | chpst -u postgres:postgres psql
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					if [[ -n "$RUN_DB_MIGRATIONS" ]]; then
 | 
				
			||||||
  echo "Running database migrations..."
 | 
					  echo "Running database migrations..."
 | 
				
			||||||
  envdir /state/envdir chpst -u mastodon:mastodon bash -c "bundle exec rake db:migrate"
 | 
					  envdir /state/envdir \
 | 
				
			||||||
 | 
					      chpst -u mastodon:mastodon \
 | 
				
			||||||
 | 
					      bash -i -c "bundle exec rake db:migrate"
 | 
				
			||||||
fi
 | 
					fi
 | 
				
			||||||
 | 
					
 | 
				
			||||||
rm /state/.starting
 | 
					rm /state/.starting
 | 
				
			||||||
 | 
				
			|||||||
@ -8,4 +8,7 @@ done
 | 
				
			|||||||
echo "streaming starting..."
 | 
					echo "streaming starting..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd /mastodon/app
 | 
					cd /mastodon/app
 | 
				
			||||||
exec envdir /state/envdir chpst -u mastodon:mastodon bash -c "npm run start"
 | 
					exec \
 | 
				
			||||||
 | 
					    envdir /state/envdir \
 | 
				
			||||||
 | 
					    chpst -u mastodon:mastodon \
 | 
				
			||||||
 | 
					    bash -i -c "npm run start"
 | 
				
			||||||
 | 
				
			|||||||
@ -8,4 +8,7 @@ done
 | 
				
			|||||||
echo "web starting..."
 | 
					echo "web starting..."
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cd /mastodon/app
 | 
					cd /mastodon/app
 | 
				
			||||||
exec envdir /state/envdir chpst -u mastodon:mastodon bash -c "bundle exec puma -C config/puma.rb"
 | 
					exec \
 | 
				
			||||||
 | 
					    envdir /state/envdir \
 | 
				
			||||||
 | 
					    chpst -u mastodon:mastodon \
 | 
				
			||||||
 | 
					    bash -i -c "bundle exec puma -C config/puma.rb"
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user