Skip to content

Commit 124305c

Browse files
committed
added support localhost and arch linux(pacman)
1 parent 2fe4ad9 commit 124305c

File tree

7 files changed

+113
-36
lines changed

7 files changed

+113
-36
lines changed

README.md

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

@@ -132,9 +133,9 @@ DIRECTORY_PATH=```pwd``` at command line\
132133
DATABASE_IMAGE_NAME=```mariadb``` or ```mysql```\
133134
DATABASE_CONT_NAME=```mariadb```, ```mysql``` or ```custom name```\
134135
DATABASE_PACKAGE_MANAGER=```apt-get update && apt-get install -y gettext-base``` for mariadb, ```microdnf install -y gettext``` for mysql\
135-
DATABASE_AUTHENTICATION_PLUGIN=```mysql_native_password``` for mariadb, ```caching_sha2_password``` for mysql\
136136
DATABASE_ADMIN_COMMANDLINE=```mariadb-admin``` for mariadb, ```mysqladmin``` for mysql\
137-
VARNISH_VERSION=```latest``` for centos version 9+ and fedora, ```stable``` for the others
137+
SSL_SNIPPET=```echo 'Generated Self-signed SSL Certificate for localhost'``` for localhost\
138+
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
138139

139140
and
140141

@@ -146,7 +147,7 @@ change example.com to your domain name in ```./phpmyadmin/apache2/sites-availabl
146147
```
147148
cp ./database/phpmyadmin/sql/create_tables.sql.template.example ./database/phpmyadmin/sql/create_tables.sql.template
148149
```
149-
change pma_controluser, db_authentication_plugin and db_authentication_password in ```./database/phpmyadmin/sql/create_tables.sql.template``` file.
150+
change pma_controluser and db_authentication_password in ```./database/phpmyadmin/sql/create_tables.sql.template``` file.
150151

151152
### Installation
152153

@@ -156,6 +157,8 @@ Firstly: will create external volume
156157
docker volume create --driver local --opt type=none --opt device=${PWD}/certbot --opt o=bind certbot-etc
157158
```
158159

160+
localhost ssl: Generate Self-signed SSL Certificate with guide [mkcert repository](https://github.com/FiloSottile/mkcert).
161+
159162
```
160163
docker compose up -d
161164
```

database/phpmyadmin/sql/create_tables.sql.template.example

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ USE phpmyadmin;
2626
--
2727
-- CREATE USER IF NOT EXISTS for phpmyadmin database
2828
--
29-
CREATE USER IF NOT EXISTS 'pma_controluser'@'%' IDENTIFIED WITH db_authentication_plugin db_authentication_password;
29+
CREATE USER IF NOT EXISTS 'pma_controluser'@'%' IDENTIFIED BY 'db_authentication_password';
3030

3131
--
3232
-- Privileges

docker-compose.yml

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,3 @@
1-
version: '3.7'
2-
31
services:
42

53
symfony:
@@ -32,13 +30,13 @@ services:
3230
test: ["CMD-SHELL", "/bin/pidof php-fpm > /dev/null || exit 1"]
3331
interval: 5s
3432
timeout: 5s
35-
retries: 50
33+
retries: 100
3634
environment:
3735
TZ: '${LOCAL_TIMEZONE}'
3836
labels:
3937
- 'docker-volume-backup.stop-during-backup=true'
4038
command: >
41-
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 &&
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 &&
4240
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 symfony/skeleton . --working-dir=${WEBSERVER_DOC_ROOT} && composer require --working-dir=${WEBSERVER_DOC_ROOT} ${SKELETON_WEBAPP}; fi;
4341
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"
4442
@@ -94,8 +92,7 @@ services:
9492
retries: 20
9593
environment:
9694
TZ: '${LOCAL_TIMEZONE}'
97-
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};
98-
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;"
9996

10097
phpmyadmin:
10198
depends_on:
@@ -178,7 +175,7 @@ services:
178175
- "docker-volume-backup.stop-during-backup=true"
179176
- "docker-volume-backup.archive-pre=/bin/sh -c 'mysqldump -uroot -p${MYSQL_ROOT_PASSWORD} --all-databases > /tmp/backup/db_backup_data.sql'"
180177
- "docker-volume-backup.exec-label=database"
181-
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 --default-authentication-plugin=${DATABASE_AUTHENTICATION_PLUGIN}"
178+
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"
182179

