Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

chore: 開発モードでフロントエンドとバックエンドを独立して起動するようにする #12452

Closed
Closed
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
02bacc6
[wip]run standalone vite
fruitriin Nov 19, 2023
8463448
[wip]run standalone vite
fruitriin Nov 19, 2023
ddef9ca
some fix (tabler icons, sw, streaming)
fruitriin Nov 19, 2023
14e0d1f
fix theme
fruitriin Nov 19, 2023
3ea7041
fix run scripts
fruitriin Nov 19, 2023
ec15eaf
favicon
fruitriin Nov 19, 2023
582601e
client-assets
fruitriin Nov 19, 2023
4261835
cssの読み込み順序とCSP設定の変更
samunohito Nov 19, 2023
d82d386
Merge pull request #2 from samunohito/feat/launch-standalone-frontend
fruitriin Nov 19, 2023
c2fbb5a
fix lang change
samunohito Nov 19, 2023
46c4d97
Merge pull request #3 from samunohito/feat/launch-standalone-frontend
fruitriin Nov 19, 2023
6fd9ac4
fix clientManifest
fruitriin Nov 19, 2023
97a1f81
baseを相対パスにしてドメイン直下とサブディレクトリ配下両方に対応
samunohito Nov 19, 2023
509107f
Merge pull request #4 from samunohito/feat/launch-standalone-frontend
fruitriin Nov 19, 2023
325dda6
色々修正
fruitriin Nov 25, 2023
a654c15
色々修正
fruitriin Nov 25, 2023
d37ab72
Merge remote-tracking branch 'misskey/develop' into feat/launch-stand…
fruitriin Nov 25, 2023
0632849
色々修正
fruitriin Nov 25, 2023
09019b3
fix
fruitriin Nov 25, 2023
84fa6b4
Revert "client-assets"
fruitriin Nov 25, 2023
27dcc4e
色々修正
fruitriin Nov 25, 2023
e6a1ade
fix
fruitriin Nov 25, 2023
c470cd2
fix
fruitriin Nov 25, 2023
f03364b
Merge branch 'develop' into feat/launch-standalone-frontend
fruitriin Nov 25, 2023
ae9c787
Merge branch 'develop' into feat/launch-standalone-frontend
syuilo Nov 26, 2023
3637a0b
add url and proxy to server proxy
ozelotdev Nov 26, 2023
faceb9c
Merge branch 'develop' into pr/12452
syuilo Nov 27, 2023
71f6d3d
Merge pull request #6 from ozelotdev/patch-1
fruitriin Nov 27, 2023
d795882
Merge branch 'develop' into feat/launch-standalone-frontend
samunohito Dec 1, 2023
20426b0
Update packages/frontend/src/index.html
fruitriin Dec 6, 2023
e7a9ce3
wip
fruitriin Dec 6, 2023
4445308
Merge remote-tracking branch 'origin/develop' into feat/launch-standa…
fruitriin Dec 6, 2023
7cd0c17
Merge remote-tracking branch 'origin/develop' into feat/launch-standa…
fruitriin Dec 6, 2023
258c5f7
Merge remote-tracking branch 'origin/develop' into feat/launch-standa…
fruitriin Dec 6, 2023
8ecf63d
Merge remote-tracking branch 'origin/develop' into feat/launch-standa…
fruitriin Dec 6, 2023
2e55d74
fix tabler load
samunohito Dec 6, 2023
e6eaf29
Merge pull request #7 from samunohito/fix/tabler-css-loading
fruitriin Dec 6, 2023
000e382
Apply suggestions from code review
fruitriin Dec 6, 2023
a5efde4
Merge branch 'develop' into feat/launch-standalone-frontend
fruitriin Dec 6, 2023
45b1c35
Update packages/frontend/src/index.html
fruitriin Dec 6, 2023
45fad15
fix
samunohito Dec 6, 2023
35d90db
Merge pull request #8 from samunohito/fix/index_html_comment
fruitriin Dec 6, 2023
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
222 changes: 222 additions & 0 deletions .config/dev-local.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,222 @@
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
# Misskey configuration
#━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

# ┌─────┐
#───┘ URL └─────────────────────────────────────────────────────

