Skip to content

Commit 6e45f4c

Browse files
Copilotnexusct
andcommitted
Add installer scripts for Odoo, Shopify CLI, Contentful CLI, Strapi, and React Bricks CMS
Co-authored-by: nexusct <19503275+nexusct@users.noreply.github.com> Agent-Logs-Url: https://github.com/nexusct/1Panel/sessions/1b017fed-a2d6-4ac9-b287-80226f2549de
1 parent 37aebdb commit 6e45f4c

File tree

6 files changed

+380
-0
lines changed

6 files changed

+380
-0
lines changed

ci/install_contentful.sh

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
#!/bin/bash
2+
# Contentful CLI Installer
3+
# npm package: contentful-cli
4+
5+
set -e
6+
7+
RED='\033[0;31m'
8+
GREEN='\033[0;32m'
9+
YELLOW='\033[0;33m'
10+
BLUE='\033[0;34m'
11+
NC='\033[0m'
12+
13+
log_info() { echo -e "${BLUE}[Contentful CLI] $1${NC}"; }
14+
log_ok() { echo -e "${GREEN}[Contentful CLI] $1${NC}"; }
15+
log_warn() { echo -e "${YELLOW}[Contentful CLI] $1${NC}"; }
16+
log_err() { echo -e "${RED}[Contentful CLI] $1${NC}"; }
17+
18+
check_node() {
19+
if ! command -v node >/dev/null 2>&1; then
20+
log_err "Node.js is required but not found. Please install Node.js LTS first."
21+
return 1
22+
fi
23+
log_ok "Node.js $(node --version) detected."
24+
}
25+
26+
install_contentful_cli() {
27+
log_info "Installing Contentful CLI..."
28+
29+
if command -v contentful >/dev/null 2>&1; then
30+
log_warn "Contentful CLI already installed ($(contentful --version 2>/dev/null || echo 'unknown')). Skipping."
31+
return 0
32+
fi
33+
34+
if npm install -g contentful-cli; then
35+
log_ok "Contentful CLI installed successfully."
36+
log_info " Run 'contentful login' to authenticate."
37+
log_info " Docs: https://www.contentful.com/developers/docs/tutorials/cli/"
38+
log_info " npm: https://www.npmjs.com/package/contentful-cli"
39+
else
40+
log_err "Failed to install Contentful CLI."
41+
return 1
42+
fi
43+
}
44+
45+
check_node && install_contentful_cli

