{"id":20,"date":"2025-10-12T22:35:17","date_gmt":"2025-10-12T14:35:17","guid":{"rendered":"https:\/\/lzzut.com\/?p=20"},"modified":"2025-10-13T02:41:54","modified_gmt":"2025-10-12T18:41:54","slug":"%e5%85%b3%e4%ba%8e%e5%a4%8d%e7%8e%b0bbs-go","status":"publish","type":"post","link":"https:\/\/lzzut.com\/?p=20","title":{"rendered":"\u5173\u4e8e\u590d\u73b0BBS-GO"},"content":{"rendered":"\n<p class=\"has-large-font-size\">\u4e00\u3001\u57fa\u7840\u914d\u7f6e<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u4f7f\u7528\u955c\u50cf\u6587\u4ef6\u542f\u7528\u865a\u62df\u673a\uff0c\u8fd9\u91cc\u6211\u4f7f\u7528\u7684\u662f24.04.4\u7248\u672c\u7684Ubuntu\uff0c\u4f7f\u7528\u4ee5\u4e0b\u4e24\u884c\u547d\u4ee4\u5b89\u88c5\u57fa\u7840\u5de5\u5177<br>sudo apt update &amp;&amp; sudo apt upgrade -y\uff08\u66f4\u65b0\u7cfb\u7edf\u5305\uff09<br>sudo apt install -y curl wget git vim nano build-essential net-tools\uff08\u4e0b\u8f7d\u5de5\u5177\uff09<\/p>\n\n\n\n<p class=\"is-style-default has-medium-font-size\">\u5b89\u88c51.24\u53ca\u4ee5\u4e0a\u7248\u672c\u7684go\u8bed\u8a00\uff08\u6211\u8fd9\u91cc\u5b89\u88c5\u7684\u662f1.24.4\u7248\u672c\u7684GO\u8bed\u8a00\uff09<br>wget https:\/\/go.dev\/dl\/go1.24.4.linux-amd64.tar.gz\uff08\u4e0b\u8f7d\u538b\u7f29\u5305\uff09<br>sudo rm -rf \/usr\/local\/go\uff08\u82e5\u6709\u65e7\u7248\u672c\u7684go\u8bed\u8a00\u5219\u8fdb\u884c\u79fb\u9664\uff0c\u6ca1\u6709\u5219\u65e0\u9700\u6b64\u64cd\u4f5c\uff09<br>sudo tar -C \/usr\/local -xzf go1.24.4.linux-amd64.tar.gz\uff08\u89e3\u538b\u538b\u7f29\u5305\u5230\u6307\u5b9a\u4f4d\u7f6e\uff09<br>rm go1.24.4.linux-amd64.tar.gz\uff08\u79fb\u9664\u538b\u7f29\u5305\uff09<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u914d\u7f6e\u73af\u5883\u53d8\u91cf<br>nano \/etc\/profile\uff08\u4f7f\u7528nano\u6216\u8005vim\u5bf9profile\u8fdb\u884c\u4fee\u6539\uff09<br>export PATH=$PATH:\/usr\/local\/go\/bin<br>export GOPATH=$HOME\/go<br>export PATH=$PATH:$GOPATH\/bin<br>export GOPROXY=https:\/\/goproxy.cn,direct\uff08\u4e8eprofile\u6700\u5e95\u90e8\u6dfb\u52a0\u8fd9\u56db\u884c\u4ee3\u7801\u4ee5\u6b64\u542f\u7528\u5168\u5c40\u53d8\u91cf\u548c\u4f18\u5316\u4e0b\u8f7d\u4f53\u9a8c\uff09<br>source \/etc\/profile\uff08\u4f7f\u914d\u7f6e\u751f\u6548\uff09<br>go version\uff08\u67e5\u770b\u662f\u5426\u6210\u529f\u53ca\u68c0\u67e5\u7248\u672c\uff09<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u5b89\u88c5Node.js\u3001pnpm\u548c\u524d\u7aef\u4f9d\u8d56<br>curl -fsSL https:\/\/deb.nodesource.com\/setup_20.x | sudo -E bash &#8211;<br>sudo apt-get install -y nodejs<br>npm install -g pnpm<br>cd ..\/site\uff08\u8fdb\u5165\u524d\u7aef\u76ee\u5f55\uff09<br>pnpm install\uff08\u5b89\u88c5\u9879\u76ee\u4f9d\u8d56\uff0c\u5b89\u88c5\u8fc7\u7a0b\u4e2d\u51fa\u73b0\u8b66\u544a\u8fd0\u884cpnpm approve-builds\u547d\u4ee4\u6267\u884c\u811a\u672c\uff09<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u9a8c\u8bc1\u5b89\u88c5Node.js<br>node -v<br>npm -v<\/p>\n\n\n\n<p class=\"has-large-font-size\">\u4e8c\u3001\u4e0b\u8f7d\u7f16\u8bd1BBS-GO<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u521b\u5efa\u4e13\u5c5e\u6587\u4ef6\u5939<br>sudo mkdir -p \/opt\/bbs-go<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u8fdb\u5165\u6587\u4ef6\u5939<br>cd \/opt\/bbs-go<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u4e0b\u8f7dBBS-GO\u4ee3\u7801<br>git clone https:\/\/github.com\/mlogclub\/bbs-go.git<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u7f16\u8bd1\u9879\u76ee<br>go mod download\uff08\u4e0b\u8f7d\u4f9d\u8d56\uff0c\u9700\u8fdb\u5165bbs-go\u4e2d\u7684server\u6587\u4ef6\u4e2d\uff09<br>make build (\u7f16\u8bd1)<br><\/p>\n\n\n\n<p>\u4e09\u3001\u5b89\u88c5Mysql<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u5b89\u88c5Redis\u548cMySQL<br>sudo apt install mysql-server<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u542f\u7528\u670d\u52a1\u5e76\u5f00\u673a\u81ea\u542f<br>sudo systemctl start mysql<br>sudo systemctl enable mysql<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u53ef\u8fd0\u884csudo mysql_secure_installation\u52a0\u56faMySQL\u7684\u5b89\u88c5<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u914d\u7f6e\u6570\u636e\u5e93<br>sudo mysql -u root -p\uff08\u4ee5root\u8eab\u4efd\u8fdb\u5165MySQL\uff09<br>CREATE DATABASE bbsgo CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\uff08\u521b\u5efa\u6570\u636e\u5e93bbsgo\uff09<br>CREATE USER &#8216;bbsuser&#8217;@&#8217;localhost&#8217; IDENTIFIED BY &#8216;\u4f60\u7684\u5bc6\u7801&#8217;;\uff08\u521b\u5efa\u7528\u6237\uff09<br>GRANT ALL PRIVILEGES ON bbsgo.* TO &#8216;bbsuser&#8217;@&#8217;localhost&#8217;;\uff08\u8d4b\u4e88\u6743\u9650\uff09<br>FLUSH PRIVILEGES;\uff08\u5237\u65b0\u6743\u9650\uff09<br>EXIT;\uff08\u9000\u51fa\uff09<\/p>\n\n\n\n<p>\u56db\u3001\u914d\u7f6e\u3001\u90e8\u7f72\u6587\u4ef6<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u590d\u5236\u914d\u7f6e\u6587\u4ef6\u5e76\u8fdb\u884c\u4fee\u6539<br>cp bbs-go.example.yaml bbs-go.yaml<br>nano bbs-go.yaml\uff08\u6839\u636e\u81ea\u5df1\u7684\u9700\u6c42\u66f4\u6539\u914d\u7f6e\uff09<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u6211\u8fd9\u8fb9\u590d\u73b0\u4e3b\u8981\u6ce8\u610f\u4ee5\u4e0b\u51e0\u884c\u914d\u7f6e\uff1a<br>Port: 8082  # \u670d\u52a1\u76d1\u542c\u7aef\u53e3<br>BaseUrl: http:\/\/\u4f60\u7684\u57df\u540d:8080  # \u7f51\u7ad9\u57df\u540d<br># \u6570\u636e\u5e93\u8fde\u63a5\u914d\u7f6e<br>DB:<br>  Url: \u7528\u6237\u540d:\u5bc6\u7801@tcp(localhost:3306)\/bbsgo_db?charset=utf8mb4<strong>&amp;parseTime=True&amp;loc=Local<\/strong><br># \u65e5\u5fd7\u914d\u7f6e<br>Logger:<br>  Filename: \/var\/log\/bbs-go\/bbs-go.log  # \u786e\u4fdd\u65e5\u5fd7\u76ee\u5f55\u5b58\u5728\u5e76\u6709\u5199\u5165\u6743\u9650<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u521b\u5efa\u65e5\u5fd7\u76ee\u5f55\u5e76\u6388\u6743<br>sudo mkdir -p \/var\/log\/bbs-go<br>sudo chown -R $USER:$USER \/var\/log\/bbs-go<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u914d\u7f6e\u524d\u7aef\u73af\u5883<br>cp .env.example .env.production \uff08\u590d\u5236\u793a\u4f8b\u6587\u4ef6\uff0c\u4f1a\u53d1\u73b0\u6ca1\u6709.env.example\u8fd9\u4e2a\u6587\u4ef6\uff09<br>nano .env.production\uff08\u76f4\u63a5\u7f16\u8f91\u751f\u4ea7\u73af\u5883\u914d\u7f6e\uff09<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u8bbe\u7f6e\u540e\u7aefAPI\u5730\u5740<br>SERVER_URL=http:\/\/\u4f60\u7684\u57df\u540d:8082<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u6784\u5efa\u751f\u4ea7\u7248\u672c<br>pnpm build<\/p>\n\n\n\n<p>\u4e94\u3001\u751f\u4ea7\u73af\u5883\u90e8\u7f72\u4e0e\u8fdb\u7a0b\u7ba1\u7406<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u4f7f\u7528Supervisor\u7ba1\u7406\u540e\u7aef\u8fdb\u7a0b<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u5b89\u88c5\u3001\u914d\u7f6eSupervisor<br>sudo apt install supervisor -y<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u914d\u7f6ebbs-go\u540e\u7aef\u914d\u7f6e<br>sudo nano \/etc\/supervisor\/conf.d\/bbs-go.conf<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u540e\u7aef\u670d\u52a1\u914d\u7f6e\uff1a<br>[program:bbs-go]<br>command=\/opt\/bbs-go\/bbs-go\/server\/bbs-go -config \/opt\/bbs-go\/bbs-go\/server\/bbs-go.yaml\uff08\u8fd9\u4e9b\u8def\u5f84\u4e3abbs-go\u7684\u8def\u5f84\uff0c\u6bcf\u4e2a\u4eba\u4e0d\u592a\u4e00\u6837\uff09<br>directory=\/opt\/bbs-go\/bbs-go\/server\uff08\u540c\u4e0a\uff09<br>process_name=bbs-go<br>autostart=true<br>autorestart=true<br>stopwaitsecs=10<br>user=bbsuser<br>redirect_stderr=true<br>stdout_logfile=\/var\/log\/bbs-go\/supervisor.log<br>stderr_logfile=\/var\/log\/bbs-go\/supervisor_err.log<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u4f7f\u7528PM2\u7ba1\u7406\u524d\u7aef\u8fdb\u7a0b<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u5b89\u88c5PM\uff12<br>sudo npm install -g pm2<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u4f7f\u7528PM2\u542f\u52a8\u524d\u7aef\u5e94\u7528<br>pm2 start .output\/server\/index.mjs &#8211;name bbs-go-site<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u8bbe\u7f6e\u5f00\u673a\u81ea\u542f<br>pm2 startup<br>pm2 save<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u4f7f\u7528Nginx\u8fdb\u884c\u53cd\u5411\u4ee3\u7406<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u5b89\u88c5\u3001\u914d\u7f6eNginx<br>sudo apt install nginx -y<br>sudo nano \/etc\/nginx\/sites-available\/bbs-go\uff08\u521b\u5efa\u7ad9\u70b9\u914d\u7f6e\uff09<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u914d\u7f6e\u793a\u4f8b\uff1a<br>server {<br>    listen 80;<br>    server_name \u4f60\u7684\u57df\u540d;\uff08\u6211\u8fd9\u91cc\u4f7f\u7528\u7684\u662f\u672c\u5730\u57df\u540d\uff1alocalhost\uff09<br>    <br>    # \u524d\u7aef\u7ad9\u70b9\u4ee3\u7406<br>    location \/ {<br>        proxy_pass http:\/\/localhost:3000;<br>        proxy_set_header Host $host;<br>        proxy_set_header X-Real-IP $remote_addr;<br>        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>        proxy_set_header X-Forwarded-Proto $scheme;<br>    }<br>    <br>    # \u540e\u7aef API \u4ee3\u7406<br>    location \/api\/ {<br>        proxy_pass http:\/\/localhost:8082;<br>        proxy_set_header Host $host;<br>        proxy_set_header X-Real-IP $remote_addr;<br>        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;<br>        proxy_set_header X-Forwarded-Proto $scheme;<br>    }<br>}<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u542f\u7528\u7ad9\u70b9\u5e76\u6d4b\u8bd5\uff1a<br>sudo ln -s \/etc\/nginx\/sites-available\/bbs-go \/etc\/nginx\/sites-enabled\/\uff08\u542f\u7528\u7ad9\u70b9\uff09<br>sudo nginx -t\uff08\u6d4b\u8bd5\u914d\u7f6e\uff09<br>sudo systemctl reload nginx\uff08\u91cd\u8f7d\u914d\u7f6e\uff09<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u542f\u52a8\u670d\u52a1\u5e76\u9a8c\u8bc1<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u542f\u52a8Supervisor\u7ba1\u7406\u7684\u540e\u7aef\u670d\u52a1<br>sudo supervisorctl reread<br>sudo supervisorctl update<br>sudo supervisorctl restart bbs-go<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u542f\u52a8 PM2 \u7ba1\u7406\u7684\u524d\u7aef\u670d\u52a1<br>pm2 restart bbs-go-site<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u542f\u52a8Nginx<br>sudo systemctl start nginx<br>sudo systemctl enable nginx<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u9a8c\u8bc1\u670d\u52a1\u72b6\u6001<br>sudo supervisorctl status bbs-go\uff08\u68c0\u67e5\u540e\u7aef\u670d\u52a1\uff09<br>pm2 status\uff08\u68c0\u67e5\u524d\u7aef\u670d\u52a1\uff09<br>sudo systemctl status nginx\uff08\u68c0\u67e5Nginx\u670d\u52a1\uff09<\/p>\n\n\n\n<p>\u516d\u3001\u5b8c\u6210\u5b89\u88c5<\/p>\n\n\n\n<p class=\"has-medium-font-size\">\u8fdb\u5165\u670d\u52a1\u6240\u5728\u5730\u5740\u5b8c\u6210\u5b89\u88c5\u6d41\u7a0b<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u4e00\u3001\u57fa\u7840\u914d\u7f6e \u4f7f\u7528\u955c\u50cf\u6587\u4ef6\u542f\u7528\u865a\u62df\u673a\uff0c\u8fd9\u91cc\u6211\u4f7f\u7528\u7684\u662f24.04.4\u7248\u672c\u7684Ubuntu\uff0c\u4f7f\u7528\u4ee5\u4e0b\u4e24\u884c\u547d\u4ee4\u5b89\u88c5\u57fa\u7840 [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-20","post","type-post","status-publish","format-standard","hentry","category-4"],"_links":{"self":[{"href":"https:\/\/lzzut.com\/index.php?rest_route=\/wp\/v2\/posts\/20","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/lzzut.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/lzzut.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/lzzut.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/lzzut.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=20"}],"version-history":[{"count":30,"href":"https:\/\/lzzut.com\/index.php?rest_route=\/wp\/v2\/posts\/20\/revisions"}],"predecessor-version":[{"id":57,"href":"https:\/\/lzzut.com\/index.php?rest_route=\/wp\/v2\/posts\/20\/revisions\/57"}],"wp:attachment":[{"href":"https:\/\/lzzut.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=20"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/lzzut.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=20"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/lzzut.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=20"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}