Picsee-site是基于VUEPRESS开发的,基于它的目的, 是利用其MarkDown编写静态博客的功能,那么后期在推广时,可把功能点的介绍写成博文(基于MarkDown来写)。而站点首页的个性化展示,由于VUEPRESS是基于VUE开发的,利用tailwindcss样式库,自行基于VUE定制开发的。这样,就达到了目的,其一用MarkDown写博客,其二个性化某些页面,其三纯静态方便部署
站点采用集成部署,源码在GitHub上,利用Travis CI (opens new window)服务,只要git commit了,Travis CI就会自动构建,生成静态内容,然后根据秘匙设置,自动将生成的静态内容上传到服务器的指定目录,而在服务器上安装了nginx,已把指定目录作为web服务发布。
#############################################################################
server { listen 80 default_server; listen [::]:80 default_server; listen 443 http2 ssl; ssl_certificate /etc/chitaner.com.pem; ssl_certificate_key /etc/chitaner.com.key;
server_name ~^(?<subdomain>.+).chitaner.com$;
server_name chitaner.com;
location / {
if ($subdomain = "picsee") {
root /var/www/picsee;
}
if ($subdomain = "blog") {
root /var/www/blog;
}
if ($subdomain = "enpicsee") {
root /var/www/enpicsee;
}
root /var/www/picsee;
index index.html;
}
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
location /ray { # 与 V2Ray 配置中的 path 保持一致
proxy_redirect off;
proxy_pass http://127.0.0.1:9000;#假设WebSocket监听在环回地址的10000端口上
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
# Show realip in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
#############################################################################
server { listen 80 default_server; listen [::]:80 default_server; listen 443 http2 ssl; ssl_certificate /etc/chitaner.com.pem; ssl_certificate_key /etc/chitaner.com.key; root /var/www/$subdomain;
server_name ~^(?<subdomain>.+)\.chitaner\.com$;
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
location /ray { # 与 V2Ray 配置中的 path 保持一致
proxy_redirect off;
proxy_pass http://127.0.0.1:9000;#假设WebSocket监听在环回地址的10000端口上
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
# Show realip in v2ray access.log
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
}
{
"routing" : {
"name" : "all_to_main",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "chitaner.com",
"port" : "0-65535"
}
]
},
"inbounds" : [
{
"listen" : "0.0.0.0",
"protocol" : "socks",
"settings" : {
"ip" : "127.0.0.1",
"auth" : "noauth",
"udp" : false
},
"tag" : "socksinbound",
"port" : 1081
},
{
"listen" : "0.0.0.0",
"protocol" : "http",
"settings" : {
"timeout" : 0
},
"tag" : "httpinbound",
"port" : 8001
}
],
"dns" : {
"servers" : [
"localhost"
]
},
"log" : {
"error" : "\/var\/folders\/n8\/p8nvhyrs7nzb2fdn75yh3zwh0000gn\/T\/cenmrev.v2rayx.log\/error.log",
"loglevel" : "none",
"access" : "\/var\/folders\/n8\/p8nvhyrs7nzb2fdn75yh3zwh0000gn\/T\/cenmrev.v2rayx.log\/access.log"
},
"outbounds" : [
{
"sendThrough" : "0.0.0.0",
"mux" : {
"enabled" : false,
"concurrency" : 8
},
"protocol" : "vmess",
"settings" : {
"vnext" : [
{
"address" : "chitaner.com",
"users" : [
{
"id" : "ffbe15b7-12f2-442b-a024-7d0383aee5fe",
"alterId" : 64,
"security" : "auto",
"level" : 1
}
],
"port" : 443
}
]
},
"tag" : "chitaner.com",
"streamSettings" : {
"network" : "ws",
"security" : "tls",
"wsSettings" : {
"path" : "\/ray"
}
}
}
]
{
"inbounds": [{
"port": 9000,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "ffbe15b7-12f2-442b-a024-7d0383aee5fe",
"level": 1,
"alterId": 64
}
]
},
"streamSettings":{
"network":"ws",
"wsSettings":{
"path":"/spring"
}
}
}],
"outbounds": [{
"protocol": "freedom",
"settings": {}
},{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}],
"routing": {
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "blocked"
}
]
}
}
#############################################################################
server {
listen 80;
listen 443 http2 ssl;
ssl_certificate /etc/chitaner.com.pem;
ssl_certificate_key /etc/chitaner.com.key;
root /var/www/$subdomain;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name ~^(?<subdomain>.+)\.chitaner\.com$;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
}
server {
listen 80;
listen 443 http2 ssl;
ssl_certificate /etc/gonger.club.pem;
ssl_certificate_key /etc/gonger.club.key;
root /www/$subdomain;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name ~^(?<subdomain>.+)\.gonger\.club$;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
location /spring { # 与 V2Ray 配置中的 path 保持一致
proxy_redirect off;
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:9000;#假设WebSocket监听在环回地址的10000端
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
server {
listen 80;
listen 443 http2 ssl;
ssl_certificate /etc/chitaner.com.pem;
ssl_certificate_key /etc/chitaner.com.key;
root /www/$subdomain;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
server_name ~^(?<subdomain>.+)\.chitaner\.com$;
location / {
# First attempt to serve request as file, then
# as directory, then fall back to displaying a 404.
try_files $uri $uri/ =404;
}
location /api/ {
proxy_pass http://127.0.0.1:3000;
}
location /spring { # 与 V2Ray 配置中的 path 保持一致
proxy_redirect off;
proxy_intercept_errors on;
proxy_pass http://127.0.0.1:9000;#假设WebSocket监听在环回地址的10000端
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $http_host;
}
}
server {
listen 80;
server_name ~^(?<subdomain>.+)\.gonger\.xyz$;
root /var/www/html/owye.cc/public_html;
index index.html;
# Context limits
client_max_body_size 20M;
# Disable access to sensitive files
location ~* (app|content|lib)/.*\.(po|php|lock|sql)$ {
deny all;
}
# Image not found replacement
location ~ \.(jpe?g|png|gif|webp)$ {
log_not_found off;
error_page 404 /content/images/system/default/404.gif;
}
# CORS header (avoids font rendering issues)
location ~ \.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$ {
add_header Access-Control-Allow-Origin "*";
}
# Pretty URLs
location / {
index index.php;
try_files $uri $uri/ /index.php$is_args$query_string;
}
location ~* \.php$ {
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
}
}
pm2 show app # 显示应用程序的所有信息 pm2 -h # 查看pm2帮助信息,显示命令用法 pm2 start app.js -n project # 将应用设置别名为project pm2 list # 显示所有项目 pm2 stop app # 停止应用服务 pm2 restart app # 重启应用服务 pm2 delete app # 在进程中删除应用 pm2 status # 查看状态 pm2 monit # 查看占用的CPU和内存
bash <(curl -L https://raw.githubusercontent.com/v2fly/fhs-install-v2ray/master/install-release.sh)
{
"inbounds": [{
"port": 9000,
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "ffbe15b7-12f2-442b-a024-7d0383aee5fe",
"level": 1,
"alterId": 64
}
]
},
"streamSettings":{
"network":"ws",
"wsSettings":{
"path":"/spring"
}
}
}],
"outbounds": [{
"protocol": "freedom",
"settings": {}
},{
"protocol": "blackhole",
"settings": {},
"tag": "blocked"
}],
"routing": {
"rules": [
{
"type": "field",
"ip": ["geoip:private"],
"outboundTag": "blocked"
}
]
}
}
{
"outbounds" : [
{
"sendThrough" : "0.0.0.0",
"mux" : {
"enabled" : false,
"concurrency" : 8
},
"protocol" : "vmess",
"settings" : {
"vnext" : [
{
"address" : "chitaner.com",
"users" : [
{
"id" : "ffbe15b7-12f2-442b-a024-7d0383aee5fe",
"alterId" : 64,
"security" : "auto",
"level" : 1
}
],
"port" : 443
}
]
},
"tag" : "chitaner.com",
"streamSettings" : {
"network" : "ws",
"security" : "tls",
"wsSettings" : {
"path" : "\/spring"
}
}
}
],
"routings" : [
{
"name" : "all_to_main",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "bypasscn_private_apple",
"domainStrategy" : "IPIfNonMatch",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"domain" : [
"localhost",
"domain:me.com",
"domain:lookup-api.apple.com",
"domain:icloud-content.com",
"domain:icloud.com",
"domain:cdn-apple.com",
"domain:apple-cloudkit.com",
"domain:apple.com",
"domain:apple.co",
"domain:aaplimg.com",
"domain:guzzoni.apple.com",
"geosite:cn"
]
},
{
"type" : "field",
"outboundTag" : "direct",
"ip" : [
"geoip:private",
"geoip:cn"
]
},
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_direct",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_main",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "bypasscn_private_apple",
"domainStrategy" : "IPIfNonMatch",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"domain" : [
"localhost",
"domain:me.com",
"domain:lookup-api.apple.com",
"domain:icloud-content.com",
"domain:icloud.com",
"domain:cdn-apple.com",
"domain:apple-cloudkit.com",
"domain:apple.com",
"domain:apple.co",
"domain:aaplimg.com",
"domain:guzzoni.apple.com",
"geosite:cn"
]
},
{
"type" : "field",
"outboundTag" : "direct",
"ip" : [
"geoip:private",
"geoip:cn"
]
},
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_direct",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_main",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "bypasscn_private_apple",
"domainStrategy" : "IPIfNonMatch",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"domain" : [
"localhost",
"domain:me.com",
"domain:lookup-api.apple.com",
"domain:icloud-content.com",
"domain:icloud.com",
"domain:cdn-apple.com",
"domain:apple-cloudkit.com",
"domain:apple.com",
"domain:apple.co",
"domain:aaplimg.com",
"domain:guzzoni.apple.com",
"geosite:cn"
]
},
{
"type" : "field",
"outboundTag" : "direct",
"ip" : [
"geoip:private",
"geoip:cn"
]
},
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_direct",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_main",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "bypasscn_private_apple",
"domainStrategy" : "IPIfNonMatch",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"domain" : [
"localhost",
"domain:me.com",
"domain:lookup-api.apple.com",
"domain:icloud-content.com",
"domain:icloud.com",
"domain:cdn-apple.com",
"domain:apple-cloudkit.com",
"domain:apple.com",
"domain:apple.co",
"domain:aaplimg.com",
"domain:guzzoni.apple.com",
"geosite:cn"
]
},
{
"type" : "field",
"outboundTag" : "direct",
"ip" : [
"geoip:private",
"geoip:cn"
]
},
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_direct",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_main",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "bypasscn_private_apple",
"domainStrategy" : "IPIfNonMatch",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"domain" : [
"localhost",
"domain:me.com",
"domain:lookup-api.apple.com",
"domain:icloud-content.com",
"domain:icloud.com",
"domain:cdn-apple.com",
"domain:apple-cloudkit.com",
"domain:apple.com",
"domain:apple.co",
"domain:aaplimg.com",
"domain:guzzoni.apple.com",
"geosite:cn"
]
},
{
"type" : "field",
"outboundTag" : "direct",
"ip" : [
"geoip:private",
"geoip:cn"
]
},
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_direct",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_main",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "bypasscn_private_apple",
"domainStrategy" : "IPIfNonMatch",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"domain" : [
"localhost",
"domain:me.com",
"domain:lookup-api.apple.com",
"domain:icloud-content.com",
"domain:icloud.com",
"domain:cdn-apple.com",
"domain:apple-cloudkit.com",
"domain:apple.com",
"domain:apple.co",
"domain:aaplimg.com",
"domain:guzzoni.apple.com",
"geosite:cn"
]
},
{
"type" : "field",
"outboundTag" : "direct",
"ip" : [
"geoip:private",
"geoip:cn"
]
},
{
"type" : "field",
"outboundTag" : "main",
"port" : "0-65535"
}
]
},
{
"name" : "all_to_direct",
"domainStrategy" : "AsIs",
"rules" : [
{
"type" : "field",
"outboundTag" : "direct",
"port" : "0-65535"
}
]
}
]
}