artalk部署配置
# artalk部署
# 数据库初始化
CREATE TABLE `atk_sites` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` varchar(255),`urls` longtext,PRIMARY KEY (`id`),INDEX `idx_atk_sites_deleted_at` (`deleted_at`),UNIQUE INDEX `idx_atk_sites_name` (`name`));
CREATE TABLE `atk_pages` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`key` varchar(255),`title` longtext,`admin_only` boolean,`site_name` varchar(255),`vote_up` bigint,`vote_down` bigint,`pv` bigint,PRIMARY KEY (`id`),INDEX `idx_atk_pages_site_name` (`site_name`),INDEX `idx_atk_pages_deleted_at` (`deleted_at`),INDEX `idx_atk_pages_key` (`key`));
CREATE TABLE `atk_users` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`name` varchar(255),`email` varchar(255),`link` longtext,`password` longtext,`badge_name` longtext,`badge_color` longtext,`last_ip` longtext,`last_ua` longtext,`is_admin` boolean,`receive_email` boolean DEFAULT true,`token_valid_from` datetime(3) NULL,`is_in_conf` boolean,PRIMARY KEY (`id`),INDEX `idx_atk_users_deleted_at` (`deleted_at`),INDEX `idx_atk_users_name` (`name`),INDEX `idx_atk_users_email` (`email`));
CREATE TABLE `atk_auth_identities` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`provider` longtext,`remote_uid` varchar(255),`user_id` bigint unsigned,`token` longtext,`confirmed_at` datetime(3) NULL,`expires_at` datetime(3) NULL,PRIMARY KEY (`id`),INDEX `idx_atk_auth_identities_user_id` (`user_id`),INDEX `idx_atk_auth_identities_deleted_at` (`deleted_at`),INDEX `idx_atk_auth_identities_remote_uid` (`remote_uid`));
CREATE TABLE `atk_user_email_verifies` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`email` varchar(255),`code` longtext,`expires_at` datetime(3) NULL,`ip` longtext,`ua` longtext,PRIMARY KEY (`id`),INDEX `idx_atk_user_email_verifies_deleted_at` (`deleted_at`),INDEX `idx_atk_user_email_verifies_email` (`email`));
CREATE TABLE `atk_comments` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`content` longtext,`page_key` varchar(255),`site_name` varchar(255),`user_id` bigint unsigned,`is_verified` boolean DEFAULT false,`ua` longtext,`ip` longtext,`rid` bigint unsigned,`is_collapsed` boolean DEFAULT false,`is_pending` boolean DEFAULT false,`is_pinned` boolean DEFAULT false,`vote_up` bigint,`vote_down` bigint,`root_id` bigint unsigned,PRIMARY KEY (`id`),INDEX `idx_atk_comments_user_id` (`user_id`),INDEX `idx_atk_comments_rid` (`rid`),INDEX `idx_atk_comments_root_id` (`root_id`),INDEX `idx_atk_comments_deleted_at` (`deleted_at`),INDEX `idx_atk_comments_page_key` (`page_key`),INDEX `idx_atk_comments_site_name` (`site_name`));
CREATE TABLE `atk_notifies` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`user_id` bigint unsigned,`comment_id` bigint unsigned,`is_read` boolean,`read_at` datetime(3) NULL,`is_emailed` boolean,`email_at` datetime(3) NULL,`key` varchar(255),PRIMARY KEY (`id`),INDEX `idx_atk_notifies_key` (`key`),INDEX `idx_atk_notifies_deleted_at` (`deleted_at`),INDEX `idx_atk_notifies_user_id` (`user_id`),INDEX `idx_atk_notifies_comment_id` (`comment_id`));
CREATE TABLE `atk_votes` (`id` bigint unsigned AUTO_INCREMENT,`created_at` datetime(3) NULL,`updated_at` datetime(3) NULL,`deleted_at` datetime(3) NULL,`target_id` bigint unsigned,`type` varchar(191),`user_id` bigint unsigned,`ua` longtext,`ip` longtext,PRIMARY KEY (`id`),INDEX `idx_atk_votes_user_id` (`user_id`),INDEX `idx_atk_votes_deleted_at` (`deleted_at`),INDEX `idx_atk_votes_target_id` (`target_id`),INDEX `idx_atk_votes_type` (`type`));
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
# 环境变量配置
这里使用 Secret
参考官方说明:环境变量 (opens new window)
---
apiVersion: v1
data:
ATK_CACHE_ENABLED: dHJ1ZQ==
ATK_CACHE_REDIS_DB: MTE=
ATK_CACHE_REDIS_NETWORK: dGNw
ATK_CACHE_REDIS_PASSWORD: RmFXeEZEU05DRzZxS1dE
ATK_CACHE_REDIS_USERNAME: ''
ATK_CACHE_SERVER: MTkyLjE2OC4yNTMuMTg6MjAwMDA=
ATK_CACHE_TYPE: cmVkaXM=
ATK_CACHE_WARM_UP: dHJ1ZQ==
ATK_DB_HOST: MTkyLjE2OC4yNTMuMTg2
ATK_DB_NAME: YXJ0YWxr
ATK_DB_PASSWORD: MWMzZjA2REQ1ZjUyJl44OA==
ATK_DB_PORT: MzMwNg==
ATK_DB_TABLE_PREFIX: YXRrXw==
ATK_DB_TYPE: bXlzcWw=
ATK_DB_USER: YXJ0YWxr
ATK_DEBUG: dHJ1ZQ==
ATK_LOCALE: emgtQ04=
ATK_SITE_DEFAULT: 5a2X6IqC5bm954G1
ATK_SITE_URL: d3d3LmlqYXZhd2ViLmNvbQ==
ATK_TRUSTED_DOMAINS: d3d3LmlqYXZhd2ViLmNvbQ==
TZ: QXNpYS9TaGFuZ2hhaQ==
immutable: false
kind: Secret
metadata:
name: artalk
namespace: default
resourceVersion: '41478617'
type: Opaque
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 持久化配置(pv、pvc)
这里使用nfs pv.yaml
apiVersion: v1
kind: PersistentVolume
metadata:
annotations:
pv.kubernetes.io/provisioned-by: nfs.csi.k8s.io
name: pv-nfs-artalk-data
spec:
capacity:
storage: 5Gi
accessModes:
- ReadWriteMany
persistentVolumeReclaimPolicy: Retain
storageClassName: nfs-csi-appdata
mountOptions:
- nfsvers=4.1
csi:
driver: nfs.csi.k8s.io
# volumeHandle format: {nfs-server-address}#{sub-dir-name}#{share-name}
# make sure this value is unique for every share in the cluster
volumeHandle: pv-nfs-artalk-data
volumeAttributes:
server: 192.168.3.34
share: /data/nfs/artalk
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
pvc.yaml
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
name: pvc-nfs-artalk-data
spec:
accessModes:
- ReadWriteMany
resources:
requests:
storage: 5Gi
volumeName: pv-nfs-artalk-data
storageClassName: nfs-csi-appdata
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# Deployment配置
apiVersion: apps/v1
kind: Deployment
metadata:
labels:
app: artalk
name: artalk
spec:
replicas: 1
strategy:
rollingUpdate:
maxSurge: 1
maxUnavailable: 1
type: RollingUpdate
selector:
matchLabels:
app: artalk
template:
metadata:
labels:
app: artalk
spec:
nodeSelector:
environment: prod
securityContext:
runAsUser: 0
runAsGroup: 0
volumes:
- name: artalk-data
persistentVolumeClaim:
claimName: pvc-nfs-artalk-data
containers:
- name: artalk
image: artalk/artalk-go
imagePullPolicy: Always
ports:
- containerPort: 23366
envFrom:
- secretRef:
name: artalk
tty: true
volumeMounts:
- mountPath: /data
name: artalk-data
restartPolicy: Always
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# service配置
apiVersion: v1
kind: Service
metadata:
name: artalk
spec:
ports:
- port: 23366
targetPort: 23366
name: tcp-23366
protocol: TCP
selector:
app: artalk
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# 路由配置
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: artalk
#annotations:
# Use appropriate annotations for your Ingress controller, e.g., for NGINX:
# nginx.ingress.kubernetes.io/rewrite-target: /
spec:
tls:
- hosts:
- "*.ijavaweb.com"
secretName: ijavaweb-tls
rules:
- host: artalk.ijavaweb.com
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: artalk
port:
number: 23366
ingressClassName: nginx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# 博客配置
在自己的 vdoing 工程项目中,插件配置文件中 docs/.vuepress/config.ts
plugins
添加如下配置:
[
"vuepress-plugin-vdoing-comment", //评论
{
choosen: "artalk",
options: {
server: "https://artalk.ijavaweb.com/", // (必填)
site: "字节幽灵", // (必填)
// disableEmotion: false, // 是否禁用表情(可选)
// disablePicture: true, // 是否禁用图片(可选)
// disablePreview: false // 是否禁用预览(可选)
},
},
]
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
自定义 css 文件 docs/.vuepress/styles/palette.styl
最后添加如下内容进行优化:
// artalk 评论框 适配暗黑模式
.theme-mode-dark #vuepress-plugin-vdoing-comment {
--at-color-bg: --bodyBg;
color: #ffffff;
--at-color-font: #ffffff;
--at-color-bg-transl: --bodyBg;
--at-color-bg-grey: #373a40;
}
.theme-mode-dark
#vuepress-plugin-vdoing-comment
.atk-editor-plug-emoticons
> .atk-grp-switcher
> span:hover,
.atk-editor-plug-emoticons > .atk-grp-switcher > span.active {
background: var(--at-color-bg-grey);
}
.theme-mode-dark
#vuepress-plugin-vdoing-comment
.atk-editor-plug-emoticons
> .atk-grp-switcher {
background: var(--at-color-bg-grey);
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22