
agross/hub该Dockerfile允许构建用于部署自己的Hub实例的镜像。已在Fedora 23和CentOS 7上测试通过。
请记住经常备份数据目录,尤其是在升级到新版本之前。
shdocker run -it -p 8080:8080 agross/hub
http://localhost:8080。确定Hub数据和日志的存储位置,设置域名/服务器名和公共端口:
shHUB_DATA="/var/data/hub" HUB_LOGS="/var/log/hub" DOMAIN=example.com PORT=8010
在容器外部创建用于存储数据和日志的目录:
shmkdir --parents "$HUB_DATA/backups" \ "$HUB_DATA/conf" \ "$HUB_DATA/data" \ "$HUB_LOGS"
Dockerfile会创建hub用户和组,其UID和GID均为4000。需在主机系统添加具有此UID和GID的用户,并允许该用户读写$HUB_DATA和$HUB_LOGS目录。主机用户和组的名称不重要:
sh# 在Docker主机创建hub组和用户,例如: groupadd --gid 4000 --system hub useradd --uid 4000 --gid 4000 --system --shell /sbin/nologin --comment "JetBrains Hub" hub # 4000是Dockerfile创建的hub用户和组的ID chown -R 4000:4000 "$HUB_DATA" "$HUB_LOGS"
注意: 卷挂载中的:z选项确保目录的SELinux上下文被正确设置。
需要绑定挂载/etc/localtime以使用与Docker主机相同的时区:
shdocker create -it -p $PORT:8080 \ -v /etc/localtime:/etc/localtime:ro \ -v "$HUB_DATA/backups:/hub/backups:z" \ -v "$HUB_DATA/conf:/hub/conf:z" \ -v "$HUB_DATA/data:/hub/data:z" \ -v "$HUB_LOGS:/hub/logs:z" \ --name hub \ agross/hub
创建/etc/systemd/system/hub.service:
shcat <<EOF > "/etc/systemd/system/hub.service" [Unit] Description=JetBrains Hub Requires=docker.service After=docker.service [Service] Restart=always # 当执行docker stop时,docker-entrypoint.sh的trap+wait组合会生成143的退出状态码(128+15,即SIGTERM) # 更多信息:[***] SuccessExitStatus=143 PrivateTmp=true ExecStart=/usr/bin/docker start --attach=true hub ExecStop=/usr/bin/docker stop --time=60 hub [Install] WantedBy=multi-user.target EOF systemctl enable hub.service systemctl start hub.service
创建/etc/logrotate.d/hub:
shcat <<EOF > "/etc/logrotate.d/hub" $HUB_LOGS/*.log $HUB_LOGS/dashboard/*.log $HUB_LOGS/hub/*.log $HUB_LOGS/hub/logs/*.log $HUB_LOGS/internal/services/bundleProcess/*.log $HUB_LOGS/project-wizard/*.log { rotate 7 daily dateext missingok notifempty sharedscripts copytruncate compress } EOF
创建/etc/nginx/conf.d/hub.conf:
shcat <<EOF > "/etc/nginx/conf.d/hub.conf" upstream hub { server localhost:$PORT; } server { listen 80; listen [::]:80; server_name $DOMAIN; access_log /var/log/nginx/$DOMAIN.access.log; error_log /var/log/nginx/$DOMAIN.error.log; # 不限制上传大小 client_max_body_size 0; # 避免HTTP 411错误:参见issue #1486 ([***] chunked_transfer_encoding on; location / { proxy_pass [***] proxy_set_header Host \$host; proxy_set_header X-Real-IP \$remote_addr; proxy_set_header X-Forwarded-Host \$http_host; proxy_set_header X-Forwarded-For \$proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto \$scheme; proxy_http_version 1.1; } } EOF nginx -s reload
确保SELinux策略允许Nginx访问端口$PORT(步骤3中-p $PORT:8080的第一部分):
shif [ $(semanage port --list | grep --count "^http_port_t.*$PORT") -eq 0 ]; then if semanage port --add --type http_port_t --proto tcp $PORT; then echo Added port $PORT as a valid port for nginx: semanage port --list | grep ^http_port_t else >&2 echo Could not add port $PORT as a valid port for nginx. Please add it yourself. More information: [***] fi else echo Port $PORT is already a valid port for nginx: semanage port --list | grep ^http_port_t fi
按照JetBrains Hub安装说明的步骤进行配置,使用容器内的以下路径:
/hub/backups/hub/data/hub/logs/hub/tempshdocker pull agross/hub systemctl stop hub.service # 备份$HUB_DATA tar -zcvf "hub-data-$(date +%F-%H-%M-%S).tar.gz" "$HUB_DATA" docker rm hub # 重复步骤4创建新镜像 docker create ... systemctl start hub.service
shdocker build --tag agross/hub:testing . docker images # 应包含: # REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE # agross/hub testing 0dcb8bf6093f 49 seconds ago 405.4 MB
shTEST_DIR="/tmp/hub-testing" mkdir --parents "$TEST_DIR/backups" \ "$TEST_DIR/conf" \ "$TEST_DIR/data" \ "$TEST_DIR/logs" chown -R 4000:4000 "$TEST_DIR"
注意: 卷挂载中的:z选项确保目录的SELinux上下文被正确设置。
shdocker run -it --rm \ --name hub-testing \ -p 8080:8080 \ -v "$TEST_DIR/backups:/hub/backups:z" \ -v "$TEST_DIR/conf:/hub/conf:z" \ -v "$TEST_DIR/data:/hub/data:z" \ -v "$TEST_DIR/logs:/hub/logs:z" \ agross/hub:testing
shdocker exec -it hub-testing bash
注意: 卷挂载中的:z选项确保目录的SELinux上下文被正确设置。
shdocker run -it -v "$TEST_DIR/backups:/hub/backups:z" \ -v "$TEST_DIR/conf:/hub/conf:z" \ -v "$TEST_DIR/data:/hub/data:z" \ -v "$TEST_DIR/logs:/hub/logs:z" \ agross/hub:testing bash
不挂载数据目录:
shdocker run -it agross/hub:testing bash
shdocker ps -aq --no-trunc --filter ancestor=agross/hub:testing | xargs --no-run-if-empty docker rm docker images -q --no-trunc agross/hub:testing | xargs --no-run-if-empty docker rmi rm -rf "$TEST_DIR"

manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务