老哥们, ubuntu 上自己修改打包编译的 nginx 怎么可以拷贝到另一台服务器上

2019-10-21 08:40:56 +08:00
 jakezh

两年前自己修改的 nginx 源码编译了一个 一直在阿里云账号 A 上面的几个服务器上跑, 现在需要在另一个阿里云账号 B 上面再设置几个类似的服务器 请问有办法把这个已经安装好的 nginx 从 A 里面拷贝到 B 里面吗 已经拷贝了 /usr/lib/nginx 和 /etc/nginx 但是发现没有用

有办法直接把这个编译好的 nginx 拷贝过去,或者把阿里云账号 A 下的磁盘镜像导入到账号 B 下面吗

4550 次点击
所在节点    程序员
25 条回复
windyland
2019-10-21 08:51:31 +08:00
编译完成的目录整个 tar.gz 打包,然后用 sftp 传一下
windyland
2019-10-21 08:52:04 +08:00
或者 rsync 简单粗暴解决战斗
banxi1988
2019-10-21 08:52:14 +08:00
先确定 A 上的服务器编译运行 nginx 的环境和依赖.
主要是 Ubuntu 版本 , glibc 版本.其他一些依赖. 对得上一般可以,对不上兼容的也应该可以.
然后看一下 标准的 nginx 编译之后安装时复制了哪些文件,是不是少复制了? 位置对不对?

然后根据运行时候的具体错误信息再分析了.
jakezh
2019-10-21 08:52:24 +08:00
@windyland #1 两年前编译的
没 tm 存源文件和编译好的文件
只剩下服务器上面安装好的可执行文件了
我真是想捅死我自己
jakezh
2019-10-21 08:54:10 +08:00
@banxi1988 #3
版本已经对过了,依赖都从老服务器拉的版本
哎。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
jakezh
2019-10-21 09:11:23 +08:00
全局搜索了一下
对拷了所有路径里带 nginx 的文件,
等会儿跑一下看看吧
这是一个血淋淋的教学啊兄弟们
以后一定要源代码做好版本控制
MonoLogueChi
2019-10-21 09:14:06 +08:00
镜像可以共享,A 制作镜像,然后共享给 B,B 再使用自定义镜像安装
jakezh
2019-10-21 09:45:47 +08:00
@MonoLogueChi #7
多谢老哥 一会儿研究一下
Linken404
2019-10-21 10:31:54 +08:00
但是直接重新按照需求装一个不比迁移简单吗...
直接把配置文件拷贝过去就可以了,Nginx 这种东西装起来又不麻烦,需要什么功能编译安装的时候加上就可以了
CivAx
2019-10-21 10:36:48 +08:00
nginx -V,看编译参数
e.g.

```
[docker@NGINX_1 ~]$dx tengine bash
root@NGINX_1:/# nginx -V
Tengine version: Tengine/2.3.1
nginx version: nginx/1.16.0
built by gcc 6.3.0 20170516 (Debian 6.3.0-18+deb9u1)
built with OpenSSL 1.1.0k 28 May 2019
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/etc/nginx/logs/error.log --http-log-path=/etc/nginx/logs/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --with-compat --with-file-aio --with-http_auth_request_module --with-http_addition_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_geoip_module=dynamic --with-http_image_filter_module=dynamic --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_slice_module --with-http_ssl_module --with-http_sub_module --with-http_secure_link_module --with-http_stub_status_module --with-http_v2_module --with-http_xslt_module=dynamic --with-luajit-lib=/usr/local/lib/ --with-luajit-inc=/usr/local/include/luajit-2.1/ --with-lua-inc=/usr/local/include/luajit-2.1/ --sbin-path=/usr/sbin/nginx --with-mail --with-mail_ssl_module --with-threads --with-pcre --with-stream --with-stream_geoip_module=dynamic --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --add-module=./modules/ngx_http_concat_module --add-module=./modules/ngx_http_upstream_check_module --add-module=./modules/ngx_http_proxy_connect_module --add-module=./modules/ngx_devel_kit --add-module=./modules/ngx_http_lua_module
root@NGINX_1:/#
```

拿着这套参数,在新机器上下载最新版的 NGINX,在 configure 阶段填入这套参数就行了。

即做到更新了版本,又完成了配置统一。
msg7086
2019-10-21 10:39:39 +08:00
如果你正常编译打包,出来的应该是 deb 文件。
jakezh
2019-10-21 10:41:24 +08:00
@Linken404 #9
@CivAx #10
当时有一些奇怪的需求
把其中几个 module 的源码改了改
改动不大 但是地方挺多的
本来以为就是个一锤子买卖 结果又给钱让部署一新的集群
不好跟钱过不去
哎 说到底还是因为穷
jakezh
2019-10-21 10:44:08 +08:00
@msg7086 #11 没有 make install 不是编译 dpkg 包
windyland
2019-10-21 10:45:24 +08:00
直接根目录打包,然后 dd 写入
CivAx
2019-10-21 11:02:02 +08:00
@jakezh #12 兄弟走点心,下回这种非原装代码的事情上 Docker 吧,留套镜像什么都好说
Linken404
2019-10-21 11:07:21 +08:00
如果服务器上有以前的源码倒还好说 没有那确实是难搞了
这种配依赖环境很容易出奇怪的问题的 感觉可以试试直接迁移整个系统 把当前系统做成镜像然后去重新安装
反正我现在服务器上编译安装完什么东西 源码是打死都不会删的...
Maco
2019-10-21 11:10:03 +08:00
使用阿里云镜像服务打包成系统镜像
ETiV
2019-10-21 11:20:57 +08:00
ldd,查找 so 依赖的命令

把 nginx 可执行程序复制到一个新的环境,对它执行 ldd
再把显示内容的 not found 从老的机器复制过来
so 也有它自己的依赖,对这些 so 再递归地执行 ldd
直到所有 not found 的 so 都复制过来

复制过来如果还找不到的话,本机配一下 ldconfig

还是建议你复制到新的 docker 里,打个镜像
gesse
2019-10-21 11:28:34 +08:00
src 包 make 完后,打包一份到目标机器, 直接进入解压后 src 包,然后 make install 就行了。
然后有时间再学学 docker
ysc3839
2019-10-21 12:28:11 +08:00
建议编译为 dpkg 包,然后拷了直接安装。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/611221

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX