自用本地服务器拉取harbor镜像部署系统数据库安装在服务器
最开始想达到的效果:服务器拉取镜像打开系统网页
第一步:搭建服务器并用finalshell连接
准备工作:先用VMware安装一个CentOS7虚拟机,并能用连接工具连接。
如果连接不上,可以参考我连接过程中遇到的问题:
问题1:目前还在虚拟机里面,终端执行命令ifconfig,缺少用于 Xshell 连接的物理网卡 IP,如 ens33
问题1处理方法:1、检查 VMware 网络设置
关闭虚拟机,打开 VMware 编辑→虚拟网络编辑器,选择 VMnet8(NAT 模式),确认已启用 DHCP,记录子网、网关,
2、虚拟机设置→网络适配器,选择 “NAT 模式(VMnet8)”,勾选 “已连接” 和 “启动时连接”。3、激活网卡并获取 IP(CentOS 内执行),修改网卡配置:vi /etc/sysconfig/network-scripts/ifcfg-ens33,修改以下参数并保存:
BOOTPROTO=dhcp(或 static)
ONBOOT=yes(开机自动激活)
3、重启网络服务:systemctl restart network
问题2:如果重启网络服务失败,例如:
[root@localhost ~]# systemctl restart network
Job for network.service failed because the control process exited with error code. See "systemctl status network.service" and "journalctl -xe" for details.
问题2处理方法:1、这是 CentOS 7 中网络管理服务冲突或配置异常导致的常见问题,执行systemctl status network.service -l查看 network 服务状态;2、我这里的报错是:12月 30 13:43:00 localhost.localdomain network[3261]: RTNETLINK answers: File exists,RTNETLINK answers: File exists 错误是 CentOS 7 中网络接口(网卡)或路由规则已被占用 / 激活导致的,核心诱因还是 network 服务与 NetworkManager 服务的冲突(后者已提前激活了网卡,前者再尝试启动就会提示 “资源已存在”);3、这里启用并启动 NetworkManager 服务,执行
systemctl enable NetworkManager
systemctl start NetworkManager
4、停止并禁用传统 network 服务(彻底消除冲突),执行
systemctl disable network
systemctl stop network
5、重新加载并激活网卡,执行
# 重新加载网卡配置
nmcli connection reload
# 激活网卡(核心命令,替代 network 服务重启)
nmcli connection up ens33
# 验证网卡连接状态(显示 connected 即为成功)
nmcli connection show ens33
这样操作后,一般就可以用finalshell连接上了。
第二步:在服务器添加文件目录及配置文件
这里根据各自系统需要进行创建和配置
第三步:拉取镜像并启动
正常执行拉取命令,如果失败,可以尝试先登录harbor。
拉取完成后,进到容器目录下执行启动命令docker-compose up -d
问题1:执行启动命令报: Additional property security opt is not allowed
问题1处理方法:1、这是配置语法错误,优先检查docker-compose.yml文件里面是否有写错的地方,修改保存后执行命令docker-compose down -v && docker-compose up -d;
第四步:访问页面
如果页面访问不了,可以去日志文件里面看具体的报错信息
问题1:连接数据库有问题,原因在于我的数据库安装在windows下面,服务器访问不到。
问题1处理方法:
步骤一、直接在服务器安装pgsql:
1、安装官方 YUM 源,执行
# 安装PG源
yum install -y https://download.postgresql.org/pub/repos/yum/reporpms/EL-7-x86_64/pgdg-redhat-repo-latest.noarch.rpm
# 禁用系统默认PG源(避免冲突)
yum-config-manager --disable pgdg*
# 安装PG 14服务和客户端
yum install -y postgresql14-server postgresql14
问题2:执行安装PG 14服务和客户端的时候有报错:
[root@localhost ~]# yum install -y postgresql14-server postgresql14
已加载插件:fastestmirror, langpacks
/var/run/yum.pid 已被锁定,PID 为 36557 的另一个程序正在运行。
问题2处理方法:因为系统中的PackageKit进程正在占用 YUM 的执行权限,导致新的 yum 命令无法执行,方案1:等待自动释放锁(最安全,推荐先尝试),PackageKit进程通常是临时运行的(比如系统自动检查更新、安装依赖),会在几分钟内自动退出并释放 YUM 锁。无需执行任何命令,等待 5-10 分钟;重新执行 PostgreSQL 安装命令:yum install -y postgresql14-server postgresql14
问题3:执行安装命令时又报错:
[root@localhost ~]# yum install -y postgresql14-server postgresql14
已加载插件:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
* base: ftp.sjtu.edu.cn
* extras: mirrors.aliyun.com
* updates: mirrors.163.com
没有可用软件包 postgresql14-server。
没有可用软件包 postgresql14。
错误:无须任何处理
问题3处理方法:直接通过 --enablerepo 参数指定 PG 官方源进行安装,执行:yum install -y postgresql14-server postgresql14 --enablerepo=pgdg14安装完成后,还需要初始化并启动 PG 服务,执行
# 初始化数据库
/usr/pgsql-14/bin/postgresql-14-setup initdb
# 设置开机自启
systemctl enable postgresql-14
# 启动服务
systemctl start postgresql-14
# 查看状态(确保是active状态)
systemctl status postgresql-14
到目前为止PGSQL就安装完成了,继续往下:******
步骤二、配置 PG 允许本地 / 容器访问:
1.修改 postgresql.conf 监听地址,执行vi /var/lib/pgsql/14/data/postgresql.conf
找到并修改
listen_addresses = '*' # 允许所有IP访问
port = 5432 # 默认端口,保持不变
2.修改 pg_hba.conf 授权访问,执行vi /var/lib/pgsql/14/data/pg_hba.conf
在文件末尾添加 3 条规则(授权本地、Docker 网段、服务器 IP 访问):
# 授权本地用户(trust表示免密,开发环境可用,生产建议改为md5/scram-sha-256)
host all all 127.0.0.1/32 trust
# 授权Docker默认网段(172.17.0.0/16是Docker bridge模式网段)
host all all 172.17.0.0/16 trust
# 授权服务器自身IP访问(根据个人服务器ip填写,此处xxx代替)
host all all xxx.xxx.xxx.xxx/32 trust
3.重启 PG 服务使配置生效,执行systemctl restart postgresql-14
步骤三、创建数据库和用户
1.切换到 PG 默认用户 postgres,执行su - postgres
2.进入 PG 命令行,创建数据库、用户、模式,执行
# 进入PG终端
psql
# 创建用户(和你的variables.env中一致)
CREATE USER postgres WITH PASSWORD 'postgres';
# 创建数据库(和你的配置一致)
CREATE DATABASE postgres OWNER postgres;
# 创建应用需要的schema(table1_1)
CREATE SCHEMA table1_1 AUTHORIZATION postgres;
# 退出PG终端
q
# 退出postgres用户
exit
步骤四、开放服务器防火墙 5432 端口,执行
# 临时开放
firewall-cmd --add-port=5432/tcp
# 永久开放
firewall-cmd --add-port=5432/tcp --permanent
# 重启防火墙
firewall-cmd --reload
步骤五、修改配置文件,将配置文件里面的数据库连接字符串修改成服务器数据库IP
步骤六、重启应用容器,执行docker-compose up -d
*****到这里容器就正常启动起来了
但是网页还是打不开!!!
问题1:日志有报错数据库连接问题,应用容器无法连接到服务器上的 PostgreSQL 数据库,报错Connection refused(连接被拒绝),这直接导致 eapbox 应用启动失败(Hosting failed to start),进而引发curl访问时的连接重置问题;
问题1处理方法:首先看pgsql服务是否正常启动,如果是active,那么就不用管,直接执行netstat -tulpn | grep 5432用netstat查看端口监听,这是我的输出:
[root@localhost eapbox]# netstat -tulpn | grep 5432
tcp 0 0 127.0.0.1:5432 0.0.0.0:* LISTEN 65390/postmaster
tcp6 0 0 ::1:5432 :::* LISTEN 65390/postmaster
问题2:PostgreSQL 14 服务虽然正常运行(active (running)),但仅在 ** 本地回环地址(127.0.0.1 和::1)** 上监听 5432 端口,并未监听服务器的外网 / 局域网 IP 或所有网卡(0.0.0.0),这导致 Docker 容器(属于独立网段,无法访问宿主机的 127.0.0.1)连接被拒绝
问题2处理方法:1.编辑 PostgreSQL 的核心配置文件 postgresql.conf,执行vi /var/lib/pgsql/14/data/postgresql.conf
2.修改 listen_addresses 配置项为 *,一开始这部分配置是被“#”注释掉的,需要打开,修改保存后重启pg14服务执行systemctl restart postgresql-14
问题3:重启容器后,日志有报错:Npgsql.PostgresException (0x80004005): 28000: 没有用于主机 “172.21.0.2”, 用户 “postgres”, 数据库 “postgres”, no encryption 的 pg_hba.conf 记录
at Npgsql.NpgsqlConnector.
问题3处理方法:1.报错原因:Docker 容器的 IP 是172.21.0.2(属于172.21.0.0/16网段),而你的 PostgreSQLpg_hba.conf中只授权了172.17.0.0/16网段,未覆盖当前容器实际所在的172.21.0.0/16网段,导致 PG 拒绝了容器的连接请求。2.解决方案:补充pg_hba.conf授权容器实际网段,执行vi /var/lib/pgsql/14/data/pg_hba.conf,添加容器实际网段的授权规则,host all all 172.16.0.0/12 trust保存并退出重启pg14服务。
再次启动容器,网页还是无法访问,这时候有报错:2026-01-04 09:18:01.264 +08:00 [ERR] [1] 42704: 类型 “hstore” 不存在
System.Exception: 42704: 类型 “hstore” 不存在
—> Npgsql.PostgresException (0x80004005): 42704: 类型 “hstore” 不存在
处理方式:核心报错是 42704: 类型 “hstore” 不存在,这说明系统应用依赖 PostgreSQL 的hstore扩展(一种键值对存储类型),但你的 PG 数据库中未启用该扩展,导致应用初始化失败,网页无法访问,
步骤1:切换到 postgres 用户,进入 PG 终端,
# 切换到PG默认管理员用户
su - postgres
# 进入PG数据库终端(连接postgres数据库,与你的应用配置一致)
psql
#为postgres数据库启用hstore扩展(核心操作,应用连接的是postgres数据库)
CREATE EXTENSION IF NOT EXISTS hstore;
运行到这里又有报错了:postgres=# CREATE EXTENSION IF NOT EXISTS hstore;
错误: 无法打开扩展控制文件 “/usr/pgsql-14/share/extension/hstore.control”: 没有那个文件或目录
处理方法:先退出pg终端,执行 yum 命令安装对应 PG 版本的 contrib 包,执行yum install -y postgresql14-contrib,建议直接执行yum install -y postgresql14-contrib --enablerepo=pgdg14
安装完成后,再回到pg终端,执行
#启用hstore扩展(IF NOT EXISTS 表示若已存在则不报错,更安全)
CREATE EXTENSION IF NOT EXISTS hstore;
#验证扩展是否启用成功(可选,查看hstore扩展信息)
dx hstore
正常执行后会提示 CREATE EXTENSION,说明 hstore 扩展启用成功;
执行 dx hstore 会显示 hstore 的版本、架构等信息,进一步确认生效
#退出PG终端
q
#退出postgres用户,回到root用户
exit
退出pg终端后,重新启动容器docker-compose down && docker-compose up -d
到这里我就可以正常访问页面了。。。。。
如果想用navicat连接服务器的数据库,那么需要在服务器上编辑pg_hba.conf,授权 Windows 的 IP,
# 打开PG的pg_hba.conf文件
vi /var/lib/pgsql/14/data/pg_hba.conf
在文件末尾添加 Windows 的 IP 授权规则,
# 授权你的Windows电脑IP(xxx.xxx.xxx.x)访问
host all all xxx.xxx.xxx.x/32 trust
保存并重启 PG 服务
# 保存退出(Esc → :wq → 回车)
# 重启PG服务使配置生效
systemctl restart postgresql-14
到这里就可以用navicat正常使用服务器的数据库了。。。。
最终达到的效果:在服务器拉取镜像,服务器安装数据库,打通网络,网页系统访问,数据库连接










