Skip to content

Commit 274bfd7

Browse files
committed
patch: Change env var mysql to mariadb based. Add secrets generation script for K8s. Improve K8s configuration
1 parent 223bf2b commit 274bfd7

33 files changed

Lines changed: 346 additions & 196 deletions

.env_example

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ SERVER_IP='127.0.0.1'
88

99
## SECRETS
1010
# DB
11-
MYSQLROOTPASSWORD='' # Database root user password
11+
MARIADB_ROOT_PASSWORD='' # Database root user password
1212

13-
MYSQLDATABASE='zotprimeprod' # Database name
14-
MYSQLUSER='' # Database user name i.e. 'zotprimeprod'
15-
MYSQLPASSWORD='' # Database user password
13+
MARIADB_DATABASE='zotprimeprod' # Database name
14+
MARIADB_USER='' # Database user name i.e. 'zotprimeprod'
15+
MARIADB_PASSWORD='' # Database user password
1616

1717

1818
# MinIO

.gitignore

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,9 @@ docker-compose-test.yml
1010
**/cred.json
1111
.vscode/
1212

13+
# Credentials
14+
**/credentials.txt
15+
1316
# Next.js / TypeScript
1417
node_modules
1518
.next

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,7 @@ The system will automatically initialize databases and services on first startup
8888
All credentials are configured in the `.env` file:
8989
- **Zotero API**: `ADMIN_USERNAME` / `ADMIN_PASSWORD`
9090
- **S3 Web UI**: `MINIOROOTUSER` / `MINIOROOTPASSWORD`
91-
- **PHPMyAdmin**: `root` / `MYSQLROOTPASSWORD`
91+
- **PHPMyAdmin**: `root` / `MARIADB_ROOT_PASSWORD`
9292

9393
---
9494

@@ -210,7 +210,7 @@ Check the `ADDRESS` column and setup A records in your DNS hosting.
210210
Credentials are configured in the `.env` file:
211211
- **Zotero API**: `ADMIN_USERNAME` / `ADMIN_PASSWORD`
212212
- **S3 Web UI**: `MINIOROOTUSER` / `MINIOROOTPASSWORD`
213-
- **PHPMyAdmin**: `root` / `MYSQLROOTPASSWORD`
213+
- **PHPMyAdmin**: `root` / `MARIADB_ROOT_PASSWORD`
214214

215215
---
216216

bin/install.sh

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -40,9 +40,9 @@ then
4040

4141
# Generate secrets
4242
echo "Generating secrets..."
43-
MYSQLROOTPASSWORD=$(openssl rand -hex 16)
44-
MYSQLUSER="zotprimeprod"
45-
MYSQLPASSWORD=$(openssl rand -hex 16)
43+
MARIADB_ROOT_PASSWORD=$(openssl rand -hex 16)
44+
MARIADB_USER="zotprimeprod"
45+
MARIADB_PASSWORD=$(openssl rand -hex 16)
4646
MINIOROOTUSER="zotprimeminio"
4747
MINIOROOTPASSWORD=$(openssl rand -hex 16)
4848
API_SUPER_TOKEN=$(openssl rand -hex 32)
@@ -58,9 +58,9 @@ then
5858
PORTAL_SESSION_SECRET=$(openssl rand -hex 32)
5959

6060
# Update .env (use printf to preserve $ characters in bcrypt hashes)
61-
printf "s#MYSQLROOTPASSWORD=''#MYSQLROOTPASSWORD='%s'#g\n" "$MYSQLROOTPASSWORD" | sed -i -f - .env
62-
printf "s#MYSQLUSER=''#MYSQLUSER='%s'#g\n" "$MYSQLUSER" | sed -i -f - .env
63-
printf "s#MYSQLPASSWORD=''#MYSQLPASSWORD='%s'#g\n" "$MYSQLPASSWORD" | sed -i -f - .env
61+
printf "s#MARIADB_ROOT_PASSWORD=''#MARIADB_ROOT_PASSWORD='%s'#g\n" "$MARIADB_ROOT_PASSWORD" | sed -i -f - .env
62+
printf "s#MARIADB_USER=''#MARIADB_USER='%s'#g\n" "$MARIADB_USER" | sed -i -f - .env
63+
printf "s#MARIADB_PASSWORD=''#MARIADB_PASSWORD='%s'#g\n" "$MARIADB_PASSWORD" | sed -i -f - .env
6464
printf "s#MINIOROOTUSER=''#MINIOROOTUSER='%s'#g\n" "$MINIOROOTUSER" | sed -i -f - .env
6565
printf "s#MINIOROOTPASSWORD=''#MINIOROOTPASSWORD='%s'#g\n" "$MINIOROOTPASSWORD" | sed -i -f - .env
6666
printf "s#API_SUPER_TOKEN=''#API_SUPER_TOKEN='%s'#g\n" "$API_SUPER_TOKEN" | sed -i -f - .env
@@ -93,7 +93,7 @@ then
9393
echo ""
9494
echo "PHPMyAdmin:"
9595
echo " Username: root"
96-
echo " Password: $MYSQLROOTPASSWORD"
96+
echo " Password: $MARIADB_ROOT_PASSWORD"
9797
echo ""
9898
echo "=========================================="
9999
echo ""

