* (#146) Re-wrote the docker code to generate a single self-contained docker image rather than using a docker-compose network of connected containers * (#146) Push version tags to docker hub automatically * (#146) Switched to using a multistage docker build process to make the Dockerfile more readable and cache friendly without bloating the published image * #146 More readable names * #146 Documented the upgrade process and made 'artisan migrate' run on every boot to automate the upgrade process.
This commit is contained in:
22
docker/nginx.conf
Normal file
22
docker/nginx.conf
Normal file
@@ -0,0 +1,22 @@
|
||||
server {
|
||||
listen 80;
|
||||
server_name opnform;
|
||||
root /app/public;
|
||||
|
||||
access_log /dev/stdout;
|
||||
error_log /dev/stderr error;
|
||||
|
||||
index index.html index.htm index.php;
|
||||
|
||||
location / {
|
||||
try_files $uri $uri/ /index.php$is_args$args;
|
||||
}
|
||||
|
||||
location ~ \.php$ {
|
||||
fastcgi_split_path_info ^(.+\.php)(/.+)$;
|
||||
fastcgi_pass unix:/var/run/php-fpm-opnform-site.sock;
|
||||
fastcgi_index index.php;
|
||||
include fastcgi.conf;
|
||||
}
|
||||
}
|
||||
|
||||
35
docker/php-fpm-wrapper.sh
Normal file
35
docker/php-fpm-wrapper.sh
Normal file
@@ -0,0 +1,35 @@
|
||||
#!/bin/bash +ex
|
||||
|
||||
[ -L /app/storage ] || {
|
||||
echo "Backing up initial storage directory"
|
||||
rm -rf /etc/initial-storage
|
||||
mv /app/storage /etc/initial-storage
|
||||
}
|
||||
|
||||
[ -d /persist/storage ] || {
|
||||
echo "Initialising blank storage dir"
|
||||
mkdir -p /persist
|
||||
cp -a /etc/initial-storage /persist/storage
|
||||
chmod 777 -R /persist/storage
|
||||
}
|
||||
|
||||
touch /var/log/opnform.log
|
||||
chown opnform /var/log/opnform.log
|
||||
|
||||
echo "Linking persistent storage into app"
|
||||
ln -sf /persist/storage /app/storage
|
||||
|
||||
. /app/.env
|
||||
|
||||
[ "x$APP_KEY" != "x" ] || {
|
||||
artisan key:generate
|
||||
. /app/.env
|
||||
}
|
||||
[ "x$JWT_SECRET" != "x" ] || {
|
||||
artisan jwt:secret -f
|
||||
. /app/.env
|
||||
}
|
||||
|
||||
/usr/sbin/php-fpm8.1
|
||||
|
||||
tail -f /var/log/opnform.log
|
||||
18
docker/php-fpm.conf
Normal file
18
docker/php-fpm.conf
Normal file
@@ -0,0 +1,18 @@
|
||||
[opnform]
|
||||
user = opnform
|
||||
group = opnform
|
||||
listen = /var/run/php-fpm-opnform-site.sock
|
||||
listen.owner = www-data
|
||||
listen.group = www-data
|
||||
php_admin_value[disable_functions] = exec,passthru,shell_exec,system
|
||||
php_admin_flag[allow_url_fopen] = off
|
||||
php_admin_value[error_log] = /var/log/opnform.log
|
||||
; Choose how the process manager will control the number of child processes.
|
||||
pm = dynamic
|
||||
pm.max_children = 75
|
||||
pm.start_servers = 10
|
||||
pm.min_spare_servers = 5
|
||||
pm.max_spare_servers = 20
|
||||
pm.process_idle_timeout = 10s
|
||||
clear_env = no
|
||||
|
||||
46
docker/postgres-wrapper.sh
Normal file
46
docker/postgres-wrapper.sh
Normal file
@@ -0,0 +1,46 @@
|
||||
#!/bin/bash
|
||||
|
||||
DATA_DIR=/persist/pgsql/data
|
||||
CONFIG_FILE=/etc/postgresql/postgresql.conf
|
||||
PG_BASE=/usr/lib/postgresql/15/
|
||||
|
||||
touch $CONFIG_FILE
|
||||
|
||||
mkdir -p $DATA_DIR
|
||||
chown postgres -R $DATA_DIR
|
||||
chmod 0700 $DATA_DIR
|
||||
|
||||
. /app/.env
|
||||
|
||||
test -f $DATA_DIR/postgresql.conf || NEW_DB=true
|
||||
|
||||
if [ "x$NEW_DB" != "x" ]; then
|
||||
echo "No database files found. Initialising blank database"
|
||||
sudo -u postgres $PG_BASE/bin/initdb -D $DATA_DIR
|
||||
fi
|
||||
sudo -u postgres $PG_BASE/bin/postgres -D $DATA_DIR -c config_file=$CONFIG_FILE &
|
||||
|
||||
wait_for_database_to_be_ready() {
|
||||
while ! (echo "select version()" | psql -U $DB_USERNAME); do
|
||||
echo "Waiting 5 seconds for the database to come up"
|
||||
sleep 5;
|
||||
done
|
||||
}
|
||||
|
||||
if [ "x$NEW_DB" != "x" ]; then
|
||||
echo "Creating database users"
|
||||
wait_for_database_to_be_ready
|
||||
psql -U postgres <<EOF
|
||||
CREATE ROLE $DB_USERNAME LOGIN PASSWORD '$DB_PASSWORD';
|
||||
CREATE DATABASE $DB_DATABASE;
|
||||
\c $DB_DATABASE;
|
||||
GRANT ALL ON DATABASE $DB_DATABASE TO $DB_USERNAME;
|
||||
GRANT ALL ON SCHEMA public TO $DB_USERNAME;
|
||||
EOF
|
||||
|
||||
fi
|
||||
|
||||
wait_for_database_to_be_ready
|
||||
artisan migrate
|
||||
|
||||
wait
|
||||
7
docker/redis-wrapper.sh
Normal file
7
docker/redis-wrapper.sh
Normal file
@@ -0,0 +1,7 @@
|
||||
#!/bin/bash
|
||||
|
||||
sysctl vm.overcommit_memory=1
|
||||
mkdir -p /persist/redis/data
|
||||
chown redis -R /persist/redis/data
|
||||
|
||||
sudo -u redis /usr/bin/redis-server
|
||||
42
docker/supervisord.conf
Normal file
42
docker/supervisord.conf
Normal file
@@ -0,0 +1,42 @@
|
||||
[supervisord]
|
||||
nodaemon=true
|
||||
logfile=/dev/null
|
||||
logfile_maxbytes=0
|
||||
|
||||
[program:nginx]
|
||||
command=/usr/sbin/nginx
|
||||
stdout_logfile=/dev/stdout
|
||||
stderr_logfile=/dev/stderr
|
||||
stdout_logfile_maxbytes=0
|
||||
redirect_stderr=true
|
||||
|
||||
[program:php-fpm]
|
||||
command=/usr/local/bin/php-fpm-wrapper.sh
|
||||
stdout_logfile=/dev/stdout
|
||||
stderr_logfile=/dev/stderr
|
||||
stdout_logfile_maxbytes=0
|
||||
redirect_stderr=true
|
||||
|
||||
[program:php-queue]
|
||||
process_name=%(program_name)s_%(process_num)02d
|
||||
command=/usr/local/bin/artisan queue:work
|
||||
stdout_logfile=/dev/stdout
|
||||
stderr_logfile=/dev/stderr
|
||||
stdout_logfile_maxbytes=0
|
||||
redirect_stderr=true
|
||||
numprocs=5
|
||||
|
||||
[program:postgres]
|
||||
command=/usr/local/bin/postgres-wrapper.sh
|
||||
stdout_logfile=/dev/stdout
|
||||
stderr_logfile=/dev/stderr
|
||||
stdout_logfile_maxbytes=0
|
||||
redirect_stderr=true
|
||||
|
||||
[program:redis]
|
||||
command=/usr/local/bin/redis-wrapper.sh
|
||||
stdout_logfile=/dev/stdout
|
||||
stderr_logfile=/dev/stderr
|
||||
stdout_logfile_maxbytes=0
|
||||
redirect_stderr=true
|
||||
|
||||
Reference in New Issue
Block a user