ci/install_odoo.sh

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
#!/bin/bash
2+
# Odoo Installer
3+
# Supports: Docker (default) or native deb/rpm package install
4+
5+
set -e
6+
7+
RED='\033[0;31m'
8+
GREEN='\033[0;32m'
9+
YELLOW='\033[0;33m'
10+
BLUE='\033[0;34m'
11+
NC='\033[0m'
12+
13+
ODOO_VERSION="${ODOO_VERSION:-17}"
14+
ODOO_PORT="${ODOO_PORT:-8069}"
15+
DB_PASSWORD="${ODOO_DB_PASSWORD:-$(tr -dc A-Za-z0-9 </dev/urandom | head -c 16)}"
16+
INSTALL_DIR="${ODOO_INSTALL_DIR:-/opt/odoo}"
17+
18+
log_info() { echo -e "${BLUE}[Odoo] $1${NC}"; }
19+
log_ok() { echo -e "${GREEN}[Odoo] $1${NC}"; }
20+
log_warn() { echo -e "${YELLOW}[Odoo] $1${NC}"; }
21+
log_err() { echo -e "${RED}[Odoo] $1${NC}"; }
22+
23+
check_docker() {
24+
if ! command -v docker >/dev/null 2>&1; then
25+
log_err "Docker is not installed. Please install Docker first (the 1Panel installer handles this)."
26+
return 1
27+
fi
28+
log_ok "Docker detected: $(docker --version)"
29+
}
30+
31+
install_odoo_docker() {
32+
log_info "Installing Odoo ${ODOO_VERSION} via Docker..."
33+
34+
if docker ps -a --format '{{.Names}}' | grep -q '^odoo$'; then
35+
log_warn "Odoo container already exists. Skipping."
36+
return 0
37+
fi
38+
39+
# Create data directories
40+
mkdir -p "${INSTALL_DIR}/data" "${INSTALL_DIR}/config" "${INSTALL_DIR}/addons"
41+
42+
# Persist credentials to a restricted file
43+
CREDENTIALS_FILE="${INSTALL_DIR}/credentials.txt"
44+
if [ ! -f "${CREDENTIALS_FILE}" ]; then
45+
install -m 600 /dev/null "${CREDENTIALS_FILE}"
46+
{
47+
echo "Odoo DB User: odoo"
48+
echo "Odoo DB Password: ${DB_PASSWORD}"
49+
} > "${CREDENTIALS_FILE}"
50+
log_info " Credentials saved to: ${CREDENTIALS_FILE}"
51+
fi
52+
53+
# Create a dedicated Docker network for Odoo
54+
if ! docker network ls --format '{{.Name}}' | grep -q '^odoo-net$'; then
55+
log_info "Creating Docker network 'odoo-net'..."
56+
docker network create odoo-net
57+
fi
58+
59+
# Start PostgreSQL container for Odoo
60+
if ! docker ps -a --format '{{.Names}}' | grep -q '^odoo-db$'; then
61+
log_info "Starting PostgreSQL container for Odoo..."
62+
docker run -d \
63+
--name odoo-db \
64+
--restart unless-stopped \
65+
--network odoo-net \
66+
-e POSTGRES_DB=postgres \
67+
-e POSTGRES_PASSWORD="${DB_PASSWORD}" \
68+
-e POSTGRES_USER=odoo \
69+
-v "${INSTALL_DIR}/db:/var/lib/postgresql/data" \
70+
postgres:15
71+
sleep 5
72+
else
73+
log_warn "odoo-db container already exists, reusing."
74+
# Ensure it is on the odoo-net network
75+
docker network connect odoo-net odoo-db 2>/dev/null || true
76+
fi
77+
78+
# Start Odoo container
79+
log_info "Starting Odoo ${ODOO_VERSION} container on port ${ODOO_PORT}..."
80+
docker run -d \
81+
--name odoo \
82+
--restart unless-stopped \
83+
--network odoo-net \
84+
-p "${ODOO_PORT}:8069" \
85+
-e HOST=odoo-db \
86+
-e USER=odoo \
87+
-e PASSWORD="${DB_PASSWORD}" \
88+
-v "${INSTALL_DIR}/data:/var/lib/odoo" \
89+
-v "${INSTALL_DIR}/config:/etc/odoo" \
90+
-v "${INSTALL_DIR}/addons:/mnt/extra-addons" \
91+
"odoo:${ODOO_VERSION}"
92+
93+
log_ok "Odoo ${ODOO_VERSION} installed and running."
94+
log_info " Access Odoo at: http://localhost:${ODOO_PORT}"
95+
log_info " DB User: odoo | DB Password: ${DB_PASSWORD}"
96+
log_info " Data directory: ${INSTALL_DIR}"
97+
log_info " Docs: https://hub.docker.com/_/odoo"
98+
}
99+
100+
install_odoo_package() {
101+
log_info "Installing Odoo ${ODOO_VERSION} via system package..."
102+
103+
if command -v odoo >/dev/null 2>&1; then
104+
log_warn "Odoo is already installed. Skipping."
105+
return 0
106+
fi
107+
108+
if command -v apt-get >/dev/null 2>&1; then
109+
# Debian/Ubuntu
110+
apt-get install -y wget gnupg
111+
wget -q -O - https://nightly.odoo.com/odoo.key | gpg --dearmor -o /usr/share/keyrings/odoo-archive-keyring.gpg
112+
echo "deb [signed-by=/usr/share/keyrings/odoo-archive-keyring.gpg] https://nightly.odoo.com/${ODOO_VERSION}.0/nightly/deb/ ./" \
113+
> /etc/apt/sources.list.d/odoo.list
114+
apt-get update && apt-get install -y odoo
115+
systemctl enable odoo
116+
systemctl start odoo
117+
elif command -v dnf >/dev/null 2>&1; then
118+
# Fedora/RHEL/CentOS
119+
dnf config-manager --add-repo="https://nightly.odoo.com/${ODOO_VERSION}.0/nightly/rpm/odoo.repo"
120+
dnf install -y odoo
121+
systemctl enable odoo
122+
systemctl start odoo
123+
elif command -v yum >/dev/null 2>&1; then
124+
yum-config-manager --add-repo="https://nightly.odoo.com/${ODOO_VERSION}.0/nightly/rpm/odoo.repo"
125+
yum install -y odoo
126+
systemctl enable odoo
127+
systemctl start odoo
128+
else
129+
log_err "Unsupported package manager. Use INSTALL_MODE=docker."
130+
return 1
131+
fi
132+
133+
log_ok "Odoo ${ODOO_VERSION} installed via system package."
134+
log_info " Access Odoo at: http://localhost:8069"
135+
}
136+
137+
main() {
138+
log_info "Starting Odoo installation (version ${ODOO_VERSION})..."
139+
INSTALL_MODE="${INSTALL_MODE:-docker}"
140+
141+
if [ "$INSTALL_MODE" = "docker" ]; then
142+
check_docker && install_odoo_docker
143+
else
144+
install_odoo_package
145+
fi
146+
}
147+
148+
main

