两年前自己修改的 nginx 源码编译了一个 一直在阿里云账号 A 上面的几个服务器上跑, 现在需要在另一个阿里云账号 B 上面再设置几个类似的服务器 请问有办法把这个已经安装好的 nginx 从 A 里面拷贝到 B 里面吗 已经拷贝了 /usr/lib/nginx 和 /etc/nginx 但是发现没有用
有办法直接把这个编译好的 nginx 拷贝过去,或者把阿里云账号 A 下的磁盘镜像导入到账号 B 下面吗
1
windyland 2019-10-21 08:51:31 +08:00 via Android
编译完成的目录整个 tar.gz 打包,然后用 sftp 传一下
|
2
windyland 2019-10-21 08:52:04 +08:00 via Android
或者 rsync 简单粗暴解决战斗
|
3
banxi1988 2019-10-21 08:52:14 +08:00
先确定 A 上的服务器编译运行 nginx 的环境和依赖.
主要是 Ubuntu 版本 , glibc 版本.其他一些依赖. 对得上一般可以,对不上兼容的也应该可以. 然后看一下 标准的 nginx 编译之后安装时复制了哪些文件,是不是少复制了? 位置对不对? 然后根据运行时候的具体错误信息再分析了. |
4
jakezh OP |
5
jakezh OP @banxi1988 #3
版本已经对过了,依赖都从老服务器拉的版本 哎。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。 |
6
jakezh OP 全局搜索了一下
对拷了所有路径里带 nginx 的文件, 等会儿跑一下看看吧 这是一个血淋淋的教学啊兄弟们 以后一定要源代码做好版本控制 |
7
MonoLogueChi 2019-10-21 09:14:06 +08:00 via Android
镜像可以共享,A 制作镜像,然后共享给 B,B 再使用自定义镜像安装
|
8
jakezh OP @MonoLogueChi #7
多谢老哥 一会儿研究一下 |
9
Linken404 2019-10-21 10:31:54 +08:00
但是直接重新按照需求装一个不比迁移简单吗...
直接把配置文件拷贝过去就可以了,Nginx 这种东西装起来又不麻烦,需要什么功能编译安装的时候加上就可以了 |
10
CivAx 2019-10-21 10:36:48 +08:00 3
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 阶段填入这套参数就行了。 即做到更新了版本,又完成了配置统一。 |
11
msg7086 2019-10-21 10:39:39 +08:00 1
如果你正常编译打包,出来的应该是 deb 文件。
|
12
jakezh OP |
14
windyland 2019-10-21 10:45:24 +08:00 via Android
直接根目录打包,然后 dd 写入
|
16
Linken404 2019-10-21 11:07:21 +08:00
如果服务器上有以前的源码倒还好说 没有那确实是难搞了
这种配依赖环境很容易出奇怪的问题的 感觉可以试试直接迁移整个系统 把当前系统做成镜像然后去重新安装 反正我现在服务器上编译安装完什么东西 源码是打死都不会删的... |
17
Maco 2019-10-21 11:10:03 +08:00
使用阿里云镜像服务打包成系统镜像
|
18
ETiV 2019-10-21 11:20:57 +08:00 via iPhone
ldd,查找 so 依赖的命令
把 nginx 可执行程序复制到一个新的环境,对它执行 ldd 再把显示内容的 not found 从老的机器复制过来 so 也有它自己的依赖,对这些 so 再递归地执行 ldd 直到所有 not found 的 so 都复制过来 复制过来如果还找不到的话,本机配一下 ldconfig 还是建议你复制到新的 docker 里,打个镜像 |
19
gesse 2019-10-21 11:28:34 +08:00
src 包 make 完后,打包一份到目标机器, 直接进入解压后 src 包,然后 make install 就行了。
然后有时间再学学 docker |
20
ysc3839 2019-10-21 12:28:11 +08:00 via Android
建议编译为 dpkg 包,然后拷了直接安装。
|
21
coolloves 2019-10-21 12:35:09 +08:00
相同环境,copy 过去可即食
不同环境的话.src copy 过去,重新编译即可 |
22
hardwork 2019-10-21 14:47:46 +08:00
|
23
cjpjxjx 2019-10-21 14:51:02 +08:00 via iPhone
快照或者镜像都可以吧
|
24
forcecharlie 2019-10-22 08:53:15 +08:00
依赖的 zlib openssl pcre 等库使用 nginx 参数指定源码编译,然后发行版要接近,关于 prefix, 可以自己修改 nginx 源码修改搜索机制,否则只能 -P 显式指定或者保持 --prefix 一致。
PS: 我们给私有化客户都是编译打包成 tar.gz 只要发行版接近,基本没啥问题。安装目录随意(我们使用了 C++17 开发模块)。 |
25
julyclyde 2019-10-22 18:16:56 +08:00
你既然都打包了……
那么显然你没打包 |