Skip to content

Commit 2a9e79e

Browse files
committed
added support localhost and arch linux(pacman), added php-fpm latest tag
1 parent f298105 commit 2a9e79e

File tree

4 files changed

+105
-18
lines changed

4 files changed

+105
-18
lines changed

README.md

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ Plus, manage docker containers with Portainer.
2323
<p align="left"> arm64/aarch64, x86-64 </p>
2424

2525
#### Supported Linux Package Manage Systems:
26-
<p align="left"> apk, dnf, yum, apt/apt-get, zypper </p>
26+
<p align="left"> apk, dnf, yum, apt/apt-get, zypper, pacman </p>
2727

2828
#### Supported Linux Operation Systems:
2929
<p align="left"> <a href="https://alpinelinux.org/" target="_blank" rel="noreferrer"> <img src="https://avatars.githubusercontent.com/u/7600810?s=200&v=4" alt="alpine linux" height="40" width="40"/> </a>&nbsp;&nbsp;&nbsp;
@@ -33,7 +33,8 @@ Plus, manage docker containers with Portainer.
3333
<a href="https://ubuntu.com/" target="_blank" rel="noreferrer"> <img src="https://avatars.githubusercontent.com/u/4604537?s=200&v=4" alt="ubuntu" height="40" width="40"/> </a>&nbsp;&nbsp;&nbsp;
3434
<a href="https://www.raspberrypi.com/" target="_blank" rel="noreferrer"> <img src="https://avatars.githubusercontent.com/u/1294177?s=200&v=4" alt="ubuntu" height="40" width="40"/> </a>&nbsp;&nbsp;&nbsp;
3535
<a href="https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux" target="_blank" rel="noreferrer"> <img src="https://avatars.githubusercontent.com/u/33972111?s=200&v=4" alt="redhat on s390x (IBM Z)" height="40" width="40"/> </a>&nbsp;&nbsp;&nbsp;
36-
<a href="https://www.suse.com/products/server/" target="_blank" rel="noreferrer"> <img src="https://avatars.githubusercontent.com/u/623819?s=200&v=4" alt="opensuse on s390x (IBM Z)" height="40" width="40"/> </a> </p>
36+
<a href="https://www.suse.com/products/server/" target="_blank" rel="noreferrer"> <img src="https://avatars.githubusercontent.com/u/623819?s=200&v=4" alt="opensuse on s390x (IBM Z)" height="40" width="40"/> </a>&nbsp;&nbsp;&nbsp;
37+
<a href="https://archlinux.org/" target="_blank" rel="noreferrer"> <img src="https://gitlab.archlinux.org/uploads/-/system/group/avatar/23/iconfinder_archlinux_386451.png?width=48" alt="arch linux" height="40" width="40"/> </a> </p>
3738

3839
##### Note: Fedora 37, 39 and alpine linux x86-64 compatible, could not try sles IBM Z s390x, rhel IBM Z s390x and raspberrypi.
3940

@@ -136,6 +137,8 @@ DATABASE_IMAGE_NAME=```mariadb``` or ```mysql```\
136137
DATABASE_CONT_NAME=```mariadb```, ```mysql``` or ```custom name```\
137138
DATABASE_PACKAGE_MANAGER=```apt-get update && apt-get install -y gettext-base``` for mariadb, ```microdnf install -y gettext``` for mysql\
138139
DATABASE_ADMIN_COMMANDLINE=```mariadb-admin``` for mariadb, ```mysqladmin``` for mysql\
140+
SSL_SNIPPET=```echo 'Generated Self-signed SSL Certificate for localhost'``` for localhost\
141+
SSL_SNIPPET=```certbot certonly --webroot --webroot-path /tmp/acme-challenge --rsa-key-size 4096 --non-interactive --agree-tos --no-eff-email --force-renewal --email ${LETSENCRYPT_EMAIL} -d ${DOMAIN_NAME} -d www.${DOMAIN_NAME}``` for remotehost
139142

140143
and
141144