ci/install_react_bricks.sh

Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
#!/bin/bash
2+
# React Bricks CMS Installer
3+
# Scaffolds a new React Bricks project using: npx create-reactbricks-app@latest
4+
5+
set -e
6+
7+
RED='\033[0;31m'
8+
GREEN='\033[0;32m'
9+
YELLOW='\033[0;33m'
10+
BLUE='\033[0;34m'
11+
NC='\033[0m'
12+
13+
REACTBRICKS_PROJECT_NAME="${REACTBRICKS_PROJECT_NAME:-my-reactbricks-app}"
14+
REACTBRICKS_INSTALL_DIR="${REACTBRICKS_INSTALL_DIR:-/opt/reactbricks}"
15+
16+
log_info() { echo -e "${BLUE}[React Bricks] $1${NC}"; }
17+
log_ok() { echo -e "${GREEN}[React Bricks] $1${NC}"; }
18+
log_warn() { echo -e "${YELLOW}[React Bricks] $1${NC}"; }
19+
log_err() { echo -e "${RED}[React Bricks] $1${NC}"; }
20+
21+
check_node() {
22+
if ! command -v node >/dev/null 2>&1; then
23+
log_err "Node.js is required but not found. Please install Node.js 18+ first."
24+
return 1
25+
fi
26+
node_major=$(node --version | sed 's/v//' | cut -d. -f1)
27+
if [ "$node_major" -lt 18 ]; then
28+
log_err "Node.js 18+ required (found $(node --version))."
29+
return 1
30+
fi
31+
log_ok "Node.js $(node --version) detected."
32+
}
33+
34+
install_react_bricks() {
35+
log_info "Setting up React Bricks CMS project '${REACTBRICKS_PROJECT_NAME}'..."
36+
37+
TARGET_DIR="${REACTBRICKS_INSTALL_DIR}/${REACTBRICKS_PROJECT_NAME}"
38+
39+
if [ -d "${TARGET_DIR}" ]; then
40+
log_warn "React Bricks project already exists at ${TARGET_DIR}. Skipping."
41+
return 0
42+
fi
43+
44+
mkdir -p "${REACTBRICKS_INSTALL_DIR}"
45+
46+
log_info "Scaffolding React Bricks project at ${TARGET_DIR} (this may take a few minutes)..."
47+
cd "${REACTBRICKS_INSTALL_DIR}"
48+
49+
if npx create-reactbricks-app@latest "${REACTBRICKS_PROJECT_NAME}"; then
50+
log_ok "React Bricks project '${REACTBRICKS_PROJECT_NAME}' created at ${TARGET_DIR}."
51+
log_info " To start: cd ${TARGET_DIR} && npm run dev"
52+
log_info " Docs: https://www.reactbricks.com/docs"
53+
log_info " npm: https://www.npmjs.com/package/react-bricks"
54+
log_info " Note: You will need a React Bricks account and App ID to use the CMS."
55+
else
56+
log_err "Failed to scaffold React Bricks project."
57+
return 1
58+
fi
59+
}
60+
61+
check_node && install_react_bricks

ci/install_shopify.sh

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#!/bin/bash
2+
# Shopify CLI Installer
3+
# npm package: @shopify/cli
4+
5+
set -e
6+
7+
RED='\033[0;31m'
8+
GREEN='\033[0;32m'
9+
YELLOW='\033[0;33m'
10+
BLUE='\033[0;34m'
11+
NC='\033[0m'
12+
13+
log_info() { echo -e "${BLUE}[Shopify CLI] $1${NC}"; }
14+
log_ok() { echo -e "${GREEN}[Shopify CLI] $1${NC}"; }
15+
log_warn() { echo -e "${YELLOW}[Shopify CLI] $1${NC}"; }
16+
log_err() { echo -e "${RED}[Shopify CLI] $1${NC}"; }
17+
18+
check_node() {
19+
if ! command -v node >/dev/null 2>&1; then
20+
log_err "Node.js is required but not found. Please install Node.js 18+ first."
21+
return 1
22+
fi
23+
node_major=$(node --version | sed 's/v//' | cut -d. -f1)
24+
if [ "$node_major" -lt 18 ]; then
25+
log_err "Node.js 18+ required (found $(node --version))."
26+
return 1
27+
fi
28+
log_ok "Node.js $(node --version) detected."
29+
}
30+
31+
install_shopify_cli() {
32+
log_info "Installing Shopify CLI..."
33+
34+
if command -v shopify >/dev/null 2>&1; then
35+
log_warn "Shopify CLI already installed ($(shopify version 2>/dev/null || echo 'unknown')). Skipping."
36+
return 0
37+
fi
38+
39+
if npm install -g @shopify/cli@latest; then
40+
log_ok "Shopify CLI installed successfully."
41+
log_info " Run 'shopify' to get started."
42+
log_info " Docs: https://shopify.dev/docs/api/shopify-cli"
43+
log_info " GitHub: https://github.com/Shopify/cli"
44+
else
45+
log_err "Failed to install Shopify CLI."
46+
return 1
47+
fi
48+
}
49+
50+
check_node && install_shopify_cli

