
乙巳马年春联生成终端Ubuntu20.04系统部署全记录春节临近想给家里的智能设备或者服务器加点年味儿吗最近我尝试在Ubuntu 20.04的服务器上部署了一个“春联生成终端”效果挺有意思的。它可以根据你输入的关键词自动生成一副对仗工整、寓意吉祥的春联特别适合用来装饰命令行界面或者作为一个小服务。整个过程不算复杂但涉及系统更新、依赖安装、容器部署和服务配置几个步骤。如果你手头正好有一台运行Ubuntu 20.04的机器无论是云服务器、本地虚拟机还是一台闲置的旧电脑都可以跟着这篇记录一起操作。我会尽量把每一步都讲清楚特别是容易踩坑的地方。1. 准备工作与环境检查在开始动手之前我们先花几分钟确认一下手头的“家伙事儿”是否齐全。这就像做菜前要备好食材和厨具一样准备工作做得好后面就会顺利很多。首先你需要一台已经安装好Ubuntu 20.04 LTS操作系统的计算机或服务器。这个版本的系统长期支持社区资源丰富遇到问题也容易找到解决方案。你可以通过下面的命令来确认系统的版本信息lsb_release -a运行后你应该能看到类似Description: Ubuntu 20.04 LTS的输出。如果不是这个版本后续的一些命令和软件源可能需要调整。其次确保你拥有这台机器的管理员权限。通常这意味着你需要能使用sudo命令。可以尝试执行一个简单的命令来测试sudo echo “权限检查通过”如果系统提示你输入密码输入后能正常看到输出就说明权限没问题。最后检查网络连接。因为我们需要从互联网下载软件包和容器镜像稳定的网络是必须的。可以尝试 ping 一个公共地址来测试ping -c 4 baidu.com看到有数据包返回就说明网络是通的。好了准备工作就绪我们开始正式的部署之旅。2. 系统更新与基础依赖安装一台新装或者很久没更新的系统第一步总是先更新软件源和已安装的包这能确保我们接下来安装的都是最新、最兼容的版本。打开终端我们依次执行以下命令。首先更新软件包列表。这个命令会从配置的软件源服务器获取最新的软件包信息sudo apt update这个过程可能会花点时间取决于你的网络速度和源服务器的响应。更新完成后接着升级所有可升级的已安装软件包sudo apt upgrade -y这里的-y参数表示自动确认所有升级提示避免中途需要手动输入。升级过程可能会比较长并且可能需要重启系统如果内核升级了。你可以根据提示决定是否立即重启或者等所有步骤完成后再重启。系统更新好后我们来安装一些必要的工具和依赖。春联生成应用通常基于Python并且我们计划用Docker来部署这样能避免复杂的Python环境配置问题。所以我们需要安装Python3、pipPython包管理工具以及Docker。安装Python3和pipsudo apt install -y python3 python3-pip安装完成后可以验证一下版本python3 --version pip3 --version接下来安装Docker。Ubuntu 20.04的默认仓库里的Docker版本可能不是最新的我们采用Docker官方提供的方法来安装。首先安装一些让apt能通过HTTPS使用仓库的软件包sudo apt install -y apt-transport-https ca-certificates curl software-properties-common然后添加Docker的官方GPG密钥和稳定版仓库curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository “deb [archamd64] https://download.docker.com/linux/ubuntu focal stable”注意这里的focal是Ubuntu 20.04的代号。添加仓库后再次更新软件包列表并安装Docker引擎sudo apt update sudo apt install -y docker-ce docker-ce-cli containerd.io安装完成后启动Docker服务并设置开机自启sudo systemctl start docker sudo systemctl enable docker为了不用每次都加sudo来运行docker命令这涉及到安全考虑请仅在个人或可信环境这样做我们可以将当前用户加入docker组sudo usermod -aG docker ${USER}执行这个命令后你需要完全退出当前终端会话并重新登录这个组权限变更才会生效。可以关闭终端再重新打开或者直接输入su - ${USER}切换一下。重新登录后运行一个测试命令验证Docker是否安装成功并能正常使用docker run hello-world如果看到一段欢迎信息恭喜你Docker已经准备就绪。基础环境搭建完成我们可以进入核心的部署环节了。3. 获取与运行春联生成镜像现在来到了最核心的一步把春联生成应用跑起来。我们采用Docker镜像的方式这是最省心的方法开发者已经把应用和它所需的所有环境打包好了我们只需要拉取下来运行即可。假设我们已经找到了一个名为spring-festival-couplets-generator的公开镜像这里为示例实际镜像名需根据真实情况替换我们可以使用docker pull命令来获取它docker pull username/spring-festival-couplets-generator:latest请将username/spring-festival-couplets-generator:latest替换为实际的镜像仓库地址和标签。拉取镜像的时间取决于镜像大小和你的网速。完成后可以用docker images命令查看本地已有的镜像列表确认它已经存在。有了镜像接下来就是运行它。但直接docker run可能还不够我们需要考虑如何让这个服务能被访问到。通常这类应用会提供一个Web界面或者API接口监听在容器内部的某个端口比如8080。我们需要将这个端口映射到宿主机的某个端口上。同时为了让容器停止后数据不丢失比如一些缓存或配置文件我们还可以将宿主机的某个目录“挂载”到容器内部实现数据持久化。假设我们想在宿主机的8080端口访问服务并且把日志保存在宿主机的/home/yourname/couplets_logs目录可以这样运行docker run -d \ --name couplets-generator \ -p 8080:8080 \ -v /home/yourname/couplets_logs:/app/logs \ --restart unless-stopped \ username/spring-festival-couplets-generator:latest我来解释一下这几个参数-d让容器在后台运行守护进程模式。--name给容器起个名字方便后续管理。-p 8080:8080端口映射格式为主机端口:容器端口。这里把容器内的8080端口映射到了宿主机的8080端口。-v /home/yourname/couplets_logs:/app/logs数据卷挂载格式为主机目录:容器内目录。这样容器内/app/logs下的文件就会保存在主机上。--restart unless-stopped设置重启策略。除非我们手动停止容器否则如果容器异常退出Docker会尝试重新启动它。运行命令后可以使用docker ps查看正在运行的容器确认我们的couplets-generator容器状态是Up。现在打开你的浏览器访问http://你的服务器IP地址:8080如果是本地虚拟机可能是http://localhost:8080或http://127.0.0.1:8080。如果一切顺利你应该能看到春联生成应用的界面了。试着输入“马年”、“吉祥”之类的关键词看看它能不能生成一副让你满意的春联。4. 配置防火墙与网络访问服务跑起来了但可能还只能在你自己的机器上访问。如果你用的是云服务器或者希望从局域网的其他设备访问这个春联服务就需要配置一下防火墙规则。Ubuntu 20.04默认使用ufwUncomplicated Firewall来管理防火墙它比直接操作iptables要简单不少。首先检查一下ufw的状态看看防火墙是否启用sudo ufw status如果状态是inactive表示防火墙未启用所有端口默认都是开放的。这种情况下你可以跳过本节但出于安全考虑建议还是了解一下。如果状态是active并且列出了规则那么我们就需要为我们的服务端口前面用的是8080添加一条允许规则。在添加规则前最好先确保SSH端口默认22是允许的否则添加规则时万一出错可能会导致你无法远程连接服务器。通常在安装系统或某些云平台这条规则已经存在了。我们可以先列出详细规则看看sudo ufw status numbered如果看到有22/tcp相关的ALLOW规则就放心了。现在允许8080端口的TCP流量sudo ufw allow 8080/tcp然后重新加载防火墙使规则生效sudo ufw reload再次检查状态确认8080端口的规则已经添加成功sudo ufw status现在你应该能从同一网络下的其他设备通过浏览器访问http://服务器IP:8080了。如果你有公网IP并且路由器上做了端口转发8080端口甚至可以从互联网上访问它。安全提示将服务端口暴露在公网上需要谨慎考虑。确保应用本身没有已知的安全漏洞并且使用强密码如果支持的话。对于个人项目或测试环境可以仅在内网使用或者使用更安全的访问方式如SSH隧道。5. 设置系统服务实现开机自启我们用docker run加上--restart unless-stopped参数已经实现了一种自启当Docker守护进程启动时如果容器之前是运行状态它会自动被启动。但这依赖于Docker服务本身。为了更稳健我们可以创建一个系统服务单元systemd service让Ubuntu系统在启动时自动确保这个Docker容器运行起来。这种方式管理起来也更方便可以用systemctl命令来启动、停止、查看状态。首先我们需要为这个服务创建一个配置文件。使用文本编辑器如nano或vim在/etc/systemd/system/目录下创建一个新文件例如叫couplets-generator.servicesudo nano /etc/systemd/system/couplets-generator.service然后将以下内容粘贴进去。你需要根据实际情况修改Description,ExecStart中的命令就是之前docker run的那一串以及User如果你用特定用户运行docker的话[Unit] DescriptionSpring Festival Couplets Generator Docker Container Requiresdocker.service Afterdocker.service network-online.target [Service] Typeoneshot RemainAfterExityes # 下面这行是关键就是启动容器的命令。确保路径和参数与你之前运行的一致。 ExecStart/usr/bin/docker run -d --name couplets-generator -p 8080:8080 -v /home/yourname/couplets_logs:/app/logs username/spring-festival-couplets-generator:latest ExecStop/usr/bin/docker stop couplets-generator ExecStopPost/usr/bin/docker rm couplets-generator TimeoutStartSec0 [Install] WantedBymulti-user.target注意这里我们使用了Typeoneshot和RemainAfterExityes这是一种适用于启动简单容器服务的常见方式。ExecStop和ExecStopPost定义了停止服务时要执行的命令分别是停止容器和删除容器删除容器可以确保每次启动都是全新的如果你想保留容器可以去掉ExecStopPost那一行。保存并退出编辑器在nano中是按CtrlX然后按Y确认再按回车。接下来重新加载systemd的配置让它识别我们这个新的服务文件sudo systemctl daemon-reload现在我们可以启动这个服务并设置它开机自启sudo systemctl start couplets-generator.service sudo systemctl enable couplets-generator.service检查一下服务的运行状态sudo systemctl status couplets-generator.service如果看到active (exited)并且下面有绿色的“active”字样同时用docker ps也能看到容器在运行那就说明服务配置成功了。你可以重启一下服务器来验证开机自启是否有效测试前请保存好所有工作。重启后再次运行docker ps和sudo systemctl status couplets-generator.service如果容器自动运行起来了那么恭喜你这个春联生成终端已经成为了一个可靠的系统服务。6. 总结与后续使用建议整个部署流程走下来其实核心思路很清晰更新系统、安装必要工具Docker、拉取并运行镜像、最后配置成系统服务。最难的部分可能不是命令本身而是理解每一步在做什么以及遇到问题时如何排查。比如如果镜像拉取慢可以考虑配置国内镜像加速器如果端口访问不通要依次检查容器日志、防火墙规则和网络路由。这个春联生成终端部署好后用途可以很灵活。你可以把它当作一个有趣的API集成到你的智能家居系统中每年春节自动生成新的对联显示在屏幕上也可以作为一个学习案例了解如何将一个小型AI应用容器化并部署到Linux服务器上。容器的好处是隔离性好清理起来也方便如果不想用了直接停止并删除容器和镜像即可基本不会对主机系统造成残留。当然这只是一个起点。你可以根据实际需求调整配置比如修改映射的端口、挂载更多的目录来保存生成的对联图片、或者编写脚本定时调用它的接口。希望这份记录能帮你顺利部署也为你的设备增添一份智能的年味。获取更多AI镜像想探索更多AI镜像和应用场景访问 CSDN星图镜像广场提供丰富的预置镜像覆盖大模型推理、图像生成、视频生成、模型微调等多个领域支持一键部署。