-
Notifications
You must be signed in to change notification settings - Fork 4
Expand file tree
/
Copy pathdocker_install.sh
More file actions
executable file
·166 lines (144 loc) · 5.81 KB
/
docker_install.sh
File metadata and controls
executable file
·166 lines (144 loc) · 5.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
#!/bin/bash
set -e
set -o pipefail
# Function to log messages
log_message() {
echo "$1"
echo "$1" >> install.log
}
# Function to run commands with logging
run_command() {
log_message "Running: $1"
eval "$1" >> install.log 2>&1
}
# Function to install packages
install_package() {
local package_name="$1"
log_message "Installing $package_name..."
run_command "sudo apt-get install -y $package_name"
}
# Function to update system
update_system() {
log_message "Updating system..."
run_command "sudo apt-get update -y && sudo apt-get upgrade -y"
}
# Function to install Docker dependencies
install_docker_dependencies() {
log_message "Installing Docker dependencies..."
update_system
install_package "build-essential"
install_package "curl"
install_package "git"
}
# Function to install Docker
install_docker() {
log_message "Installing Docker..."
run_command "install -m 0755 -d /etc/apt/keyrings"
run_command "sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc"
run_command "sudo chmod a+r /etc/apt/keyrings/docker.asc"
run_command "sudo echo \"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo \"$VERSION_CODENAME\") stable\" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null"
run_command "sleep 5"
update_system
install_package "docker-ce"
install_package "docker-ce-cli"
install_package "containerd.io"
install_package "docker-buildx-plugin"
install_package "docker-compose-plugin"
}
# Function to add user to Docker group
# This ensures the user can run Docker commands without sudo
add_user_to_docker_group() {
log_message "Checking Docker group..."
# Check if docker group exists
if ! getent group docker >/dev/null 2>&1; then
log_message "Docker group does not exist. Creating it..."
run_command "sudo groupadd docker"
log_message "Adding user to Docker group..."
run_command "sudo usermod -aG docker $USER"
run_command "newgrp docker" # Apply new group membership without logout
else
# If group exists, check if user is already a member
if ! getent group docker | grep -q "\b${USER}\b"; then
log_message "Adding user to Docker group..."
run_command "sudo usermod -aG docker $USER"
run_command "newgrp docker" # Apply new group membership without logout
else
log_message "User already belongs to Docker group"
fi
fi
}
setup-git-hooks() {
chmod +x hooks/pre-commit
chmod +x hooks/pre-push
git config core.hooksPath hooks
}
setup-env-variables() {
cp ./Api/.env.dist ./Api/.env.local
cp ./Api/.env.test ./Api/.env.test.local
cp ./App/.env.dist ./App/.env
cp ./Eternaltwin/eternaltwin.toml ./Eternaltwin/eternaltwin.local.toml
}
build-docker-images() {
docker compose -f docker/docker-compose.yml -f docker/docker-compose.dev.yml build
docker compose -f docker/docker-compose.yml -f docker/docker-compose.dev.yml run -T -u root mush-front chown -R node:node /www
docker compose -f docker/docker-compose.yml -f docker/docker-compose.dev.yml run -T -u root mush-eternaltwin chown -R node:node /www
docker compose -f docker/docker-compose.yml -f docker/docker-compose.dev.yml run -T -u root mush-php chown -R dev:dev /www
docker compose -f docker/docker-compose.yml -f docker/docker-compose.dev.yml up --no-start --remove-orphans
}
install-api() {
docker compose -f docker/docker-compose.yml run -T -u dev mush-php composer install &&\
docker compose -f docker/docker-compose.yml run -T -u dev mush-php ./reset.sh --init
}
install-front() {
docker compose -f docker/docker-compose.yml run -T -u node mush-front yarn install &&\
docker compose -f docker/docker-compose.yml run -T -u node mush-front ./reset.sh
}
install-eternaltwin() {
docker compose -f docker/docker-compose.yml run -T -u node mush-eternaltwin yarn install
docker compose -f docker/docker-compose.yml run -T -u node mush-eternaltwin yarn etwin db reset
docker compose -f docker/docker-compose.yml run -T -u node mush-eternaltwin yarn etwin db sync
}
setup-JWT-certificates() {
docker compose -f docker/docker-compose.yml run -T -u dev mush-php openssl genpkey -pass pass:mush -out config/jwt/private.pem -aes256 -algorithm rsa -pkeyopt rsa_keygen_bits:4096
docker compose -f docker/docker-compose.yml run -T -u dev mush-php openssl pkey -passin pass:mush -in config/jwt/private.pem -out config/jwt/public.pem -pubout
docker compose -f docker/docker-compose.yml run -T -u dev mush-php chmod go+r config/jwt/private.pem
}
reset-eternaltwin-database() {
docker compose -f docker/docker-compose.yml run -T -u node mush-eternaltwin yarn etwin db reset
docker compose -f docker/docker-compose.yml run -T -u node mush-eternaltwin yarn etwin db sync
}
start-docker-containers() {
docker compose -f docker/docker-compose.yml up -d --no-recreate --remove-orphans
}
sleep-ten-seconds() {
sleep 10
}
fill-daedalus() {
docker compose -f docker/docker-compose.yml run -T -u dev mush-php php bin/console mush:fill-daedalus
}
# Function to install project
install_project() {
log_message "Installing project..."
setup-git-hooks
setup-env-variables
build-docker-images
install-api
install-front
install-eternaltwin
setup-JWT-certificates
reset-eternaltwin-database
start-docker-containers
sleep-ten-seconds
fill-daedalus
echo "Installation completed successfully ! You can access it at http://localhost/."
echo "Use the following credentials to login:"
echo "username: chun"
echo "password: 1234567891"
}
run() {
install_docker_dependencies
install_docker
add_user_to_docker_group
install_project
}
run