ci/install_strapi.sh

Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
#!/bin/bash
2+
# Strapi CMS Installer
3+
# Scaffolds a new Strapi project using: npx create-strapi@latest
4+
5+
set -e
6+
7+
RED='\033[0;31m'
8+
GREEN='\033[0;32m'
9+
YELLOW='\033[0;33m'
10+
BLUE='\033[0;34m'
11+
NC='\033[0m'
12+
13+
STRAPI_PROJECT_NAME="${STRAPI_PROJECT_NAME:-my-strapi-app}"
14+
STRAPI_INSTALL_DIR="${STRAPI_INSTALL_DIR:-/opt/strapi}"
15+
16+
log_info() { echo -e "${BLUE}[Strapi] $1${NC}"; }
17+
log_ok() { echo -e "${GREEN}[Strapi] $1${NC}"; }
18+
log_warn() { echo -e "${YELLOW}[Strapi] $1${NC}"; }
19+
log_err() { echo -e "${RED}[Strapi] $1${NC}"; }
20+
21+
check_node() {
22+
if ! command -v node >/dev/null 2>&1; then
23+
log_err "Node.js is required but not found. Please install Node.js 18+ first."
24+
return 1
25+
fi
26+
node_major=$(node --version | sed 's/v//' | cut -d. -f1)
27+
if [ "$node_major" -lt 18 ]; then
28+
log_err "Node.js 18+ required (found $(node --version))."
29+
return 1
30+
fi
31+
log_ok "Node.js $(node --version) detected."
32+
}
33+
34+
install_strapi() {
35+
log_info "Setting up Strapi CMS project '${STRAPI_PROJECT_NAME}'..."
36+
37+
TARGET_DIR="${STRAPI_INSTALL_DIR}/${STRAPI_PROJECT_NAME}"
38+
39+
if [ -d "${TARGET_DIR}" ]; then
40+
log_warn "Strapi project already exists at ${TARGET_DIR}. Skipping."
41+
return 0
42+
fi
43+
44+
mkdir -p "${STRAPI_INSTALL_DIR}"
45+
46+
log_info "Scaffolding Strapi project at ${TARGET_DIR} (this may take a few minutes)..."
47+
cd "${STRAPI_INSTALL_DIR}"
48+
49+
# Use --quickstart for SQLite (no extra DB setup needed)
50+
if npx create-strapi@latest "${STRAPI_PROJECT_NAME}" --quickstart --no-run; then
51+
log_ok "Strapi project '${STRAPI_PROJECT_NAME}' created at ${TARGET_DIR}."
52+
log_info " To start Strapi: cd ${TARGET_DIR} && npm run develop"
53+
log_info " Default port: 1337"
54+
log_info " Admin panel: http://localhost:1337/admin"
55+
log_info " Docs: https://docs.strapi.io/cms/installation/cli"
56+
else
57+
log_err "Failed to scaffold Strapi project."
58+
return 1
59+
fi
60+
}
61+
62+
check_node && install_strapi

ci/script.sh

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,17 @@ if [ ! -f "GeoIP.mmdb" ]; then
3838
fi
3939

4040
chmod 755 1pctl install.sh
41+
42+
# Make application installer scripts executable
43+
SCRIPT_DIR="$(dirname "$0")"
44+
for installer in \
45+
install_ai_tools.sh \
46+
install_odoo.sh \
47+
install_shopify.sh \
48+
install_contentful.sh \
49+
install_strapi.sh \
50+
install_react_bricks.sh; do
51+
if [ -f "${SCRIPT_DIR}/${installer}" ]; then
52+
chmod +x "${SCRIPT_DIR}/${installer}"
53+
fi
54+
done

0 commit comments

Comments
 (0)