【网盘项目日志】记一次Office服务器问题的解决

根据实际使用发现,Office 的 Docker 容器每次重启后,都会丢失 hosts 文件的内容,这一点有些棘手。

先前的 Office 文档里面说过,这个服务器有个很奇怪的问题,那就是自己无法用公网 ip 访问到自己。由于我们不能为了 office 这一个功能而改变 Seafile 里面的 URL 配置,因此我们必须通过某种方法,直接把域名解析为内网地址,或者干脆就是主机地址。

一开始确实通过修改 hosts 文件解决了问题,但是发现重启容器以后会丢失 hosts 修改,这就有些麻烦了,我们在这里把解决方法记录一下,方便以后可以直接部署。

步骤1 获取 docker 主机的 ip 地址

这一步我们参考了一些资料:https://cloud.tencent.com/developer/ask/109551

在Linux上本机运行Docker时,可以使用docker0接口的IP地址访问主机服务。从容器内部,这将是您的默认路线。

例如,在我的系统上:

$ ip addr show docker0
7: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default 
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
    inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
       valid_lft forever preferred_lft forever
    inet6 fe80::f4d2:49ff:fedd:28a0/64 scope link 
       valid_lft forever preferred_lft forever

在容器内部:

# ip route show
default via 172.17.0.1 dev eth0 
172.17.0.0/16 dev eth0  src 172.17.0.4 

使用简单的shell脚本来提取这个IP地址是相当容易的:

#!/bin/sh

hostip=$(ip route show | awk '/default/ {print $3}')
echo $hostip

您可能需要修改iptables主机上的规则以允许来自Docker容器的连接。像这样的事情会做的伎俩:

# iptables -A INPUT -i docker0 -j ACCEPT

这将允许从Docker容器访问主机上的任何端口。注意:

iptables规则是有序的,这个规则可能会也可能不会做正确的事情,这取决于其他规则。
您将只能访问以下主机服务:(a)监听INADDR_ANY(又名0.0.0.0)或明确监听docker0接口。

总之,这样可以获取到主机的访问 ip 地址。

步骤2 开机自动修改 hosts 文件

hosts 文件是即时生效的,那么我们可以通过一个开机脚本来直接修改 hosts 文件。不过这一步感觉好难,这个 office 容器不是使用 systemctl 管理开机服务的,导致所有网上查到的开机脚本全部无法使用。。。最后用了一个很不优雅的方式:直接将 echo 语句放在 nginx 的启动脚本里,这样应该就没问题了。。。

hostip="$(ip route show | awk '/default/ {print $3}')  <HOST TO REDIRECT>" >> /etc/hosts

被编辑的文件地址:/etc/init.d/nginx

虽然知道这样很不优雅而且可能出现其他问题,但这是我目前能想到的最好办法了。如果哪位大佬有其他建议的话,欢迎指出,感谢!

然后重启 docker 容器,就好了。

关于遇到的一些其他问题

Q:为什么不将动作注册为系统脚本?
A:我尝试过了,但是 OnlyOffice 容器很奇怪,报告这样的错误:

System has not been booted with systemd as init system (PID 1). Can't operate.
Failed to connect to bus: Host is down

而网上说的各种启动脚本位置没一个能用的,如果有大佬知道的话,麻烦给指条明路,谢谢!

Q:为什么不直接把 OnlyOffice 部署在外面,而是要用 Docker 呢?
A:这里我必须吐槽 OnlyOffice,这玩意外部部署脚本直接删除了我的生产数据库程序 MariaDB,还删除了一堆必须的系统环境组件,可以说我花 10 秒打上去的命令直接让我多忙活 2 小时去恢复环境,脚本的这些行为既没有对它要进行的操作进行任何确认,也没有在文档中得到任何体现,而且后面删除它还一直 dpkg 报错,真的很烦。再也不在生产服务器上瞎搞了,5555555

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目名称:企业级Web应用服务器运维 项目描述: 本项目是为一家企业级Web应用提供服务器运维服务。该Web应用是一个大型的电商平台,每天有数百万的用户访问量。为了支撑业务的高可用性和稳定性,需要对服务器进行全面的运维管理。 本项目的主要任务包括以下几个方面: 1. 服务器硬件管理:根据业务需求和负载情况选择合适的服务器硬件配置,包括CPU、内存、硬盘、网络接口等,并采用RAID等技术实现数据备份和容错。 2. 操作系统管理:选择稳定性高、安全性好、易于管理的操作系统,如Linux等,并对操作系统进行优化和安全加固,如关闭不必要的服务、使用防火墙等。 3. 应用程序管理:选择稳定性高、性能好、安全性好的应用程序,并进行合理的配置和优化。同时,需要对应用程序进行监控和维护,及时发现和解决问题。 4. 数据库管理:选择可靠性高、性能好、安全性好的数据库,并进行合理的配置和优化。同时,需要对数据库进行备份和恢复、性能监控和调优等工作。 5. 网络架构管理:根据业务需求和网络负载情况选择合适的网络架构,并采用防火墙、VPN等技术保障网络安全。 6. 监控和告警管理:选择可靠性高、易于配置和扩展的监控和告警系统,如Zabbix、Nagios等,并合理配置和定制告警规则,提高故障诊断和问题解决效率。 7. 自动化运维管理:选择适合自己的自动化运维工具,如Ansible、Puppet、Saltstack等,并编写合适的脚本和playbook实现自动化的系统部署、配置和管理,提高运维效率和减少人工操作的错误。 本项目的目标是保证Web应用的高可用性和稳定性,提高运维效率和减少故障发生的可能性。在项目实施过程中,需要与开发人员、业务团队和其他运维人员紧密合作,共同完成项目任务。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值