docker-compose.yml

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,15 @@ services:
33
image: "uniuu/zotprime-db:${VER}"
44
restart: always
55
environment:
6-
- MARIADB_ROOT_PASSWORD=${MYSQLROOTPASSWORD}
7-
- MARIADB_DATABASE=${MYSQLDATABASE}
8-
- MARIADB_USER=${MYSQLUSER}
9-
- MARIADB_PASSWORD=${MYSQLPASSWORD}
6+
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
7+
- MARIADB_DATABASE=${MARIADB_DATABASE}
8+
- MARIADB_USER=${MARIADB_USER}
9+
- MARIADB_PASSWORD=${MARIADB_PASSWORD}
1010
volumes:
1111
- dbdata:/var/lib/mysql
1212
- /etc/localtime:/etc/localtime:ro
1313
healthcheck:
14-
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-p${MYSQLROOTPASSWORD}"]
14+
test: ["CMD", "mariadb-admin", "ping", "-h", "localhost", "-p${MARIADB_ROOT_PASSWORD}"]
1515
interval: 5s
1616
timeout: 3s
1717
retries: 10
@@ -116,8 +116,8 @@ services:
116116
- S3_PUBLIC_ENDPOINT=http://${SERVER_IP}:9000
117117
- AUTH_SALT=${AUTH_SALT}
118118
- API_SUPER_TOKEN_HASH=${API_SUPER_TOKEN_HASH}
119-
- MYSQLUSER=${MYSQLUSER}
120-
- MYSQLPASSWORD=${MYSQLPASSWORD}
119+
- MARIADB_USER=${MARIADB_USER}
120+
- MARIADB_PASSWORD=${MARIADB_PASSWORD}
121121
- MINIO_ROOT_USER=${MINIOROOTUSER}
122122
- MINIO_ROOT_PASSWORD=${MINIOROOTPASSWORD}
123123
depends_on:
@@ -202,10 +202,10 @@ services:
202202
command: ["/auto-init.sh"]
203203
restart: "no"
204204
environment:
205-
- MYSQLROOTPASSWORD=${MYSQLROOTPASSWORD}
206-
- MYSQLDATABASE=${MYSQLDATABASE}
207-
- MYSQLUSER=${MYSQLUSER}
208-
- MYSQLPASSWORD=${MYSQLPASSWORD}
205+
- MARIADB_ROOT_PASSWORD=${MARIADB_ROOT_PASSWORD}
206+
- MARIADB_DATABASE=${MARIADB_DATABASE}
207+
- MARIADB_USER=${MARIADB_USER}
208+
- MARIADB_PASSWORD=${MARIADB_PASSWORD}
209209
- AUTH_SALT=${AUTH_SALT}
210210
- API_SUPER_TOKEN_HASH=${API_SUPER_TOKEN_HASH}
211211
- MINIO_ROOT_USER=${MINIOROOTUSER}

docs/K8s/MICROK8S.md

Lines changed: 28 additions & 82 deletions
Original file line numberDiff line numberDiff line change
@@ -23,112 +23,58 @@ kubectl apply -f clusterissuer.yaml
2323

2424
```bash
2525
cd zotprime-k8s/microk8s/helm-chart
26-
cp values-example.yaml values.yaml
2726
```
2827

29-
### 2. Configure TLS
28+
### 2. Generate Secrets
3029