# Final accessible URL seen by a user.
# dev-local では identiconのCORS問題の解決のため 127.0.0.1 である必要があります
url: http://127.0.0.1:5173/
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このファイルの主な違いはここだけです


# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# URL SETTINGS AFTER THAT!

# ┌───────────────────────┐
#───┘ Port and TLS settings └───────────────────────────────────

#
# Misskey requires a reverse proxy to support HTTPS connections.
#
# +----- https://example.tld/ ------------+
# +------+ |+-------------+ +----------------+|
# | User | ---> || Proxy (443) | ---> | Misskey (3000) ||
# +------+ |+-------------+ +----------------+|
# +---------------------------------------+
#
# You need to set up a reverse proxy. (e.g. nginx)
# An encrypted connection with HTTPS is highly recommended
# because tokens may be transferred in GET requests.

# The port that your Misskey server should listen on.
port: 3000

# You can also use UNIX domain socket.
# socket: /path/to/misskey.sock
# chmodSocket: '777'

# ┌──────────────────────────┐
#───┘ PostgreSQL configuration └────────────────────────────────

db:
host: localhost
port: 5432

# Database name
db: misskey

# Auth
user: example-misskey-user
pass: example-misskey-pass

# Whether disable Caching queries
#disableCache: true

# Extra Connection options
#extra:
# ssl: true

dbReplications: false

# You can configure any number of replicas here
#dbSlaves:
# -
# host:
# port:
# db:
# user:
# pass:
# -
# host:
# port:
# db:
# user:
# pass:

# ┌─────────────────────┐
#───┘ Redis configuration └─────────────────────────────────────

redis:
host: localhost
port: 6379
#family: 0 # 0=Both, 4=IPv4, 6=IPv6
#pass: example-pass
#prefix: example-prefix
#db: 1
# You can specify more ioredis options...
#username: example-username

#redisForPubsub:
# host: localhost
# port: 6379
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
# #pass: example-pass
# #prefix: example-prefix
# #db: 1
# # You can specify more ioredis options...
# #username: example-username

#redisForJobQueue:
# host: localhost
# port: 6379
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
# #pass: example-pass
# #prefix: example-prefix
# #db: 1
# # You can specify more ioredis options...
# #username: example-username

#redisForTimelines:
# host: localhost
# port: 6379
# #family: 0 # 0=Both, 4=IPv4, 6=IPv6
# #pass: example-pass
# #prefix: example-prefix
# #db: 1
# # You can specify more ioredis options...
# #username: example-username

# ┌───────────────────────────┐
#───┘ MeiliSearch configuration └─────────────────────────────

#meilisearch:
# host: localhost
# port: 7700
# apiKey: ''
# ssl: true
# index: ''
# scope: local

# ┌───────────────┐
#───┘ ID generation └───────────────────────────────────────────

# You can select the ID generation method.
# You don't usually need to change this setting, but you can
# change it according to your preferences.

# Available methods:
# aid ... Short, Millisecond accuracy
# aidx ... Millisecond accuracy
# meid ... Similar to ObjectID, Millisecond accuracy
# ulid ... Millisecond accuracy
# objectid ... This is left for backward compatibility

# ONCE YOU HAVE STARTED THE INSTANCE, DO NOT CHANGE THE
# ID SETTINGS AFTER THAT!

id: 'aidx'

# ┌─────────────────────┐
#───┘ Other configuration └─────────────────────────────────────

# Whether disable HSTS
#disableHsts: true

# Number of worker processes
#clusterLimit: 1

# Job concurrency per worker
#deliverJobConcurrency: 128
#inboxJobConcurrency: 16
#relashionshipJobConcurrency: 16
# What's relashionshipJob?:
# Follow, unfollow, block and unblock(ings) while following-imports, etc. or account migrations.

# Job rate limiter
#deliverJobPerSec: 128
#inboxJobPerSec: 16
#relashionshipJobPerSec: 64

# Job attempts
#deliverJobMaxAttempts: 12
#inboxJobMaxAttempts: 8

# Local address used for outgoing requests
#outgoingAddress: 127.0.0.1

# IP address family used for outgoing request (ipv4, ipv6 or dual)
#outgoingAddressFamily: ipv4

