Skip to content

Commit c494bde

Browse files
author
root
committed
refactor(docker): use ADMIN_USER/ADMIN_PASSWORD env vars for flexible admin account
- Add ADMIN_USER and ADMIN_PASSWORD to .env (default: websoft9) - Remove ADMIN_PASSWORD from Dockerfile ENV (security: avoid baking into image) - Update entrypoint.sh to create/update admin user dynamically - Fix log directory permissions for dynamic admin user - Update supervisord.conf to run apphub as %(ENV_ADMIN_USER)s - Add story4.2 implementation artifact
1 parent 1dfcdb0 commit c494bde

5 files changed

Lines changed: 682 additions & 7 deletions

File tree

docker/cockpit/.env

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
# Websoft9 Cockpit Container Configuration
2+
# This file is used by docker-compose.yml
3+
4+
# Container name
5+
CONTAINER_NAME=websoft9-cockpit
6+
7+
# Port mappings
8+
HTTP_PORT=9091
9+
10+
# Image
11+
IMAGE_TAG=latest
12+
13+
# Volumes
14+
COMPOSE_DATA_PATH=/data/compose
15+
PORTAINER_DATA_VOLUME=cockpit_portainer_data
16+
17+
# Restart policy
18+
RESTART_POLICY=unless-stopped
19+
20+
# Admin credentials (can be customized)
21+
ADMIN_USER=websoft9
22+
ADMIN_PASSWORD=websoft9

docker/cockpit/Dockerfile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ COPY plugins/appstore/build /usr/share/cockpit/appstore
5050
COPY plugins/backup/build /usr/share/cockpit/backup
5151
COPY plugins/gitea/build /usr/share/cockpit/gitea
5252
COPY plugins/myapps/build /usr/share/cockpit/myapps
53-
COPY plugins/navigator/build /usr/share/cockpit/navigator
53+
COPY plugins/cockpit-files/dist /usr/share/cockpit/cockpit-files
5454
COPY plugins/nginx/build /usr/share/cockpit/nginx
5555
COPY plugins/portainer/build /usr/share/cockpit/portainer
5656
COPY plugins/settings/build /usr/share/cockpit/settings
@@ -102,7 +102,10 @@ RUN sed -i 's/#PasswordAuthentication yes/PasswordAuthentication yes/' /etc/ssh/
102102
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config && \
103103
ssh-keygen -A
104104

105-
# 创建默认管理员账户(容器内认证用,用于 Cockpit 认证)
105+
# 环境变量:默认管理员用户名(密码通过运行时环境变量传递)
106+
ENV ADMIN_USER=websoft9
107+
108+
# 创建默认管理员账户(容器启动时会用环境变量覆盖)
106109
RUN useradd -m -s /bin/bash -G sudo websoft9 && \
107110
echo "websoft9:websoft9" | chpasswd && \
108111
echo "websoft9 ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

docker/cockpit/entrypoint.sh

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,29 @@
11
#!/bin/bash
22
set -e
33

4+
# 使用环境变量设置管理员账户(默认值在 Dockerfile 中定义)
5+
ADMIN_USER=${ADMIN_USER:-websoft9}
6+
ADMIN_PASSWORD=${ADMIN_PASSWORD:-websoft9}
7+
8+
# 确保管理员用户存在并更新密码
9+
if ! id "$ADMIN_USER" &>/dev/null; then
10+
echo "Creating admin user: $ADMIN_USER"
11+
useradd -m -s /bin/bash -G sudo "$ADMIN_USER"
12+
fi
13+
echo "$ADMIN_USER:$ADMIN_PASSWORD" | chpasswd
14+
echo "$ADMIN_USER ALL=(ALL) NOPASSWD:ALL" | tee /etc/sudoers.d/$ADMIN_USER > /dev/null
15+
chmod 0440 /etc/sudoers.d/$ADMIN_USER
16+
417
# 创建必要的运行时目录
518
mkdir -p /run/dbus /run/cockpit /run/sshd /var/log/supervisor /var/log/nginx /portainer_data /data/compose
619
mkdir -p /var/lib/gitea/{custom,data,log,data/gitea-repositories,data/sessions,data/avatars,data/repo-avatars,data/attachments}
720
mkdir -p /websoft9/apphub/logs /websoft9/apphub/src/config
21+
mkdir -p /home/$ADMIN_USER/logs
22+
23+
# 确保日志目录权限正确(使用管理员用户)
24+
chown -R "$ADMIN_USER:$ADMIN_USER" /websoft9/apphub/logs /home/$ADMIN_USER/logs
25+
chmod -R 755 /websoft9/apphub/logs /home/$ADMIN_USER/logs
26+
827
rm -f /run/dbus/pid /var/run/dbus/pid
928

1029
# Run service initialization script
@@ -16,9 +35,9 @@ chown -R git:git /var/lib/gitea /etc/gitea 2>/dev/null || true
1635

1736
# 初始化 Gitea 管理员账户(仅首次运行)
1837
if [ ! -f /var/lib/gitea/.initialized ]; then
19-
echo "Initializing Gitea admin user..."
38+
echo "Initializing Gitea admin user: $ADMIN_USER"
2039
# 等待 Gitea 数据库初始化(在后台启动后)
21-
(sleep 15 && su -c '/usr/local/bin/gitea admin user create --admin --username websoft9 --password websoft9 --email admin@websoft9.com --config /etc/gitea/app.ini 2>/dev/null || true' git && touch /var/lib/gitea/.initialized) &
40+
(sleep 15 && su -c "/usr/local/bin/gitea admin user create --admin --username $ADMIN_USER --password $ADMIN_PASSWORD --email admin@websoft9.com --config /etc/gitea/app.ini 2>/dev/null || true" git && touch /var/lib/gitea/.initialized) &
2241
fi
2342

2443
# 确保 dbus 系统目录存在
@@ -44,7 +63,7 @@ chmod 644 /etc/cockpit/cockpit.conf 2>/dev/null || true
4463
nginx -t
4564

4665
echo "=== Websoft9 Console Starting ==="
47-
echo "Cockpit: http://localhost/ (websoft9/websoft9)"
66+
echo "Cockpit: http://localhost/ ($ADMIN_USER/$ADMIN_PASSWORD)"
4867
echo "Portainer: http://localhost/w9deployment/"
4968
echo "Gitea: http://localhost/w9git/"
5069
echo "Apphub: http://localhost/w9api/"

docker/cockpit/supervisord.conf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,7 @@ directory=/websoft9/apphub
8282
priority=40
8383
autostart=true
8484
autorestart=true
85-
user=root
85+
user=%(ENV_ADMIN_USER)s
8686
stdout_logfile=/var/log/supervisor/apphub.log
8787
stderr_logfile=/var/log/supervisor/apphub-error.log
8888
stdout_logfile_maxbytes=10MB
@@ -93,7 +93,7 @@ command=cron -f
9393
priority=42
9494
autostart=true
9595
autorestart=true
96-
user=root
96+
user=%(ENV_ADMIN_USER)s
9797
stdout_logfile=/var/log/supervisor/apphub-cron.log
9898
stderr_logfile=/var/log/supervisor/apphub-cron-error.log
9999
stdout_logfile_maxbytes=10MB

0 commit comments

Comments
 (0)