31-
Edit `values.yaml`:
32-
33-
```yaml
34-
tls:
35-
enabled: false # Set true for HTTPS
36-
```
37-
38-
### 3. Configure Credentials
39-
40-
Generate auth secrets:
30+
**Automated (Recommended):**
4131

32+
Linux/Mac:
4233
```bash
43-
# Auth salt
44-
openssl rand -hex 16 | base64
45-
46-
# API super token hash
47-
php -r "echo password_hash('YOUR_TOKEN', PASSWORD_BCRYPT);" | base64
34+
cd ../scripts
35+
./generate-secrets.py
4836
```
4937

50-
Generate base64-encoded secrets:
51-
52-
**Linux/Mac:**
38+
Windows (WSL):
5339
```bash
54-
echo "MINIO_ROOT_PASSWORD=your_password" | base64
55-
printf "MARIADB_ROOT_PASSWORD=root_pass\nMARIADB_PASSWORD=user_pass" | base64
40+
cd ../scripts
41+
wsl ./generate-secrets.py
5642
```
5743

58-
**Windows PowerShell:**
59-
```powershell
60-
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("MINIO_ROOT_PASSWORD=your_password"))
61-
[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes("MARIADB_ROOT_PASSWORD=root_pass`nMARIADB_PASSWORD=user_pass"))
62-
```
63-
64-
Edit `values.yaml`:
65-
66-
```yaml
67-
authSecret:
68-
authSalt: "<base64_output>"
69-
apiSuperTokenHash: "<base64_output>"
70-
71-
minioSecret:
72-
minioRootPassword: "<base64_password>"
73-
74-
dbSecret:
75-
mysqlRootPassword: "<base64_password>"
76-
mysqlPassword: "<base64_password>"
77-
78-
dbConfig:
79-
mariadbUser: your_db_user
80-
mariadbDatabasename: your_db_name
81-
82-
zoteroAdmin:
83-
adminUsername: admin
84-
adminPassword: admin
85-
adminEmail: admin@example.com
86-
```
87-
88-
### 3a. Configure Basic Auth
89-
90-
Protect PHPMyAdmin and MinIO web console with HTTP Basic Authentication. This adds a second layer of security at the ingress level before reaching the application's own authentication.
91-
92-
**Install htpasswd:**
93-
94-
Linux:
44+
Requires: `python3-yaml` package
9545
```bash
96-
sudo apt install apache2-utils
46+
sudo apt install python3-yaml
9747
```
9848

99-
Mac:
100-
```bash
101-
brew install httpd
102-
```
49+
**Manual:**
10350

104-
Windows (WSL):
51+
Copy template and edit all empty `""` fields:
10552
```bash
106-
wsl --install
107-
wsl sudo apt install apache2-utils
53+
cp values-example.yaml values.yaml
10854
```
10955

110-
**Generate password hash:**
56+
Populate in `values.yaml`:
57+
- `authSecret` (authSalt, apiSuperToken, apiSuperTokenHash, appKey)
58+
- `webAdminConfig` (username)
59+
- `webAdminSecret` (password)
60+
- `minioSecret` (secretTxt)
61+
- `blobSecret` (awsAccessKeyId, awsSecretAccessKey)
62+
- `dbSecret` (mariadbRootPassword, mariadbPassword)
63+
- `zoteroSecret` (adminPassword)
64+
- `webPortalSecret` (sessionSecret)
65+
- `basicAuth` (htpasswd, if enabled)
11166

112-
Linux/Mac:
113-
```bash
114-
htpasswd -nb admin yourpassword | base64
115-
```
67+
See `values-example.yaml` comments for generation commands.
11668

117-
Windows (WSL):
118-
```bash
119-
wsl htpasswd -nb admin yourpassword | base64
120-
```
69+
### 3. Configure TLS
12170

122-
**Edit `values.yaml`:**
71+
Edit `values.yaml`:
12372

12473
```yaml
125-
basicAuth:
126-
enabled: true
127-
htpasswd: "<base64_output>"
74+
tls:
75+
enabled: false # Set true for HTTPS
12876
```
12977
130-
Users will authenticate twice: first at ingress (basic auth), then at application login (PHPMyAdmin/MinIO credentials).
131-
13278
### 4. Configure Domains
13379
13480
Edit `values.yaml` - replace all `yoursub*.yourdomain.tld`:

stack/dataserver/config/dbconnect.inc.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ function Zotero_dbConnectAuth($db) {
44

55
$host = 'mysql';
66
$port = 3306;
7-
$user = getenv('MYSQLUSER');
8-
$pass = getenv('MYSQLPASSWORD');
7+
$user = getenv('MARIADB_USER');
8+
$pass = getenv('MARIADB_PASSWORD');
99

1010
if (!$user || !$pass) {
11-
throw new Exception("MYSQLUSER and MYSQLPASSWORD must be set");
11+
throw new Exception("MARIADB_USER and MARIADB_PASSWORD must be set");
1212
}
1313

1414
if ($db == 'master') {
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
#!/bin/sh
22
set -uex
33

4-
MYSQL="mariadb -h mysql -P 3306 -u root -p${MYSQLROOTPASSWORD}"
4+
MYSQL="mariadb -h mysql -P 3306 -u root -p${MARIADB_ROOT_PASSWORD}"
55
echo "ALTER TABLE libraries ADD hasData TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER version , ADD INDEX ( hasData )" | $MYSQL zotero_master
66
echo "UPDATE libraries SET hasData=1 WHERE version > 0 OR lastUpdated != '0000-00-00 00:00:00'" | $MYSQL zotero_master
77
echo "ALTER TABLE libraries DROP COLUMN lastUpdated, DROP COLUMN version" | $MYSQL zotero_master

stack/dataserver/dbconfig/db_update2.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ for i in db-updates/*/; do
55
cd /var/www/zotero/misc/$i
66
for j in *; do
77
find . -type f \( ! -name *.sql \) -exec php {} \;
8-
find . -type f -name *.sql -exec bash -c 'mariadb -h mysql -P 3306 -u root -p${MYSQLROOTPASSWORD} zotero_master < {}' \;
8+
find . -type f -name *.sql -exec bash -c 'mariadb -h mysql -P 3306 -u root -p${MARIADB_ROOT_PASSWORD} zotero_master < {}' \;
99
done
1010
done;
1111
cd ../../

stack/dataserver/dbconfig/init-mysql.sh

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
set -ux
44

55

6-
MYSQL="mariadb -h mysql -P 3306 -u root -p${MYSQLROOTPASSWORD}"
6+
MYSQL="mariadb -h mysql -P 3306 -u root -p${MARIADB_ROOT_PASSWORD}"
77

88
echo "DROP DATABASE IF EXISTS zotero_master" | $MYSQL
99
echo "DROP DATABASE IF EXISTS zotero_shard_1" | $MYSQL
@@ -56,10 +56,10 @@ echo "INSERT INTO shardLibraries VALUES (2, 'group', '0000-00-00 00:00:00', 0, 0
5656
$MYSQL zotero_ids < ids.sql
5757

5858
# Grant permissions to application user
59-
echo "GRANT ALL PRIVILEGES ON zotero_master.* TO '${MYSQLUSER}'@'%'" | $MYSQL
60-
echo "GRANT ALL PRIVILEGES ON zotero_shard_1.* TO '${MYSQLUSER}'@'%'" | $MYSQL
61-
echo "GRANT ALL PRIVILEGES ON zotero_shard_2.* TO '${MYSQLUSER}'@'%'" | $MYSQL
62-
echo "GRANT ALL PRIVILEGES ON zotero_ids.* TO '${MYSQLUSER}'@'%'" | $MYSQL
63-
echo "GRANT ALL PRIVILEGES ON zotero_www.* TO '${MYSQLUSER}'@'%'" | $MYSQL
59+
echo "GRANT ALL PRIVILEGES ON zotero_master.* TO '${MARIADB_USER}'@'%'" | $MYSQL
60+
echo "GRANT ALL PRIVILEGES ON zotero_shard_1.* TO '${MARIADB_USER}'@'%'" | $MYSQL
61+
echo "GRANT ALL PRIVILEGES ON zotero_shard_2.* TO '${MARIADB_USER}'@'%'" | $MYSQL
62+
echo "GRANT ALL PRIVILEGES ON zotero_ids.* TO '${MARIADB_USER}'@'%'" | $MYSQL
63+
echo "GRANT ALL PRIVILEGES ON zotero_www.* TO '${MARIADB_USER}'@'%'" | $MYSQL
6464
echo "FLUSH PRIVILEGES" | $MYSQL
6565

0 commit comments

Comments
 (0)