183180
redis:
184181
image: redis:latest

env.example

Lines changed: 2 additions & 2 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
@@ -21,7 +22,6 @@ DATABASE_IMAGE_NAME=which_db
2122
DATABASE_CONT_NAME=which_db
2223
DATABASE_VERSION=latest
2324
DATABASE_PACKAGE_MANAGER=db_package_manager
24-
DATABASE_AUTHENTICATION_PLUGIN=db_authentication_plugin
2525
DATABASE_ADMIN_COMMANDLINE=db_admin_commandline
2626

2727
PMA_CONTROLUSER=pma_username
@@ -35,4 +35,4 @@ APACHE_CONFDIR_PREFIX=/etc/apache2
3535

3636
REDIS_CONF_PREFIX=/usr/local/etc
3737

38-
SKELETON_WEBAPP=symfony/webapp-pack
38+
SKELETON_WEBAPP=webapp

install.sh

Lines changed: 96 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -12,12 +12,13 @@ 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" ]
1919
then
2020
lpms=$i
21+
sudo apk add --no-cache --upgrade grep
2122
break
2223
elif [ "$i" == "dnf" ] && ([[ $(grep -Pow 'ID=\K[^;]*' /etc/os-release | tr -d '"') == "fedora" ]] || (([[ $(grep -Pow 'ID=\K[^;]*' /etc/os-release | tr -d '"') != "centos" ]] && [[ $(grep -Pow 'ID_LIKE=\K[^;]*' /etc/os-release | tr -d '"') == *"fedora"* ]]) || ([[ $(grep -Pow 'ID_LIKE=\K[^;]*' /etc/os-release | tr -d '"') == *"rhel"* ]] && [ $(sudo uname -m) == "s390x" ])))
2324
then
@@ -32,6 +33,10 @@ do
3233
lpms=$i
3334
break
3435
elif [[ $(grep -Pow 'ID_LIKE=\K[^;]*' /etc/os-release) == *"suse"* ]]
36+
then
37+
lpms=$i
38+
break
39+
elif [ "$i" == "pacman" ]
3540
then
3641
lpms=$i
3742
break
@@ -77,6 +82,9 @@ then
7782
then
7883
sudo zypper remove docker docker-client docker-client-latest docker-common docker-latest docker-latest-logrotate docker-logrotate docker-engine runc
7984
fi
85+
elif [ "$lpms" == "pacman" ]
86+
then
87+
sudo pacman -Rssn podman-docker podman-compose
8088
else
8189
echo ""
8290
echo "could not be detected package management system"
@@ -165,6 +173,10 @@ then
165173

166174
#Installed=`sudo apt-cache policy docker-ce | sed -n '2p' | cut -c 14-`
167175
#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
168180
else
169181
echo ""
170182
echo "could not be detected package management system"
@@ -221,13 +233,13 @@ echo "======================================================================="
221233
echo ""
222234
echo ""
223235
echo "======================================================================="
224-
echo "| Installing Docker Compose v2.23.3..."
236+
echo "| Installing Docker Compose v2.32.4..."
225237
echo "======================================================================="
226238
echo ""
227239
sleep 2
228240

229241
sudo mkdir -p /usr/local/lib/docker/cli-plugins
230-
sudo curl -SL "https://github.com/docker/compose/releases/download/v2.23.3/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
231243
sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
232244

233245
echo ""
@@ -251,31 +263,102 @@ echo ""
251263
echo "Done ✓"
252264
echo "======================================================================="
253265

266+
clear
254267
##########
255268
# Setup project variables
256269
##########
257270
echo ""
258-
echo ""
259271
echo "======================================================================="
260272
echo "| Please enter project related variables..."
261273
echo "======================================================================="
262274
echo ""
263275
sleep 2
264276

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+
265296
# set your domain name
266-
domain_name=""
267-
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
268307
[ -z $domain_name ] && domain_name="NULL"
269308
host -N 0 $domain_name 2>&1 > /dev/null
270309
while [ $? -ne 0 ]
271310
do
272311
echo "Try again"
273-
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
274322
[ -z $domain_name ] && domain_name="NULL"
275323
host -N 0 $domain_name 2>&1 > /dev/null
276324
done
277325
echo "Ok."
278326

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+
279362
# set parameters in env.example file
280363
email=""
281364
regex="^[a-zA-Z0-9\._-]+\@[a-zA-Z0-9._-]+\.[a-zA-Z]+\$"
@@ -351,8 +434,7 @@ done
351434
echo "Ok."
352435