# Proxy for HTTP/HTTPS
#proxy: http://127.0.0.1:3128

proxyBypassHosts:
- api.deepl.com
- api-free.deepl.com
- www.recaptcha.net
- hcaptcha.com
- challenges.cloudflare.com

# Proxy for SMTP/SMTPS
#proxySmtp: http://127.0.0.1:3128 # use HTTP/1.1 CONNECT
#proxySmtp: socks4://127.0.0.1:1080 # use SOCKS4
#proxySmtp: socks5://127.0.0.1:1080 # use SOCKS5

# Media Proxy
# Reference Implementation: https://github.com/misskey-dev/media-proxy
# * Deliver a common cache between instances
# * Perform image compression (on a different server resource than the main process)
#mediaProxy: https://example.com/proxy

# Proxy remote files (default: true)
# Proxy remote files by this instance or mediaProxy to prevent remote files from running in remote domains.
proxyRemoteFiles: true

# Movie Thumbnail Generation URL
# There is no reference implementation.
# For example, Misskey will point to the following URL:
# https://example.com/thumbnail.webp?thumbnail=1&url=https%3A%2F%2Fstorage.example.com%2Fpath%2Fto%2Fvideo.mp4
#videoThumbnailGenerator: https://example.com

# Sign to ActivityPub GET request (default: true)
signToActivityPubGet: true

#allowedPrivateNetworks: [
# '127.0.0.1/32'
#]

# Upload or download file size limits (bytes)
#maxFileSize: 262144000

# PID File of master process
#pidFile: /tmp/misskey.pid
42 changes: 42 additions & 0 deletions docker-compose.local-dev.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
version: "3"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

このファイルでは redisとpostgresのみを起動するために作りました。
webのサービスが消え、そのdependencyがなくなり、ホストマシンからアクセスできるように portsが加えられています。

services:
redis:
restart: always
image: redis:7-alpine
ports:
- "6379:6379"
volumes:
- ./redis:/data
healthcheck:
test: "redis-cli ping"
interval: 5s
retries: 20

db:
restart: always
image: postgres:15-alpine
ports:
- "5432:5432"
env_file:
- .config/docker.env
volumes:
- ./db:/var/lib/postgresql/data
healthcheck:
test: "pg_isready -U $$POSTGRES_USER -d $$POSTGRES_DB"
interval: 5s
retries: 20

# meilisearch:
# restart: always
# image: getmeili/meilisearch:v1.3.4
# environment:
# - MEILI_NO_ANALYTICS=true
# - MEILI_ENV=production
# env_file:
# - .config/meilisearch.env
# networks:
# - internal_network
# volumes:
# - ./meili_data:/meili_data

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"check:connect": "cd packages/backend && pnpm check:connect",
"migrateandstart": "pnpm migrate && pnpm start",
"watch": "pnpm dev",
"dev": "node ./scripts/dev.mjs",
"dev": "pnpm -r dev",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

dev.mjsのかわりに pnpm -r dev をしています。
dev.mjsは削除してもよいかもしれません(このPRでは行っていません)

"lint": "pnpm -r lint",
"cy:open": "pnpm cypress open --browser --e2e --config-file=cypress.config.ts",
"cy:run": "pnpm cypress run",
Expand Down
1 change: 1 addition & 0 deletions packages/backend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
"watch:swc": "swc src -d built -D -w",
"build:tsc": "tsc -p tsconfig.json && tsc-alias -p tsconfig.json",
"watch": "node watch.mjs",
"dev": "cross-env MISSKEY_CONFIG_YML=dev-local.yml node ./built/boot/entry.js",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

今回はスコープアウトしていますが、 nodemonとts-nodeを組み合わせれば、ビルド不要で直接バックエンドを起動し、バックエンドに変更があれば再起動できると睨んでいます

