免责声明口味和性价比就是个特别主观的东西（也很看个人实力），所有的评价仅代表我个人对最后几次去该餐馆的记忆，仅供参考。基本评分标准为了让Tag好看点（不太想把Tag起名为“大于等于6分小于7分”），所有评价都同时使用了十分制和五星制，对应关系和大致标准如下：★☆☆☆☆：0.0-2.99分，极其难吃，完全没有性价比，老板可能根本没有考虑过改良口味，绝对不推荐在任何情况下主动去吃。★★☆☆☆：3.0-5.99分，口味上有硬伤，性价比很低，就餐体验比较糟糕（排队长，服务态度差等等），基本上不会考虑。（其实就Takumi来说，慕尼黑可能确实没有更好的日本拉面，但既然都不好吃，那不如不要在慕尼黑去吃日料。★★★☆☆：6.0-6.99分，饭菜的口味基本合格，有一定的特色，但总体可能谈不上特别好吃，一般在价格和就餐体验上也有扣分，为了特色菜去吃是可以考虑的。★★★★☆：7.0-8.49分，能吃到味道不错的饭菜，但有一些问题导致达不到五星，例如有一些菜会踩雷，价格有些过高，或者就餐体验不是很好，是一些可以考虑的饭店。还有一类归在这个评级的是口味合格并且性价比特别高的餐厅，基本就是那种便宜的社畜食堂。★★★★★：8.5-10.0分，口味上基本没多少可挑剔的，价格相对来说可以接受，就餐体验有可能并不完美，但不是什么大问题，这些饭店基本是重要聚会的首选。也有一些口味挺好同时性价比特别高的餐厅归在此类。总的来说，星级基本反映了口味评级。具体到星级内的评分就更加主观了，算是个人的喜好排名吧，口味上拉不开什么差距，主要会有影响的因素一般会是人均价格和就餐体验。在一些文章里可能会具体说明打分的原因。常见Tag标准分类按国家分的菜系：中餐，日料，韩料，越南菜，泰国菜，意大利菜，法国菜，德国菜。还有两个独立的类别：甜品店和咖啡馆周几会不开门：这Tag不会有人需要去查吧提供午饭还是晚饭：不一定每天都是一样的，得在地图里确认一下。大致的人均价格区间：10欧，15欧，20欧，25欧，30欧，40欧，大于40欧。特殊Tag社畜食堂：适合附近的帕鲁去吃一顿实惠又满足的午饭。一人也可：一个人去吃也不会难受。超过四人：适合多于四人的聚会（没有这个Tag的也不一定不能去，只是体验可能不太好）。排队很长：饭点去要做好排长队的准备。建议预订：建议提前至少一天预订座位，不然可能要排长队。必须预订：必须要提前预订座位，不然根本没位置。不能刷卡：字面意思，不能刷卡，只接受现金。分量较小：每份饭菜分量少，通常的点餐方式可能吃不饱。精致好看：出品造型或摆盘很漂亮，常见于甜品店。量大管饱：味道合格，量很大，性价比高。饿不死：难吃，但价格便宜，捏着鼻子吃至少不会饿死。
创建根CA证书并给特定网站签发（岛风go为例）
背景舰C在2025年大更新引入https后，用普通的VPN软件绕过地区限制不会受影响，因为VPN是直接做流量转发，不需要处理数据。而岛风Go等代理软件就没法像以前一样毫无阻碍地在中间转发了，如果不做任何设置，浏览器会把舰C网站标为证书无效，并阻止大多数的连接。因此，我们需要自行颁发并信任一些证书，让浏览器认为走代理的舰C网站是安全的。岛风Go基本原理具体这种带缓存魔改防猫的代理如何运作的并没有公开的说明，但用网络安全的基本知识也能猜个大概。在HTTP协议裸奔的年代，本地网页与服务器之间的通信会被代理软件“劫持”，即数据包发到本地后会首先进入代理软件，代理读取处理并修改信息后再把数据包发给浏览器。等浏览器想往服务器发包时，包首先也会发给代理，代理考虑是正常发给服务器还是做点修改。例如本地缓存和魔改，大概就是浏览器在向服务器请求图片资源时，代理直接返回自己存储的贴图。防猫，大概也是在发包后如果没收到服务器返回的OK，就把包扣着重新再发直到收到正确的回复。HTTPS和根证书想要知道为什么舰C换HTTPS后代理软件就挂了，需要先了解一点现代网站安全的基本知识。为了不让像登录密码这种敏感信息在互联网上裸奔，现代网站都使用了HTTPS协议，大致的工作原理是，服务器首先生成一套非对称加密（例如RSA）的公钥和私钥，浏览器访问服务器时，服务器把公钥明文发给浏览器，浏览器生成一个随机的对称加密（例如AES）的密钥，用服务器公钥加密后发给服务器，服务器用自己的私钥解密，之后的通信都使用这个对称加密的密钥来加密。在这个过程中，中间人攻击仍然很简单，代理软件只需要假装自己是客户端，跟服务器交换密钥后就能正常解密加密跟服务器的通信。然后再假装自己是服务器，跟浏览器交换密钥，便能跟HTTP一样实现所有功能了。为了堵住这个漏洞，HTTPS引入了CA证书系统。在互联网世界中有几个官方认证的CA机构，浏览器默认他们是可靠的，并且保存了他们的公钥。所有网站在生成自己的非对称私钥公钥时，都要找一个CA机构做认证。CA机构会将网站服务器的公钥先算hash，再用CA的私钥加密，作为这个网站的证书。当浏览器请求网页时，会同时得到明文的网站公钥，以及CA加密的证书。浏览器会使用系统里保存的CA公钥将证书解密，再与收到的网站公钥的hash做对比，如果不一样，则会认定为遭到了攻击，通常会拒绝后续的连接。这种情况下浏览器顶上域名栏左边会显示红色的警告。因此，代理软件假装自己是舰C服务器的企图就被识破了，因为它提供的服务器公钥和证书无法被浏览器已知的CA公钥验证。代理软件也不可能真的找一个CA机构来认证，毕竟认证时候你还得提供网站域名，不可能让人家机构认证你为dmm的服务器吧。所以我们只能假装自己是个CA机构，给自己颁发个证书，认证dmm和舰C服务器的域名，并将这个伪CA机构的信息添加进系统中，让浏览器认为你也是可靠的。岛风Go实际上提供了他们自己签发的全套证书，如果你不担心什么安全问题完全可以直接使用，但作为一名有点追求的计算机使用者，还是希望能自己控制整个伪造流程。自己签发CA证书以下为整套签发CA证书的流程，在Ubuntu下测试，Windows应该也大差不差。生成根CA私钥openssl genrsa -out myRootCA.key 4096生成自签名根证书openssl req -x509 -new -nodes -key myRootCA.key -sha256 -days 3650 -out myRootCA.crt生成网站私钥openssl genrsa -out ShimakazeGo.key 2048设置需要签名的网站以下设置是从岛风Go的证书文件里抄出来的，未来还可能会修改。保存为ShimakazeGo.cnf。[ req ] default_bits = 2048 prompt = no default_md = sha256 req_extensions = v3_req distinguished_name = dn [ dn ] C = CN ST = Shanghai O = ShimakazeGoCustom CN = ShimakazeGoCustom [ v3_req ] subjectAltName = @alt_names [ alt_names ] DNS.1 = *.cdn.dmmgames.com DNS.2 = *.cloudfront.net DNS.3 = *.touken-ranbu.jp DNS.4 = *.bilibiligame.net DNS.5 = *.yuyuyui.jp DNS.6 = *.shiropro-re.net DNS.7 = *.enza.fun DNS.8 = *.shinycolors.enza.fun DNS.9 = *.kamihimeproject.net DNS.10 = gskh-api-r-zh.prod.skh.johren.games DNS.11 = gskh-resource-r-zh.prod.skh.johren.games DNS.12 = prd-priconne-redive.akamaized.net DNS.13 = *.happyelements.co.jp DNS.14 = stars-assets.hekk.org DNS.15 = *.kanpani.jp DNS.16 = *.aimia.dmmgames.com DNS.17 = *.cdn.aimia.dmmgames.com DNS.18 = *.bungo.dmmgames.com DNS.19 = api-gameplayer.dmm.com DNS.20 = cdn2-gameplayer.games.dmm.com DNS.21 = fruful.jp DNS.22 = i-cf.alice.colopl.jp DNS.23 = game.mahjongsoul.com DNS.24 = dmc.mahjongsoul.com DNS.25 = game.maj-soul.com DNS.26 = *.magicami.jp DNS.27 = zu9j1t6ekm.user-space.cdn.idcfcloud.net DNS.28 = *.idolwars.jp DNS.29 = www.dmm.com DNS.30 = www.dmm.co.jp DNS.31 = p.dmm.com DNS.32 = p.dmm.co.jp DNS.33 = pics.dmm.com DNS.34 = pics.dmm.co.jp DNS.35 = games.dmm.com DNS.36 = games.dmm.co.jp DNS.37 = media.games.dmm.com DNS.38 = media.games.dmm.co.jp DNS.39 = files.gameplayer.games.dmm.com DNS.40 = osapi.dmm.com DNS.41 = osapi.dmm.co.jp DNS.42 = cdn-connect.mobage.jp DNS.43 = mist-train-girls.azureedge.net DNS.44 = *.mist-train-girls.com DNS.45 = mist-train-girls.azurefd.net DNS.46 = *.e-heroines.net DNS.47 = static-files-allb.pokelabo.jp DNS.48 = web-assets.otogi-frontier.com DNS.49 = otogi-rest.otogi-frontier.com DNS.50 = az-otogi-web-assets.azureedge.net DNS.51 = prd-storage-app-umamusume.akamaized.net DNS.52 = prd-storage-game-umamusume.akamaized.net DNS.53 = *.bokusen.net DNS.54 = millennium-war.net DNS.55 = all.millennium-war.net DNS.56 = assets-cn.millennium-war.net DNS.57 = ancl.jp DNS.58 = cdn-paripari-prod-002.azureedge.net DNS.59 = assets.game-monmusu-td.net DNS.60 = prd-game-a-granbluefantasy.akamaized.net DNS.61 = prd-game-a1-granbluefantasy.akamaized.net DNS.62 = prd-game-a2-granbluefantasy.akamaized.net DNS.63 = prd-game-a3-granbluefantasy.akamaized.net DNS.64 = prd-game-a4-granbluefantasy.akamaized.net DNS.65 = prd-game-a5-granbluefantasy.akamaized.net DNS.66 = pc-play.games.dmm.com DNS.67 = pc-play.games.dmm.co.jp DNS.68 = tracking.games.dmm.com DNS.69 = tracking.games.dmm.co.jp DNS.70 = d3mya90gbacu0m.cloudfront.net DNS.71 = dz87n5pasv7ep.cloudfront.net DNS.72 = cdn-r18.gc.dmmgames.com DNS.73 = cdn.gc.dmmgames.com DNS.74 = game-a.granbluefantasy.jp DNS.75 = game-a1.granbluefantasy.jp DNS.76 = game-a2.granbluefantasy.jp DNS.77 = game-a3.granbluefantasy.jp DNS.78 = game-a4.granbluefantasy.jp DNS.79 = game-a5.granbluefantasy.jp DNS.80 = *.kancolle-server.com生成csr文件openssl req -new -key ShimakazeGo.key -out ShimakazeGo.csr -config ShimakazeGo.cnf使用根CA签发网站证书，每年要更新openssl x509 -req -in ShimakazeGo.csr -CA myRootCA.crt -CAkey myRootCA.key -CAcreateserial -out ShimakazeGo.crt -days 825 -sha256 -extfile ShimakazeGo.cnf -extensions v3_req将证书转为pfx文件，这个是岛风Go认可的证书文件openssl pkcs12 -export \ -out ShimakazeGo.pfx \ -inkey ShimakazeGo.key \ -in ShimakazeGo.crt \ -certfile myRootCA.crt可以用如下命令查看pfx证书信息openssl pkcs12 -info -in ShimakazeGo.pfx重命名为customize_cert.pfx并放入ShimakazeGo目录将我们自己的CA证书导入浏览器的信任证书，Chrome在设置里找到隐私和安全，选择安全，管理证书，选择导入，然后将之前生成的myRootCA.crt文件加进来。最后重启岛风Go和浏览器，再打开舰C的页面，应该不再看到隐私警告了，同时点开域名左边的按钮，还能看到我们自己给dmm签发的证书。
前言部署一个网页本身并没有太大难度，租个服务器用默认密码ssh登入root装上Nginx把网页复制到/var/www里然后改一下Nginx的设置，再去Cloudflare把域名解析到你的IP地址，基本就搞定了。问题在于这么做过不了多久你就会发现服务器密码已经被穷举攻破，然后你就变成了肉鸡用于ddos。即使你手动改了个很复杂的密码，也会发现你命令行用起来非常卡，因为你服务器在后台拒绝大量的错误密码登录。因此，为了在这个险恶的互联网环境下生存下去，必须学会如何保护自己的服务器。服务器安全设置开服后第一件要做的事就是提升安全性。其实你部署完网页再做也行，但这一段每一项操作出错都有可能让你再也登录不了服务器，只能重装。为了少折腾，还是建议最开始就把这些危险操作都搞定。修改ssh端口并配置防火墙第一步我们把默认的ssh端口给改掉，并直接屏蔽22端口的访问。首先打开全局ssh配置文件sudo nano /etc/ssh/sshd_config，root账户可以不用sudo，找到Port 22这一行，把它改成任意与其他服务不冲突的端口，例如Port 1234，按Ctrl+X保存并退出。接着配置ufw防火墙，用sudo ufw allow 1234/tcp添加一个允许1234端口TCP连接的规则。为了防止输入错误导致再也连不上服务器，建议再临时添加一个sudo ufw allow 22/tcp，让当前的远程连接在激活防火墙后还能不断线。确保ssh端口和防火墙都配置正确后，先用sudo systemctl restart ssh重启ssh服务，这时可以再开一个控制台，用ssh -p 1234 root@your-server-ip-address连接服务器，如果能连上说明ssh配置是正确的。再在任意一个控制台里输入sudo ufw enable激活防火墙，如果新的连接没中断，说明防火墙配置也没问题。不放心可以再开个控制台测试一下。之后就可以把临时的22端口规则删掉了sudo ufw delete allow 22/tcp，这样那些对22端口的穷举爆破就会直接被拦住，不会影响服务器性能了。创建账户并赋予sudo权限直接使用root操作服务器是非常危险的行为，容易出现经典的rm -rf不慎删掉整个根目录的失误，因此，我们最好创建一个新账户，并赋予sudo的权限，这样可以避免一些操作失误干掉整个系统，多人使用服务器还能分别记录每个人各自的操作。我们用sudo adduser abc创建一个叫abc的用户，跟着提示输入密码等信息，然后将该用户添加进sudo用户组sudo usermod -aG sudo abc。接着开个新的控制台，用ssh -p 1234 abc@your-server-ip-address登入服务器，然后看看sudo命令是否能用，如果一切正常，可以去ssh设置里禁止直接用root登录，进一步提高安全性。找到/etc/ssh/sshd_config里的PermitRootLogin yes，改成PermitRootLogin no，用sudo systemctl restart ssh重启服务。以后所有root级操作都用新用户的sudo来提权运行，如果真的有什么需要用root用户的操作，可以用su root切换到root。设置仅允许密钥对登录即使改掉了ssh的端口号，如果攻击者真的想要爆破你的服务器，他们还可以直接扫描你的所有端口找到哪个用于ssh。禁用root登录可以有效防止陌生人找到正确的用户名穷举出你的密码，但是如果用上了社工手段，你的用户名很有可能能被猜出来，于是你的服务器还是有一定的危险。这里最安全的手段是只允许服务器使用密钥登录，这样除非你的私钥泄漏了，不然仅有你这台设备能登录。我们先在本地的控制台里，用ssh-keygen -t RSA -b 4096 -C 'comments'创建一个私钥公钥对，comments是备注，你可以改成自己当前电脑的信息。保存位置使用默认的就行，passphrase是解锁这个私钥的密码，设置一个你保证能记住的，最好把passphrase记在纸上。然后去刚才保存的位置，Windows通常在%USERPROFILE%/.ssh/，Ubuntu在~/.ssh/，里面能看到一个id_rsa文件和一个id_rsa.pub文件，没有后缀名的是你的私钥，不要让其他任何人知道。id_rsa.pub是公钥，把它发给别人，你用私钥加密的信息他们可以用公钥来解密。本地生成了私钥公钥对后，先照常用密码登录服务器，把你的公钥添加到服务器的信任列表中，用nano ~/.ssh/authorized_keys创建一个文件，把本地的id_rsa.pub里的内容完整地复制进去，Ctrl+X保存并退出。再打开/etc/ssh/sshd_config，把下面几个验证方式都改成no，只保留PubkeyAuthentication yes。PasswordAuthentication no ChallengeResponseAuthentication no UsePAM no PubkeyAuthentication yes最后重启ssh服务，你也可以先不关闭当前的连接，再开一个控制台来测试连接。同样使用ssh -p 1234 abc@your-server-ip-address，系统会自动使用你个人文件夹下~/.ssh/id_rsa来与服务器配对，输入设置的passphrase，就能登录了。如果你有多台设备要登录到同一账号，最正确的操作是每台设备都生成自己的私钥公钥对，把新的公钥先发给第一台设备，再把新设备的公钥加到服务器。还有个简单的操作是直接把第一台设备的私钥复制到其他设备，服务器中只添加这一个公钥。虽然很不正规，也不符合私钥公钥本身的意义（可以看作是唯一的设备身份认证），但对于个人用服务器也足够安全了，同一个私钥多个设备备份还可以防止丢失。无论如何，强烈建议在安全的地方（例如移动硬盘或能信任的网盘）保存一份私钥，防止你电脑出现意外后再也登不上服务器。一些密钥相关操作创建一对RSA加密的公私钥对：ssh-keygen -t RSA -b 4096 -C 'comments'修改或添加私钥passphrase：ssh-keygen -p -f ~/.ssh/id_rsa修改或添加私钥comment：ssh-keygen -c -f ~/.ssh/id_rsa公钥comment直接用文本编辑器打开在末尾修改即可。将私钥添加进本地缓存，以后使用不需要输入passphrase：ssh-add ~/.ssh/id_rsa查看当前缓存了哪些私钥：ssh-add -l移除一个缓存的私钥：ssh-add -d ~/.ssh/id_rsa部署网页服务器加强了服务器安全后就可以来正式部署网页了。Nginx是非常适合个人网站的HTTP服务器，性能强，使用简单，网上还能找到大量的教程，我参考的是这个网站。安装Nginx首先用apt安装Nginx。sudo apt update sudo apt install nginx然后把HTTP和HTTPS的端口添加进防火墙：sudo ufw allow 'Nginx Full'。这时候可以在浏览器打开http://your-server-ip-address，如果能看到一个Welcome to nginx的页面那说明安装成功了。安装MySQL或任意数据库除非是非常小的纯静态网页，不然大多数网页都会使用一个数据库来存储网页里的数据。MySQL是曾经十分流行的一个免费开源数据库，其被甲骨文收购后，原作者团队基于MySQL分支开发了继续保持免费开源的MariaDB，二者用起来没什么区别。安装MySQL可以直接用apt：sudo apt install mysql-server，然后输入sudo mysql_secure_installation来执行一些安全措施。开始时会问你要不要使用强密码，可以根据你需求选择密码强度要求等级，不建议选STRONG，有点极端了，MEDIUM是比较合适的，要求有数字、大小写字母和特殊符号。接着会让你设置一个数据库root用户的密码，这里的root跟服务器的root不是同一个，注意不要混淆。后面的设置基本上一路确认就行了，会自动禁用一些不安全的设置，例如禁止远程登录数据库。流程跑完后可以用sudo mysql测试能否进入数据库管理，输入exit或者按Ctrl+D即可退出。可以注意到这里并没有要求验证任何密码，这是因为MySQL认为你都有sudo权限了，那肯定应该能随意处理数据库。但这也是个不太安全的行为，我们需要两个操作来让数据库更安全：要求root也要使用密码，以及创建仅能操作特定database的用户。MySQL设置root使用密码登录首先还是用sudo mysql进入数据库，注意后面的每个命令都要结尾加分号才会执行。可以输入SELECT user, host, plugin FROM mysql.user WHERE user = 'root';查看当前所有用户的登录验证方式，能看到root是auth_socket，即只要是服务器的root就可以直接登录。输入如下命令将root的登录方式改为仅密码：ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password; FLUSH PRIVILEGES;为了防止出问题，跟之前一样，可以开个新控制台，使用mysql -u root -p来使用密码登录root，注意以后登录数据库不再需要sudo提权。如果出现了问题，还可以在之前的连接中输入下面的命令来重设密码：# 仅当用之前设置的密码无法登录时 ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; FLUSH PRIVILEGES;创建MySQL用户并给予权限部署网站时通常做法是为每个服务创建一个单独的数据库账号，仅给予每个账号访问对应数据库的权限。以数据库名data1，对应用户user1为例，先用root登入MySQL，然后进行如下操作：CREATE DATABASE data1; CREATE USER 'user1'@'localhost' IDENTIFIED WITH mysql_native_password BY '用户密码'; GRANT ALL ON data1.* TO 'user1'@'localhost'; FLUSH PRIVILEGES;这样就创建了一个新用户user1并给予了他完全控制data1的权限，可以用mysql -u user1 -p来登入。这里该用户的域是localhost，即本地用户。如果之后想要允许远程连接数据库，这里要把localhost改成一个百分号'%'。MySQL数据库备份这里顺便讲一下数据库备份。理论上使用MySQL的root用户可以执行所有操作，但是本着root能不用就不用的原则，我们可以再创建一个专门用于备份data1的用户。注意user1虽然能操作data1，但其并不能导出备份data1，因为缺少读取总数据的一些权限。这里我们单独为data1的备份创建一个data1_backup用户：CREATE USER 'data1_backup'@'localhost' IDENTIFIED WITH mysql_native_password BY '用户密码'; GRANT SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON `data1`.* TO 'data1_backup'@'localhost'; GRANT PROCESS, RELOAD, REPLICATION CLIENT ON *.* TO 'data1_backup'@'localhost'; FLUSH PRIVILEGES;以后每次需要备份时，输入mysqldump -u data1_backup -p data1 > backup_filename.sql即可。安装PHP根据你想要部署的网页框架安装所需版本的PHP：sudo apt install php-fpm php-mysql php-mbstring，mbstring库是用来正确处理非ASCII字符的。配置Nginx网页服务器必备的模块都安装好后我们就可以用Nginx来部署我们的网站了。首先我们在Nginx的网站存储位置创建一个项目文件夹sudo mkdir /var/www/你的域名，如果没有域名随便取个名字就行。注意/var/www/这个文件夹需要提权才能写入，但我们不能给网页服务器sudo权限，所以我们把这个项目文件夹所有权转给当前用户sudo chown -R $USER:$USER /var/www/你的域名。你可以在这个项目文件夹下先添加一个index.html文件，随便打几个字，用于之后的测试。接着我们创建一个我们网站的配置文件sudo nano /etc/nginx/sites-available/你的域名，里面先输入如下内容并保存：server { listen 80; server_name 你的域名 www.你的域名; root /var/www/你的域名; index index.html index.htm index.php; location / { try_files $uri $uri/ =404; } location ~ \.php$ { include snippets/fastcgi-php.conf; fastcgi_pass unix:/var/run/php/php8.1-fpm.sock; } location ~ /\.ht { deny all; } }其中的php版本根据你安装的来修改。这个最基本的配置文件设置了网站入口和PHP解析器，但仅支持HTTP连接，如今随着浏览器（特别是Google Chrome）安全标准的提高，一个网站如果不使用HTTPS协议加密，很有可能会被直接禁止访问。不过我们先把后面的网站服务器基本设置搞定再折腾SSL证书。下一步是把我们网站的配置文件作为当前使用的配置文件sudo ln -s /etc/nginx/sites-available/你的域名 /etc/nginx/sites-enabled/，同时把默认的删除sudo unlink /etc/nginx/sites-enabled/default。然后让Nginx检查你的配置文件是否合法sudo nginx -t，并重新加载sudo systemctl reload nginx。现在再访问http://your-server-ip-address，应该可以看到你在index.html里随机打的字了。为了测试PHP是否正确安装，你还可以在项目文件夹中创建一个info.php文件，输入：<?php phpinfo();然后浏览器打开http://your-server-ip-address/info.php查看是否显示了调试信息。域名与SSL设置为了使用HTTPS协议，我们需要给自己的网站配置一个SSL证书。参考如下文章，我们用免费的Certbot来给我们的网站签发一个证书。前提条件是你已购买一个域名，并用Cloudflare或相似DNS服务商把该域名指向了你的服务器IP地址，要同时设置xxxx.com和www.xxxx.com。先安装需要的程序sudo apt install certbot python3-certbot-nginx，然后输入sudo certbot --nginx -d 你的域名 -d www.你的域名来签发证书，第一次使用会要求你填写邮箱地址。然后Certbot会自动在你网站的Nginx配置文件里添加一些条目。可以打开确认一下是否主配置里的监听端口改成了listen 443;，还增加了一些包含certbot注释的行，最后还把80端口导向了404错误。现在你就可以用https://your-server-ip-address来访问自己的网站了，能看到浏览器非常开心地给了你安全的标志。Certbot签发的SSL证书有效期为90天，到期会自动更新，一般不再需要去关心了。最后的细节根据网站框架的不同还有一些小细节需要处理一下，如果你像我一样使用GitHub来同步代码，同时网站有上传附件的功能，需要在Nginx的网站配置文件里设置一个最大附件体积，还要禁止访客访问.git文件夹，因为其中很可能存储了例如你的姓名和邮箱等信息，最好不要让攻击者知道。server { root /var/www/你的域名; # 一些其他配置 client_max_body_size 100M; location ~/\.git { deny all; } # 更多配置 }（可选）利用Docker部署
简介位于海德堡和海尔布隆中间的一个非常德国特色的辛斯海姆科技馆Technik Museum Sinsheim，大概也是巴符州周末亲子游的热门景点。科技馆的重磅展品是位于房顶上的两架人类迄今为止仅有的投入商业运营的超音速客机：协和和图144。两架飞机都以斜向上的起飞姿态摆放，可以通过楼梯进入参观。当然，两架客机内的空间都十分狭窄，驾驶舱也是非常复杂。除了这两架超音速客机，科技馆室外还有不少架老飞机可以进入参观。室内展厅有两个，一个展厅的主要展品是大量的老爷车以及二战时期的兵器和载具，该展厅里有不少投币后能操作的展品，比如轮子能转的蒸汽火车和炮能转的坦克。另一个展厅里主要的展品是大量F1赛车，也有一些老爷车和豪车，其中还有将军最喜欢的迈巴赫，还有一个侧厅里展示了很多火车头。在室外还有一片空间摆放了一些坦克、防空炮、炮弹等武器装备，科技馆的入口旁边还有二战时的德国潜艇U17，不维护时也可以进入参观。整个科技馆面积很大，展品也相当丰富，走马观花逛一圈都要至少三个小时，如果是军迷、车迷、火车迷、航空迷，在馆里看一整天都不一定能全看完。总之强烈推荐对这些装备感兴趣的人专门跑一趟来参观，光进入两架超音速客机参观就已经感觉值回票价了。照片[collapse status="false" title="室内展厅"][/collapse][collapse status="false" title="室外展区"][/collapse][collapse status="false" title="超音速客机"][/collapse]交通Sinsheim本身是个很小的镇子，但公共交通很方便，从海德堡坐S-Bahn能直达科技馆门口。自驾也有个挺大的停车场。科技馆旁边就是德甲霍芬海姆的主场，有兴趣的还可以顺便去看场球。走十分钟还有麦当劳和KFC，吃饭也很好解决。位置
Bruder-Klaus-FeldkapelleBruder-Klaus-Feldkapelle位于科隆附近的田野中，设计师是拿过普利兹克奖的瑞士建筑师彼得·卒姆托Peter Zumthor，他最著名的作品是位于瑞士的瓦尔斯温泉浴场。这个小礼拜堂建成于2007年，用的建材基本都来自本地，112根云杉木组成了礼拜堂主体的帐篷结构，本地团队使用古法打灰给建筑糊上了一圈混凝土，浇筑混凝土时的支架开口被几百个玻璃塞子塞住。 礼拜堂从外面看是一座没窗户的五边形塔楼，进入后看起来像是一个向上开口的洞穴，墙面能看出云杉木的结构。由于内部空间是露天的，光线和雨水都能直接打进来。我们是在刚下完雨的时候进去的，地上积的水正好是一个水滴形状的，挺有意思。礼拜堂里空间很小，只有一个长凳，一个摆蜡烛的小桌子，有一本留言册，还有一个Bruder Klaus的半身铜像。我们是去杜塞找日本理发师理发的周末找了一天租了辆车来参观的Bruder-Klaus-Feldkapelle，开到田边停下，沿着田野上的小路走到礼拜堂。礼拜堂夏天一般开放到下午5点，免费进入，里面有牌子写了不要拍照，不过如果没有其他人，自己拍两张不影响别人应该也无所谓。总的来说是一个很有特色的小礼拜堂，喜欢建筑的可以在路过科隆的时候顺便去看看。[collapse status="false" title="点击展开照片"][/collapse]交通坐公共交通去Bruder-Klaus-Feldkapelle一般是从科隆出发，先坐小火车到周边的大村子，然后转公交到礼拜堂附近的小村子，在田野里走大概15分钟就能到了。如果是自驾，从科隆出发大概45分钟，一般只能开到小村子里停车场，然后也差不多是要在田里走15分钟。位置教堂的位置停车场的位置
Japan Haus Original Japanese Wagyu & Crêperie
评分9.0/10★★★★★目前做可丽饼的甜点师还在休产假，估计还要等至少半年才能重新上架。简评位于Bogenhausen富人区里的一家小餐馆，主营日式牛丼和可丽饼。他们家的主要特色是使用的是高品质的尾崎和牛，牛肉油脂丰富，香气很足，入口即化，有浓浓的奶香味。缺点也有，那就是贵，一碗和牛盖饭要22欧，或许适合Bogenhausen的老钱们吧。牛丼本身的调味也很正宗，还可以选择搭配虾天妇罗或者炸豆腐，也都很好吃。咖喱和牛饭是常规的日式咖喱味，感觉和牛配这个有点浪费了。这家餐馆之前的主要特色其实是冰淇淋可丽饼，但甜品师大概24年下半年开始去休产假了，目前（2025年10月）还没回来，所以还没能吃到。看图片也是非常诱人，等甜品师回归一定要去试一试。除了现吃之外，这家店还售卖生的和牛牛排或者肉片，可以买回家自己煎或者做寿喜烧，价格大致是19欧100g吧，也是相当的贵，可能最多能一年奢侈一次。还有品质也很不错的抹茶粉卖，味道也很浓郁，同样的问题也是很贵。图片[collapse status="false" title="点击展开"][/collapse]地图
朗香教堂 Notre-Dame du Haut朗香教堂位于法国Ronchamp小镇旁的山上，是现代主义建筑大师勒·柯布西耶最重要的作品之一，与他设计的其他建筑一起入选了世界文化遗产。教堂本身我没什么可介绍的，学建筑的或者对建筑感兴趣的必然都会学到朗香教堂，每个人也都会有不同的见解。对我这个搞工科的纯建筑外行来说，朗香教堂给我的感觉更像是一个精致的大型混凝土雕塑。朗香教堂附近没啥别的玩的了，所以一日游当天往返应该是最理想的旅游方式。但教堂所在的村子比较偏僻，公共交通时刻较少，可能离得远点的只能在附近住一晚。另外由于教堂的内部的光线在不同的阳光角度下也完全不同，想深度领略朗香教堂魅力的比较推荐上午和下午都进教堂看看。前几年朗香教堂一直在进行修缮工作，室内室外有不少脚手架，目前修缮工作已基本完成，我们去的时间点（2025年4月下旬）建筑内外已无脚手架，整个外墙焕然一新，可以说现在是去参观朗香教堂的最好时机。[collapse status="false" title="点击展开照片"][/collapse]交通去朗香教堂最推荐的交通方式是自驾，可以一路开上山停在教堂门口的停车场。公共交通也不是没法到达，教堂山下的Ronchamp小镇有个火车站，从车站出发可以选择走土路爬山，大概25分钟能到达教堂，路线没啥难度，但至少需要穿方便走路的鞋子。如果因为种种原因（例如下雨）没法走土路爬山，还可以走汽车上山的盘山公路，时间要40分钟了。另外还要注意，Ronchamp车站的时刻表非常不规律，非早晚高峰期间车次很少，周日甚至早上十一点之前根本没有车，一定要提前做好计划防止错过一班车在火车站坐牢几个小时。住宿Ronchamp镇上有几家小旅馆，但看起来都比较老旧了，加上镇子上看地图几乎没啥超市和餐馆，为了晚上不饿死，我们选择了住在Ronchamp附近大点的小城市Belfort。[collapse status="false" title="Belfort的标志狮子雕像"][/collapse]吃饭Ronchamp真的是个很小的镇子，看地图镇上几乎没啥吃的，在主干道上有一家意大利餐馆，叫做Contatore di Cristo - Food Court Italien - Epicerie fine，是非常典型的农村小商店+餐馆，更多顾客其实是来买奶酪和火腿的。有个英文菜单，但老板娘基本不会说英语，靠比划能勉强交流。这家口味其实还可以，海鲜意面给的小海鲜还挺多。除了这家外往镇子里走一些还有家看起来稍微高级一点的法餐Sarl Restaurant Marchal，但他们家开门时间比较尴尬，我们去的时候没空去。不过Belfort我们随手订的一家正宗法餐Le dix'vins给了我们挺大的惊喜，是在酒店附近搜餐馆时随机看到的，订座时正好有最后一个双人桌，到了才发现是家米其林推荐。餐厅人均四五十欧，菜单随季节变化，我们点的前菜主食都很不错，甜点也还行但没什么特色，总之非常推荐。[collapse status="false" title="点击展开照片"]免费的小前菜，葱味的啫喱，外国人可能觉得挺稀奇，我们吃起来就像是腌肉的葱姜水果冻，倒是也不难吃。前菜生蚝牛肉塔塔，有一点点生蚝的腥味，不过还是很好吃的，里面有一些白醋的小珠，整体味道挺有层次。肉眼牛排，火候刚刚好，无论是肥油还是瘦肉都很嫩，可以感受出牛肉品质应该也很好，毕竟绝大多数牛排店的肉眼牛排的肥油部分都很难切也很难嚼。配的烤土豆和酱都很不错，不过那根烤大葱有点抽象。烤鹌鹑胸肉，是非常经典的法餐食材，也是火候非常好，不过就四块吃得不够爽。甜点是一个糖霜做的球壳，里面有奶油和苹果，味道比较普通，糖霜壳过于甜腻了。[/collapse]餐厅地址：
简介位于萨尔茨堡东边的上奥地利Oberösterreich湖区是一片湖光山色不输瑞士的区域，拥有众多的湖泊和山脉，还有许多依山傍水的优美小镇。其中，最著名的地区莫过于被誉为最美小镇的哈尔施塔特Hallstatt以及其所在的哈尔施塔特湖Hallstätter See了，旺季时，每天有超过一万名游客来此观光打卡（其中很大一部分来自中日韩）。去哈尔施塔特的路上会经过巴德伊舍Bad Ischl这个小城，据说是当年茜茜公主跟奥地利皇帝一见钟情的地方，前两年被评为了欧洲文化之都之一，对茜茜公主感兴趣的可以去看看皇帝的夏宫。除此之外，沃尔夫冈湖Wolfgangsee及其北岸的沙夫山Schafberg也是非常受（东亚人）欢迎的景点。还有阿特湖Attersee、蒙德湖Mondsee、特劳恩湖Traunsee等湖泊，山水也都很不错，欧洲人去度假的多，亚洲人比较少。另外，还有个曾经很小众但近期有成为某国内社交平台网红小镇趋势的戈绍Gosau，往山里走能到戈绍湖Gosausee，天气好的时候能看到远处2995米的达赫施泰因山Dachstein，还有登山道能一路到达山顶（高难，耗时10小时起步）。我们是十月初的时候利用德国国庆的小假期去上奥地利湖区转了一圈，一共了四天三晚，行程安排还是比较特种兵的，如果时间充足，找两三个小镇住上一星期是比较休闲的度假玩法。十月初的天气已经挺冷了，衣物基本到了加绒冲锋衣的级别。我们去的前两天天气比较阴，虽然基本不下雨，但雾气很大，山上啥都看不见。最后回程的那天放晴了，可惜小长假也结束了，只能匆匆去哈尔施塔特、达赫施泰因山腰和戈绍湖拍了两张晴空下的照片抓紧回德国。然后就汇入了假期末尾度假归来的巨大车流，萨尔茨堡到慕尼黑的高速全程堵车，原本一个多小时的高速开了有三个多小时。哈尔施塔特 Hallstatt哈尔施塔特被各大媒体誉为世界最美小镇之一，同时也被评为了世界文化遗产。小镇位于Hallstätter See西岸，依山而建。哈尔施塔特小镇本身非常小，主要区域只有一条街、一个小广场和一个新教教堂，整个镇上的行人估计超过99%都是游客，其中又以中日韩为绝对主力。只能说幸好奥地利隔的远，不然黄金周怕是这狭窄的街道要堵得水泄不通了。从大巴下车点到镇中心的街上充斥着售卖义乌小商品的小店，甚至还有专门开给日本人的纪念品店（说不定哪个巷子里还藏着中文免税店，我们没注意到）。从早上九点起，一辆一辆大巴车把一批又一批东亚游客运到这个最美小镇打卡，大家在同样的点位，对着同样的角度，摆着同样的姿势，拍着同样的照片。项目丰富点的团还会带游客坐湖上游船，其实我觉得游船上视角应该也不错，能看到紧贴着山丘错落有致的小镇全貌。时间再多点的团还会带大家坐尺轨缆车上到山上的盐矿Salzwelten，缆车站旁就有个观景平台，能俯瞰整个哈尔施塔特小镇，雾天来看小镇就像是漂浮在一片云海中的一叶孤岛，非常有意境。过了观景台就是鲜有东亚旅游团涉足的盐矿景点了，这个盐矿据说有超过七千年的历史，最早在哈尔施塔特定居的人多数就是盐矿工人。目前这个盐矿已经完全停工并被改造为了参观景点，参观项目和贝希特斯加登的几乎完全一样，都是乘坐矿车、矿工滑梯、地下盐湖以及各种开采工艺的讲解。盐矿如果时间充裕，去体验一下了解了解知识还是不错的，不过即使东亚人旅游团不去，但还是最好提前订票，以及上山的尺轨缆车旺季一定要提前订票。除此之外，顺着哈尔施塔特镇里的楼梯岔路往山上走还有一个天主教堂，教堂附近有一个Beinhaus人骨室，是个免费的小景点，由于镇上土地有限，当坟墓不够用时就会把老的遗骸转移出来放到这个人骨室去，对真实人骨骸感兴趣的可以去看看。巴黎的地下墓穴也是类似用途。总的来说，如果只考虑风景，哈尔施塔特绝对是个欧洲旅游必去的景点，下面那张晴天的标准视角照片我直接拿来当办公室电脑桌面了，真的很漂亮。但这个小镇也的确实是过度旅游了，过量的游客让旅游体验严重下降，只有一大早八点到达才能获得良好的体验。同时也由于游客的打扰，镇上很多居民都搬离了。最后还有个给自驾游客的小Tip，如果只去小镇打卡拍照，可以在过隧道时留意下隧道的观景平台是否有车位，那里一是免费，二是下楼走两步就是打卡点，不用经过义乌小商品一条街。风景照片[collapse status="false" title="点击展开"][/collapse]戈绍 Gosau戈绍是哈尔施塔特西北面山谷里的一个小镇，喜欢开山路的可以选择萨尔茨堡出发经过这里到哈尔施塔特。小镇的风光是阿尔卑斯山区山谷小镇常见的模样，随着地势起伏高低交错的一栋栋小屋，一两个教堂修道院点缀其中，还有大片绿色的草地，以及放养的牛羊。戈绍近年来有成为小红书网红小镇的趋势，我们看到了很多中国人在进出戈绍的那个路牌下拍照打卡。我们来戈绍主要是去了小镇旁的戈绍湖Gosausee，湖泊本身也是阿尔卑斯山区常见的湖，平静清澈，倒映出湖边的木框架小屋。戈绍湖主要的特别点是它位于2995米的Hoher Dachstein山峰脚下，天气好时能看到雪山倒映在湖面上，这个是真的风景不输瑞士了。同时这个湖也是Dachstein的一条登山道的起点，这条道前半段是路程较长但较平缓的路，走过两个湖泊到达山脚下，然后是高难的黑道爬到山顶，路程中有两三个小屋提供过夜和简餐，如果计划挑战一定要做好充足的准备。风景照片[collapse status="false" title="点击展开"][/collapse]达赫施泰因山脉 Dachstein达赫施泰因包含挺大一片山脉，除了上面说的离戈绍湖比较近的2995米的顶峰，在哈尔施塔特边上还有一些其他的山峰。在Obertraun小镇旁有缆车站可以上到这一片的最高峰，2108米的Krippenstein，山上有一些人造的景观，比如一个鲨鱼雕塑，还有个五指观景平台，可以俯瞰整片哈尔施塔特湖区。Krippenstein山腰处还有两个大冰洞，购买门票可以跟随导览进入参观。整片上去还能看到四通八达的滑雪缆车，想必这片也是重要的滑雪胜地。Dachstein的最高峰也有缆车能上到2600多米高的平台，缆车站旁有观景平台、玻璃栈道等旅游设施，还有简单的冰川徒步路线能到达2700米左右的Seethalerhütte，但想登顶2995米的顶峰还是需要攀岩的。风景照片[collapse status="false" title="点击展开"][/collapse]沃尔夫冈湖 Wolfgangsee沃尔夫冈湖的主要特色是湖北岸Schafberg山的小火车，天气好的时候红色的车厢在蓝天白云绿草下很好看。但我们去的那天大雾，检查缆车官网Webcam后发现山顶什么都看不见，于是我们选择了离开，等以后哪天天气好来进行一个一日游。挺有意思的是这个景区好像特别受韩国人欢迎，我们纠结去不去的那点时间就看到了好几个大巴送韩国旅游团过来。同样，中国人也不少，东亚面孔占了小火车游客的90%以上。当天午饭后我们又看了看Webcam，发现沃尔夫冈湖南岸的Zwölferhorn山顶雾差不多散了，于是我们赶往缆车站上了这座山。然而到了山顶发现林子里仍然是大雾弥漫，跟寂静岭一样，能见度不超过十米。唯一有点安慰的是我们到观景台时雾气稍微散掉了一点点，露出了一点湖面，没有让我们的缆车票完全白买。风景照片[collapse status="false" title="点击展开"][/collapse]阿特湖 Attersee我们第一天住的湖区，很标准的阿尔卑斯山区湖泊，没有什么特别值得一说的，加上我们去的日子都雾蒙蒙的，并没能体验到很惊艳的湖光山色。不过天气好的时候坐民宿阳台上喝喝茶发发呆一定也会很享受。风景照片[collapse status="false" title="点击展开"][/collapse]交通上奥地利湖区这一片最方便的交通方式是开车，慕尼黑出发先无限速高速狂飙到萨尔茨堡（记得提前购买奥地利的高速通行证），然后继续高速路开到湖区附近转上国道。整片湖区的道路建设维护得都不错，有一定的山路，但基本都是在山谷中走，不会很难开。除非你想翻过哈尔施塔特湖东边的山去另一边的镇子里的大超市，那山路就比较刺激了。还有开车去哈尔施塔特一定要早点到（上午九点之前），不然车位满了就只能把车停到很远的湖对岸去了。纯公共交通在上奥地利湖区也不是不能玩，可以先坐火车到区域中心城市Gmund，然后有小火车能坐到哈尔施塔特湖对岸的Obertraun小镇，从那里可以坐公交或者轮渡抵达哈尔施塔特。其他的湖和小镇也基本都有公交连接，像沙夫山小火车站的门口就是公交车站，可以连接到周边的小镇，或者还可以坐湖上的轮渡。不过时刻表一定要提前了解，很可能淡季旺季的车次船次有区别。住宿这次旅行的前两晚我们选择了民宿。曾经Airbnb是订民宿的首选平台，但是这平台早就不是出租闲置房屋的平台了，现在绝大多数房源都是有公司专门运营的，价格一点都不便宜，而且搜索时显示的标价不是最终价。如今很多民宿也上了Booking，价格透明，评价通常都比较靠谱，跟房东的交流也更方便，建议欧洲旅游订民宿优先考虑Booking，或者可以直接去当地的旅游信息网站查询。我们第一晚住在了Attersee东岸的Steinbach小镇，镇子上有一家能买点基本物资的超市，超市旁边是一家批萨店。民宿叫FeWo Atterseeperle，一个卧室一个大客厅，能睡下至少四个人。房子装修现代，有个正对Attersee的大阳台，夏天在阳台上吃饭应该很爽。我们十月份去的时候175欧一晚，人均60欧，可以接受。第二晚我们选择住在戈绍，这个小镇的住宿选择不多，价格也比其他几个湖边更贵。我们住的民宿叫Dangos Mountainview Gosau，可以住四个人。这栋房子是是房东这两年新盖的，位于半山腰，主卧可以俯瞰整个山谷小镇，视野特别好。价格要250欧一晚，人均80欧+有些贵了，但为了这无敌的视野还是值的。第三晚考虑到有同行人是坐火车过来，为了他们不用拖着行李逛小镇，我们选择了住哈尔施塔特周边的酒店。哈尔施塔特镇上的酒店和民宿价格都巨高，不是一般人能承受的，所以哈尔施塔特湖对面的Obertraun小镇是个可选项。Obertraun还通火车，公共交通来哈尔施塔特也是住这个镇上比较方便。我们订的是Seehotel am Hallstattersee，房间很小，三人220欧一晚，景区价勉强可以接受。同行人住的是隔壁的Seerose Obertraun，价格还要再便宜一点点，但房间设施要差不少。如果全程开车，我是更推荐住在北面那几个湖的周边，大房间大阳台，风景也很不错，性价比比住哈尔施塔特高多了，开到哈尔施塔特也就半小时到一小时。吃饭在德奥的阿尔卑斯山区通常不用期待有什么特别好吃的东西，主要就是炸猪排Schnitzel等传统食物。我们前两天都是在湖边或者晚上住的镇上随便找个餐馆，通常也没有什么选择。第一天Wolfgangsee在湖边找了个有湖景的看起来挺精致的餐厅，不过吃的就那样，价格较高，主要付费的是窗口风景。我们还在这家餐厅附近的街上看到个很难评的标牌，意思是给美食家的肉糜肠，令人忍俊不禁。第二天到戈绍后，我们午饭在湖边的客栈解决，我点了比较保险的Tiroler Gröstl，类似于德国这的“农民早餐”，即煎土豆配煎培根香肠洋葱，再加两个煎鸡蛋，这一锅能量拉满，很难做难吃。而同行的朋友经验不足，点了一份炖鹿肉，餐厅的出品也是一点不令人意外，端上来黑乎乎的一盘，鹿肉腥膻味极重，只能说这种高级餐厅做出来都味大的野味更不能指望山中客栈能做好。于是晚上我们在戈绍镇上可能唯一开门的一家餐馆，一人点了一份炸猪排。哈尔施塔特城里的餐馆一眼旅游区价格，为了不被坑太多钱，我们选择了停车场附近的一家街头汉堡摊，味道还行吧，价格也不算便宜，但至少比性价比极低的景区餐馆好点。如果不是快要饿昏了，强烈建议不要在哈尔施塔特镇上吃饭。最后住Obertraun的那天晚上我们在进山的路上发现一家高级餐馆Gasthaus Koppenrast，家族经营，当前主厨肯定是去法国进修归来的，酱汁和摆盘都有法餐的风格，主菜的味道都很不错，肉的火候正好，不过价格也不便宜，如果点一套前餐主食甜点，人均要50-60欧，但我们都认为物有所值，至少比旅游小镇的坑钱餐馆好多了，很推荐自驾来哈尔施塔特的人多开个半小时好好吃顿饭。[collapse status="false" title="点击展开图片"][/collapse]
概述图卢兹是法国西南部的大城市，人口在法国排名第四，是法国重要的科研和教育中心。对我来说图卢兹最出名的点在于那里是空客Airbus的主基地，人类历史上最大的客机A380就在这里生产。同时图卢兹的油封鸭腿也很出名，因此，这次图卢兹之旅的主要目标就是图卢兹的航空博物馆以及传统油封鸭。本次旅行时间是2024年十一月初，利用了德国万圣节的一天假凑了个四天的小长假，一共在图卢兹呆了两天三晚。景点据维基百科描述，图卢兹是法国西南部挺重要的旅游城市，老城跟其他欧陆城市的老城差不多，市政厅广场和几个大教堂是市内的主要景点，老城里也有不少美术馆，时间原因没有进去参观。加龙河Garonne流经图卢兹城内，坐在河边看日落也是不错的休闲方式。会法语的可以去看看图卢兹博物馆Muséum de Toulouse，是个讲物种起源的博物馆，有很多生物标本，还是挺有意思的，就是只有法语的讲解，如果不是因为那个周日正好是免费入场日，我们应该不会去。除此之外图卢兹市郊还有两个重磅的展馆，下面具体介绍一下。航空博物馆 Musée aeroscopia图卢兹的航空博物馆Musée aeroscopia位于图卢兹机场附近，紧挨着空客的生产基地，所以称其为空客博物馆也不为过。博物馆停放了大量航空史上的重要飞机，展馆内部有A300B和协和式客机可以进入参观。A300B是空客第一款干线客机，也是人类第一款双发宽体客机，从此空客正式进入世界航空市场并逐步壮大。A300B边上就是协和式超音速客机，人类工程之光，代表了当年西欧最顶尖的航空工业水平，可惜由于制造成本太高，燃油价格还在八十年代暴涨，加上2000年被DC-10掉落物击中造成的惨烈事故，协和式客机最终还是在2003年黯然落幕，但是协和的英法合作模式催生了空客公司的诞生。馆内还有基于波音377客机改装的超级彩虹鱼Super Gubby运输机，曾经空客用此飞机来从欧洲各地运送大部件到图卢兹工厂总装，但因为其装卸货必须断开驾驶舱连接，非常麻烦，后来空客基于A300B设计了自己的超级大白鲸Super Beluga运输机，从头顶打开货舱，显著提高了装卸效率。除了民用飞机外，展馆内还有米格15、幻影3、美洲豹等军机。展馆外的园区里也停了很多好货。最重磅的莫过于一架空客A380的原型机了，里面被布置成了一个A380的展览馆，拆掉椅子后能感受到这个史上最大的客机内空间有多么宽敞，跟馆内狭窄的协和客舱形成了鲜明的对比，可惜世界经济不景气，航空公司为了极限省钱纷纷放弃枢纽型四发超大客机，转向点对点的两桶一棍，A380和B748估计再运营个五到十年也要彻底淡出人们的视野了。A380旁边还停了一架A320和一架超长法棍A340-600，不过只能在周边看，不能接近。展馆的另一边室外还停有另一架协和，还有世界上第一架双发喷气式客机卡拉维尔，不过都不能进入参观。展馆门外还有架空客的军用运输机A400M，好像在带领下是能进入参观的，但不知道在哪预约。对于航空迷们来说，图卢兹航空博物馆还有个必玩项目：空客工厂参观。首先在导览官网订票，曾经的参观项目是A380的生产线，但A380停产后只有A350生产线参观了。导览会先坐大巴进入空客的厂区，一路上导游会介绍空客的历史，园区里能看到空地上停着不少还没装发动机的飞机，还有全部组装好喷涂完的等待试飞的飞机，远远地还能看到一排待命的超级大白鲸XL。经过跑道时我们还看到一架准备交付给南航的A320neo，出厂注册号是F-WWDH，同时还有架在试飞的达美A350正在起飞。其实就在跑道边看试飞机起飞降落对航空迷来说就很爽了，早上刚到航空博物馆的时候我们还看到一架超级大白鲸XL刚起飞飞往汉堡。A350的产线本身并没有太大意思，厂房实在是太大了，里面有四条流水线涵盖了A350生产组装的全部阶段，参观者的观察窗在最终的内饰安装产线上方，看到的已经基本是个完整的飞机了，远处的产线因为设备的遮挡几乎看不清，我们去的那天是周六，大多数工人都放假了，产线上也看不到什么人在工作。总的来说，对于航空迷，即使是仅仅为了这个航空博物馆去趟图卢兹也是完全值得的，事实上我这次去图卢兹也只有这一个目标，能亲自登上协和客机和A380真的是很难忘的体验。如果有时间，我可能会扛个长焦大炮在机场跑道旁呆一天。不过有一点需要注意，航空博物馆周边就是厂房，唯一的小餐馆我们那个中午居然订满了，因此建议自带一点干粮防止饿死。[collapse status="false" title="一些博物馆和导览的照片"][/collapse]机械艺术馆 Halle de la Machine位于图卢兹东南市郊的Halle de la Machine是个看起来相当酷的巨大机械艺术展馆，展出的是la Machine这个创意公司做的各种机械巨兽，看图片园区里常驻的机械至少有米诺陶和巨大蜘蛛，最厉害的是这些大机械不仅能移动和做动作，还有各种声光特效，游客还能站在米诺陶背上巡游。我们到图卢兹的时候，正好米诺陶和另一个巨蝎在老城里巡游，看巨大的机械在狭窄的老城街道移动，非常的震撼。很可惜由于离城区要坐将近一小时的车，我们没能腾出时间去参观展馆。如果时间充足，强烈建议过去看看。[collapse status="false" title="官方的图片"][/collapse]饮食图卢兹的饮食和普通的法国饮食差不多，普通餐厅里常见的基本就是蜗牛、鹅肝、牛排、汉堡、鸭胸，配的主食通常是炸薯条（毕竟叫French Fries）。图卢兹的本地特色是卡酥来砂锅Cassoulet，据说做法起源于英法百年战争时期，用于慰问前线士兵。这道菜是将大量的白扁豆、培根、猪肉、香肠等食材和各种香料在砂锅中长时间焖煮，图卢兹的做法通常会使用图卢兹香肠和油封鸭腿。由于耗时耗力，卡酥来砂锅只能在一些传统老店才能吃到。刚到图卢兹的那个晚上我们在机场酒店周边觅食，由于那天是假日，机场所在的村子基本没有开门的餐馆。兜了一圈后我们找到了可能是村子里唯一开着的餐馆La Côte et L'Arête，好像还是个法国连锁的烤肉餐厅。我们点了煎鸭胸和火腿奶酪可乐饼，鸭胸还不错，火候很好，炸可乐饼很香很好吃，但又是火腿又是蛋黄酱又是油炸，吃到第三块就有点腻了。甜点叫解构版“柠檬酥皮挞”，是把挞皮和柠檬蛋白霜直接铺碗里而不组合，有点创意，但味道有点过于甜腻。第二天中午我们先在老城里随机找了家做Galette薄饼的店，我点了配图卢兹香肠的，味道中规中矩。晚饭去了著名的做卡酥来砂锅的老店Le Colombier，前菜点了法式焗蜗牛和小龙虾芦笋饺子配贝类白酱，都挺好吃，饺子的酱很浓郁。主食自然是卡酥来砂锅配油封鸭腿，很难评价的菜，上面的油封鸭腿第一口咬下脆皮竟然给我一种啃慕尼黑猪肘子的感觉（实际上脆皮的原理也差不多），鸭腿的肉质也不是很嫩，但没有德国吃的鸭子那么重的鸭臊味。除了鸭腿和香肠，整个砂锅里就全部是炖豆子和一些培根和猪油，我只能说确实很适合慰问士兵，能量那是非常充足了，但很难说它多好吃。包含卡酥来砂锅的套餐大概45欧，砂锅那堆豆子足够两个人吃饱了，可以来体验一下。第三天中午我们去了朋友推荐的牛排店Carson City，32欧的套餐，选了一份鹅肝前菜，主食Entrecôte，还有个甜点冰淇淋，上来牛排巨大一块，还有巨量的薯条和沙拉。两个人吃一个套餐完全够了，价格相当实惠，撑得我们都没吃晚饭。但这块肉眼牛排里筋还是挺多的，并不是很容易切断和咬断，我感觉这种脂肪没有和牛那么丰富的牛排拿去切切炒个黑椒牛肉粒可能更好吃。还有家面包甜品店Boulangerie Cyprien非常值得推荐，就在上面的Carson City那条街再往下走一点，可丽露和各种小蛋糕都很好吃，也不怎么甜腻。不得不说，这几天吃的跟我们刻板印象中的法餐差别很大，我从小的认知中，法餐的核心应该是精心熬制的各种酱，这几天吃到的最接近的大概是那家砂锅老店的前菜饺子，可能这种吃法也是需要金钱作为基础的吧。大多数街头的餐馆还是大开大合量大管饱的烤肉汉堡这种平价的平民食物，最多再加上油封鸭。总体味道也就中规中矩，感觉跟德国街头的啤酒馆炸猪排烤猪肘拉不开多大差距。但稍微精致点的法餐就比调味全一个味的德国菜要高到不知道哪里去了。[collapse status="false" title="点击展开照片"][/collapse]交通图卢兹是法国西南部的重要交通枢纽，法国内部过去可以坐高铁，德国可以坐飞机，图卢兹机场离城区很近，极慢的电车爬半小时就到市中心了。市内交通上，图卢兹有A线和B线两条地铁，是非常先进的无人驾驶，市中心的车站还有屏蔽门（只在市中心坐过地铁，不知道出了城区的情况），同时还有条连接机场和火车站的C线正在修建。地面上，有轨电车线连接了市中心和机场以及空客工厂，因为我们住在了机场边上，这条线也是我们主要的交通方式，不过这电车开得属实比较慢。
前言使用Ubuntu时，很多软件并不包含在apt包管理工具中，或者apt提供的版本太老，因此我们时常需要下载已编译好的软件。为了避免依赖问题，这些软件有时会打包成AppImage，下载下来后直接双击打开就能运行，任务栏可以看到正确的软件图标。但如果要把这个软件像apt安装的软件一样添加到应用程序列表里，还需要一些额外操作获取软件图标。具体步骤以Mesh Lab这个程序为例，从官网下载的是一个.AppImage文件，可以看到这个文件的图标是默认的小齿轮。但给这个文件赋予执行权限chmod 755 MeshLab.AppImage并双击执行后，能看到任务栏里有正确的程序图标。我们首先从程序包中提取图标。在命令行中输入./MeshLab.AppImage --appimage-extract可以提取出应用的所有文件，其中可能有个xxx.png的图标文件，同时可能还有个文件夹叫usr，打开后还有share/icons等文件夹，继续深入文件夹可以看到包含各个分辨率的图标的文件夹，每个分辨率下的文件名应该是相同的，例如我这里是usr/share/icons/hicolor/512x512/apps/meshlab.png，记住这个名字。接着，我们要确认这个程序是所有人都可使用，还是仅当前用户需要。如果要让所有用户使用，通常我们会把AppImage放在根目录的/opt/文件夹下，然后把各分辨率图标复制到/usr/share/icons/里。如果仅有一个图标，可以考虑根据它的分辨率把它丢到对应的icons/hicolor/分辨率/apps/文件夹下，也可以把这张图放在/opt里，之后使用绝对路径。如果仅当前用户使用，则把这个AppImage放在自己的home目录下，放哪都无所谓，我是创建了一个~/Applications/文件夹专门存放所有的预编译应用。同样我们要把应用图标放到正确的位置，这里是放在自己home目录的~/.local/share/icons/。我们还需要获取程序运行时窗口的名字。直接双击AppImage运行这个程序，打开一个命令行并输入xprop | grep WM_CLASS，鼠标会变成一个十字，在程序窗口中点一下，命令行中会显示窗口的名字，例如Mesh Lab这里是WM_CLASS(STRING) = "AppRun.wrapped", "MeshLab_64bit_fp"，记下后一个名字，这里是MeshLab_64bit_fp。准备工作都做好后，创建一个文件起名叫meshlab.desktop，文件名叫什么无所谓，自己能认得就行。如果想要对所有用户生效，把这个文件放在/usr/share/applications/里，如果只需要对当前用户生效则放在~/.local/share/applications/。用记事本打开，写入如下内容：[Desktop Entry] Type=Application Name=MeshLab Exec=/opt/MeshLab.AppImage %F Icon=meshlab Terminal=false StartupWMClass=MeshLab_64bit_fp这些条目中，Type、Name、Exec是必须要有的，Type一般就是Application，Name是在应用菜单和任务栏里会看到的名字，Exec是程序运行的路径和参数，这里的%F指传递文件名参数，可能类似于把文件拖动到图标上这个操作，具体要填什么参数取决于应用的需求。Icon和StartupWMClass也是非常推荐填写的字段。如果之前把各分辨率的图标复制到了.../share/icons里，Icon字段填写图标的文件名，不含后缀。如果使用单一图标，Icon填写图标的绝对路径，例如/opt/meshlab.png。StartupWMClass不填写时默认为等于Name字段，如果该字段跟程序实际打开的窗口名称不匹配，打开程序将会在任务栏创建一个新的图标，而不是在原有图标位置打开，所以这里填写我们之前用xprop | grep WM_CLASS获取的窗口名称。还有其他一些字段会提供一些额外信息，Terminal告诉系统打开这个程序时是否要打开终端，如果不填默认为false，Comment是应用简介， Categories可以让程序出现在某些应用分类下，MimeType说明了支持的文件类型，在打开对应文件时系统会显示这个程序作为可选项。如果是要开发一个正规的程序，这个字段都是很有用的应用信息，但我们就是创建一个图标而已，填不填都无所谓。最后我们还需要刷新一下图标缓存和列表，用户级别的刷新是update-desktop-database ~/.local/share/applications和gtk-update-icon-cache ~/.local/share/icons/hicolor，系统级别的是sudo update-desktop-database /usr/share/applications和sudo gtk-update-icon-cache /usr/share/icons/hicolor。参考信息感谢ChatGPT老师提供了大多数信息。
评分7.5/10简评魏玛老城西南方向的一家希腊菜，周中仅晚上开门，周五和周末中午也开。这家属于德国常见的普通希腊餐馆，有各种烤肉和烤海鲜，一般我们会点包含烤牛肝或者烤羊排的烤肉拼盘，拼盘里一般还包含Gyros和猪肉串，再加上一些薯条、烩饭和蔬菜，除此之外，他们还有可能算是特色的炖羊腿和奶油蘑菇炖羊肉。跟大多数希腊餐馆一样，他们家的菜量是足够大的，饭量小的人点一份能吃两顿。口味上中规中矩，只要烤肉师傅发挥好就不会难吃，价格也中规中矩，羊肉的菜稍微有点贵，但还算可以接受。适合想要大口吃肉的来过把肉瘾。图片[collapse status="false" title="点击展开"][/collapse]地图