353436
which_db=""
354-
db_authentication_plugin="mysql_native_password"
355-
db_authentication_password="USING PASSWORD('"$pma_password"')"
437+
db_authentication_password=$pma_password
356438
db_package_manager="apt-get update \&\& apt-get install -y gettext-base"
357439
db_admin_commandline="mariadb-admin"
358440
PS3="Select the database: "
@@ -361,8 +443,6 @@ do
361443
which_db=$db
362444
if [ $REPLY -eq 2 ]
363445
then
364-
db_authentication_plugin="caching_sha2_password"
365-
db_authentication_password="BY '"$pma_password"'"
366446
db_package_manager="microdnf install -y gettext"
367447
db_admin_commandline="mysqladmin"
368448
fi
@@ -390,24 +470,23 @@ echo "Ok."
390470

391471
read -p "Apply changes (y/n)? " choice
392472
case "$choice" in
393-
y|Y ) echo "Yes! Proceeding now...";;
473+
y|Y ) clear; echo ""; echo "Yes! Proceeding now...";;
394474
n|N ) echo "No! Aborting now..."; exit 0;;
395475
* ) echo "Invalid input! Aborting now..."; exit 0;;
396476
esac
397477

398-
cp ./phpmyadmin/apache2/sites-available/default-ssl.sample.conf ./phpmyadmin/apache2/sites-available/default-ssl.conf
399-
cp ./database/phpmyadmin/sql/create_tables.sql.template.example ./database/phpmyadmin/sql/create_tables.sql.template
478+
\cp ./phpmyadmin/apache2/sites-available/default-ssl.sample.conf ./phpmyadmin/apache2/sites-available/default-ssl.conf
479+
\cp ./database/phpmyadmin/sql/create_tables.sql.template.example ./database/phpmyadmin/sql/create_tables.sql.template
400480

401-
cp env.example .env
481+
\cp env.example .env
402482

403-
sed -i 's/db_authentication_plugin/'$db_authentication_plugin'/' ./database/phpmyadmin/sql/create_tables.sql.template
404483
sed -i "s/db_authentication_password/${db_authentication_password}/" ./database/phpmyadmin/sql/create_tables.sql.template
405-
sed -i 's/db_authentication_plugin/'$db_authentication_plugin'/' .env
406484
sed -i "s|db_package_manager|${db_package_manager}|" .env
407485
sed -i 's/db_admin_commandline/'$db_admin_commandline'/' .env
408486
sed -i 's/example.com/'$domain_name'/' .env
409487
sed -i 's/example.com/'$domain_name'/g' ./phpmyadmin/apache2/sites-available/default-ssl.conf
410488
sed -i 's/email@domain.com/'$email'/' .env
489+
sed -i "s/ssl_snippet/$ssl_snippet/" .env
411490
sed -i 's/which_db/'$which_db'/g' .env
412491
sed -i 's/db_username/'$db_username'/g' .env
413492
sed -i 's/db_password/'$db_password'/g' .env

phpmyadmin/apache2/sites-available/default-ssl.sample.conf

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@
3333
# /usr/share/doc/apache2/README.Debian.gz for more info.
3434
# If both key and certificate are stored in the same file, only the
3535
# SSLCertificateFile directive is needed.
36-
SSLCertificateFile /etc/letsencrypt/live/example.com/cert.pem
36+
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
3737
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem
3838

3939
# Server Certificate Chain:

portainer-docker-compose.yml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,6 @@
1-
version: '3.7'
2-
31
services:
42
portainer:
5-
image: portainer/portainer-ce
3+
image: portainer/portainer-ce:latest
64
container_name: portainer
75
volumes:
86
- /var/run/docker.sock:/var/run/docker.sock

0 commit comments

Comments
 (0)