信息爆炸的時(shí)代,每個(gè)人每天都在使用各種聯(lián)網(wǎng)應(yīng)用,也在不停的產(chǎn)生各種屬于自己隱私的數(shù)據(jù)(文本、照片、音視頻等)。這些數(shù)據(jù)如果放置在互聯(lián)網(wǎng)的網(wǎng)盤上,似乎不夠安全,不夠保險(xiǎn)。同時(shí),免費(fèi)的網(wǎng)盤往往伴隨著限速、限空間,無緣無故“和諧”掉一些內(nèi)容,使用起來非常不順手。于是,搭建自己的家庭服務(wù)器就變得非常有必要。
參數(shù)項(xiàng) | 參數(shù)內(nèi)容 | 選擇理由 |
CPU | Intel(R) Celeron(R) J4125 | X86架構(gòu),64位4核CPU,性能足夠、功耗低、可無風(fēng)扇穩(wěn)定運(yùn)行 |
內(nèi)存 | 16G DDR4 | 16G足夠使用 |
硬盤 | 128G SSD + 2T SSD/SATA | SSD安裝系統(tǒng)和存放應(yīng)用,2T SSD/SATA存放網(wǎng)盤數(shù)據(jù)(省錢一點(diǎn),數(shù)據(jù)盤可以利舊或者買2.5寸機(jī)械盤) |
接口 | 2 X 千兆網(wǎng)口+WIFI(2.4G+5G) + 若干usb口 | 1個(gè)網(wǎng)口作為WAN口,另外1個(gè)網(wǎng)口和WIFI橋接作為L(zhǎng)AN口。USB口還可以外掛閑置的移動(dòng)硬盤。 |
參數(shù)項(xiàng) | 參數(shù)內(nèi)容 | 實(shí)現(xiàn)功能 | 備注 |
OS | ubuntu Server 22.04 LTS+cockpit | 操作系統(tǒng)+web管理 | 最小化安裝,22.04是當(dāng)前最新版本 |
docker | docker-ce、docker-compose | 容器平臺(tái) | 容器需要使用的軟件 |
影音系統(tǒng) | jellyfin | 影音播放 | 容器安裝 |
知識(shí)庫 | dokuwiki | wiki形式記錄知識(shí) | 容器安裝 |
網(wǎng)盤 | cloudreve+aria2 | 通過web、webdav使用硬盤空間,aria2實(shí)現(xiàn)離線下載 | 容器安裝 |
密碼庫 | vaultwarden | 記錄web密碼,并實(shí)現(xiàn)自動(dòng)填充 | 容器安裝 |
apt update
apt upgrade
包括編輯器vim、網(wǎng)絡(luò)工具net-tools、ping命令支持iputils-ping、nslookup支持dnsutils、定時(shí)任務(wù)cron、解壓縮unzip、硬盤檢測(cè)工具smartmontools、防火墻firewalld。
apt update
apt upgrade
apt install vim net-tools iputils-ping dnsutils cron unzip smartmontools firewalld
timedatectl set-timezone Asia/Shanghai
配置網(wǎng)絡(luò),增加網(wǎng)橋br0,目的是給后面軟路由op虛擬機(jī)橋接使用。
vi /etc/netplan/00-installer-config.yaml
樣本配置文件如下:
ethernets:
enp1s0:
dhcp4: false
optional: true
enp2s0:
optional: true
bridges:
br0:
interfaces:
- enp1s0
addresses:
- 192.168.2.18/24 #根據(jù)個(gè)人喜歡選擇自己的IP和網(wǎng)段
nameservers:
addresses:
- 8.8.8.8
search: []
routes:
- to: default
via: 192.168.2.1
parameters:
stp: true
# 打開STP協(xié)議,防止環(huán)路;
version: 2
renderer: networkd
應(yīng)用配置
netplan apply
這里使用cockpit管理面板來實(shí)現(xiàn)遠(yuǎn)程管理,改軟件有不少使用組件可以根據(jù)自己需要安裝,這里安裝了虛擬機(jī)管理組件 cockpit-machine。
apt install cockpit cockpit-machine
安裝必要的證書并允許 apt 包管理器使用以下命令通過 HTTPS 使用存儲(chǔ)庫:
apt install apt-transport-https ca-certificates curl software-properties-common gnupg lsb-release
添加 Docker 的官方 GPG 密鑰:
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
添加 Docker 官方庫:
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | tee /etc/apt/sources.list.d/docker.list > /dev/null
更新 Ubuntu 源列表:
apt update
安裝docker-ce、docker-compose
apt install docker-ce docker-compose
docker默認(rèn)的橋接網(wǎng)絡(luò)沒有開放ipv6,這里自己創(chuàng)建一個(gè)支持ipv6的容器網(wǎng)絡(luò)
docker network create --ipv6 dnet6
在自己喜歡的目錄下(比如:/me)創(chuàng)建compose文件來實(shí)現(xiàn)各種功能
version: "3"
#--------------------全局設(shè)置----------------------#
# using "docker network create --ipv6 dnet6" command to create this network first.
networks:
default:
external:
name: dnet6
volumes:
temp_data:
driver: local
driver_opts:
type: none
device: /data/cloudreve/data
o: bind
#--------------------服務(wù)開始--------------------#
services:
#---------nginx反向代理(本人僅用來代理密碼庫)--------#
nginx:
image: docker.io/library/nginx:latest
container_name: nginx
ports:
- 8000:80
- "4430:443"
volumes:
- ./nginx/nginx.conf:/etc/nginx/nginx.conf #需要先在主機(jī)目錄下創(chuàng)建nginx.conf配置文件
- ./nginx/conf.d:/etc/nginx/conf.d
- ./nginx/html:/usr/share/nginx/html
- ./nginx/log:/var/log/nginx
environment:
- TZ=Asia/Shanghai
restart: always
#--------------------知識(shí)庫--------------------#
dokuwiki:
image: docker.io/linuxserver/dokuwiki:latest
container_name: dokuwiki
ports:
- 8001:80
- "8043:443"
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Shanghai
volumes:
- ./dokuwiki:/config
restart: always
#-------------------密碼庫-------------------#
vaultwarden:
image: docker.io/vaultwarden/server:latest
container_name: vaultwarden
ports:
- "8002:80"
environment:
- WEBSOCKET_ENABLED=true
- LOG_FILE=/log/bitwarden.log
- ADMIN_TOKEN=your-passwrod #填寫你自己的密碼
#- ROCKET_TLS={certs="/ssl/server.crt.pem",key="/ssl/server.key.pem"} #有反向代理無需啟用
- TZ=Asia/Shanghai
volumes:
- ./vaultwarden/ssl:/ssl
- ./vaultwarden/data:/data
- ./vaultwarden/log:/log
restart: always
#--------------------私家網(wǎng)盤--------------------#
cloudreve:
container_name: cloudreve
image: docker.io/cloudreve/cloudreve:latest
restart: always
ports:
- "5212:443"
volumes:
- temp_data:/data
- ./cloudreve/uploads:/cloudreve/uploads
- ./cloudreve/conf.ini:/cloudreve/conf.ini
- ./cloudreve/cloudreve.db:/cloudreve/cloudreve.db
- ./cloudreve/avatar:/cloudreve/avatar
- ./cloudreve/ssl:/cloudreve/ssl #存放自己生成的SSL證書
depends_on:
- aria2
#------------------離線下載----------------------#
aria2:
container_name: aria2
image: docker.io/p3terx/aria2-pro
restart: always
ports:
- "6800:6800"
environment:
- RPC_SECRET=your-password #設(shè)置自己的通訊密碼
- RPC_PORT=6800
- TZ=Asia/Shanghai
volumes:
- ./cloudreve/aria2/config:/config
- temp_data:/data
logging:
driver: k8s-file
options:
max-size: 1m
#------------私家影音平臺(tái)-------------#
jellyfin:
image: lscr.io/linuxserver/jellyfin:latest
container_name: jellyfin
#runtime: runc
ports:
- "8096:8096"
- "8920:8920" #optional https port 需要配置SSL證書
#- 7359:7359/udp #optional auto lan discover
#- 1900:1900/udp #optional dlna port
volumes:
- ./jellyfin/config:/config
- ./jellyfin/scripts:/custom-cont-init.d
- ./media/path1:/data/media:ro #設(shè)置自己影音文件存放位置
- ./media/path2:/data/media2:ro #設(shè)置自己影音文件存放位置
devices:
- /dev/dri:/dev/dri #VAAPI/NVDEC/NVENC render nodes
restart: always
environment:
- PUID=0 #1000 means docker user;0 means root user;
- PGID=0 #1000 means docker user;0 means root user;
- TZ=Asia/Shanghai
#- DOCKER_MODS=linuxserver/mods:jellyfin-opencl-intel #optional - auto download and install chinese font for create docker first time
#- JELLYFIN_PublishedServerUrl=http://192.168.8.18/ #optional - may be necessary for docker healthcheck to pass if running in host network mode
#extra_hosts:
# - "host.docker.internal:host-gateway"
#---------------服務(wù)結(jié)束--------------------#
進(jìn)入compose.yml所在目錄,并執(zhí)行以下命令拉取鏡像以及創(chuàng)建容器。
docker-compose up -d
備注:
1:喜歡用podman的人,這里可以用podman代替docker。cockpit還有專門的podman支持的插件cockpit-podman,可以實(shí)現(xiàn)web圖形化管理podman容器。
2:以上開源軟件基本都能開啟HTTPS加密訪問,但需要自行配置證書;
修改nginx配置文件:nginx目錄/conf.d/default.conf:
server {
listen 443 ssl;
listen [::]:443 ssl;
#http2 on;
server_name domain-name; #配置自己用到的域名
# 根據(jù)需要指定 SSL 配置
ssl_certificate /etc/nginx/conf.d/server.crt.pem;
ssl_certificate_key /etc/nginx/conf.d/server.key.pem;
ssl_trusted_certificate /etc/nginx/conf.d/ca.crt.pem;
client_max_body_size 525M;
error_page 500 502 503 504 /50x.html;
location=/50x.html {
root /usr/share/nginx/html;
}
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://serverip:port; #填寫真實(shí)服務(wù)器的ip和端口
}
由于ipv4地址資源非常緊張,目前一般的寬帶網(wǎng)絡(luò)都沒有ipv4公網(wǎng)地址了。但好在ipv6非常充裕,大部分人都可以獲得可公網(wǎng)訪問的ipv6地址。于是我們就可以使用ddns+ipv6來實(shí)現(xiàn)遠(yuǎn)程訪問。
crontab -e
按i并在文末加上下文:
*/5 * * * * /me/ddns/dynamic-url-perl.pl
輸入:wq保存退出。這樣就實(shí)現(xiàn)了每5分鐘更新ip的動(dòng)態(tài)域名了
注意點(diǎn):由于該perl腳本依賴http::tiny模塊,所以需要通過下面命令安裝libhttp-tiny-perl。
apt install libhttp-tiny-perl
由于我的機(jī)器是intel CPU,顧需要開啟intel-vt和intel_iommu特性。
在openwrt官方網(wǎng)站的鏡像選擇器中選擇下載。
這里根據(jù)我cpu架構(gòu)選擇了x86/64,軟件選擇最新的發(fā)行版本,下載得到openwrt-22.03.5-x86-64-generic-ext4-combined.img.gz。
通過scp直接上傳,命令如下:
scp d:\download\openwrt-22.03.5-x86-64-generic-ext4-combined.img.gz user@serverip:/data/
gzip -d openwrt-22.03.5-x86-64-generic-ext4-combined.img.gz
解壓后得到openwrt-22.03.5-x86-64-generic-ext4-combined.img文件。
vi /etc/config/network
config interface 'lan'
option device 'br-lan'
option protocol 'static'
option netmask '255.255.255.0'
option ipaddr '192.168.1.1' #按需替換ip
option ip6assign '60'
option gateway '192.168.1.254' #按需替換網(wǎng)關(guān)
list dns '8.8.8.8'
這里的IP可以臨時(shí)改成咋們局域網(wǎng)的一個(gè)可用IP地址,并增加以下配置以實(shí)現(xiàn)單臂路由上網(wǎng)。
uci set zerotier.openwrt_network=zerotier
uci add_list zerotier.openwrt_network.join='你的網(wǎng)絡(luò)ID'
uci set zerotier.openwrt_network.enabled='1'
uci commit zerotier
受篇幅影響,以上記錄盡量簡(jiǎn)化(簡(jiǎn)化自本人自家搭建筆錄而來),但保留了所有主要步驟,完全可以實(shí)現(xiàn)私家服務(wù)器、vip網(wǎng)盤、vip影音系統(tǒng)功能。當(dāng)然結(jié)合容器安裝更多的實(shí)用開源軟件,可以實(shí)現(xiàn)更多的功能,只需要你的小主機(jī)依然有資源。
效英語翻譯術(shù)語搜索系統(tǒng)
I. 系統(tǒng)概述
A. 系統(tǒng)架構(gòu)
本系統(tǒng)由四個(gè)主要模塊組成:用戶模塊、互聯(lián)網(wǎng)機(jī)器翻譯模塊、工作模型和搜索模型。用戶模塊接收用戶輸入的待翻譯術(shù)語,并將結(jié)果呈現(xiàn)給用戶?;ヂ?lián)網(wǎng)機(jī)器翻譯模塊利用現(xiàn)有在線翻譯工具對(duì)術(shù)語進(jìn)行初步翻譯。工作模型基于初步翻譯結(jié)果,生成多個(gè)候選譯文。搜索模型則從海量互聯(lián)網(wǎng)語料庫中檢索與候選譯文相關(guān)的上下文信息,為用戶提供參考。整個(gè)系統(tǒng)的設(shè)計(jì)理念是充分利用現(xiàn)有資源,并通過大數(shù)據(jù)提高翻譯質(zhì)量。
各模塊功能
用戶模塊提供簡(jiǎn)單友好的界面,方便用戶輸入術(shù)語并獲取結(jié)果?;ヂ?lián)網(wǎng)機(jī)器翻譯模塊集成了谷歌、必應(yīng)等主流在線翻譯工具,快速獲取初步譯文。工作模型采用統(tǒng)計(jì)機(jī)器翻譯和規(guī)則優(yōu)化等技術(shù),生成多個(gè)高質(zhì)量候選譯文供用戶選擇。搜索模型則基于大規(guī)模語料庫構(gòu)建索引,能夠高效地檢索與候選譯文相關(guān)的上下文語料,幫助用戶把握術(shù)語在不同場(chǎng)景下的語義。
II. 用戶模塊
A. 術(shù)語輸入
用戶模塊的核心是一個(gè)簡(jiǎn)潔的輸入框,用戶只需在其中輸入待翻譯的英語術(shù)語即可。輸入框支持自動(dòng)補(bǔ)全功能,能夠根據(jù)用戶輸入內(nèi)容給出相關(guān)建議,提高輸入效率。輸入框還支持語音輸入,用戶可以直接朗讀術(shù)語,系統(tǒng)會(huì)自動(dòng)轉(zhuǎn)換為文本。
結(jié)果顯示
當(dāng)用戶輸入術(shù)語后,系統(tǒng)會(huì)先顯示互聯(lián)網(wǎng)機(jī)器翻譯模塊的初步譯文,供用戶快速參考。隨后,工作模型生成的候選譯文會(huì)以列表形式呈現(xiàn),用戶可以根據(jù)需要選擇合適的譯文。每個(gè)候選譯文旁邊,都會(huì)顯示搜索模型檢索到的上下文語料示例,幫助用戶了解術(shù)語在不同語境下的用法。結(jié)果頁面還提供了查看全部語料的鏈接,用戶可以根據(jù)需要深入研究。
III. 互聯(lián)網(wǎng)機(jī)器翻譯模塊
A. 現(xiàn)有在線翻譯工具
互聯(lián)網(wǎng)機(jī)器翻譯模塊集成了谷歌、必應(yīng)、有道等主流在線翻譯工具的API接口。當(dāng)用戶輸入待翻譯術(shù)語時(shí),該模塊會(huì)將術(shù)語同時(shí)提交到各個(gè)在線翻譯系統(tǒng),快速獲取初步的譯文結(jié)果。這些初步譯文雖然質(zhì)量參差不齊,但可以為用戶提供一個(gè)大致的印象。
初步翻譯
除了利用在線翻譯工具,互聯(lián)網(wǎng)機(jī)器翻譯模塊還集成了一些領(lǐng)域術(shù)語詞典和機(jī)器翻譯模型。對(duì)于一些常見術(shù)語,該模塊可以直接從術(shù)語詞典中查詢到標(biāo)準(zhǔn)譯文,無需調(diào)用在線API。而對(duì)于生僻術(shù)語,則會(huì)啟用機(jī)器翻譯模型進(jìn)行翻譯。該模塊的目標(biāo)是盡可能多地提供初步譯文選擇,為后的工作模型提供足夠的候選輸入。
IV. 工作模型
A. 候選譯文生成
工作模型的核心是一個(gè)統(tǒng)計(jì)機(jī)器翻譯系統(tǒng),能夠基于大量人工翻譯語料訓(xùn)練出準(zhǔn)確的翻譯模型。當(dāng)互聯(lián)網(wǎng)機(jī)器翻譯模塊輸出初步譯文后,工作模型會(huì)將這些譯文作為候選輸入,并結(jié)合領(lǐng)域語料,生成新的高質(zhì)量候選譯文。
優(yōu)化算法
除了統(tǒng)計(jì)機(jī)器翻譯系統(tǒng),工作模型還包含了多種優(yōu)化算法,用于進(jìn)一步提高譯文質(zhì)量。其中包括基于語法規(guī)則的優(yōu)化、基于語義相似度的優(yōu)化等。這些算法能夠有效地消除統(tǒng)計(jì)模型的一些錯(cuò)誤,使得最終生成的候選譯文更加準(zhǔn)確、流暢。
V. 搜索模型
A. 海量語料庫
搜索模型的核心是一個(gè)大規(guī)模的語料庫索引系統(tǒng)。該系統(tǒng)從互聯(lián)網(wǎng)上采集了數(shù)十億條與各領(lǐng)域相關(guān)的語料,并基于分布式架構(gòu)對(duì)這些語料進(jìn)行了索引,支持高效檢索。語料庫不僅包括通用語料,還包括大量專業(yè)領(lǐng)域語料,如醫(yī)學(xué)、法律、金融等,能夠很好地支持術(shù)語翻譯。
上下文匹配
當(dāng)工作模型輸出候選譯文后,搜索模型會(huì)將這些譯文作為查詢關(guān)鍵詞,在語料庫中檢索相關(guān)的上下文語句。這些上下文語句能夠展示術(shù)語在不同語境下的用法,為用戶理解術(shù)語的語義提供參考。搜索模型采用了多種語義匹配算法,能夠精準(zhǔn)地找到與候選譯文語義相關(guān)的語料。
VI. 系統(tǒng)優(yōu)勢(shì)
A. 高效數(shù)據(jù)采集
本系統(tǒng)的一大優(yōu)勢(shì)是能夠高效地從互聯(lián)網(wǎng)上采集大量語料數(shù)據(jù)。傳統(tǒng)的語料庫構(gòu)建方式成本高、效率低,而本系統(tǒng)則利用了分布式爬蟲和索引技術(shù),可以在較短時(shí)間內(nèi)建立大規(guī)模、高質(zhì)量的語料庫。
高質(zhì)量翻譯建議
通過有機(jī)結(jié)合多種技術(shù)手段,本系統(tǒng)能夠?yàn)橛脩籼峁└哔|(zhì)量的術(shù)語翻譯建議。初步譯文可以快速給出大致印象,候選譯文則是經(jīng)過多重優(yōu)化的準(zhǔn)確譯文,而上下文語料則有助于用戶把握術(shù)語在不同語境下的語義。這種多維度的呈現(xiàn)方式,能夠最大限度地滿足用戶的翻譯需求。
該系統(tǒng)的優(yōu)勢(shì)在于,能夠高效地從互聯(lián)網(wǎng)上采集大量語料數(shù)據(jù),并基于大數(shù)據(jù)提供準(zhǔn)確的翻譯建議。相比傳統(tǒng)的人工翻譯和詞典查詢方式,這種方法無疑更加高效、經(jīng)濟(jì)。系統(tǒng)覆蓋了多個(gè)專業(yè)領(lǐng)域,可以較好地滿足各行業(yè)的術(shù)語翻譯需求。
務(wù)器與電腦在環(huán)境要求方面存在顯著的差異,使得服務(wù)器不能當(dāng)作普通電腦使用。以下是對(duì)這些差異的詳細(xì)解釋:
綜上所述,由于服務(wù)器在環(huán)境要求方面與普通電腦存在顯著差異,因此服務(wù)器不能當(dāng)作電腦使用。這些差異不僅體現(xiàn)在硬件配置上,還涉及到運(yùn)行環(huán)境、網(wǎng)絡(luò)環(huán)境以及維護(hù)管理等多個(gè)方面。