BBS-GO是基于Golang编写的,但是安装有一些困难,我自己也是走了一些弯路,感谢其他大神的教程:史上最全bbs-go安装教程 和 基于golang的开源论坛bbs-go的搭建步骤, 这里是基于Ubuntu的VPS进行安装,测试成功的。
想要运行这个程序,首先需要做的就是让你的服务器上有Golang的程序包。首先是下载Go语言的程序包,并且解压
sodo wget -c https://golang.org/dl/go1.15.6.linux-amd64.tar.gz
tar xvf go1.15.6.linux-amd64.tar.gz
这时候,你会得到一个go的文件夹,下面我们要把go的权限设置为root,并且拷贝文件到 /usr/local
sudo chown -R root:root ./go
sudo mv go /usr/local
之后需要设置Go Paths
sudo nano ~/.profile
在文件的末尾添加下列信息,Ctrl+o 保存, Ctrl+x 退出
export GOPATH=$HOME/work
export PATH=$PATH:/usr/local/go/bin:$GOPATH/bin
source ~/.profile
然后确认下Go的版本
go version
紧接着,我们需要安装必要的包
sudo apt update
sudo apt install npm git
宝塔界面+数据库+Nginx的安装
使用宝塔的一键安装,主要是为了方便我这样子的小白吧。这里需要宝塔安装Nginx+PHP+Mysql。 Nginx主要是为了反向端口,Mysql是因为BBS-GO需要,而PHP的话,这里我要phpmyadmin来导入初始的数据。先安装宝塔面板。(更多的安装信息可以查看这里)
wget -O install.sh http://download.bt.cn/install/install-ubuntu_6.0.sh && sudo bash install.sh
安装完之后,你会获得相关信息,怎么通过宝塔的面板安装Nginx+PHP+Mysql我就不再赘述。
下面来正式开始安装BBS-GO了。首先是获取源代码
git clone https://github.com/mlogclub/mlog.git
下载之后,你可以看到mlog的目录,进入到目录里面。BBS-GO有两个模块,一个是Server,一个是Site。
首先我们先配置Server,注意Go的版本不要低于1.15. 拷贝一份配置文件
cp ./mlog/server/bbs-go.example.yaml ./mlog/server/bbs-go.yaml
修改配置文件,这里是修改域名
BaseUrl: https://mlog.club # 网站域名
修改数据库信息,这里我用宝塔已经建好数据了
MySqlUrl: username:password@tcp(localhost:3306)/bbsgo_db?charset=utf8mb4&parseTime=True&loc=Local
修改附件的上传方式
# 启用上传方式
Enable: local
# 本地文件上传
Local:
Host: https://img.zaicanada.com/ # 上传文件域名
Path: /www/wwwroot/img.zaicanada.com # 上传目录
配置修改完成了之后,这里导入一些默认的数据,这时候,小白的我们就需要宝塔的PHPMyAdmin了。官方的参考信息
CREATE TABLE `t_user`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(32) DEFAULT NULL,
`email` varchar(128) DEFAULT NULL,
`email_verified` tinyint(1) NOT NULL DEFAULT '0',
`nickname` varchar(16) DEFAULT NULL,
`avatar` text,
`background_image` text,
`password` varchar(512) DEFAULT NULL,
`home_page` varchar(1024) DEFAULT NULL,
`description` text,
`score` bigint(20) NOT NULL,
`status` bigint(20) NOT NULL,
`topic_count` bigint(20) NOT NULL,
`comment_count` bigint(20) NOT NULL,
`roles` text,
`type` bigint(20) NOT NULL,
`forbidden_end_time` bigint(20) NOT NULL DEFAULT '0',
`create_time` bigint(20) DEFAULT NULL,
`update_time` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`),
UNIQUE KEY `email` (`email`),
KEY `idx_user_score` (`score`),
KEY `idx_user_status` (`status`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4;
-- 初始化用户数据(用户名:admin、密码:123456)
INSERT INTO t_user (`id`, `username`, `nickname`, `avatar`, `email`, `password`, `status`, `create_time`, `update_time`,
`roles`, `type`, `description`, `topic_count`, `comment_count`, `score`)
SELECT 1,
'admin',
'bbsgo站长',
'',
'a@example.com',
'$2a$10$ofA39bAFMpYpIX/Xiz7jtOMH9JnPvYfPRlzHXqAtLPFpbE/cLdjmS',
0,
(UNIX_TIMESTAMP(now()) * 1000),
(UNIX_TIMESTAMP(now()) * 1000),
'owner',
0,
'轻轻地我走了,正如我轻轻的来。',
0,
0,
0
FROM DUAL
WHERE NOT EXISTS(SELECT * FROM `t_user` WHERE `id` = 1);
-- 初始化话题节点
CREATE TABLE `t_topic_node`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`name` varchar(32) DEFAULT NULL,
`description` longtext,
`sort_no` bigint(20) DEFAULT NULL,
`status` bigint(20) NOT NULL,
`create_time` bigint(20) DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `name` (`name`),
KEY `idx_sort_no` (`sort_no`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4;
INSERT INTO `t_topic_node` (`id`, `name`, `description`, `sort_no`, `status`, `create_time`)
SELECT 1, '默认节点', '', 0, 0, (UNIX_TIMESTAMP(now()) * 1000)
FROM DUAL
WHERE NOT EXISTS(SELECT * FROM `t_topic_node` WHERE `id` = 1);
-- 初始化系统配置表
CREATE TABLE `t_sys_config`
(
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`key` varchar(128) NOT NULL,
`value` text,
`name` varchar(32) NOT NULL,
`description` varchar(128) DEFAULT NULL,
`create_time` bigint(20) NOT NULL,
`update_time` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `key` (`key`)
) ENGINE = InnoDB
DEFAULT CHARSET = utf8mb4;
-- 初始化系统配置数据
INSERT INTO t_sys_config(`key`, `value`, `name`, `description`, `create_time`, `update_time`)
SELECT 'siteTitle',
'bbs-go演示站',
'站点标题',
'站点标题',
(UNIX_TIMESTAMP(now()) * 1000),
(UNIX_TIMESTAMP(now()) * 1000)
FROM DUAL
WHERE NOT EXISTS(SELECT * FROM `t_sys_config` WHERE `key` = 'siteTitle');
INSERT INTO t_sys_config (`key`, `value`, `name`, `description`, `create_time`, `update_time`)
SELECT 'siteDescription',
'bbs-go,基于Go语言的开源社区系统',
'站点描述',
'站点描述',
(UNIX_TIMESTAMP(now()) * 1000),
(UNIX_TIMESTAMP(now()) * 1000)
FROM DUAL
WHERE NOT EXISTS(SELECT * FROM `t_sys_config` WHERE `key` = 'siteDescription');
INSERT INTO t_sys_config (`key`, `value`, `name`, `description`, `create_time`, `update_time`)
SELECT 'siteKeywords',
'bbs-go',
'站点关键字',
'站点关键字',
(UNIX_TIMESTAMP(now()) * 1000),
(UNIX_TIMESTAMP(now()) * 1000)
FROM DUAL
WHERE NOT EXISTS(SELECT * FROM `t_sys_config` WHERE `key` = 'siteKeywords');
INSERT INTO t_sys_config (`key`, `value`, `name`, `description`, `create_time`, `update_time`)
SELECT 'siteNavs',
'[{\"title\":\"首页\",\"url\":\"/\"},{\"title\":\"话题\",\"url\":\"/topics\"},{\"title\":\"动态\",\"url\":\"/tweets\"},{\"title\":\"文章\",\"url\":\"/articles\"}]',
'站点导航',
'站点导航',
(UNIX_TIMESTAMP(now()) * 1000),
(UNIX_TIMESTAMP(now()) * 1000)
FROM DUAL
WHERE NOT EXISTS(SELECT * FROM `t_sys_config` WHERE `key` = 'siteNavs');
INSERT INTO t_sys_config (`key`, `value`, `name`, `description`, `create_time`, `update_time`)
SELECT 'defaultNodeId',
'1',
'默认节点',
'默认节点',
(UNIX_TIMESTAMP(now()) * 1000),
(UNIX_TIMESTAMP(now()) * 1000)
FROM DUAL
WHERE NOT EXISTS(SELECT * FROM `t_sys_config` WHERE `key` = 'defaultNodeId');
INSERT INTO t_sys_config (`key`, `value`, `name`, `description`, `create_time`, `update_time`)
SELECT 'tokenExpireDays',
'365',
'用户登录有效期(天)',
'用户登录有效期(天)',
(UNIX_TIMESTAMP(now()) * 1000),
(UNIX_TIMESTAMP(now()) * 1000)
FROM DUAL
WHERE NOT EXISTS(SELECT * FROM `t_sys_config` WHERE `key` = 'tokenExpireDays');
INSERT INTO t_sys_config (`key`, `value`, `name`, `description`, `create_time`, `update_time`)
SELECT 'scoreConfig',
'{"postTopicScore":1,"postCommentScore":1,"checkInScore":1}',
'积分配置',
'积分配置',
(UNIX_TIMESTAMP(now()) * 1000),
(UNIX_TIMESTAMP(now()) * 1000)
FROM DUAL
WHERE NOT EXISTS(SELECT * FROM `t_sys_config` WHERE `key` = 'scoreConfig');
这时候,已经可以把Server端运行起来了,输入
go run main.go
下面是设置Site模块
首先是安装依赖包,进入目录./site 后,执行 npm install
此外还需要修改./mlog/site/nuxt.config.js,配置后台服务的 api 访问地址:
proxy: {
'/api/':
process.env.NODE_ENV === 'production'
? 'https://tie.zaicanada.com'
修改完之后,执行 npm run dev 则启动前端服务,服务端口 3000
访问http://IP:3000
当然到了这里还是不能算是完成品,这时候回到宝塔的界面。我这里添加了两个域名 tie.zaicanada.com 作为论坛的域名,img.zaicanada.com 作为本地图片的域名
PHP这里已经不需要了,你可以设置为纯静态。
添加完成之后,选中域名,tie.zaicanada.com,选择反向代理。
这里选择添加反向代理
此外记得用宝塔申请SSL,否者验证的图片有可能无法显示。
最后登录的管理员账号: admin/123456
nohup go run main.go & nohup npm run dev &
B.C. PST Rebate on Select Machinery and EquipmentCCA classes 8, 10, 12, 16, 43, 43.1, 43.2, 46, 50, 53, 54, and 55
https://www2.gov.bc.ca/gov/content/taxes/sales-taxes/pst/rebate-machinery-equipment
https://www2.gov.bc.ca/gov/content/economic-recovery/business-recovery-grant