Skip to content

Commit 92661c7

Browse files
committed
added support localhost and arch linux(pacman)
1 parent 7432dd9 commit 92661c7

File tree

4 files changed

+108
-21
lines changed

4 files changed

+108
-21
lines changed

README.md

Lines changed: 8 additions & 3 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

@@ -134,7 +135,9 @@ DATABASE_IMAGE_NAME=```mariadb``` or ```mysql```\
134135
DATABASE_CONT_NAME=```mariadb```, ```mysql``` or ```custom name```\
135136
DATABASE_PACKAGE_MANAGER=```apt-get update && apt-get install -y gettext-base``` for mariadb, ```microdnf install -y gettext``` for mysql\
136137
DATABASE_ADMIN_COMMANDLINE=```mariadb-admin``` for mariadb, ```mysqladmin``` for mysql\
137-
VARNISH_VERSION=```latest``` for centos version 9+ and fedora, ```stable``` for the others
138+
VARNISH_VERSION=```latest``` for centos version 9+ and fedora, ```stable``` for the others\
139+
SSL_SNIPPET=```echo 'Generated Self-signed SSL Certificate for localhost'``` for localhost\
140+
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
138141

139142
and
140143

@@ -156,6 +159,8 @@ Firstly: will create external volume
156159
docker volume create --driver local --opt type=none --opt device=${PWD}/certbot --opt o=bind certbot-etc
157160
```
158161

162+
for localhost ssl: Generate Self-signed SSL Certificate with guide [mkcert repository](https://github.com/FiloSottile/mkcert).
163+
159164
```
160165
docker compose up -d
161166
```

docker-compose.yml

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,15 +30,15 @@ services:
3030
test: ["CMD-SHELL", "/bin/pidof php-fpm > /dev/null || exit 1"]
3131
interval: 5s
3232
timeout: 5s
33-
retries: 50
33+
retries: 100
3434
environment:
3535
TZ: '${LOCAL_TIMEZONE}'
3636
labels:
3737
- 'docker-volume-backup.stop-during-backup=true'
3838
command: >
39-
bash -c "apt-get 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 pdo_mysql && 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 &&
40-
if [ -f \"${WEBSERVER_DOC_ROOT}/.env\" ]; then composer update --working-dir=${WEBSERVER_DOC_ROOT}; else rm -f ${WEBSERVER_DOC_ROOT}/README.md && composer create-project laravel/laravel . --working-dir=${WEBSERVER_DOC_ROOT} && chmod -R 777 ${WEBSERVER_DOC_ROOT}/storage/framework ${WEBSERVER_DOC_ROOT}/storage/logs; fi;
41-
sed -i \"s/DB_HOST=127.0.0.1/DB_HOST=database/;s/REDIS_HOST=127.0.0.1/REDIS_HOST=redis/\" ${WEBSERVER_DOC_ROOT}/.env; 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"
39+
bash -c "apt-get 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 pdo_mysql redis && curl -sS https://getcomposer.org/installer | php && mv composer.phar /usr/local/bin/composer &&
40+
if [ -f \"${WEBSERVER_DOC_ROOT}/.env\" ]; then composer update --working-dir=${WEBSERVER_DOC_ROOT}; else rm -f ${WEBSERVER_DOC_ROOT}/README.md && composer create-project laravel/laravel . --working-dir=${WEBSERVER_DOC_ROOT} && composer require barryvdh/laravel-debugbar --dev && chmod -R 777 ${WEBSERVER_DOC_ROOT}/storage/framework ${WEBSERVER_DOC_ROOT}/storage/logs; fi;
41+
sed \"s/APP_URL=http:\\/\\/localhost/APP_URL=https:\\/\\/${DOMAIN_NAME}/;s/DB_CONNECTION=sqlite/DB_CONNECTION=${DATABASE_IMAGE_NAME}/;s/# DB_HOST=127.0.0.1/DB_HOST=database/;s/# DB_PORT=3306/DB_PORT=3306/;s/# DB_DATABASE=laravel/DB_DATABASE=${DB_NAME}/;s/# DB_USERNAME=root/DB_USERNAME=${DB_USER}/;s/# DB_PASSWORD=/DB_PASSWORD=${DB_PASSWORD}/;s/REDIS_HOST=127.0.0.1/REDIS_HOST=redis/\" ${WEBSERVER_DOC_ROOT}/.env.example > ${WEBSERVER_DOC_ROOT}/.env; php artisan key:generate; php artisan migrate; 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"
4242
4343
webserver:
4444
depends_on:
@@ -92,8 +92,7 @@ services:
9292
retries: 20
9393
environment:
9494
TZ: '${LOCAL_TIMEZONE}'
95-
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};
96-
trap exit TERM; while :; do certbot renew --dry-run; sleep 12h & wait $${!}; done;"
95+
entrypoint: /bin/sh -c "${SSL_SNIPPET}; trap exit TERM; while :; do certbot renew --dry-run; sleep 12h & wait $${!}; done;"
9796

9897
phpmyadmin:
9998
depends_on:
@@ -176,7 +175,7 @@ services:
176175
- "docker-volume-backup.stop-during-backup=true"
177176
- "docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
178177
- "docker-volume-backup.exec-label=database"
179-
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"
178+
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"
180179

181180
redis:
182181
image: redis:latest

env.example

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

77
LETSENCRYPT_EMAIL=email@domain.com
88
LETSENCRYPT_CONF_PREFIX=/etc/letsencrypt
9+
SSL_SNIPPET=ssl_snippet
910

1011
PHP_IMAGE_NAME=php:fpm
1112
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" ]
@@ -32,6 +32,10 @@ do
3232
lpms=$i
3333
break
3434
elif [[ $(grep -Pow 'ID_LIKE=\K[^;]*' /etc/os-release) == *"suse"* ]]
35+
then
36+
lpms=$i
37+
break
38+
elif [ "$i" == "pacman" ]
3539
then
3640
lpms=$i
3741
break
@@ -77,6 +81,9 @@ then
7781
then
7882
sudo zypper remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine runc
7983
fi
84+
elif [ "$lpms" == "pacman" ]
85+
then
86+
sudo pacman -Rssn podman-docker podman-compose
8087
else
8188
echo ""
8289
echo "could not be detected package management system"
@@ -165,6 +172,10 @@ then
165172

166173
#Installed=`sudo apt-cache policy docker-ce | sed -n '2p' | cut -c 14-`
167174
#Candidate=`sudo apt-cache policy docker-ce | sed -n '3p' | cut -c 14-`
175+
elif [ "$lpms" == "pacman" ]
176+
then
177+
sudo pacman -Syu --noconfirm
178+
sudo pacman -Ss docker docker-buildx
168179
else
169180
echo ""
170181
echo "could not be detected package management system"
@@ -221,13 +232,13 @@ echo "======================================================================="
221232
echo ""
222233
echo ""
223234
echo "======================================================================="
224-
echo "| Installing Docker Compose v2.27.2..."
235+
echo "| Installing Docker Compose v2.32.4..."
225236
echo "======================================================================="
226237
echo ""
227238
sleep 2
228239

229240
sudo mkdir -p /usr/local/lib/docker/cli-plugins
230-
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
241+
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
231242
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
232243

233244
echo ""
@@ -256,27 +267,97 @@ clear
256267
# Setup project variables
257268
##########
258269
echo ""
259-
echo ""
260270
echo "======================================================================="
261271
echo "| Please enter project related variables..."
262272
echo "======================================================================="
263273
echo ""
264274
sleep 2
265275

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

326+
ssl_snippet=""
327+
if [ "$which_h" == "localhost" ]
328+
then
329+
ssl_snippet="echo 'Generated Self-signed SSL Certificate for localhost'"
330+
if [ "$lpms" == "apk" ]
331+
then
332+
sudo apk add --no-cache nss-tools go git
333+
elif [ "$lpms" == "dnf" ]
334+
then
335+
sudo dnf install nss-tools go git
336+
elif [ "$lpms" == "yum" ]
337+
then
338+
sudo yum install nss-tools go git
339+
elif [ "$lpms" == "zypper" ]
340+
then
341+
sudo zypper install mozilla-nss-tools go git
342+
elif [ "$lpms" == "apt" ]
343+
then
344+
sudo apt install libnss3-tools go git
345+
elif [ "$lpms" == "pacman" ]
346+
then
347+
sudo pacman -S nss go git
348+
else
349+
echo ""
350+
echo "could not be detected package management system"
351+
echo ""
352+
exit 0
353+
fi
354+
sudo rm -Rf mkcert && git clone https://github.com/FiloSottile/mkcert && cd mkcert && go build -ldflags "-X main.Version=$(git describe --tags)"
355+
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 ..
356+
echo "Ok."
357+
else
358+
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\}"
359+
fi
360+
280361
# set parameters in env.example file
281362
email=""
282363
regex="^[a-zA-Z0-9\._-]+\@[a-zA-Z0-9._-]+\.[a-zA-Z]+\$"
@@ -388,22 +469,23 @@ echo "Ok."
388469

389470
read -p "Apply changes (y/n)? " choice
390471
case "$choice" in
391-
y|Y ) echo "Yes! Proceeding now...";;
472+
y|Y ) clear; echo ""; echo "Yes! Proceeding now...";;
392473
n|N ) echo "No! Aborting now..."; exit 0;;
393474
* ) echo "Invalid input! Aborting now..."; exit 0;;
394475
esac
395476

396-
cp ./phpmyadmin/apache2/sites-available/default-ssl.sample.conf ./phpmyadmin/apache2/sites-available/default-ssl.conf
397-
cp ./database/phpmyadmin/sql/create_tables.sql.template.example ./database/phpmyadmin/sql/create_tables.sql.template
477+
\cp ./phpmyadmin/apache2/sites-available/default-ssl.sample.conf ./phpmyadmin/apache2/sites-available/default-ssl.conf
478+
\cp ./database/phpmyadmin/sql/create_tables.sql.template.example ./database/phpmyadmin/sql/create_tables.sql.template
398479

399-
cp env.example .env
480+
\cp env.example .env
400481

401482
sed -i "s/db_authentication_password/${db_authentication_password}/" ./database/phpmyadmin/sql/create_tables.sql.template
402483
sed -i "s|db_package_manager|${db_package_manager}|" .env
403484
sed -i 's/db_admin_commandline/'$db_admin_commandline'/' .env
404485
sed -i 's/example.com/'$domain_name'/' .env
405486
sed -i 's/example.com/'$domain_name'/g' ./phpmyadmin/apache2/sites-available/default-ssl.conf
406487
sed -i 's/email@domain.com/'$email'/' .env
488+
sed -i "s/ssl_snippet/$ssl_snippet/" .env
407489
sed -i 's/which_db/'$which_db'/g' .env
408490
sed -i 's/db_username/'$db_username'/g' .env
409491
sed -i 's/db_password/'$db_password'/g' .env

0 commit comments

Comments
 (0)