昨天把实验室的所有网络服务从Linux服务器迁移到了Windows10下的WSL2(Ubuntu22.04),记录一下遇到的问题和大致的流程。
1.利用Samba在Linux和Windows之间传输文件
使用scp的传输速度非常感人,在同一局域网下用Samba管理两端文件更加方便。
1.1.安装Samba
sudo apt-get update sudo apt-get install samba
1.2.修改Samba配置
只需要共享home文件夹即可,如需共享其它文件(例如Nginx的配置文件)可以移动到该文件夹。因此对/etc/samba/smb.conf
进行修改如下:
[homes] comment = /home/wxt browseable = no read only = no create mask = 0755 directory mask = 0755 valid users = %S
1.3.重启Samba服务并创建用户
sudo service smbd restart && service nmbd restart # 可以直接使用现成的用户 sudo smbpasswd -a wxt
1.4.在Windows端访问
在路径处输入\\对应ip\wxt
,进行认证后即可访问,把Linux服务器上的项目和数据都搬过来就好。
2.设置Windows端的有线网络
2.1.修改IP、MAC等连接有线网
由于网络服务通过校园网实现公网访问,因此需要在插入网线后做一些设置。此处根据学校提供的IP、子网掩码等进行静态IP设置即可。需要注意的是此时还不能上网,因为绑定了网卡MAC地址,此处还需要再修改网卡的MAC地址,修改方法如图。
2.2.设置网络优先级
由于如NAS等服务需要局域网连接,电脑需要WiFi和有线网共同使用,但是有线网优先级要更高。这里可以通过设置跃点来修改优先级,跃点数量越少优先级越高。这里有线网设置为10
,无线网设置为20
。
2.3.设置与WSL网络互通
此时发现Nginx只能代理本地的访问,校园网和外网均无法打开网页。经查阅发现需要进行Windows与WSL的网络映射,官方文档:https://learn.microsoft.com/zh-cn/windows/wsl/networking。
在Windows的Powershell中执行如下命令:
# 注意,此处connectaddress是WSL的IP,通过在WSL中执行命令:ip a | grep "global eth0"获取 # 公网 netsh interface portproxy add v4tov4 listenport=80 listenaddress=0.0.0.0 connectport=80 connectaddress=192.168.127.253 # SSH netsh interface portproxy add v4tov4 listenport=22 listenaddress=0.0.0.0 connectport=22 connectaddress=192.168.127.253
WSL貌似默认没有SSH,需要安装:
sudo apt install openssh-server sudo service ssh start # 开机启动 sudo systemctl enable ssh
这样,就可以实现ssh访问以及其它网络流量的代理。
3.配置MongoDB
SoyDNGP需要用到MongoDB和Redis。Redis之前安装过就省略了,唯一需要注意的就是把Redis设置为本地访问(127.0.0.1
),不然很容易受到攻击。
3.1.下载MongoDB、MongoDB Shell、MongoDB Compass
访问https://www.mongodb.com/try/download/下载即可,安装也很简单。这里,MongoDB是数据库本体,MongoDB Shell是命令行管理程序,MongoDB Compass是可视化的管理程序。
安装完成后发现mongod服务没有启动,查看日志发现报错Environment variable MONGODB_CONFIG_OVERRIDE_NOFORK == 1, overriding "processManagement.fork" to false
,这里是常见的权限问题所致,解决方法如下:
sudo mongod --repair --config /etc/mongod.conf sudo chown -R mongodb:mongodb /var/lib/mongodb sudo chown mongodb:mongodb /tmp/mongodb-27017.sock
之后重启服务即可,恢复正常。
3.2.修改MongoDB默认端口、设置安全验证
进入/usr/local
处的MongoDB Shell安装路径下的bin
文件夹,进行安全设置:
# 首次登录不用加参数 mongosh --port 端口 -u 用户名 -p 密码 # 以下是进入mongosh后,创建一个超级管理员就行 use admin db.createUser({ user: "用户名", pwd: "密码", roles: [{ role: "root", db: "admin" }] })
MongoDB的配置文件在/etc/mongo.conf
,需要修改的地方如下:
# 设置端口为27020避免扫默认27017被攻击,本地访问更安全 net: port: 27020 bindIp: 127.0.0.1 # 开启安全验证 security: authorization: enabled
3.3.配置MongoDB Compass,更方便地导入数据
WSL2本身并不带图形界面,因此需要进行配置。安装VcXsrv及xfce4的教程可以参考:https://blog.csdn.net/m0_60171828/article/details/138376726。为便捷使用在~/.bashrc
编写脚本如下:
function gui() { ip=cat /etc/resolv.conf | grep nameserver | awk '{print $2}'
echo "$ip" export DISPLAY=$ip:0 sudo startxfce4 }
执行gui
后连接桌面,找到MongoDB Compass发现打不开,报错Running as root without --no-sandbox is not supported
。这里可以通过在MongoDB启动项添加--no-sandbox
解决。
连接到MongoDB后,可以通过远程操控Linux系统的数据库导出数据,进而导入Windows服务器中,非常方便。
4.迁移Anaconda环境
这里只需要将原/home/wxt/anaconda3/envs
下的环境复制到/home/zhn/.conda/envs
即可。需要注意的是要修改~/.condarc
的envs-dirs
,并在~/.conda/environment
中添加复制来的环境路径。此时可以正常进行环境激活,但是遇到权限问题,报错/home/zhn/.conda/envs/website/bin/python: Permission denied
。这里需要执行命令修改权限:
sudo chown -R zhn:zhn /home/zhn/.conda/envs/website sudo chmod -R u+rwx /home/zhn/.conda/envs/website
之后在启动SoyDNGP时发现Gunicorn报错,检查后发现需要修改其配置文件中的python解释器路径,配置文件路径为:~/.conda/envs/bin/gunicorn
。
#!/home/修改这里的路径为zhn/.conda/envs/website/bin/python # -*- coding: utf-8 -*- import re import sys from gunicorn.app.wsgiapp import run if __name__ == '__main__': sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0]) sys.exit(run())
至此即可正常使用所有网络服务。
5.设置WSL开机启动
———- 2024.7.21更新
———-
现在,脚本目录为D:\wsl-startup.vbs
,包括自动将WSL的端口映射功能。为了自动以管理员身份执行,新建管理员账户Administrator,密码老规矩。
为了方便,这里使用vbs脚本启动WSL,放置在C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
下。这样就可以开机自启动了。脚本如下:
CreateObject("Wscript.Shell").run "wsl",vbhide
6.Sequenceserver备忘
Ruby直接用apt install
安装,Sequenceserver的配置文件在~/.sequenceserver.conf
,NCBI Blast的路径在:/usr/local/ncbi-blast-2.15.0+/bin
。
为了便于启动,于/etc/systemd/system/sequenceserver.service
写开机脚本如下:
[Unit] Description=SequenceServer server daemon Documentation="file://sequenceserver --help" "http://sequenceserver.com/doc" After=network.target [Service] Type=simple User=root ExecStart=sequenceserver -d /home/zhn/SequenceServer -c /home/zhn/.sequenceserver.conf KillMode=process Restart=on-failure RestartSec=42s RestartPreventExitStatus=255 [Install] WantedBy=multi-user.target
# 设置为开机启动 sudo systemctl enable sequenceserver.service
至此迁移完成。