@@ -158,6 +161,8 @@ Firstly: will create external volume
158161
docker volume create --driver local --opt type=none --opt device=${PWD}/certbot --opt o=bind certbot-etc
159162
```
160163

164+
for localhost ssl: Generate Self-signed SSL Certificate with guide [mkcert repository](https://github.com/FiloSottile/mkcert).
165+
161166
```
162167
docker compose up -d
163168
```

docker-compose.yml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ services:
3636
labels:
3737
- 'docker-volume-backup.stop-during-backup=true'
3838
command: >
39-
bash -c "apt-get -y update && sh /tmp/packagecheck.sh 'zip unzip' && curl -sSL https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o - | sh -s intl mysqli && if pecl install -p -- redis; then pecl install -o -f redis && rm -rf /tmp/pear && docker-php-ext-enable redis; fi; curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer &&
39+
bash -c "apt-get -y update && sh /tmp/packagecheck.sh 'zip unzip' && curl -sSL https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions -o - | sh -s intl mysqli redis && curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer &&
4040
if [ -f \"${WEBSERVER_DOC_ROOT}/appstarter/.env\" ]; then composer update --working-dir=${WEBSERVER_DOC_ROOT}/appstarter; else composer create-project codeigniter4/appstarter --no-dev; fi;
41-
sed \"s/# app.baseURL = ''/app.baseURL = 'https:\\/\\/${DOMAIN_NAME}\\/'/;s/# app_baseURL = ''/app_baseURL = 'https:\\/\\/${DOMAIN_NAME}\\/'/;s/# database.default.hostname = localhost/database.default.hostname = database/;s/# database.default.database = ci4/database.default.database = ${DB_NAME}/;s/# database.default.username = root/database.default.username = ${DB_USER}/;s/# database.default.password = root/database.default.password = ${DB_PASSWORD}/;s/# database.default.DBDriver = MySQLi/database.default.DBDriver = MySQLi/;s/# database.default.DBPrefix =/database.default.DBPrefix = ${DB_TABLE_PREFIX}/;s/# database.default.port = 3306/database.default.port = 3306/\" ${WEBSERVER_DOC_ROOT}/appstarter/env > ${WEBSERVER_DOC_ROOT}/appstarter/.env;
41+
sed \"s/# app\\.baseURL = ''/app.baseURL = 'https:\\/\\/${DOMAIN_NAME}\\/'/;s/# app_baseURL = ''/app_baseURL = 'https:\\/\\/${DOMAIN_NAME}\\/'/;s/# database.default.hostname = localhost/database.default.hostname = database/;s/# database.default.database = ci4/database.default.database = ${DB_NAME}/;s/# database.default.username = root/database.default.username = ${DB_USER}/;s/# database.default.password = root/database.default.password = ${DB_PASSWORD}/;s/# database.default.DBDriver = MySQLi/database.default.DBDriver = MySQLi/;s/# database.default.DBPrefix =/database.default.DBPrefix = ${DB_TABLE_PREFIX}/;s/# database.default.port = 3306/database.default.port = 3306/\" ${WEBSERVER_DOC_ROOT}/appstarter/env > ${WEBSERVER_DOC_ROOT}/appstarter/.env;
4242
chmod 777 -R ${WEBSERVER_DOC_ROOT}/appstarter/writable/; grep -qe 'date.timezone = ${LOCAL_TIMEZONE}' ${PHP_INI_DIR_PREFIX}/php/conf.d/security.ini || echo 'date.timezone = ${LOCAL_TIMEZONE}' >> ${PHP_INI_DIR_PREFIX}/php/conf.d/security.ini; php-fpm"
4343
4444
webserver:
@@ -83,8 +83,7 @@ services:
8383
retries: 20
8484
environment:
8585
TZ: '${LOCAL_TIMEZONE}'
86-
entrypoint: /bin/sh -c "certbot certonly --webroot --webroot-path /tmp/acme-challenge --rsa-key-size 4096 --non-interactive --agree-tos --no-eff-email --force-renewal --email ${LETSENCRYPT_EMAIL} -d ${DOMAIN_NAME} -d www.${DOMAIN_NAME};
87-
trap exit TERM; while :; do certbot renew --dry-run; sleep 12h & wait $${!}; done;"
86+
entrypoint: /bin/sh -c "${SSL_SNIPPET}; trap exit TERM; while :; do certbot renew --dry-run; sleep 12h & wait $${!}; done;"
8887

8988
proxy:
9089
depends_on:
@@ -203,7 +202,7 @@ services:
203202
- "docker-volume-backup.stop-during-backup=true"
204203
- "docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
205204
- "docker-volume-backup.exec-label=database"
206-
command: bash -c "${DATABASE_PACKAGE_MANAGER} && export PMA_CONTROLUSER=${PMA_CONTROLUSER} export PMA_CONTROLPASS=${PMA_CONTROLPASS} && envsubst '$$PMA_CONTROLUSER,$$PMA_CONTROLPASS' < /docker-entrypoint-initdb.d/create_tables.sql.template > /docker-entrypoint-initdb.d/create_tables.sql && docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
205+
command: bash -c "${DATABASE_PACKAGE_MANAGER} && chmod 0444 ${MYSQL_CONF_PREFIX}/z-mysql.cnf && export PMA_CONTROLUSER=${PMA_CONTROLUSER} export PMA_CONTROLPASS=${PMA_CONTROLPASS} && envsubst '$$PMA_CONTROLUSER,$$PMA_CONTROLPASS' < /docker-entrypoint-initdb.d/create_tables.sql.template > /docker-entrypoint-initdb.d/create_tables.sql && docker-entrypoint.sh --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci"
207206

208207
redis:
209208
image: redis:latest

env.example

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ DIRECTORY_PATH=directory_path
77

88
LETSENCRYPT_EMAIL=email@domain.com
99
LETSENCRYPT_CONF_PREFIX=/etc/letsencrypt
10+
SSL_SNIPPET=ssl_snippet
1011

1112
PHP_IMAGE_NAME=php:fpm
1213
PHP_INI_DIR_PREFIX=/usr/local/etc

install.sh

Lines changed: 93 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ sleep 2
1212

1313
# the "lpms" is an abbreviation of Linux Package Management System
1414
lpms=""
15-
for i in apk dnf yum apt zypper
15+
for i in apk dnf yum apt zypper pacman
1616
do
1717
if [ -x "$(command -v $i)" ]; then
1818
if [ "$i" == "apk" ]
@@ -33,6 +33,10 @@ do
3333
lpms=$i
3434
break
3535
elif [[ $(grep -Pow 'ID_LIKE=\K[^;]*' /etc/os-release) == *"suse"* ]]
36+
then
37+
lpms=$i
38+
break
39+
elif [ "$i" == "pacman" ]
3640
then
3741
lpms=$i
3842
break
@@ -78,6 +82,9 @@ then
7882
then
7983
sudo zypper remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine runc
8084
fi
85+
elif [ "$lpms" == "pacman" ]
86+
then
87+
sudo pacman -Rssn podman-docker podman-compose
8188
else
8289
echo ""
8390
echo "could not be detected package management system"
@@ -166,6 +173,10 @@ then
166173

167174
#Installed=`sudo apt-cache policy docker-ce | sed -n '2p' | cut -c 14-`
168175
#Candidate=`sudo apt-cache policy docker-ce | sed -n '3p' | cut -c 14-`
176+
elif [ "$lpms" == "pacman" ]
177+
then
178+
sudo pacman -Syu --noconfirm
179+
sudo pacman -Ss docker docker-buildx
169180
else
170181
echo ""
171182
echo "could not be detected package management system"
@@ -222,13 +233,13 @@ echo "======================================================================="
222233
echo ""
223234
echo ""
224235
echo "======================================================================="
225-
echo "| Installing Docker Compose v2.27.2..."
236+
echo "| Installing Docker Compose v2.32.4..."
226237
echo "======================================================================="
227238
echo ""
228239
sleep 2
229240

230241
sudo mkdir -p /usr/local/lib/docker/cli-plugins
231-
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.27.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/lib/docker/cli-plugins/docker-compose
242+
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.32.4/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/lib/docker/cli-plugins/docker-compose
232243
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
233244

234245
echo ""
@@ -257,27 +268,97 @@ clear
257268
# Setup project variables
258269
##########
259270
echo ""
260-
echo ""
261271
echo "======================================================================="
262272
echo "| Please enter project related variables..."
263273
echo "======================================================================="
264274
echo ""
265275
sleep 2
266276

277+
# set the host
278+
which_h=""
279+
items=("localhost" "remotehost")
280+
PS3="which computer command line are you on? Select the host: "
281+
select h in "${items[@]}"
282+
do
283+
case $REPLY in
284+
1)
285+
which_h=$h
286+
break;;
287+
2)
288+
which_h=$h
289+
break;;
290+
*)
291+
echo "Invalid choice $REPLY";;
292+
esac
293+
done
294+
echo "Ok."
295+
267296
# set your domain name
268-
domain_name=""
269-
read -p 'Enter Domain Name(e.g. : example.com): ' domain_name
297+
if [ "$which_h" == "localhost" ]
298+
then
299+
read -p 'Enter Domain Name(default : localhost or e.g. : example.com): ' domain_name
300+
: ${domain_name:=localhost}
301+
[ "$domain_name" != "localhost" ] && sudo -- sh -c -e "grep -Eq '$domain_name' /etc/hosts || echo '127.0.0.1 $domain_name' >> /etc/hosts"
302+
else
303+
domain_name=""
304+
read -p 'Enter Domain Name(e.g. : example.com): ' domain_name
305+
#[ "$domain_name" != "localhost" ] && sudo -- sh -c -e "sed -i '/$domain_name/d' /etc/hosts"
306+
fi
270307
[ -z $domain_name ] && domain_name="NULL"
271308
host -N 0 $domain_name 2>&1 > /dev/null
272309
while [ $? -ne 0 ]
273310
do
274311
echo "Try again"
275-
read -p 'Enter Domain Name(e.g. : example.com): ' domain_name
312+
sudo -- sh -c -e "sed -i '/$domain_name/d' /etc/hosts"
313+
if [ "$which_h" == "localhost" ]
314+
then
315+
read -p 'Enter Domain Name(default : localhost or e.g. : example.com): ' domain_name
316+
: ${domain_name:=localhost}
317+
[ "$domain_name" != "localhost" ] && sudo -- sh -c -e "grep -Eq '$domain_name' /etc/hosts || echo '127.0.0.1 $domain_name' >> /etc/hosts"
318+
else
319+
read -p 'Enter Domain Name(e.g. : example.com): ' domain_name
320+
#[ "$domain_name" != "localhost" ] && sudo -- sh -c -e "sed -i '/$domain_name/d' /etc/hosts"
321+
fi
276322
[ -z $domain_name ] && domain_name="NULL"
277323
host -N 0 $domain_name 2>&1 > /dev/null
278324
done
279325
echo "Ok."
280326

327+
ssl_snippet=""
328+
if [ "$which_h" == "localhost" ]
329+
then
330+
ssl_snippet="echo 'Generated Self-signed SSL Certificate for localhost'"
331+
if [ "$lpms" == "apk" ]
332+
then
333+
sudo apk add --no-cache nss-tools go git
334+
elif [ "$lpms" == "dnf" ]
335+
then
336+
sudo dnf install nss-tools go git
337+
elif [ "$lpms" == "yum" ]
338+
then
339+
sudo yum install nss-tools go git
340+
elif [ "$lpms" == "zypper" ]
341+
then
342+
sudo zypper install mozilla-nss-tools go git
343+
elif [ "$lpms" == "apt" ]
344+
then
345+
sudo apt install libnss3-tools go git
346+
elif [ "$lpms" == "pacman" ]
347+
then
348+
sudo pacman -S nss go git
349+
else
350+
echo ""
351+
echo "could not be detected package management system"
352+
echo ""
353+
exit 0
354+
fi
355+
sudo rm -Rf mkcert && git clone https://github.com/FiloSottile/mkcert && cd mkcert && go build -ldflags "-X main.Version=$(git describe --tags)"
356+
sudo mkcert -uninstall && mkcert -install && mkcert -key-file privkey.pem -cert-file chain.pem $domain_name *.$domain_name && sudo cat privkey.pem chain.pem > fullchain.pem && sudo mkdir -p ../certbot/live/$domain_name && sudo mv *.pem ../certbot/live/$domain_name && cd ..
357+
echo "Ok."
358+
else
359+
ssl_snippet="certbot certonly --webroot --webroot-path \/tmp\/acme-challenge --rsa-key-size 4096 --non-interactive --agree-tos --no-eff-email --force-renewal --email \$\{LETSENCRYPT_EMAIL\} -d \$\{DOMAIN_NAME\} -d www.\$\{DOMAIN_NAME\}"
360+
fi
361+
281362
# set parameters in env.example file
282363
email=""
283364
regex="^[a-zA-Z0-9\._-]+\@[a-zA-Z0-9._-]+\.[a-zA-Z]+\$"
@@ -401,22 +482,23 @@ echo "Ok."
401482

402483
read -p "Apply changes (y/n)? " choice
403484
case "$choice" in
404-
y|Y ) echo "Yes! Proceeding now...";;
485+
y|Y ) clear; echo ""; echo "Yes! Proceeding now...";;
405486
n|N ) echo "No! Aborting now..."; exit 0;;
406487
* ) echo "Invalid input! Aborting now..."; exit 0;;
407488
esac
408489

409-
cp ./phpmyadmin/apache2/sites-available/default-ssl.sample.conf ./phpmyadmin/apache2/sites-available/default-ssl.conf
410-
cp ./database/phpmyadmin/sql/create_tables.sql.template.example ./database/phpmyadmin/sql/create_tables.sql.template
490+
\cp ./phpmyadmin/apache2/sites-available/default-ssl.sample.conf ./phpmyadmin/apache2/sites-available/default-ssl.conf
491+
\cp ./database/phpmyadmin/sql/create_tables.sql.template.example ./database/phpmyadmin/sql/create_tables.sql.template
411492

412-
cp env.example .env
493+
\cp env.example .env
413494

414495
sed -i "s/db_authentication_password/${db_authentication_password}/" ./database/phpmyadmin/sql/create_tables.sql.template
415496
sed -i "s|db_package_manager|${db_package_manager}|" .env
416497
sed -i 's/db_admin_commandline/'$db_admin_commandline'/' .env
417498
sed -i 's/example.com/'$domain_name'/' .env
418499
sed -i 's/example.com/'$domain_name'/g' ./phpmyadmin/apache2/sites-available/default-ssl.conf
419500
sed -i 's/email@domain.com/'$email'/' .env
501+
sed -i "s/ssl_snippet/$ssl_snippet/" .env
420502
sed -i 's/which_db/'$which_db'/g' .env
421503
sed -i 's/db_username/'$db_username'/g' .env
422504
sed -i 's/db_password/'$db_password'/g' .env

0 commit comments

Comments
 (0)