"typecheck": "tsc --noEmit",
"eslint": "eslint --quiet \"src/**/*.ts\"",
"lint": "pnpm typecheck && pnpm eslint",
Expand Down
1 change: 1 addition & 0 deletions packages/frontend/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
"type": "module",
"scripts": {
"watch": "vite",
"dev": "vite --config vite.config.local-dev.ts",
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

devでは vite.config.ts のかわりに vite.config.local-dev.tsを使用します。

"build": "vite build",
"storybook-dev": "nodemon --verbose --watch src --ext \"mdx,ts,vue\" --ignore \"*.stories.ts\" --exec \"pnpm build-storybook-pre && pnpm exec storybook dev -p 6006 --ci\"",
"build-storybook-pre": "(tsc -p .storybook || echo done.) && node .storybook/generate.js && node .storybook/preload-locale.js && node .storybook/preload-theme.js",
Expand Down
6 changes: 6 additions & 0 deletions packages/frontend/src/boot/common.ts
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,12 @@ export async function common(createVue: () => App<Element>) {
if (instance.defaultLightTheme != null) ColdDeviceStorage.set('lightTheme', JSON.parse(instance.defaultLightTheme));
if (instance.defaultDarkTheme != null) ColdDeviceStorage.set('darkTheme', JSON.parse(instance.defaultDarkTheme));
defaultStore.set('themeInitial', false);
} else {
if (defaultStore.state.darkMode) {
applyTheme(darkTheme.value);
} else {
applyTheme(lightTheme.value);
}
Comment on lines +190 to +195
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

local-devモードでテーマがapplyされないことの修正です

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

↑の旨をコメントに残しておくと良さそう

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

自由に付け足したりしておいていただけると

}
});

Expand Down
23 changes: 23 additions & 0 deletions packages/frontend/src/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
<!DOCTYPE html>
fruitriin marked this conversation as resolved.
Show resolved Hide resolved
<html>
<head>
<meta charset="UTF-8" />
<title>misskey</title>
<!-- https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP -->
<meta
http-equiv="Content-Security-Policy"
content="default-src 'self';
script-src 'self';
style-src 'self' 'unsafe-inline';
img-src 'self' data: www.google.com xn--931a.moe 127.0.0.1:5173 127.0.0.1:3000"
/>

<link rel="stylesheet" href="/assets/tabler-icons/tabler-icons.min.css?v2.37.0">
<link rel="stylesheet" href="./style.scss" />
</head>

<body>
<div id="app"></div>
<script type="module" src="./_boot_.ts"></script>
</body>
</html>
1 change: 1 addition & 0 deletions packages/frontend/src/pages/settings/general.vue
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,7 @@ const useGroupedNotifications = computed(defaultStore.makeGetterSetter('useGroup
watch(lang, () => {
miLocalStorage.setItem('lang', lang.value as string);
miLocalStorage.removeItem('locale');
miLocalStorage.removeItem('localeVersion');
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

言語を変更したときに local-devモードで色々おかしくなる問題の対応です。
fruitriin#3

});

watch(fontSize, () => {
Expand Down
5 changes: 3 additions & 2 deletions packages/frontend/src/pages/welcome.entrance.a.vue
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ SPDX-License-Identifier: AGPL-3.0-only
<XTimeline class="tl"/>
<div class="shape1"></div>
<div class="shape2"></div>
<img src="/client-assets/misskey.svg" class="misskey"/>
<img :src="misskeysvg" class="misskey"/>
<div class="emojis">
<MkEmoji :normal="true" :noStyle="true" emoji="👍"/>
<MkEmoji :normal="true" :noStyle="true" emoji="❤"/>
Expand Down Expand Up @@ -38,6 +38,7 @@ import * as Misskey from 'misskey-js';
import XTimeline from './welcome.timeline.vue';
import MarqueeText from '@/components/MkMarquee.vue';
import MkFeaturedPhotos from '@/components/MkFeaturedPhotos.vue';
import misskeysvg from '/client-assets/misskey.svg';
import MkInfo from '@/components/MkInfo.vue';
import { instanceName } from '@/config.js';
import * as os from '@/os.js';
Expand All @@ -52,7 +53,7 @@ let meta = $ref<Misskey.entities.Instance>();
let instances = $ref<any[]>();

function getInstanceIcon(instance): string {
return getProxiedImageUrl(instance.iconUrl, 'preview');
return getProxiedImageUrl(instance.iconUrl, 'preview');
}

os.api('meta', { detail: true }).then(_meta => {
Expand Down
Loading
Loading